Cui Zhi Feng
2024-09-03 2ee5067c3a0e160490f5cdefbb0b10600511336b
src/main/java/com/mzl/flower/service/payment/OrderService.java
@@ -131,47 +131,71 @@
    @Autowired
    private OrderItemCheckMapper orderItemCheckMapper;
    @Autowired
    private RedisLockService lockService;
    public void changeFlower2Cart(CartSaveDTO dto) {
        String userId = SecurityUtils.getUserId();
        Cart c = cartMapper.selectOne(new QueryWrapper<Cart>()
                .eq("create_by", userId).eq("flower_id", dto.getId()));
        if (c == null) {
            if (dto.getNum() <= 0) {
                throw new ValidationException("数量不能小于等于0,请刷新页面重试");
            }
            c = new Cart();
            c.setFlowerId(dto.getId());
            c.setNum(dto.getNum());
            c.create(userId);
        String key = userId + "_" + dto.getId();
        boolean lock = lockService.getObjectLock(RedisLockService.LOCK_KEY_CART_, key);
        if(!lock){
            return;
        }
            cartMapper.insert(c);
        } else {
            c.setNum(c.getNum() + dto.getNum());
            c.update(userId);
            if (c.getNum() <= 0) {
                cartMapper.deleteById(c.getId());
        try {
            Cart c = cartMapper.selectOne(new QueryWrapper<Cart>()
                    .eq("create_by", userId).eq("flower_id", dto.getId()));
            if (c == null) {
                if (dto.getNum() <= 0) {
                    throw new ValidationException("数量不能小于等于0,请刷新页面重试");
                }
                c = new Cart();
                c.setFlowerId(dto.getId());
                c.setNum(dto.getNum());
                c.create(userId);
                cartMapper.insert(c);
            } else {
                cartMapper.updateById(c);
                c.setNum(c.getNum() + dto.getNum());
                c.update(userId);
                if (c.getNum() <= 0) {
                    cartMapper.deleteById(c.getId());
                } else {
                    cartMapper.updateById(c);
                }
            }
        } finally {
            lockService.releaseObjectLock(RedisLockService.LOCK_KEY_CART_, key);
        }
    }
    public void saveFlower2Cart(CartSaveDTO dto) {
        String userId = SecurityUtils.getUserId();
        Cart c = cartMapper.selectOne(new QueryWrapper<Cart>()
                .eq("create_by", userId).eq("flower_id", dto.getId()));
        if (c == null) {
            c = new Cart();
            c.setFlowerId(dto.getId());
            c.setNum(dto.getNum());
            c.create(userId);
            cartMapper.insert(c);
        } else {
            c.setNum(dto.getNum());
            c.update(userId);
        String key = userId + "_" + dto.getId();
        boolean lock = lockService.getObjectLock(RedisLockService.LOCK_KEY_CART_, key);
        if(!lock){
            return;
        }
            cartMapper.updateById(c);
        try {
            Cart c = cartMapper.selectOne(new QueryWrapper<Cart>()
                    .eq("create_by", userId).eq("flower_id", dto.getId()));
            if (c == null) {
                c = new Cart();
                c.setFlowerId(dto.getId());
                c.setNum(dto.getNum());
                c.create(userId);
                cartMapper.insert(c);
            } else {
                c.setNum(dto.getNum());
                c.update(userId);
                cartMapper.updateById(c);
            }
        } finally {
            lockService.releaseObjectLock(RedisLockService.LOCK_KEY_CART_, key);
        }
    }