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 d279c41..78f818c 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 @@ -28,7 +28,7 @@ public class DishController { @ApiOperation("新增菜品") public Result addDish(@RequestBody DishDTO dishDTO){ log.info("新增菜品"); - dishService.addDish(dishDTO); + dishService.saveWithFlavor(dishDTO); //清理缓存数据 String key = "dish_" + dishDTO.getCategoryId(); @@ -43,7 +43,7 @@ public class DishController { } @DeleteMapping @ApiOperation("删除菜品") - public Result deleteDish(Long[] ids){ + public Result deleteDish(@RequestParam List ids){ log.info("批量删除菜品"); dishService.deleteBatch(ids); @@ -54,14 +54,14 @@ public class DishController { @GetMapping("/{id}") @ApiOperation("根据id查询菜品") public Result queryByIdWithFlavor(@PathVariable Long id){ - DishVO dishVO=dishService.queryByIdWithFlavor(id); + DishVO dishVO=dishService.getByIdWithFlavor(id); return Result.success(dishVO); } @PutMapping @ApiOperation("更新菜品") public Result update(@RequestBody DishDTO dishDTO){ - log.info("修改菜品:{}", dishDTO); - dishService.update(dishDTO); + log.info("更新菜品:{}", dishDTO); + dishService.updateWithFlavor(dishDTO); //将所有的菜品缓存数据清理掉,所有以dish_开头的key cleanCache("dish_*"); @@ -78,12 +78,11 @@ public class DishController { } @GetMapping("/list") @ApiOperation("根据分类id查询菜品") - public Result> list(Long categoryId){ - Dish dish=new Dish(); - dish.setCategoryId(categoryId); - List dishList=dishService.list(dish); - return Result.success(dishList); + public Result> list(Long categoryId) { + List list = dishService.list(categoryId); + return Result.success(list); } + private void cleanCache(String pattern){ Set keys = redisTemplate.keys(pattern); redisTemplate.delete(keys); 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 e7d39fe..aab5abe 100644 --- a/sky-server/src/main/java/com/sky/mapper/DishFlavorMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/DishFlavorMapper.java @@ -14,6 +14,6 @@ public interface DishFlavorMapper { @Delete("delete from dish_flavor where dish_id=#{id}") void deleteByDishId(Long id); @Select("select * from dish_flavor where dish_id=#{id}") - List queryByDishId(Long id); + List getByDishId(Long id); } 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 6ace588..fb000a3 100644 --- a/sky-server/src/main/java/com/sky/mapper/DishMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/DishMapper.java @@ -1,5 +1,6 @@ package com.sky.mapper; +import com.github.pagehelper.Page; import com.sky.annotation.AutoFill; import com.sky.dto.DishPageQueryDTO; import com.sky.entity.Dish; @@ -13,23 +14,43 @@ import java.util.List; @Mapper public interface DishMapper { + /** + * 插入菜品数据 + */ @AutoFill(OperationType.INSERT) void insert(Dish dish); + /** + * 根据主键查询菜品 + */ + @Select("select * from dish where id=#{id}") + Dish getById(Long id); /** - * 分类查询 - * @param dishPageQueryDTO - * @return + * 根据主键删除菜品数据 */ - List list(DishPageQueryDTO dishPageQueryDTO); - - @Select("select * from dish where id=#{id}") - Dish queryById(Long id); @Delete("delete from dish where id=#{id}") void deleteById(Long id); + + /** + * 根据id动态修改菜品数据 + */ @AutoFill(OperationType.UPDATE) void update(Dish dish); - List listByType(Dish dish); + + /** + * 动态条件查询菜品 + */ + List list(Dish dish); + + + /** + * 根据套餐id查询菜品 + */ @Select("select a.* from dish a left join setmeal_dish b on a.id = b.dish_id where b.setmeal_id = #{setmealId}") List getBySetmealId(Long setmealId); + + /** + * 菜品分页查询 + */ + Page pageQuery(DishPageQueryDTO dishPageQueryDTO); } diff --git a/sky-server/src/main/java/com/sky/mapper/Setmeal_dishMapper.java b/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java similarity index 59% rename from sky-server/src/main/java/com/sky/mapper/Setmeal_dishMapper.java rename to sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java index 7b79e7f..6942a60 100644 --- a/sky-server/src/main/java/com/sky/mapper/Setmeal_dishMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java @@ -8,9 +8,9 @@ import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper -public interface Setmeal_dishMapper { - @Select("select setmeal_id from setmeal_dish where dish_id=#{id}") - List queryByDishId(Long id); +public interface SetmealDishMapper { +// @Select("select setmeal_id from setmeal_dish where dish_id=#{id}") +// List queryByDishId(Long id); void add(SetmealDish setmealDish); @Delete("delete from setmeal_dish where setmeal_id=#{id}") @@ -18,4 +18,10 @@ public interface Setmeal_dishMapper { @Select("select * from setmeal_dish where setmeal_id = #{setmealId}") List getBySetmealId(Long setmealId); + + /** + * 根据菜品id查询对应的套餐id + */ + //select setmeal_id from setmeal_dish where dish_id in (1,2,3,4) + List getSetmealIdsByDishIds(List dishIds); } 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 528b3a8..6e0938e 100644 --- a/sky-server/src/main/java/com/sky/service/DishService.java +++ b/sky-server/src/main/java/com/sky/service/DishService.java @@ -9,19 +9,19 @@ import com.sky.vo.DishVO; import java.util.List; public interface DishService { - void addDish(DishDTO dishDTO); + void saveWithFlavor(DishDTO dishDTO); PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO); - void deleteBatch(Long[] ids); + void deleteBatch(List ids); - DishVO queryByIdWithFlavor(Long id); + DishVO getByIdWithFlavor(Long id); - void update(DishDTO dishDTO); + void updateWithFlavor(DishDTO dishDTO); void startOrStop(Integer status, Long id); - List list(Dish dish); + List list(Long categoryId); List listWithFlavor(Dish dish); } 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 1c62de2..0584e5b 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 @@ -9,13 +9,11 @@ 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.exception.SetmealEnableFailedException; import com.sky.mapper.DishFlavorMapper; import com.sky.mapper.DishMapper; import com.sky.mapper.SetmealMapper; -import com.sky.mapper.Setmeal_dishMapper; +import com.sky.mapper.SetmealDishMapper; import com.sky.result.PageResult; import com.sky.service.DishService; import com.sky.vo.DishVO; @@ -34,66 +32,96 @@ public class DishServiceImpl implements DishService { @Autowired private DishFlavorMapper dishFlavorMapper; @Autowired - private Setmeal_dishMapper setmeal_dishMapper; + private SetmealDishMapper setmealDishMapper; @Autowired private SetmealMapper setmealMapper; @Override - public void addDish(DishDTO dishDTO) { + /** + * 新增菜品和对应的口味 + */ + @Transactional //对两表及以上表操作时需添加@Transactional + public void saveWithFlavor(DishDTO dishDTO) { Dish dish=new Dish(); BeanUtils.copyProperties(dishDTO,dish); + //向菜品表插入1条数据 dishMapper.insert(dish); - Long dishId=dish.getId(); - List flavorList=dishDTO.getFlavors(); - for(DishFlavor flavor:flavorList){ - flavor.setDishId(dishId); - } - dishFlavorMapper.insertBatch(flavorList); - } + //获取insert语句生成的主键值 + Long dishId=dish.getId(); + List flavors=dishDTO.getFlavors(); + if (flavors != null && flavors.size() > 0) { + flavors.forEach(dishFlavor -> { + dishFlavor.setDishId(dishId); + }); + //向口味表插入n条数据 + dishFlavorMapper.insertBatch(flavors);//后绪步骤实现 + } + } + /** + * 菜品分页查询 + */ @Override public PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO) { - PageHelper.startPage(dishPageQueryDTO.getPage(),dishPageQueryDTO.getPageSize()); - List dishVOList=dishMapper.list(dishPageQueryDTO); - Page p= (Page) dishVOList; - PageResult pageResult=new PageResult(p.getTotal(),p.getResult()); - return pageResult; + PageHelper.startPage(dishPageQueryDTO.getPage(), dishPageQueryDTO.getPageSize()); + Page page = dishMapper.pageQuery(dishPageQueryDTO); + return new PageResult(page.getTotal(), page.getResult()); } + /** + * 菜品批量删除 + */ @Override @Transactional - public void deleteBatch(Long[] ids) { - for(Long id:ids){ - Dish dish=dishMapper.queryById(id); - if(dish.getStatus()== StatusConstant.ENABLE) + public void deleteBatch(List ids) { + for (Long id : ids) { + Dish dish = dishMapper.getById(id);//后绪步骤实现 + if (dish.getStatus() == StatusConstant.ENABLE) { + //当前菜品处于起售中,不能删除 throw new DeletionNotAllowedException(MessageConstant.DISH_ON_SALE); - else{ - List setmealids=setmeal_dishMapper.queryByDishId(id); - if(setmealids!=null && setmealids.size() > 0) - throw new DeletionNotAllowedException(MessageConstant.DISH_BE_RELATED_BY_SETMEAL); - else { - dishMapper.deleteById(id); - dishFlavorMapper.deleteByDishId(id); - } } } + //判断当前菜品是否能够删除---是否被套餐关联了?? + List setmealIds = setmealDishMapper.getSetmealIdsByDishIds(ids); + if (setmealIds != null && setmealIds.size() > 0) { + //当前菜品被套餐关联了,不能删除 + throw new DeletionNotAllowedException(MessageConstant.DISH_BE_RELATED_BY_SETMEAL); + } + //删除菜品表中的菜品数据 + for (Long id : ids) { + dishMapper.deleteById(id);//后绪步骤实现 + //删除菜品关联的口味数据 + dishFlavorMapper.deleteByDishId(id);//后绪步骤实现 + } } - + /** + * 根据id查询菜品和对应的口味数据 + */ @Override - public DishVO queryByIdWithFlavor(Long id) { - Dish dish=dishMapper.queryById(id); + public DishVO getByIdWithFlavor(Long id) { + //根据id查询菜品数据 + Dish dish=dishMapper.getById(id); + //根据菜品id查询口味数据 + List dishFlavors=dishFlavorMapper.getByDishId(id); + //将查询到的数据封装到VO DishVO dishVO=new DishVO(); BeanUtils.copyProperties(dish,dishVO); - List dishFlavors=dishFlavorMapper.queryByDishId(id); dishVO.setFlavors(dishFlavors); + return dishVO; } - + /** + * 根据id修改菜品基本信息和对应的口味信息 + */ @Override - public void update(DishDTO dishDTO) { + public void updateWithFlavor(DishDTO dishDTO) { Dish dish=new Dish(); BeanUtils.copyProperties(dishDTO,dish); + //修改菜品表基本信息 dishMapper.update(dish); - dishFlavorMapper.deleteByDishId(dishDTO.getId()); //先删再添加口味,不要在原来的上面修改!原来可能2种口味,现在3种,也无法修改! + + //删除原有的口味数据 + dishFlavorMapper.deleteByDishId(dishDTO.getId()); + //重新插入口味数据 List flavors = dishDTO.getFlavors(); if (flavors != null && flavors.size() > 0) { flavors.forEach(dishFlavor -> { @@ -105,27 +133,41 @@ public class DishServiceImpl implements DishService { } @Override + @Transactional public void startOrStop(Integer status, Long id) { - Dish dish=new Dish(); - dish.setId(id); - dish.setStatus(status); - if(status==StatusConstant.DISABLE){ //如果菜品停售,正在起售的套餐也要停售 - List setmealids=setmeal_dishMapper.queryByDishId(id); - for(Long setmealid:setmealids){ - Setmeal setmeal=setmealMapper.getById(setmealid); - if(StatusConstant.ENABLE == setmeal.getStatus()){ //若菜品停售,则套餐起售失败! - setmeal.setStatus(StatusConstant.DISABLE); + Dish dish = Dish.builder() + .id(id) + .status(status) + .build(); + dishMapper.update(dish); + + if (status == StatusConstant.DISABLE) { + // 如果是停售操作,还需要将包含当前菜品的套餐也停售 + List dishIds = new ArrayList<>(); + dishIds.add(id); + // select setmeal_id from setmeal_dish where dish_id in (?,?,?) + List setmealIds = setmealDishMapper.getSetmealIdsByDishIds(dishIds); + if (setmealIds != null && setmealIds.size() > 0) { + for (Long setmealId : setmealIds) { + Setmeal setmeal = Setmeal.builder() + .id(setmealId) + .status(StatusConstant.DISABLE) + .build(); setmealMapper.update(setmeal); } } } - dishMapper.update(dish); } - + /** + * 根据分类id查询菜品 + */ @Override - public List list(Dish dish) { - List dishList=dishMapper.listByType(dish); - return dishList; + public List list(Long categoryId) { + Dish dish = Dish.builder() + .categoryId(categoryId) + .status(StatusConstant.ENABLE) + .build(); + return dishMapper.list(dish); } @Override @@ -135,7 +177,7 @@ public class DishServiceImpl implements DishService { * @return */ public List listWithFlavor(Dish dish) { - List dishList = dishMapper.listByType(dish); + List dishList = dishMapper.list(dish); List dishVOList = new ArrayList<>(); @@ -144,7 +186,7 @@ public class DishServiceImpl implements DishService { BeanUtils.copyProperties(d,dishVO); //根据菜品id查询对应的口味 - List flavors = dishFlavorMapper.queryByDishId(d.getId()); + List flavors = dishFlavorMapper.getByDishId(d.getId()); dishVO.setFlavors(flavors); dishVOList.add(dishVO); 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 46d6f27..15226d5 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 @@ -13,7 +13,7 @@ import com.sky.exception.DeletionNotAllowedException; import com.sky.exception.SetmealEnableFailedException; import com.sky.mapper.DishMapper; import com.sky.mapper.SetmealMapper; -import com.sky.mapper.Setmeal_dishMapper; +import com.sky.mapper.SetmealDishMapper; import com.sky.result.PageResult; import com.sky.service.SetmealService; import com.sky.vo.DishItemVO; @@ -30,7 +30,7 @@ public class SetmealServiceImpl implements SetmealService { @Autowired private SetmealMapper setmealMapper; @Autowired - private Setmeal_dishMapper setmeal_dishMapper; + private SetmealDishMapper setmeal_dishMapper; @Autowired private DishMapper dishMapper; @Override diff --git a/sky-server/src/main/java/com/sky/service/impl/ShoppingCartServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/ShoppingCartServiceImpl.java index 21f6815..fce5bce 100644 --- a/sky-server/src/main/java/com/sky/service/impl/ShoppingCartServiceImpl.java +++ b/sky-server/src/main/java/com/sky/service/impl/ShoppingCartServiceImpl.java @@ -43,7 +43,7 @@ public class ShoppingCartServiceImpl implements ShoppingCartService { Long dishId = shoppingCartDTO.getDishId(); if (dishId != null) { //添加到购物车的是菜品 - Dish dish = dishMapper.queryById(dishId); + Dish dish = dishMapper.getById(dishId); shoppingCart.setName(dish.getName()); shoppingCart.setImage(dish.getImage()); shoppingCart.setAmount(dish.getPrice()); diff --git a/sky-server/src/main/resources/mapper/DishMapper.xml b/sky-server/src/main/resources/mapper/DishMapper.xml index 595a9b5..a82798a 100644 --- a/sky-server/src/main/resources/mapper/DishMapper.xml +++ b/sky-server/src/main/resources/mapper/DishMapper.xml @@ -6,21 +6,6 @@ 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}) - + select d.* , c.name as categoryName from dish d left outer join category c on d.category_id = c.id + + + and d.name like concat('%',#{name},'%') + + + and d.category_id = #{categoryId} + + + and d.status = #{status} + + + order by d.create_time desc + + \ No newline at end of file diff --git a/sky-server/src/main/resources/mapper/Setmeal_dishMapper.xml b/sky-server/src/main/resources/mapper/SetmealDishMapper.xml similarity index 51% rename from sky-server/src/main/resources/mapper/Setmeal_dishMapper.xml rename to sky-server/src/main/resources/mapper/SetmealDishMapper.xml index 3016750..f5ac6c9 100644 --- a/sky-server/src/main/resources/mapper/Setmeal_dishMapper.xml +++ b/sky-server/src/main/resources/mapper/SetmealDishMapper.xml @@ -1,10 +1,16 @@ - + insert into setmeal_dish (setmeal_id,dish_id,name,price,copies) values (#{setmealId},#{dishId},#{name},#{price},#{copies}) + \ No newline at end of file