8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)
目录
删除套餐
需求分析和设计
代码开发
根据id查询套餐
mapper层
Service层
ServiceImpl层
Mapper层
批量删除套餐
mapper层
Service层
ServiceImpl层
Mapper层
SetmealMapper.xml
修改套餐
需求分析和设计
代码开发
起售停售套餐
需求分析和设计
代码开发
1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客
2--苍穹外卖-SpringBoot项目中员工管理 详解(一)-CSDN博客
3--苍穹外卖-SpringBoot项目中员工管理 详解(二)-CSDN博客
4--苍穹外码-SpringBoot项目中分类管理 详解-CSDN博客
5--苍穹外卖-SpringBoot项目中菜品管理 详解(一)-CSDN博客
6--苍穹外卖-SpringBoot项目中菜品管理 详解(二)-CSDN博客
7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)-CSDN博客
8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)-CSDN博客
9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解-CSDN博客
10--苍穹外卖-SpringBoot项目中微信登录 详解-CSDN博客
删除套餐
需求分析和设计
业务规则:
-
可以一次删除一个套餐,也可以批量删除套餐
-
起售中的套餐不能删除
-
删除套餐后,菜品的关联数据也需要删除掉
代码开发
根据id查询套餐
mapper层
//根据id查询套餐@GetMapping("/{id}")@ApiOperation("根据id查询套餐")public Result<SetmealVO> getById(@PathVariable Long id){log.info("根据id查询套餐:{}",id);SetmealVO setmealVO=setmealService.getByIdWithDish(id);return Result.success(setmealVO);}
Service层
//根据id查询套餐SetmealVO getByIdWithDish(Long id);
ServiceImpl层
//根据id查询套餐@Overridepublic SetmealVO getByIdWithDish(Long id) {Setmeal setmeal=setmealMapper.getById(id);List<SetmealDish> setmealDishes=setmealDishMapper.getDishId(id);SetmealVO setmealVO = new SetmealVO();BeanUtils.copyProperties(setmeal,setmealVO);setmealVO.setSetmealDishes(setmealDishes);return setmealVO;}
Mapper层
//根据id查询套餐@Select("select *from setmeal where id=#{id}")Setmeal getById(Long id);
//根据id查询对应的菜品数据@Select("select *from setmeal_dish where setmeal_id=#{dishId}")List<SetmealDish> getDishId(Long dishId);
批量删除套餐
mapper层
//批量删除套餐@DeleteMapping@ApiOperation("批量删除套餐")public Result<String> delete(@RequestParam List<Long> ids){log.info("批量删除套餐:{}",ids);setmealService.deleteBatch(ids);return Result.success();}
Service层
//批量删除套餐void deleteBatch(List<Long> ids);
ServiceImpl层
//批量删除套餐@Override@Transactionalpublic void deleteBatch(List<Long> ids) {for (Long id:ids){Setmeal setmeal=setmealMapper.getById(id);if (Objects.equals(setmeal.getStatus(), StatusConstant.ENABLE)) {throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);}}setmealMapper.deleteByIds(ids);setmealMapper.deleteByDishIds(ids);}
Mapper层
//根据id集合批量删除套餐数据void deleteByIds(List<Long> ids);//根据id集合批量删除套餐关联的菜品数据void deleteByDishIds(List<Long> ids);
SetmealMapper.xml
<delete id="deleteByIds">
delete from setmeal where id in<foreach collection="ids" open="(" separator="," close=")" item="id">#{id}</foreach></delete><delete id="deleteByDishIds">delete from setmeal_dish where setmeal_id in <foreach collection="dishIds" open="(" close=")" separator="," item="dishId">#{dishId}</foreach></delete>
修改套餐
需求分析和设计
代码开发
Controller层
//修改套餐@PutMapping@ApiOperation("修改套餐")public Result<String> update(@RequestBody SetmealDTO setmealDTO){log.info("修改套餐:{}",setmealDTO);setmealService.update(setmealDTO);return Result.success();}
Service层
//修改套餐void update(SetmealDTO setmealDTO);
ServiceImpl层
//修改套餐@Overridepublic void update(SetmealDTO setmealDTO) {Setmeal setmeal = new Setmeal();BeanUtils.copyProperties(setmealDTO,setmeal);setmealMapper.update(setmeal);setmealDishMapper.deleteByDishId(setmealDTO.getId());List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();if(setmealDishes!=null&&!setmealDishes.isEmpty()){setmealDishes.forEach(setmealDish -> {setmealDish.setSetmealId(setmealDTO.getId());});setmealDishMapper.insertBatch(setmealDishes);}}
Mapper层
//根据id动态修改套餐数据@AutoFill(value = OperationType.UPDATE)void update(Setmeal setmeal);
//根据套餐id删除对应的菜品数据@Delete("delete from setmeal_dish where setmeal_id=#{dishId}")void deleteByDishId(Long dishId);
SetmealMapper.xml
<update id="update">update dish<set><if test="name!=null">name=#{name},</if><if test="categoryId!=null">category_id=#{categoryId},</if><if test="price!=null">price=#{price},</if><if test="image!=null">image=#{image},</if><if test="description!=null">description=#{description},</if><if test="status!=null">status=#{status},</if><if test="updateTime!=null">update_time=#{updateTime},</if><if test="updateUser!=null">update_user=#{updateUser},</if></set>where id=#{id}</update>
起售停售套餐
需求分析和设计
业务规则:
- 可以对状态为“启售” 的套餐进行“停售”操作
- 可以对状态为“停售”的套餐进行“启售”操作
- 状态为“停售”的套餐不在前台展示
代码开发
Controller层
//起售禁售套餐@PostMapping("/status/{status}")@ApiOperation("起售禁售套餐")public Result<String> startOrStop(@PathVariable Integer status,Long id){log.info("起售禁售套餐:{},{}",status,id);setmealService.startOrStop(status,id);return Result.success();}
Service层
//起售禁售套餐void startOrStop(Integer status, Long id);
ServiceImpl层
//起售禁售套餐@Overridepublic void startOrStop(Integer status, Long id) {Setmeal setmeal = Setmeal.builder().status(status).id(id).build();setmealMapper.update(setmeal);}
相关文章:

