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

删除套餐

需求分析和设计

业务规则:

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

  • 起售中的套餐不能删除

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

代码开发

根据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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值