From 6c35434793a85162cca44e3a8178d474aee36f7e Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Tue, 11 Nov 2025 16:24:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8B=8D=E7=A9=B9=E5=A4=96=E5=8D=96--=E5=A5=97?= =?UTF-8?q?=E9=A4=90=E7=AE=A1=E7=90=86--=E5=85=A8=E9=83=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sky/controller/admin/DishController.java | 13 ++ .../controller/admin/SetmealController.java | 103 +++++++++++ .../main/java/com/sky/mapper/DishMapper.java | 16 +- .../com/sky/mapper/SetmealDishMapper.java | 24 +++ .../java/com/sky/mapper/SetmealMapper.java | 41 +++++ .../java/com/sky/service/DishService.java | 8 + .../java/com/sky/service/SetmealService.java | 50 +++++ .../com/sky/service/impl/DishServiceImpl.java | 13 ++ .../sky/service/impl/SetmealServiceImpl.java | 171 ++++++++++++++++++ .../src/main/resources/mapper/DishMapper.xml | 16 ++ .../resources/mapper/SetmealDishMapper.xml | 9 + .../main/resources/mapper/SetmealMapper.xml | 64 +++++++ 12 files changed, 527 insertions(+), 1 deletion(-) create mode 100644 sky-server/src/main/java/com/sky/controller/admin/SetmealController.java create mode 100644 sky-server/src/main/java/com/sky/service/SetmealService.java create mode 100644 sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java create mode 100644 sky-server/src/main/resources/mapper/SetmealMapper.xml 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 023ce07..fa1bae3 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 @@ -2,6 +2,7 @@ package com.sky.controller.admin; import com.sky.dto.DishDTO; import com.sky.dto.DishPageQueryDTO; +import com.sky.entity.Dish; import com.sky.result.PageResult; import com.sky.result.Result; import com.sky.service.DishService; @@ -77,4 +78,16 @@ public class DishController { dishService.startOrStop(status,id); return Result.success(); } + + /** + * 根据分类id查询菜品 + * @param categoryId + * @return + */ + @GetMapping("/list") + @ApiOperation("根据分类id查询菜品") + public Result> list(Long categoryId){ + List list = dishService.list(categoryId); + return Result.success(list); + } } 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 new file mode 100644 index 0000000..844a669 --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/admin/SetmealController.java @@ -0,0 +1,103 @@ +package com.sky.controller.admin; + +import com.sky.dto.SetmealDTO; +import com.sky.dto.SetmealPageQueryDTO; +import com.sky.result.PageResult; +import com.sky.result.Result; +import com.sky.service.SetmealService; +import com.sky.vo.SetmealVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 套餐管理 + */ +@RestController +@RequestMapping("/admin/setmeal") +@Api(tags = "套餐相关接口") +@Slf4j +public class SetmealController { + + @Autowired + private SetmealService setmealService; + + /** + * 新增套餐 + * @param setmealDTO + * @return + */ + @PostMapping + @ApiOperation("新增套餐") + public Result save(@RequestBody SetmealDTO setmealDTO) { + setmealService.saveWithDish(setmealDTO); + return Result.success(); + } + + /** + * 分页查询 + * @param setmealPageQueryDTO + * @return + */ + @GetMapping("/page") + @ApiOperation("分页查询") + public Result page(SetmealPageQueryDTO setmealPageQueryDTO) { + PageResult pageResult = setmealService.pageQuery(setmealPageQueryDTO); + return Result.success(pageResult); + } + + /** + * 批量删除套餐 + * @param ids + * @return + */ + @DeleteMapping + @ApiOperation("批量删除套餐") + public Result delete(@RequestParam List ids){ + setmealService.deleteBatch(ids); + return Result.success(); + } + + /** + * 根据id查询套餐,用于修改页面回显数据 + * + * @param id + * @return + */ + @GetMapping("/{id}") + @ApiOperation("根据id查询套餐") + public Result getById(@PathVariable Long id) { + SetmealVO setmealVO = setmealService.getByIdWithDish(id); + return Result.success(setmealVO); + } + + /** + * 修改套餐 + * + * @param setmealDTO + * @return + */ + @PutMapping + @ApiOperation("修改套餐") + public Result update(@RequestBody SetmealDTO setmealDTO) { + setmealService.update(setmealDTO); + return Result.success(); + } + + /** + * 套餐起售停售 + * @param status + * @param id + * @return + */ + @PostMapping("/status/{status}") + @ApiOperation("套餐起售停售") + public Result startOrStop(@PathVariable Integer status, Long id) { + setmealService.startOrStop(status, id); + return Result.success(); + } +} \ No newline at end of file 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 51fa5ae..b7040bb 100644 --- a/sky-server/src/main/java/com/sky/mapper/DishMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/DishMapper.java @@ -58,5 +58,19 @@ public interface DishMapper { @AutoFill(OperationType.UPDATE) void update(Dish dish); - void startOrStop(Integer status, Long id); + + /** + * 动态条件查询菜品 + * @param dish + * @return + */ + List list(Dish dish); + + /** + * 根据套餐id查询菜品 + * @param setmealId + * @return + */ + @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); } 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 c034016..5af62c6 100644 --- a/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java @@ -1,6 +1,9 @@ package com.sky.mapper; +import com.sky.entity.SetmealDish; +import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -17,4 +20,25 @@ public interface SetmealDishMapper { * @return */ List getSetmealIdsByDishIds(List ids); + + /** + * 批量保存套餐和菜品的关联关系 + * @param setmealDishes + */ + void insertBatch(List setmealDishes); + + /** + * 根据套餐id删除套餐和菜品的关联关系 + * @param setmealId + */ + @Delete("delete from setmeal_dish where setmeal_id = #{setmealId}") + void deleteBySetmealId(Long setmealId); + + /** + * 根据套餐id查询套餐和菜品的关联关系 + * @param setmealId + * @return + */ + @Select("select * from setmeal_dish where setmeal_id = #{setmealId}") + List getBySetmealId(Long setmealId); } 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 03cfee7..d0a7a25 100644 --- a/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/SetmealMapper.java @@ -1,5 +1,12 @@ package com.sky.mapper; +import com.github.pagehelper.Page; +import com.sky.annotation.AutoFill; +import com.sky.dto.SetmealPageQueryDTO; +import com.sky.entity.Setmeal; +import com.sky.enumeration.OperationType; +import com.sky.vo.SetmealVO; +import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -14,4 +21,38 @@ public interface SetmealMapper { @Select("select count(id) from setmeal where category_id = #{categoryId}") Integer countByCategoryId(Long id); + /** + * 新增套餐 + * @param setmeal + */ + @AutoFill(OperationType.INSERT) + void insert(Setmeal setmeal); + + /** + * 分页查询 + * @param setmealPageQueryDTO + * @return + */ + Page pageQuery(SetmealPageQueryDTO setmealPageQueryDTO); + + /** + * 根据id查询套餐 + * @param id + * @return + */ + @Select("select * from setmeal where id = #{id}") + Setmeal getById(Long id); + + /** + * 根据id删除套餐 + * @param setmealId + */ + @Delete("delete from setmeal where id = #{id}") + void deleteById(Long setmealId); + + /** + * 更新套餐 + * @param setmeal + */ + void update(Setmeal setmeal); } 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 70aa552..b76b210 100644 --- a/sky-server/src/main/java/com/sky/service/DishService.java +++ b/sky-server/src/main/java/com/sky/service/DishService.java @@ -2,6 +2,7 @@ package com.sky.service; import com.sky.dto.DishDTO; import com.sky.dto.DishPageQueryDTO; +import com.sky.entity.Dish; import com.sky.result.PageResult; import com.sky.vo.DishVO; @@ -45,4 +46,11 @@ public interface DishService { * @param id */ void startOrStop(Integer status, Long id); + + /** + * 根据分类id查询菜品 + * @param categoryId + * @return + */ + List list(Long categoryId); } diff --git a/sky-server/src/main/java/com/sky/service/SetmealService.java b/sky-server/src/main/java/com/sky/service/SetmealService.java new file mode 100644 index 0000000..b957bd4 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/SetmealService.java @@ -0,0 +1,50 @@ +package com.sky.service; + +import com.sky.dto.SetmealDTO; +import com.sky.dto.SetmealPageQueryDTO; +import com.sky.result.PageResult; +import com.sky.vo.SetmealVO; + +import java.util.List; + +public interface SetmealService { + + /** + * 新增套餐,同时需要保存套餐和菜品的关联关系 + * @param setmealDTO + */ + void saveWithDish(SetmealDTO setmealDTO); + + /** + * 分页查询 + * @param setmealPageQueryDTO + * @return + */ + PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO); + + /** + * 批量删除套餐 + * @param ids + */ + void deleteBatch(List ids); + + /** + * 根据id查询套餐和关联的菜品数据 + * @param id + * @return + */ + SetmealVO getByIdWithDish(Long id); + + /** + * 修改套餐 + * @param setmealDTO + */ + void update(SetmealDTO setmealDTO); + + /** + * 套餐起售、停售 + * @param status + * @param id + */ + void startOrStop(Integer status, Long id); +} \ No newline at end of file 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 af212c6..895e271 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 @@ -148,4 +148,17 @@ public class DishServiceImpl implements DishService { Dish dish = Dish.builder().id(id).status(status).build(); dishMapper.update(dish); } + + /** + * 根据分类id查询菜品 + * @param categoryId + * @return + */ + public List list(Long categoryId) { + Dish dish = Dish.builder() + .categoryId(categoryId) + .status(StatusConstant.ENABLE) + .build(); + return dishMapper.list(dish); + } } 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 new file mode 100644 index 0000000..263487c --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/impl/SetmealServiceImpl.java @@ -0,0 +1,171 @@ +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.SetmealDTO; +import com.sky.dto.SetmealPageQueryDTO; +import com.sky.entity.Dish; +import com.sky.entity.Setmeal; +import com.sky.entity.SetmealDish; +import com.sky.exception.DeletionNotAllowedException; +import com.sky.exception.SetmealEnableFailedException; +import com.sky.mapper.DishMapper; +import com.sky.mapper.SetmealDishMapper; +import com.sky.mapper.SetmealMapper; +import com.sky.result.PageResult; +import com.sky.service.SetmealService; +import com.sky.vo.SetmealVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 套餐业务实现 + */ +@Service +@Slf4j +public class SetmealServiceImpl implements SetmealService { + + @Autowired + private SetmealMapper setmealMapper; + @Autowired + private SetmealDishMapper setmealDishMapper; + @Autowired + private DishMapper dishMapper; + + /** + * 新增套餐,同时需要保存套餐和菜品的关联关系 + * @param setmealDTO + */ + @Transactional + public void saveWithDish(SetmealDTO setmealDTO) { + Setmeal setmeal = new Setmeal(); + BeanUtils.copyProperties(setmealDTO, setmeal); + + //向套餐表插入数据 + setmealMapper.insert(setmeal); + + //获取生成的套餐id + Long setmealId = setmeal.getId(); + + List setmealDishes = setmealDTO.getSetmealDishes(); + setmealDishes.forEach(setmealDish -> { + setmealDish.setSetmealId(setmealId); + }); + + //保存套餐和菜品的关联关系 + setmealDishMapper.insertBatch(setmealDishes); + } + + /** + * 分页查询 + * @param setmealPageQueryDTO + * @return + */ + public PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO) { + int pageNum = setmealPageQueryDTO.getPage(); + int pageSize = setmealPageQueryDTO.getPageSize(); + + PageHelper.startPage(pageNum, pageSize); + Page page = setmealMapper.pageQuery(setmealPageQueryDTO); + return new PageResult(page.getTotal(), page.getResult()); + } + + /** + * 批量删除套餐 + * @param ids + */ + @Transactional + public void deleteBatch(List ids) { + ids.forEach(id -> { + Setmeal setmeal = setmealMapper.getById(id); + if(StatusConstant.ENABLE == setmeal.getStatus()){ + //起售中的套餐不能删除 + throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE); + } + }); + + ids.forEach(setmealId -> { + //删除套餐表中的数据 + setmealMapper.deleteById(setmealId); + //删除套餐菜品关系表中的数据 + setmealDishMapper.deleteBySetmealId(setmealId); + }); + } + + /** + * 根据id查询套餐和套餐菜品关系 + * + * @param id + * @return + */ + public SetmealVO getByIdWithDish(Long id) { + Setmeal setmeal = setmealMapper.getById(id); + List setmealDishes = setmealDishMapper.getBySetmealId(id); + + SetmealVO setmealVO = new SetmealVO(); + BeanUtils.copyProperties(setmeal, setmealVO); + setmealVO.setSetmealDishes(setmealDishes); + + return setmealVO; + } + + /** + * 修改套餐 + * + * @param setmealDTO + */ + @Transactional + public void update(SetmealDTO setmealDTO) { + Setmeal setmeal = new Setmeal(); + BeanUtils.copyProperties(setmealDTO, setmeal); + + //1、修改套餐表,执行update + setmealMapper.update(setmeal); + + //套餐id + Long setmealId = setmealDTO.getId(); + + //2、删除套餐和菜品的关联关系,操作setmeal_dish表,执行delete + setmealDishMapper.deleteBySetmealId(setmealId); + + List setmealDishes = setmealDTO.getSetmealDishes(); + setmealDishes.forEach(setmealDish -> { + setmealDish.setSetmealId(setmealId); + }); + //3、重新插入套餐和菜品的关联关系,操作setmeal_dish表,执行insert + setmealDishMapper.insertBatch(setmealDishes); + } + + /** + * 套餐起售、停售 + * @param status + * @param id + */ + public void startOrStop(Integer status, Long id) { + //起售套餐时,判断套餐内是否有停售菜品,有停售菜品提示"套餐内包含未启售菜品,无法启售" + if(status == StatusConstant.ENABLE){ + //select a.* from dish a left join setmeal_dish b on a.id = b.dish_id where b.setmeal_id = ? + List dishList = dishMapper.getBySetmealId(id); + if(dishList != null && dishList.size() > 0){ + dishList.forEach(dish -> { + if(StatusConstant.DISABLE == dish.getStatus()){ + throw new SetmealEnableFailedException(MessageConstant.SETMEAL_ENABLE_FAILED); + } + }); + } + } + + Setmeal setmeal = Setmeal.builder() + .id(id) + .status(status) + .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 3cbb36b..19c9b62 100644 --- a/sky-server/src/main/resources/mapper/DishMapper.xml +++ b/sky-server/src/main/resources/mapper/DishMapper.xml @@ -48,4 +48,20 @@ where id = #{id} + + diff --git a/sky-server/src/main/resources/mapper/SetmealDishMapper.xml b/sky-server/src/main/resources/mapper/SetmealDishMapper.xml index 6f9a290..3610504 100644 --- a/sky-server/src/main/resources/mapper/SetmealDishMapper.xml +++ b/sky-server/src/main/resources/mapper/SetmealDishMapper.xml @@ -7,4 +7,13 @@ #{id} + + + insert into setmeal_dish + (setmeal_id,dish_id,name,price,copies) + values + + (#{sd.setmealId},#{sd.dishId},#{sd.name},#{sd.price},#{sd.copies}) + + \ 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 new file mode 100644 index 0000000..915b173 --- /dev/null +++ b/sky-server/src/main/resources/mapper/SetmealMapper.xml @@ -0,0 +1,64 @@ + + + + + insert into setmeal + (category_id, name, price, status, description, image, create_time, update_time, create_user, update_user) + values (#{categoryId}, #{name}, #{price}, #{status}, #{description}, #{image}, #{createTime}, #{updateTime}, + #{createUser}, #{updateUser}) + + + + + + update setmeal + + + name = #{name}, + + + category_id = #{categoryId}, + + + price = #{price}, + + + status = #{status}, + + + description = #{description}, + + + image = #{image}, + + + update_time = #{updateTime}, + + + update_user = #{updateUser} + + + where id = #{id} + + \ No newline at end of file