8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)
目录 删除套餐 需求分析和设计 代码开发 根据id查询套餐 mapper层 Service层 ServiceImpl层 Mapper层 批量删除套餐 mapper层 Service层 ServiceImpl层 Mapper层 SetmealMapper.xml 修改套餐 需求分析和设计 代码开发 起售停售套餐 需求分析和设计 代码开发…...
测试面试题:pytest断言时,数据是符点类型,如何断言?
在使用 Pytest 进行断言时,如果数据是浮点类型,可以使用以下方法进行断言: 一、使用pytest.approx pytest.approx可以用来比较两个浮点数是否近似相等。例如: import pytestdef test_float_assertion():result 3.14159expecte…...
Python与MongoDB交互
一、基本概念 MongoDB: 一个面向文档的数据库系统,使用BSON(Binary JSON)作为存储格式。集合(Collection): 类似于关系型数据库中的表,是文档的集合。文档(Document): MongoDB中的基…...

安卓AI虚拟女友项目开发的Android开发环境搭建
第五章:Android开发环境搭建与基础入门 5-1 项目讲解思路说明 本文是安卓AI数字虚拟人项目实战的第五章,开发安卓AI安卓版数字虚拟人的Android基础部分。 在本章中,我们将详细介绍如何搭建Android开发环境,包括Android Studio的…...

基于SpringBoot+Vue+MySQL的智能垃圾分类系统
系统展示 用户前台界面 管理员后台界面 系统背景 随着城市化进程的加速,垃圾问题日益凸显,不仅对环境造成污染,也给城市管理带来了巨大挑战。传统的垃圾分类方式不仅费时费力,而且手工操作容易出现错误,导致垃圾分类效…...
你的个人文件管理助手:AI驱动的本地文件整理工具
🌐 引言 在数字化时代,我们经常面临文件管理的挑战。电脑中的文件杂乱无章,寻找特定文件变得既费时又费力。幸运的是,现在有了一款名为本地文件整理器的神器,它利用AI技术帮助你快速、智能地整理文件,同时…...

【PyTorch】环境配置
框架介绍 Pytorch简介 2017年1月,FAIR(Facebook AI Research)发布了PyTorch。PyTorch是在Torch基础上用python语言重新打造的一款深度学习框架。Torch是采用Lua语言作为接口的机器学习框架,但因为Lua语言较为小众,导…...
枫叶MTS格式转换器- 强大、操作简单的MTS、M2TS视频转换工具供大家学习研究参考
一款功能强大、操作简单的MTS、M2TS视频转换工具,欢迎下载使用。 使用本MTS格式转换器可以帮助您将索尼和松下等摄像机录制的MTS、M2TS格式高清视频转换为其他流行的视频格式,如MP4、3GP、AVI、MPEG、WMV、ASF、MOV、RM、VCD、SVCD、DVD、MKV、FLV、SWF、MPG、MP3、WAV、WMA…...
Vscode把全部‘def‘都收起来的快捷键
在 VSCode 中,你可以使用以下快捷键来收起所有函数定义 (def): Windows/Linux: Ctrl K, Ctrl 0macOS: Cmd K, Cmd 0 这个快捷键组合会折叠当前文件中所有的代码块(包括所有函数和类定义)。你可以通过相同的快捷键再次展开这…...

