8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)

news2024/11/16 15:35:45

目录

删除套餐

需求分析和设计

代码开发

根据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博客

删除套餐

需求分析和设计

业务规则:

  • 可以一次删除一个套餐,也可以批量删除套餐

  • 起售中的套餐不能删除

  • 删除套餐后,菜品的关联数据也需要删除掉

代码开发

根据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查询套餐
    @Override
    public 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
    @Transactional
    public 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层

//修改套餐
    @Override
    public 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层

  //起售禁售套餐
    @Override
    public void startOrStop(Integer status, Long id) {
        Setmeal setmeal = Setmeal.builder()
                .status(status)
                .id(id)
                .build();

        setmealMapper.update(setmeal);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2170907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【智享AI直播官网】—智享AI直播源码部署—OEM贴牌!

【智享AI直播官网】—智享AI直播源码部署—OEM贴牌&#xff01; 在当今数字化浪潮的推动下&#xff0c;直播行业正以前所未有的速度蓬勃发展&#xff0c;而AI&#xff08;人工智能&#xff09;技术的融入更是为这一领域注入了新的活力与无限可能。【智享AI直播官网】作为行业内…

gMLP:Pay Attention to MLPs--模型代码讲解

gMLP模型代码讲解 IntroductiongMLP网络结构Spatial Gating Unit (SGU) codegMLPBlockSpatial Gating Unit 基于MLP-Mixer 的改进… Introduction 总的来说&#xff0c;gMLP 在视觉和NLP领域的惊人有效性表明&#xff0c;自我注意并不是扩大机器学习模型的必要因素&#xff0c…

基于STM32的DHT11功能实现(操作时序)

1.引脚定义 Pin名称注释1VDD供电 3-5.5V2GND接地&#xff0c;电源负极3DATA串行数据&#xff0c;单总线4NC空脚&#xff0c;请悬空 2.数据格式 DHT11 采用单总线协议与单片机通信&#xff0c;单片机发送一次复位信号后&#xff0c;DHT11 从低功耗模式转换到高速模式&#xff…

新品:新一代全双工音频对讲模块SA618F22-C1

SA618F22-C1是我司一款升级版的无线数字和音频二合一全双工传输模块&#xff0c;支持8路并发高音质通话。用户不仅可以通过串口实现数据的无线传输&#xff0c;还可以通过I2S数字音频或模拟音频接口来传输语音信号。该模块内置高速微控制器、回声消除电路、ESD静电防护、高性能…

全国自闭症学校全寄宿制:为特殊儿童提供专业教育护理

在全国范围内&#xff0c;随着对自闭症儿童教育需求的日益增长&#xff0c;全寄宿制自闭症学校逐渐成为了一种重要的教育模式。这些学校以其专业的教育团队、全面的生活护理以及个性化的教学方案&#xff0c;为自闭症儿童提供了一个安全、稳定、充满爱的成长环境。在广州&#…

走进灯塔工厂,腾讯云携手业界专家共筑AI智造未来

现在&#xff0c;我国工业正处于从数字化向智能化转型的关键阶段&#xff0c;而人工智能、云计算和大数据等前沿技术正成为推动这进程的核心力量。以大模型为例&#xff0c;大模型通过高效处理和分析海量数据&#xff0c;帮助企业挖掘出有价值的规律和趋势&#xff0c;有效拓展…

使用双向链表和哈希表实现LRU缓存

在日常开发中&#xff0c;缓存 是一个非常常见且重要的技术手段&#xff0c;能够显著提升系统性能。为了保证缓存的有效性&#xff0c;需要实现一种机制&#xff0c;在缓存空间不足时&#xff0c;能够自动淘汰最久未被使用的数据。这种机制就是**LRU&#xff08;Least Recently…

CSS文本格式化

通过 CSS 中的文本属性您可以像操作 Word 文档那样定义网页中文本的字符间距、对齐方式、缩进等等&#xff0c;CSS 中常用的文本属性如下所示&#xff1a; text-align&#xff1a;设置文本的水平对齐方式&#xff1b;text-decoration&#xff1a;设置文本的装饰&#xff1b;te…

面试题-部分

目录 1. 从输入url到渲染页面&#xff0c;中间经历了什么&#xff1f; 2. vue中的v-if和v-show有什么区别 3. 什么是Css中的回流&#xff08;重排&#xff09;与重绘 4. 介绍一下let、const、var的区别 5. 箭头函数和普通函数有什么区别 6. Css中常用的水平垂直居中解决方…

传输大咖49 | 科学研究院跨网文件交换高效、安全解决方案

在科学研究领域&#xff0c;数据的价值堪比黄金。科学研究所的日常运作依赖于大量的数据交换&#xff0c;高效的文件交换系统离不开内部合作和与外部合作伙伴的交流。然而&#xff0c;随着数据量的激增和网络环境的复杂性&#xff0c;传统的文件交换方法很难满足需求。本文将讨…

RK3568 android11 适配鼎桥MT5710-CN 5G模块

一,概述 鼎桥MT571X设备和Android系统主要通过USB接口进行数据通信,Android系统上的Linux内核需要根据鼎桥模块设备上报的USB设备接口加载USB驱动,USB驱动正确加载后,鼎桥模块才能正常工作。 Android系统中支持鼎桥模块设备相关的Linux内核驱动架构,如下图所示: 在Lin…

js删除emoji表情问题

emoji标签占位两个 &#xff0c;直接删除后一位会出现乱码符&#xff1b; 判断是否是emoji function isEmoji(char) {let code char.charCodeAt(0);return code>55296&&code<57343 } // 使用方法&#xff0c;传入单字符 console.log(isEmoji(1)); // false con…

Kubernetes 配置管理

一、什么是 ConfigMap&#xff1f; 在传统架构中&#xff0c;配置文件往往被保存在宿主机上&#xff0c;程序启动是可以指定某个配置文件&#xff0c;但是使用容器部署时&#xff0c;容器所在的节点并不固定&#xff0c;所以不能使用这种方式&#xff0c;此处在构建镜像时&…

【Redis】主从复制(下)--主从复制原理和流程

文章目录 主从复制原理主从节点建立复制流程图数据同步 psyncpsync的语法格式 psync运行流程全量复制全量复制的流程全量复制的缺陷有磁盘复制 vs 无磁盘复制 部分复制部分复制的流程复制积压缓冲区 实时复制 主从复制原理 主从节点建立复制流程图 保存主节点的信息从节点(sla…

感悟:糟糠之妻不下堂和现在女性觉醒的关系

古人说“糟糠之妻不下堂”真是害惨了中国女性&#xff0c;古代之所以有这一说法&#xff0c;大概是因为男子可以三妻四妾&#xff0c;妻子永远是正妻&#xff0c;也不需要讲究什么从一而终&#xff0c;更不会讲什么男德&#xff0c;只会要求女性学习女德、女训之类&#xff0c;…

性能测试:性能测试报告

性能测试报告是性能测试的产出物之一&#xff0c;它是对系统性能测试结果和数据的总结和分析&#xff0c;记录了系统在不同负载和场景下的性能表现和性能问题。性能测试报告提供了有关系统性能的详细信息&#xff0c;供项目团队、开发人员和其他相关利益相关者参考。 性能测试…

原生app云打包,更换图标,和名称。PDA的安装正式包

原生app云打包 复制下载即可&#xff0c;是正式版

Android下MVP和MVVM模式的实践

转载注明出处&#xff1a;https://blog.csdn.net/skysukai 1、前言 MVP和MVVM诞生已经好些年头了&#xff0c;记得刚毕业才参加工作的时候&#xff0c;第一次见到了有上万行的Activity&#xff0c;这种巨无霸的Activity维护起来简直就是噩梦。这时候&#xff0c;就需要进行代…

商标价值如何评估与增值?

商标是企业的标志&#xff0c;代表着企业的产品或服务质量、信誉和形象。一个具有高知名度和美誉度的商标&#xff0c;能够为企业带来巨大的商业价值。它不仅可以帮助企业在市场中脱颖而出&#xff0c;吸引消费者的关注和购买&#xff0c;还可以作为企业的重要资产进行融资、并…

无人便利店无人超市云值守收银系统源码

随着人力成本越来越高&#xff0c;很多门店越来想做无人值守模式&#xff0c;尤其是晚上休息时间等想让云值守客服来看店。自然要求收银系统需要可以在【有收银员值守】和【无收银员值守】两种模式灵活切换。 1. 有收银员值守模式 白天有收银员在店&#xff0c;收银员可以协助…