瑞吉外卖项目学习笔记:P17-删除套餐功能开发

P17-删除套餐功能开发

  • 1.需求分析
  • 2.代码开发
    • 2.1前后端交互流程分析
    • 2.2前端代码
      • 2.2.1js代码
    • 2.2后端代码开发
      • 2.2.1删除套餐,涉及到两张数据库表,在SetmealService扩展一个方法
    • 2.2.2删除套餐,SetmealController

1.需求分析

  • 在套餐管理列表页面点击删除按钮,可以删除对应的套餐信息。
  • 也可以通过复选框选择多个套餐,点击批量删除按钮一次删除多个套餐。
  • 注意,对于状态为售卖中的套餐不能删除,需要先停售,然后才能删除

瑞吉外卖项目学习笔记:P17-删除套餐功能开发_第1张图片

2.代码开发

2.1前后端交互流程分析

  1. 删除单个套餐时,页面发送ajax请求, 根据套餐id删除对应套餐
    在这里插入图片描述

  2. 删除多个套餐时,页面发送ajax请求,根据提交的多个套餐id删除对应套餐
    在这里插入图片描述

开发删除套餐功能,其实就是在服务端编写代码去处理前端页面发送的这2次请求即可。
观察删除单个套餐和批量删除套餐的请求信息可以发现,两种请求的地址和请求方式都是相同的,不同的则是传递的id个数,所以在服务端可以提供-一个方法来统一处理 。

2.2前端代码

2.2.1js代码

// 删除数据接口
const deleteSetmeal = (ids) => {
  return $axios({
    url: '/setmeal',
    method: 'delete',
    params: { ids }
  })
}

2.2后端代码开发

2.2.1删除套餐,涉及到两张数据库表,在SetmealService扩展一个方法

  • 套菜基本信息 setmeal
  • 套餐和菜品关联表 setmeal _dish
/**
     * 删除套餐
     * 扩展方法,删除套餐时涉及:套菜基本信息表setmeal,套餐和菜品关联表setmeal_dish
     * @param ids
     */
    @Transactional
    @Override
    public void removeWithDish(List<Long> ids) {
        //select count(*) from setmeal where id in(1,2,3) and status=1
        //查询套餐状态,确定是否可以删除
        LambdaQueryWrapper<Setmeal>queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.in(Setmeal::getId,ids);
        queryWrapper.eq(Setmeal::getStatus,1);

        int count = this.count(queryWrapper);
        //如果不能删除,抛出业务异常信息:当前套餐正在售卖中,不能删除
        if(count>0){
            throw new CustomException("当前套餐正在售卖中,不能删除");
        }


        //1.如果可以删除,删除套餐表信息 setmeal
        this.removeByIds(ids);
        //2.如果可以删除,删除套餐和菜品关联表信息 setmeal_dish
        //delete from setmeal_dish where setmeal_id in (1,2,3)
        LambdaQueryWrapper<SetmealDish> dishLambdaQueryWrapper=new LambdaQueryWrapper<>();
        dishLambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);
        setmealDishService.remove(dishLambdaQueryWrapper);
    }

2.2.2删除套餐,SetmealController

/**
     * 删除套餐
     * @param ids
     * @return
     */
    @DeleteMapping
    public R<String>delete(@RequestParam List<Long> ids){
        log.info("ids:{}",ids);
        setmealService.removeWithDish(ids);
        return R.success("套餐删除成功");
    }

你可能感兴趣的:(SpringBoot项目开发,java,spring,boot,spring,后端,mysql)