Web和UE5像素流送、通信教程
一、web端配置 首先打开Github地址:https://github.com/EpicGamesExt/PixelStreamingInfrastructure 找到自己虚幻引擎对应版本的项目并下载下来,我这里用的是5.3。 打开项目找到PixelStreamingInfrastructure-master > Frontend > implementat…...

【YOLO目标检测电梯间电动车与人数据集】共4321张、已标注txt格式、有训练好的yolov5的模型
目录 说明图片示例 说明 数据集格式:YOLO格式 图片数量:4321 标注数量(txt文件个数):4321 标注类别数:2 标注类别名称:person、electricBicycle 数据集下载:电梯间电动车与人数据集 图片示例 数据…...
【网络安全】公钥基础设施
1. PKI 定义 1.1 公钥基础设施的概念 公钥基础设施(Public Key Infrastructure,简称PKI)是一种基于公钥密码学的系统,它提供了一套完整的解决方案,用于管理和保护通过互联网传输的信息。PKI的核心功能包括密钥管理、…...

云原生(四十一)| 阿里云ECS服务器介绍
文章目录 阿里云ECS服务器介绍 一、云计算概述 二、什么是公有云 三、公有云优缺点 1、优点 2、缺点 四、公有云品牌 五、市场占有率 六、阿里云ECS概述 七、阿里云ECS特点 阿里云ECS服务器介绍 一、云计算概述 云计算是一种按使用量付费的模式,这种模式…...

计算机网络:计算机网络体系结构 —— OSI 模型 与 TCP/IP 模型
文章目录 计算机网络体系结构OSI 参考模型TCP/IP 参考模型分层的必要性物理层的主要问题数据链路层的主要问题网络层的主要问题运输层的主要问题应用层的主要问题 分层思想的处理方法发送请求路由器转发接受请求发送响应接收响应 计算机网络体系结构 计算机网络体系结构是指将…...
【openwrt-21.02】T750 openwrt switch划分VLAN之后网口插拔状态异常问题分析及解决方案
Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …...
C++随心记
C随心记 C中的 CONST C中的const是表示不可修改 int main() {/* 对于变量而言 */// 不可修改的常量const int A 10;// 不可修改的指针指向const int* pointer_0 nullptr;int const* poniter_1 nullptr;// 不可修改指针指向的内容int* const poniter_2 nullptr; }const也…...

【微服务即时通讯系统】——brpc远程过程调用、百度开源的RPC框架、brpc的介绍、brpc的安装、brpc使用和功能测试
文章目录 brpc1. brpc的介绍1.1 rpc的介绍1.2 rpc的原理1.3 grpc和brpc 2. brpc的安装3. brpc使用3.1 brpc接口介绍 4. brpc使用测试4.1 brpc同步和异步调用 brpc 1. brpc的介绍 1.1 rpc的介绍 RPC(Remote Procedure Call)远程过程调用,是一…...

鸿蒙开发(NEXT/API 12)【状态查询与订阅】手机侧应用开发
注意 该接口的调用需要在开发者联盟申请设备基础信息权限与穿戴用户状态权限,穿戴用户状态权限还需获得用户授权。 实时查询穿戴设备可用空间、电量状态。订阅穿戴设备连接状态、低电量告警、用户心率告警。查询和订阅穿戴设备充电状态、佩戴状态、设备模式。 使…...

vite中sass警告JS API过期
1.问题 在Vite创建项目中引入Sass弹出The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 - vite中sass警告JS API过期 The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0警告提示表明你当前正在使用的 Dart Sass 版本中&#…...

睢宁自闭症寄宿学校:培养特殊孩子的未来
在自闭症儿童的教育与康复领域,每一所学校的努力都是对孩子们未来无限可能的一次深刻诠释。从江苏睢宁到广东广州,自闭症寄宿学校正以不同的方式,为这些特殊的孩子铺设一条通往未来的希望之路。其中,广州的星贝育园自闭症儿童寄宿…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...