通用的思路:
我们肯定首先要判断一下这个状态是否为启用,如果是启动就放弃删除还要检查是否与其他表有关联导致不能删除
然后我们从前端接到的是一个id或者ids那么就不可避免的要根据id查得到状态等信息
Controller层也是直接直接接ids,传ids给service层
Service层就需要先用一个for循环
查询方法得到ids中对应的内容的状态是否是启用
或者检查是否与其他表有关联导致不能删除
检查完之后我们可以调用多个mapper层对多个表进行删除
示例代码
@ApiOperation("删除套餐")
@DeleteMapping
public Result deleteById(@RequestParam List<Long> ids) {
setmealService.deleteByIds(ids);
return Result.success();
}
@Override
public void deleteByIds(List<Long> ids) {
//这里要做两件事情,
//1.如果有套餐正在起售,则抛出业务异常
//2.如果内含菜品,要在setmeal_dish表中删除包含此ids的关联记录
for(Long id:ids)
{
if
(Objects.equals(setmealMapper.getById(id).getStatus(), StatusConstant.ENABLE))
{
throw new BaseException("套餐正在起售中,不能删除");
}
}
setmealMapper.deleteByIds(ids);
setmealDishMapper.deleteBySetmealIds(ids);
}
@Delete("<script>" +
"DELETE FROM setmeal_dish " +
"WHERE setmeal_id IN " +
"<foreach item='id' collection='ids' open='(' separator=',' close=')'>" +
"#{id}" +
"</foreach>" +
"</script>")
void deleteBySetmealIds(List<Long> ids);
@Delete("<script>" +
"DELETE FROM setmeal " +
"WHERE id IN " +
"<foreach item='id' collection='ids' open='(' separator=',' close=')'>" +
"#{id}" +
"</foreach>" +
"</script>")
void deleteByIds(List<Long> ids);