Day4项目完善
批量删除
我们进行删除和批量删除之前,我们需要先确定删除的菜品是否是启售状态,如果是启售状态下删除,业务会出错(比如:用户下单了这个菜品,而人员刚好在这时删除了这个菜品)
删除前端数据
批量删除前端数据
我们可以得出一下结论:
- 使用@DeleteMapper
- 删除传递的是Long类型id,批量删除传递数组类型的ids
因为操作相同,我们可以将删除和批量删除写在一起
判断菜品状态sql语句是这样的: 判断id为1,2,3的状态是不是启售状态
select count(*) from dish where id in (1,2,3) and status = 1
如果启售,我们将直接给出业务异常
如果停售,我们将对菜品进行删除
下面是完整代码
controller层:
@DeleteMapping
public R<String> delete(@RequestParam List<Long> ids){
log.info("ids:{}",ids);
dishService.removeWithFlavor(ids);
return R.success("菜品信息删除成功");
}
service层
@Override
public void removeWithFlavor(List<Long> ids) {
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("套餐正在售卖中,不能删除");
}
//如果可以删除,先删除菜品表中的数据---dish
super.removeByIds(ids);
LambdaQueryWrapper<DishFlavor> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(DishFlavor::getDishId,ids);
//删除关系表中的数据---dish_flavor
dishFlavorService.remove(lambdaQueryWrapper);
}
批量启售、停售
同样,我们先查看前端传递的数据
单独点击启售/停售
批量击启售/停售得出结论:
- 都是POST请求
- 传递 /status/{status}
我们需要根据菜品id来绑定菜品
代码如下:
@PostMapping("/status/{status}")
public R<String> updateMulStatus(@PathVariable Integer status, Long[] ids){
List<Long> list = Arrays.asList(ids);
LambdaUpdateWrapper<Dish> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(Dish::getStatus,status).in(Dish::getId,list);
dishService.update(updateWrapper);
return R.success("菜品信息修改成功");
}