项目场景:
移动端的购物车功能,已经做完了加菜品或者套餐,清空套餐也已经做完了。
然后 ! 按照 惯例 !瑞吉外卖的讲师将购物车的减少功能留给了我们学习写!
问题描述:
- 菜品/套餐 减少的时候可以一直减少,直到数量变成负数和购物车的总金额也变成了负数的金额。 (好!点外卖老板倒贴!)
- 减少到 0 的时候购物车中的菜品/套餐还是存在于购物车,此时订单明细表(order_detatil)这个菜品/套餐的number已经变成0了。
原因分析:
- 第一个问题碰到的原因是:没有判断number的数量是否大于0才能减少。
- 第二个问题的原因是:在number等于0的时候没有将它从购物车中删除。
解决方案:
- 判断订单明细表的某一条数据的number大于0
- 如果数量再-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);
}