diff --git a/sky-server/src/main/java/com/sky/controller/admin/DishController.java b/sky-server/src/main/java/com/sky/controller/admin/DishController.java index 10bd2b6..4d39e90 100644 --- a/sky-server/src/main/java/com/sky/controller/admin/DishController.java +++ b/sky-server/src/main/java/com/sky/controller/admin/DishController.java @@ -11,6 +11,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @Slf4j @Api(tags = "菜品相关接口") @@ -40,4 +42,14 @@ public class DishController { return Result.success(pageResult); } + + + @DeleteMapping + @ApiOperation("菜品批量删除") + public Result delete(@RequestParam List ids){ //@RequestParam:能够使用springmvc框架,对1,2,3 参数进行切割 + log.info("菜品批量删除:{}",ids); + //调用业务层的菜品批量删除功能 + dishService.deleteBath(ids); + return Result.success(); + } } diff --git a/sky-server/src/main/java/com/sky/mapper/DishFlavorMapper.java b/sky-server/src/main/java/com/sky/mapper/DishFlavorMapper.java index 451353c..d125f3e 100644 --- a/sky-server/src/main/java/com/sky/mapper/DishFlavorMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/DishFlavorMapper.java @@ -12,4 +12,10 @@ public interface DishFlavorMapper { * @param flavors */ void insertBath(List flavors); + + /** + * 菜品口味的批量删除 + * @param ids + */ + void deleteBath(List ids); } diff --git a/sky-server/src/main/java/com/sky/mapper/DishMapper.java b/sky-server/src/main/java/com/sky/mapper/DishMapper.java index 30566b9..6311fae 100644 --- a/sky-server/src/main/java/com/sky/mapper/DishMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/DishMapper.java @@ -10,6 +10,8 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Options; import org.apache.ibatis.annotations.Select; +import java.util.List; + @Mapper public interface DishMapper { @@ -34,4 +36,18 @@ public interface DishMapper { * @return */ Page pageQuery(DishPageQueryDTO dto); + + /** + * 根据菜品id,查询菜品数据 + * @param id + * @return + */ + @Select("select * from dish where id = #{id}") + Dish getById(Long id); + + /** + * 批量删除菜品 + * @param ids + */ + void deleteBath(List ids); } diff --git a/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java b/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java new file mode 100644 index 0000000..c034016 --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java @@ -0,0 +1,20 @@ +package com.sky.mapper; + +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 菜品--套餐--中间表setmeal_dish + */ +@Mapper +public interface SetmealDishMapper { + + + /** + * 根据多个菜品id,查询关联的套餐id + * @param ids + * @return + */ + List getSetmealIdsByDishIds(List ids); +} diff --git a/sky-server/src/main/java/com/sky/service/DishService.java b/sky-server/src/main/java/com/sky/service/DishService.java index c6c968e..6d3ecd9 100644 --- a/sky-server/src/main/java/com/sky/service/DishService.java +++ b/sky-server/src/main/java/com/sky/service/DishService.java @@ -4,6 +4,8 @@ import com.sky.dto.DishDTO; import com.sky.dto.DishPageQueryDTO; import com.sky.result.PageResult; +import java.util.List; + public interface DishService { /* 新增菜品和它的口味 @@ -16,4 +18,10 @@ public interface DishService { * @return */ PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO); + + /** + * 菜品批量删除 + * @param ids + */ + void deleteBath(List ids); } diff --git a/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java index 8b8a9cc..39b4b8c 100644 --- a/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java +++ b/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java @@ -2,12 +2,16 @@ package com.sky.service.impl; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; +import com.sky.constant.MessageConstant; +import com.sky.constant.StatusConstant; import com.sky.dto.DishDTO; import com.sky.dto.DishPageQueryDTO; import com.sky.entity.Dish; import com.sky.entity.DishFlavor; +import com.sky.exception.DeletionNotAllowedException; import com.sky.mapper.DishFlavorMapper; import com.sky.mapper.DishMapper; +import com.sky.mapper.SetmealDishMapper; import com.sky.result.PageResult; import com.sky.service.DishService; import com.sky.vo.DishVO; @@ -25,6 +29,8 @@ public class DishServiceImpl implements DishService { @Autowired private DishFlavorMapper dishFlavorMapper; + @Autowired + private SetmealDishMapper setmealDishMapper; /* @@ -63,4 +69,32 @@ public class DishServiceImpl implements DishService { Page page = dishMapper.pageQuery(dto); return new PageResult(page.getTotal(),page.getResult()); } + + /** + * 菜品批量删除 + * @param ids + */ + @Override + @Transactional + public void deleteBath(List ids) { + //1.判断菜品的起售状态,如果是起售中,不能删除,程序立马停止,并提示用户 + //todo 当前是遍历查询菜品,执行了多次select语句,效率低,我们可以使用一条sql查询出所有菜品,再遍历菜品对象是否有起售状态 + ids.forEach(id->{ + Dish dish = dishMapper.getById(id); + if (dish.getStatus() == StatusConstant.ENABLE) { + //不能删除,程序立马停止,并提示用户 + throw new DeletionNotAllowedException(MessageConstant.DISH_ON_SALE); + } + }); + //2.判断菜品是否被套餐关联,如果被关联了那么不能删除,程序立马停止,并提示用户 + List setmealIds = setmealDishMapper.getSetmealIdsByDishIds(ids); + if (setmealIds != null && setmealIds.size() > 0) { + //不能删除,程序立马停止,并提示用户 + throw new DeletionNotAllowedException(MessageConstant.DISH_BE_RELATED_BY_SETMEAL); + } + //3.如果菜品可以删除,那么相关的口味也要删除掉 + //根据菜品id删除菜品和口味数据 + dishMapper.deleteBath(ids); + dishFlavorMapper.deleteBath(ids); + } } diff --git a/sky-server/src/main/resources/mapper/DishFlavorMapper.xml b/sky-server/src/main/resources/mapper/DishFlavorMapper.xml index 00f3d8e..cc9f2da 100644 --- a/sky-server/src/main/resources/mapper/DishFlavorMapper.xml +++ b/sky-server/src/main/resources/mapper/DishFlavorMapper.xml @@ -10,4 +10,10 @@ (#{flavor.dishId},#{flavor.name},#{flavor.value}) + + delete from dish_flavor where dish_id in + + #{id} + + diff --git a/sky-server/src/main/resources/mapper/DishMapper.xml b/sky-server/src/main/resources/mapper/DishMapper.xml index 5e5dc6c..68eed59 100644 --- a/sky-server/src/main/resources/mapper/DishMapper.xml +++ b/sky-server/src/main/resources/mapper/DishMapper.xml @@ -7,6 +7,7 @@ insert into dish (name, category_id, price, image, description, create_time, update_time, create_user, update_user,status) values (#{name},#{categoryId},#{price},#{image},#{description},#{createTime},#{updateTime},#{createUser},#{updateUser},#{status}) + + + + + delete from dish where id in + + #{id} + + diff --git a/sky-server/src/main/resources/mapper/SetmealDishMapper.xml b/sky-server/src/main/resources/mapper/SetmealDishMapper.xml new file mode 100644 index 0000000..6f9a290 --- /dev/null +++ b/sky-server/src/main/resources/mapper/SetmealDishMapper.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file