删除套餐(瑞吉外卖)
新增套餐和分页的思想和前面的类别查不了多少
这里的删除,有批量删除,也有单个删除,直接做成一个功能
这里的删除不仅是只删除套餐,同时需要删除套餐和菜品的关联数据
1.思路
1.重写方法:deleteWithDish(List ids);
SELECT COUNT(*) FROM setmeal WHERE id IN (/* ids 列表 */) AND status = 1;
2.看当前套餐是否停售
2.1如果没有停售的话就需要抛出一个业务异常
3.停售,删除套餐
DELETE FROM setmeal WHERE id IN (*/\* ids 列表 \*/*);
4.删除里面的关联关系
DELETE FROM setmeal_dish WHERE setmeal_id IN (*/\* ids 列表 \*/*);
2.代码实现
/**
* 删除套餐,同时需要删除套餐和菜品的关联数据
* @param ids
*/
@Transactional
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("套餐正在售卖中,不能删除");
}
//如果可以删除,先删除套餐表中的数据---setmeal
this.removeByIds(ids);
//delete from setmeal_dish where setmeal_id in (1,2,3)
LambdaQueryWrapper<SetmealDish> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);
//删除关系表中的数据----setmeal_dish
setmealDishService.remove(lambdaQueryWrapper);
}