初始的代码:

 @PostMapping("/sub")public R<String> sub(@RequestBody ShoppingCart shoppingCart){Long dishId = shoppingCart.getDishId();LambdaQueryWrapper<ShoppingCart> lambdaQueryWrapper = new LambdaQueryWrapper<>();if(dishId != null){// 此时为dish 需判断数量, 为1 直接删除lambdaQueryWrapper.eq(ShoppingCart::getDishId,dishId);lambdaQueryWrapper.eq(ShoppingCart::getUserId,BaseContext.getCurrentId());ShoppingCart one = shoppingCartService.getOne(lambdaQueryWrapper);Integer number = one.getNumber();if(number > 1){one.setNumber(number-1);shoppingCartService.updateById(one);}else{shoppingCartService.remove(lambdaQueryWrapper);}}else{return null;}return R.success("删除成功");}

此时的逻辑是没有写全的,只写了dish的减少操作为了测试。测试中,可正常的减少菜品数量,但是有一个问题:

在下面的这个界面进行sub操作时显示正常,数量会减一,为0会消除

但是在选择菜品的界面操作时会出现问题:点了减号后,该菜品的按钮会变成选择规格。但是查看购物车里的数量的确是减少了。刷新后,界面会正常显示。

解决方法:

返回信息改成ShoppingCart

@PostMapping("/sub")public R<ShoppingCart> sub(@RequestBody ShoppingCart shoppingCart){Long dishId = shoppingCart.getDishId();LambdaQueryWrapper<ShoppingCart> lambdaQueryWrapper = new LambdaQueryWrapper<>();if(dishId != null){// 此时为dish 需判断数量, 为1 直接删除lambdaQueryWrapper.eq(ShoppingCart::getDishId,dishId);lambdaQueryWrapper.eq(ShoppingCart::getUserId,BaseContext.getCurrentId());ShoppingCart one = shoppingCartService.getOne(lambdaQueryWrapper);Integer number = one.getNumber();if(number > 1){one.setNumber(number-1);shoppingCartService.updateById(one);}else{shoppingCartService.remove(lambdaQueryWrapper);}
//修改了这里return R.success(one);}else{return null;}}

但是出现了如下问题,减到1的时候再减,会出现异常,购物车里确实没了,但是界面显示一个虚假的1。这个问题应该是和前端写的有关系。

解决方法:

之前是先判断的当前的dish数量,为1的时候直接删除返回了。没有进行sub操作。

方法1:先减1再判断,小于等于0的时候删掉该dish

@PostMapping("/sub")public R<ShoppingCart> sub(@RequestBody ShoppingCart shoppingCart){Long dishId = shoppingCart.getDishId();LambdaQueryWrapper<ShoppingCart> lambdaQueryWrapper = new LambdaQueryWrapper<>();if(dishId != null){// 此时为dish 需判断数量, 为1 直接删除lambdaQueryWrapper.eq(ShoppingCart::getDishId,dishId);lambdaQueryWrapper.eq(ShoppingCart::getUserId,BaseContext.getCurrentId());ShoppingCart one = shoppingCartService.getOne(lambdaQueryWrapper);Integer number = one.getNumber();number -= 1;one.setNumber(number);shoppingCartService.updateById(one);if(number <= 0){shoppingCartService.remove(lambdaQueryWrapper);}return R.success(one);}else{return null;}}

方法2:当前为1,减1之后为0,也要更新一下即可

 @PostMapping("/sub")public R<ShoppingCart> sub(@RequestBody ShoppingCart shoppingCart){Long dishId = shoppingCart.getDishId();LambdaQueryWrapper<ShoppingCart> lambdaQueryWrapper = new LambdaQueryWrapper<>();if(dishId != null){// 此时为dish 需判断数量, 为1 直接删除lambdaQueryWrapper.eq(ShoppingCart::getDishId,dishId);lambdaQueryWrapper.eq(ShoppingCart::getUserId,BaseContext.getCurrentId());ShoppingCart one = shoppingCartService.getOne(lambdaQueryWrapper);Integer number = one.getNumber();if(number > 1){one.setNumber(number-1);shoppingCartService.updateById(one);}else{one.setNumber(number-1);
//-1后  添加的更新shoppingCartService.updateById(one);shoppingCartService.remove(lambdaQueryWrapper);}return R.success(one);}else{return null;}}

完美的完成了sub操作,后续补上setmeal的操作即可

瑞吉外卖项目的购物车sub操作相关推荐

  1. 瑞吉外卖项目(一)软件开发流程设计及环境搭建

    第一章 软件开发整体介绍 软件开发流程 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档,ui界面设计,概要设计,详细设计,数据库设计 编码:项目代码,单元测试 测试:测试用例,测试报 ...

  2. 瑞吉外卖项目剩余功能补充

    目录 菜品启售和停售 菜品批量启售和批量停售 菜品的批量删除 菜品删除逻辑优化 套餐管理的启售,停售 套餐管理的修改 后台按条件查看和展示客户订单 手机端减少购物车中的菜品或者套餐数量(前端展示有一点 ...

  3. 瑞吉外卖项目 基于spring Boot+mybatis-plus开发 超详细笔记,有源码链接

    本项目是基于自学b站中 黑马程序员 的瑞吉外卖项目:视频链接: 黑马程序员Java项目实战<瑞吉外卖>,轻松掌握springboot + mybatis plus开发核心技术的真java实 ...

  4. 瑞吉外卖项目day01

    一.软件开发整体介绍 1.1 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档.UI界面设计.概要设计.详细设计.数据库设计 编码:项目代码,是单元测试 上线运维:软件环境安装.配置 ...

  5. 瑞吉外卖项目重难点及易错点知识点总结

    本文是对b站黑马程序员瑞吉外卖项目的总结,实现流程以及简单部分不做详解,重点归纳难点以及易错点.(前面是对项目的介绍,可以直接略过 看第四点总结) 视频链接:https://www.bilibili. ...

  6. 瑞吉外卖项目学习笔记:P1-项目介绍

    瑞吉外卖项目介绍 1.项目介绍 1.1开发步骤 1.2产品原型 1.3技术选型 1.4项目功能架构 1.5角色 1.项目介绍 1.1开发步骤 实现基本要求,移动端应用通过H5实现,用户可通过浏览器访问 ...

  7. 瑞吉外卖项目——瑞吉外卖

    软件开发整体介绍 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档.UI界面设计.概要设计.详细设计.数据库设计 编码:项目代码.单元测试 测试:测试用例.测试报告 上线运维:软件环境 ...

  8. 【SpringBoot项目实战+思维导图】瑞吉外卖①(项目介绍、开发环境搭建、后台登陆/退出功能开发)

    文章目录 软件开发整体介绍 软件开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 创建数据库 数据库表导入 数据库表介绍 Ma ...

  9. 瑞吉外卖项目笔记+踩坑1——基础功能

     导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 1 ...

最新文章

  1. 【最新刷榜】层次化视觉Transformer来啦!性能大幅优于DeiT、ViT和EfficientNet
  2. Netty:透明地使用SPDY和HTTP
  3. Suse 12 安装VMware tool
  4. 找不到天隆虚拟机_玩转虚拟机,教你如何装系统
  5. 猜数游戏用Python应该这样写
  6. 节点name在graph中无法展示_基于珠三角与粤东西北的日前节点电价差异分
  7. 操作系统——Linux 虚拟内存和物理内存的理解
  8. OpenGL基础25:多光源(附简单GLSL配置)
  9. 【cocos2d-x】对CCSprite进行高斯模糊
  10. 阅读《黑客与画家》有感——Hackers and Painters
  11. 《DOOM启世录(纪念版) 》此书出了纪念版,好像内容没变
  12. axure 如何设置选项联动_AxureRP教程
  13. 转为html5播放器插件,15个HTML5播放器插件
  14. 从互联网跳到传统企业,我再也不精神内耗了
  15. JavaEE个人学习总结
  16. AutoIt教程资源汇总
  17. 电脑主板线路连接图解_跳线接法图解 主板开机线接法图解
  18. 实验吧-简单的登录题——WriteUp再研究
  19. Microsoft SQL Server 数据库使用(二)
  20. EmguCV学习(三)

热门文章

  1. chrome 插件 —— Volume Control 调节声音
  2. 三、pytest接口自动化之pytest中setup/teardown,setup_class/teardown_class讲解
  3. 操作系统-消息,消息队列
  4. 订阅新闻联播文字标题到邮箱
  5. 上市公司“掘金”大数据 多领域大数据应用受热捧
  6. JAVA权重算法(如Dubbo的负载均衡权重)
  7. Spel spring表达式
  8. Linux登录mysql时 密码正确登录不进去,没有密码却能登进去
  9. 解决URP资源的材质成洋红色问题
  10. 【SDUT第11周周赛Problem A】SDUT2576——Queen Collisions