瑞吉外卖购物车减少菜品/套餐功能

项目场景:

移动端的购物车功能,已经做完了加菜品或者套餐,清空套餐也已经做完了。

然后 ! 按照 惯例 !瑞吉外卖的讲师将购物车的减少功能留给了我们学习写!


问题描述:

  1. 菜品/套餐 减少的时候可以一直减少,直到数量变成负数和购物车的总金额也变成了负数的金额。 (好!点外卖老板倒贴!
  2. 减少到 0 的时候购物车中的菜品/套餐还是存在于购物车,此时订单明细表(order_detatil)这个菜品/套餐的number已经变成0了。

原因分析:

  1. 第一个问题碰到的原因是:没有判断number的数量是否大于0才能减少。
  2. 第二个问题的原因是:在number等于0的时候没有将它从购物车中删除。

解决方案:

  1. 判断订单明细表的某一条数据的number大于0
  2. 如果数量再-1的时候=0了,移出购物车

具体代码如下:

    /**
     * 减少购物车菜品/套餐的数量
     * @param shoppingCart
     * @return
     */
    @PostMapping("/sub")
    public R<ShoppingCart> sub(@RequestBody ShoppingCart shoppingCart){

        log.info(shoppingCart.toString());

        Long userId = BaseContext.getCurrentId();

        Long dishId = shoppingCart.getDishId();

        //SQL : select * from shopping_cart where user_id = ? and dish_id/setmeal_id = ?

        LambdaQueryWrapper<ShoppingCart> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ShoppingCart::getUserId,userId);

        if(dishId != null){
            //添加到购物车的是菜品
            queryWrapper.eq(ShoppingCart::getDishId,dishId);
        }else{
            //添加到购物车的是套餐
            queryWrapper.eq(ShoppingCart::getSetmealId,shoppingCart.getSetmealId());
        }

        ShoppingCart cartServiceOne = shoppingCartService.getOne(queryWrapper);

        if (cartServiceOne != null) {
            Integer number = cartServiceOne.getNumber();
            //如果数量大于 0 才能 - 1
            if (number > 0) {
                cartServiceOne.setNumber(number - 1);
                shoppingCartService.updateById(cartServiceOne);
                //如果数量再减少等于0 则 该商品/套餐 移出购物车
                if (number - 1 == 0) {
                    shoppingCartService.removeById(cartServiceOne.getId());
                }
            }
        }

        return R.success(cartServiceOne);
    }

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值