1.菜品删除(批量)
菜品删除这里我加了两个条件判断
(1)菜品是否在启售,如果在启售,则不能删除
(2)菜品是否被包含在套餐里面,如果有,则不能删除
如果以上两个条件都满足,就删除dish表的菜品数据和dish_flavor表的口味数据。
controller
/**
* 删除菜品
* @param ids
* @return
*/
@DeleteMapping
public R<String> delete(@RequestParam List<Long> ids){
log.info("ids:{}",ids);
dishService.removeWithFlavor(ids);
return R.success("菜品删除成功");
}
service
/**
* 删除菜品,同时需要删除菜品和对应的口味的关联数据
* @param ids
*/
@Transactional
@Override
public void removeWithFlavor(List<Long> ids) {
//select count(*) from dish where id in (1,2,3) and status = 1
//查询菜品状态,确定是否可用删除
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(Dish::getId,ids);
queryWrapper.eq(Dish::getStatus,1);
int count = super.count(queryWrapper);
if (count > 0){
//如果不能删除,抛出一个业务异常
throw new CustomException("菜品正在售卖中,不能删除");
}
//查询菜品是否被包含在套餐中,确认是否可删除
LambdaQueryWrapper<SetmealDish> setmealDishQueryWrapper = new
LambdaQueryWrapper<>();
setmealDishQueryWrapper.in(SetmealDish::getDishId,ids);
SetmealDish one = setmealDishService.getOne(setmealDishQueryWrapper);
if (one != null){
//如果不能删除,抛出一个业务异常
throw new CustomException("菜品包含在某个套餐中,不能删除");
}
//如果可以删除,先删除菜品表中的数据---dish
super.removeByIds(ids);
//再查询口味表中对应菜品id的口味信息并删除
LambdaQueryWrapper<DishFlavor> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(DishFlavor::getDishId,ids);
//删除关系表中的数据---dish_flavor
dishFlavorService.remove(lambdaQueryWrapper);
}
2.启/停售(批量)
controller
/**
* 根据id(批量)停售菜品信息
* @param status
* @param ids
* @return
*/
@PostMapping("/status/{status}")
public R<String> updateMulStatus(@PathVariable Integer status, Long[] ids){
//将数组转为集合
List<Long> list = Arrays.asList(ids);
//list.forEach(System.out::println);
//构造条件构造器
LambdaUpdateWrapper<Dish> updateWrapper = new LambdaUpdateWrapper<>();
//添加过滤条件
updateWrapper.set(Dish::getStatus,status).in(Dish::getId,list);
//执行更新操作
dishService.update(updateWrapper);
return R.success("菜品信息修改成功");
}