当前位置: 首页 > article >正文

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查询套餐
    @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.kler.cn/news/328539.html

相关文章:

  • XR图和XS图中X-bar图的最大不同
  • uniapp 常用高度状态栏,导航栏,tab栏,底部安全高度
  • C++ 游戏开发
  • Docker 安装 Citus 单节点集群:全面指南与详细操作
  • Linux 文件目录结构(详细)
  • 【PostgreSQL】入门篇——如何创建、删除和管理数据库及其用户,包括权限设置和角色管理
  • OSPF路由计算
  • 滑动窗口->dd爱框框
  • Elasticsearch学习笔记(3)
  • Service Mesh
  • Java | Leetcode Java题解之第450题删除二叉搜索树中的节点
  • Arduino UNO R3自学笔记7 之 Arduino使用PWM电机调速
  • 服务器数据恢复—存储映射到服务器上的卷无法挂载的数据恢复案例
  • DC00025【含论文】基于协同过滤推荐算法springboot视频推荐管理系统
  • 使用Yasboot安装YashanDB的疑惑和建议
  • 进阶数据库系列(十三):PostgreSQL 分区分表
  • SolidWorks机器转ROS2 URDF
  • Linux下send函数和recv函数
  • AWS Redshift把老用户权限赋予新用户
  • 201 Created
  • 如何在Windows、Mac和Linux系统上安装和更新Stable Diffusion WebUI
  • Spark SQL分析层优化
  • 中国电信解锁万亿参数大模型:TeleAI的创新与突破
  • Docker镜像命令和容器命令
  • 《征服数据结构》哈夫曼树(Huffman Tree)
  • Python 封装 socket 为 [TCP/UDP/MULTICAST] 服务端
  • 计算机毕业设计 服装生产信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Datawhale Leecode基础算法篇 task04:贪心算法
  • SpringBoot 使用自定义注解和枚举类对接口入参校验
  • 2024年寒假开学赛题解