瑞吉外卖项目的购物车sub操作
初始的代码:
@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操作相关推荐
- 瑞吉外卖项目(一)软件开发流程设计及环境搭建
第一章 软件开发整体介绍 软件开发流程 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档,ui界面设计,概要设计,详细设计,数据库设计 编码:项目代码,单元测试 测试:测试用例,测试报 ...
- 瑞吉外卖项目剩余功能补充
目录 菜品启售和停售 菜品批量启售和批量停售 菜品的批量删除 菜品删除逻辑优化 套餐管理的启售,停售 套餐管理的修改 后台按条件查看和展示客户订单 手机端减少购物车中的菜品或者套餐数量(前端展示有一点 ...
- 瑞吉外卖项目 基于spring Boot+mybatis-plus开发 超详细笔记,有源码链接
本项目是基于自学b站中 黑马程序员 的瑞吉外卖项目:视频链接: 黑马程序员Java项目实战<瑞吉外卖>,轻松掌握springboot + mybatis plus开发核心技术的真java实 ...
- 瑞吉外卖项目day01
一.软件开发整体介绍 1.1 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档.UI界面设计.概要设计.详细设计.数据库设计 编码:项目代码,是单元测试 上线运维:软件环境安装.配置 ...
- 瑞吉外卖项目重难点及易错点知识点总结
本文是对b站黑马程序员瑞吉外卖项目的总结,实现流程以及简单部分不做详解,重点归纳难点以及易错点.(前面是对项目的介绍,可以直接略过 看第四点总结) 视频链接:https://www.bilibili. ...
- 瑞吉外卖项目学习笔记:P1-项目介绍
瑞吉外卖项目介绍 1.项目介绍 1.1开发步骤 1.2产品原型 1.3技术选型 1.4项目功能架构 1.5角色 1.项目介绍 1.1开发步骤 实现基本要求,移动端应用通过H5实现,用户可通过浏览器访问 ...
- 瑞吉外卖项目——瑞吉外卖
软件开发整体介绍 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档.UI界面设计.概要设计.详细设计.数据库设计 编码:项目代码.单元测试 测试:测试用例.测试报告 上线运维:软件环境 ...
- 【SpringBoot项目实战+思维导图】瑞吉外卖①(项目介绍、开发环境搭建、后台登陆/退出功能开发)
文章目录 软件开发整体介绍 软件开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 创建数据库 数据库表导入 数据库表介绍 Ma ...
- 瑞吉外卖项目笔记+踩坑1——基础功能
导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 1 ...
最新文章
- 【最新刷榜】层次化视觉Transformer来啦!性能大幅优于DeiT、ViT和EfficientNet
- Netty:透明地使用SPDY和HTTP
- Suse 12 安装VMware tool
- 找不到天隆虚拟机_玩转虚拟机,教你如何装系统
- 猜数游戏用Python应该这样写
- 节点name在graph中无法展示_基于珠三角与粤东西北的日前节点电价差异分
- 操作系统——Linux 虚拟内存和物理内存的理解
- OpenGL基础25:多光源(附简单GLSL配置)
- 【cocos2d-x】对CCSprite进行高斯模糊
- 阅读《黑客与画家》有感——Hackers and Painters
- 《DOOM启世录(纪念版) 》此书出了纪念版,好像内容没变
- axure 如何设置选项联动_AxureRP教程
- 转为html5播放器插件,15个HTML5播放器插件
- 从互联网跳到传统企业,我再也不精神内耗了
- JavaEE个人学习总结
- AutoIt教程资源汇总
- 电脑主板线路连接图解_跳线接法图解 主板开机线接法图解
- 实验吧-简单的登录题——WriteUp再研究
- Microsoft SQL Server 数据库使用(二)
- EmguCV学习(三)
热门文章
- chrome 插件 —— Volume Control 调节声音
- 三、pytest接口自动化之pytest中setup/teardown,setup_class/teardown_class讲解
- 操作系统-消息,消息队列
- 订阅新闻联播文字标题到邮箱
- 上市公司“掘金”大数据 多领域大数据应用受热捧
- JAVA权重算法(如Dubbo的负载均衡权重)
- Spel spring表达式
- Linux登录mysql时 密码正确登录不进去,没有密码却能登进去
- 解决URP资源的材质成洋红色问题
- 【SDUT第11周周赛Problem A】SDUT2576——Queen Collisions