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 421a8c6..153a37d 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 @@ -113,6 +113,7 @@ public class DishController { @PostMapping("/status/{status}") @ApiOperation("菜品起售停售") public Result startOrStop(@PathVariable Integer status,Long id){ + log.info("菜品起售停售: 状态:{},ID:{}",status,id); dishService.startOrStop(status,id); return Result.success(); } diff --git a/sky-server/src/main/java/com/sky/controller/admin/SetmealController.java b/sky-server/src/main/java/com/sky/controller/admin/SetmealController.java index 7843d3a..bcd7939 100644 --- a/sky-server/src/main/java/com/sky/controller/admin/SetmealController.java +++ b/sky-server/src/main/java/com/sky/controller/admin/SetmealController.java @@ -70,8 +70,35 @@ public class SetmealController { @GetMapping("/{id}") @ApiOperation("根据id查询套餐") public Result getById(@PathVariable Long id){ - log.info("根据id查询套餐"); + log.info("根据id查询套餐: {}",id); SetmealVO setmealVO = setmealService.getByIdWithSetmealDishes(id); return Result.success(setmealVO); } + + /** + * 修改套餐 + * @param setmealDTO + * @return + */ + @PutMapping + @ApiOperation("修改套餐") + public Result update(@RequestBody SetmealDTO setmealDTO){ + log.info("修改套餐: {}",setmealDTO); + setmealService.updateWithSetmealDishes(setmealDTO); + return Result.success(); + } + + /** + * 套餐起售停售 + * @param status + * @param id + * @return + */ + @PostMapping("/status/{status}") + @ApiOperation("套餐起售停售") + public Result startOrStop(@PathVariable Integer status,Long id){ + log.info("套餐起售停售: 状态:{},ID:{}",status,id); + setmealService.startOrStop(status,id); + return Result.success(); + } } 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 86f6b6d..7c1f083 100644 --- a/sky-server/src/main/java/com/sky/mapper/DishMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/DishMapper.java @@ -68,4 +68,6 @@ public interface DishMapper { */ @Select("select * from dish where category_id = #{categoryId}") List selectByCategoryId(Long categoryId); + + List selectByDishIdsAndStatusDisable(List dishIds); } diff --git a/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java b/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java index dceae37..adc57d1 100644 --- a/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java @@ -2,6 +2,7 @@ package com.sky.mapper; import com.sky.entity.Dish; import com.sky.entity.SetmealDish; +import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -22,4 +23,10 @@ public interface SetmealDishMapper { @Select("select * from setmeal_dish where setmeal_id = #{setmealId}") List selectBySetmealId(Long setmealId); + + @Delete("delete from setmeal_dish where setmeal_id = #{setmealId}") + void deleteBySetmealId(Long setmealId); + + @Select("select * from setmeal_dish where dish_id = #{dishId}") + List selectByDishId(Long dishId); } diff --git a/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java b/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java index e2e1500..d808e47 100644 --- a/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java @@ -30,4 +30,7 @@ public interface SetmealMapper { Setmeal selectById(Long id); void deleteBatch(List ids); + + @AutoFill(OperationType.UPDATE) + void update(Setmeal setmeal); } diff --git a/sky-server/src/main/java/com/sky/service/SetmealService.java b/sky-server/src/main/java/com/sky/service/SetmealService.java index 9266e4c..5e736bd 100644 --- a/sky-server/src/main/java/com/sky/service/SetmealService.java +++ b/sky-server/src/main/java/com/sky/service/SetmealService.java @@ -35,4 +35,17 @@ public interface SetmealService { * @return */ SetmealVO getByIdWithSetmealDishes(Long id); + + /** + * 修改套餐 + * @param setmealDTO + */ + void updateWithSetmealDishes(SetmealDTO setmealDTO); + + /** + * 套餐起售停售 + * @param status + * @param id + */ + void startOrStop(Integer status, Long id); } 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 fc0b601..99cae96 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 @@ -8,10 +8,13 @@ import com.sky.dto.DishDTO; import com.sky.dto.DishPageQueryDTO; import com.sky.entity.Dish; import com.sky.entity.DishFlavor; +import com.sky.entity.Setmeal; +import com.sky.entity.SetmealDish; import com.sky.exception.DeletionNotAllowedException; import com.sky.mapper.DishFlavorMapper; import com.sky.mapper.DishMapper; import com.sky.mapper.SetmealDishMapper; +import com.sky.mapper.SetmealMapper; import com.sky.result.PageResult; import com.sky.service.DishService; import com.sky.vo.DishVO; @@ -33,6 +36,8 @@ public class DishServiceImpl implements DishService { private DishFlavorMapper dishFlavorMapper; @Autowired private SetmealDishMapper setmealDishMapper; + @Autowired + private SetmealMapper setmealMapper; /** * 新增菜品 @@ -178,7 +183,18 @@ public class DishServiceImpl implements DishService { .status(status) .build(); dishMapper.update(dish); - //更新菜品所关联套餐的状态 - + //如果是改为停售,需要同时停售关联套餐 + if(status.equals(StatusConstant.DISABLE)) { + //检查是否有关联的套餐 + List setmealDishes = setmealDishMapper.selectByDishId(id); + if (setmealDishes != null && !setmealDishes.isEmpty()) { + Setmeal setmeal = new Setmeal(); + for (SetmealDish setmealDish : setmealDishes) { + setmeal.setId(setmealDish.getSetmealId()); + setmeal.setStatus(status); + setmealMapper.update(setmeal); + } + } + } } } diff --git a/sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java index 80cb928..232f933 100644 --- a/sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java +++ b/sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java @@ -10,6 +10,7 @@ import com.sky.entity.Dish; import com.sky.entity.Setmeal; import com.sky.entity.SetmealDish; import com.sky.exception.DeletionNotAllowedException; +import com.sky.mapper.DishMapper; import com.sky.mapper.SetmealDishMapper; import com.sky.mapper.SetmealMapper; import com.sky.result.PageResult; @@ -20,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; @Service @@ -29,9 +31,12 @@ public class SetmealServiceImpl implements SetmealService { private SetmealMapper setmealMapper; @Autowired private SetmealDishMapper setmealDishMapper; + @Autowired + private DishMapper dishMapper; /** * 套餐分页查询 + * * @param setmealPageQueryDTO * @return */ @@ -40,11 +45,12 @@ public class SetmealServiceImpl implements SetmealService { //设置分页 PageHelper.startPage(setmealPageQueryDTO.getPage(), setmealPageQueryDTO.getPageSize()); Page page = setmealMapper.pageQuery(setmealPageQueryDTO); - return new PageResult(page.getTotal(),page.getResult()); + return new PageResult(page.getTotal(), page.getResult()); } /** * 新增套餐 + * * @param setmealDTO */ @Override @@ -52,7 +58,7 @@ public class SetmealServiceImpl implements SetmealService { public void insert(SetmealDTO setmealDTO) { //插入套餐信息 Setmeal setmeal = new Setmeal(); - BeanUtils.copyProperties(setmealDTO,setmeal); + BeanUtils.copyProperties(setmealDTO, setmeal); setmealMapper.insert(setmeal); //插入套餐包含菜品的信息 @@ -64,6 +70,7 @@ public class SetmealServiceImpl implements SetmealService { /** * 批量删除套餐 + * * @param ids */ @Override @@ -86,6 +93,7 @@ public class SetmealServiceImpl implements SetmealService { /** * 根据id查询套餐(及关联菜品) + * * @param id * @return */ @@ -94,10 +102,66 @@ public class SetmealServiceImpl implements SetmealService { SetmealVO setmealVO = new SetmealVO(); //查询基本套餐信息 Setmeal setmeal = setmealMapper.selectById(id); - BeanUtils.copyProperties(setmeal,setmealVO); + BeanUtils.copyProperties(setmeal, setmealVO); //查询对应菜品信息 List setmealDishes = setmealDishMapper.selectBySetmealId(id); setmealVO.setSetmealDishes(setmealDishes); return setmealVO; } + + /** + * 修改套餐 + * + * @param setmealDTO + */ + @Override + @Transactional + public void updateWithSetmealDishes(SetmealDTO setmealDTO) { + //更新setmeal基本数据 + Setmeal setmeal = new Setmeal(); + BeanUtils.copyProperties(setmealDTO, setmeal); + setmealMapper.update(setmeal); + + //更新setmeal_dish数据 + //删除原setmeal_dish相关数据 + setmealDishMapper.deleteBySetmealId(setmealDTO.getId()); + //添加setmeal_id + List setmealDishes = setmealDTO.getSetmealDishes(); + setmealDishes.forEach(setmealDish -> setmealDish.setSetmealId(setmealDTO.getId())); + //插入新的数据 + setmealDishMapper.insertBatch(setmealDTO.getSetmealDishes()); + } + + /** + * 套餐起售停售 + * + * @param status + * @param id + */ + @Override + public void startOrStop(Integer status, Long id) { + //看是否为起售,如果为起售,需要判断其关联的菜品有停售状态 + if (status.equals(StatusConstant.ENABLE)) { + /* + 获取其关联的菜品信息--setmeal_dish--setmealDishes--遍历->getDishId + 先把dishId放到一个集合中,批量查询该dish_id对应且status为0的菜品信息 + 如果查询到,则抛出删除失败异常 + 如果没有,则进行下一步,改变状态 + */ + List setmealDishes = setmealDishMapper.selectBySetmealId(id); + List dishIds = new ArrayList<>(); + setmealDishes.forEach(setmealDish -> dishIds.add(setmealDish.getDishId())); + List dishes = dishMapper.selectByDishIdsAndStatusDisable(dishIds); + if (dishes != null && !dishes.isEmpty()){ + throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ENABLE_FAILED); + } + } + //不为起售则直接更改状态 + Setmeal setmeal = Setmeal.builder() + .status(status) + .id(id) + .build(); + setmealMapper.update(setmeal); + + } } diff --git a/sky-server/src/main/resources/mapper/DishMapper.xml b/sky-server/src/main/resources/mapper/DishMapper.xml index d051d33..c19a698 100644 --- a/sky-server/src/main/resources/mapper/DishMapper.xml +++ b/sky-server/src/main/resources/mapper/DishMapper.xml @@ -27,7 +27,7 @@ delete from dish where id in - #{id} + #{id} + \ No newline at end of file diff --git a/sky-server/src/main/resources/mapper/SetmealMapper.xml b/sky-server/src/main/resources/mapper/SetmealMapper.xml index 7c766e1..f8658e0 100644 --- a/sky-server/src/main/resources/mapper/SetmealMapper.xml +++ b/sky-server/src/main/resources/mapper/SetmealMapper.xml @@ -9,6 +9,20 @@ VALUES (#{categoryId}, #{name}, #{price}, #{status}, #{description}, #{image}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser}) + + update setmeal + + category_id = #{categoryId}, + description = #{description}, + image = #{image}, + name = #{name}, + price = #{price}, + status = #{status}, + update_time = #{updateTime}, + update_user = #{updateUser}, + + where id = #{id} + delete from setmeal where id in