黑马瑞吉外卖之套餐信息的删除
在套餐这个模块,我们已经完成的就是套餐信息的分页查询,以及套餐信息的新建与修改这些功能。本篇我们主要去完成一下套餐的删除的功能。
删除功能有独立删除和批量删除两个功能。为了完成演示删除的功能,我们最好在这里可以展示两个以上的套餐。所以最好在这里还是新建几个套餐。我们这里一共展示三个套餐。
首先呢,我们还是去前端页面去查看这些具体的内容。
可以看到这里的单个删除和批量删除绑定的是同一个方法名,然后传递的参数是不一样的。
那么现在我们去找到这个方法。
我们找到前端这里关键的一行代码,这里的意思就是如果我们进行的是批量删除,那么就把checkList作为参数传递进去,如果我们没有进行批量删除,只是选择了单个进行删除,那么就将这个单独要删除的id进行传递进去。所以说我们其实区别还是传递的参数的不同。
然后点进去这个deleteSetmeal里面。
现在我们来开发这个批量删除的功能。
我们可以这样去规定一下,如果套餐正在售卖的话,我们就不能删除,否则我们在删除套餐的时候,其实也还是需要删除套餐关联下面的菜品的数据。
代码语言:javascript复制// 删除套餐同时删除套餐和菜品的关联数据,这里也同样开启事务
@Override
@Transactional
public void removeWithDish(List<Long> ids) {
// 查询套餐的状态确定是否可以删除
// 要根据套餐的状态,是在售卖还是停止售卖
// 如果了可以删除,删除套餐中的数据,然后删除关联表当中的数据
//构造一个套餐的条件
LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
// 根据id进行查询
setmealLambdaQueryWrapper.in(Setmeal::getId,ids);
// 查询对应套餐的状态
setmealLambdaQueryWrapper.eq(Setmeal::getStatus,1);
// 计算符合条件的结果
long count = this.count(setmealLambdaQueryWrapper);
if(count>0)
{
throw new CustomException("套餐正在售卖,不能删除");
}
// 如果套餐不处于售卖那么就在删除套餐的时候也将关联表中的菜品删除掉
this.removeBatchByIds(ids);
// 菜品关联条件
LambdaQueryWrapper<SetmealDish> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);//查询出具体的菜品
setmealDishService.remove(lambdaQueryWrapper);
}
然后我们去controller里面调用这个方法就可以了。
代码语言:javascript复制 @DeleteMapping
public R_<String> delete(@RequestParam List<Long> ids)
{
log.info("ids:{}",ids);
setMealService.removeWithDish(ids);
return R_.success("套餐数据删除成功");
}
这个功能的完成还是比较简单的。