• 瑞吉外卖 —— 6、套餐管理


    1、新增套餐

    1.1、分析

    1.1.1、需求分析

    1.1.2、数据模型

    setmeal 表:

    setmeal_dish 表:

    1.1.3、准备工作

    1.1.4、交互过程

    1、获取套餐分类的请求:之前已经实现

    2、获取菜品分类的请求:之前已经实现

    3、根据菜品分类查询的请求:

    6、保存套餐信息

    1.2、代码

    1.2.1、根据分类查询菜品数据

    在 DishController 中添加方法

    1. /**
    2. * 根据条件查询菜品数据
    3. * @param dish
    4. * @return
    5. */
    6. @GetMapping("/list")
    7. public R> list(Dish dish){
    8. LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    9. queryWrapper.eq(dish.getCategoryId() != null, Dish::getCategoryId, dish.getCategoryId());
    10. queryWrapper.eq(Dish::getStatus, 1);
    11. queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
    12. List list = dishSerivce.list(queryWrapper);
    13. return R.success(list);
    14. }

    1.2.2、保存套餐信息

    ① 在 SetmealService 添加方法

    1. public interface SetmealService extends IService {
    2. /**
    3. * 新增套餐,同时保存套餐和菜品的关联关系
    4. * @param setmealDto
    5. */
    6. public void saveWithDish(SetmealDto setmealDto);
    7. }

    ② 在 SetmealServiceImpl 实现方法

    1. @Service
    2. public class SetmealServiceImpl extends ServiceImpl implements SetmealService {
    3. @Autowired
    4. private SetmealDishService setmealDishService;
    5. /**
    6. * 新增套餐,同时保存套餐和菜品的关联关系
    7. * @param setmealDto
    8. */
    9. @Transactional
    10. @Override
    11. public void saveWithDish(SetmealDto setmealDto) {
    12. // 保存套餐基本信息
    13. this.save(setmealDto);
    14. // 保存套餐和菜品的关联信息
    15. List setmealDishes = setmealDto.getSetmealDishes();
    16. setmealDishes.stream().map((item) -> {
    17. item.setSetmealId(setmealDto.getId());
    18. return item;
    19. }).collect(Collectors.toList());
    20. setmealDishService.saveBatch(setmealDishes);
    21. }
    22. }

    ③ 在 SetmealController 使用方法

    1. @RestController
    2. @RequestMapping("/setmeal")
    3. @Slf4j
    4. public class SetmealController {
    5. @Autowired
    6. private SetmealService setmealService;
    7. @Autowired
    8. private SetmealDishService setmealDishService;
    9. /**
    10. * 新增套餐
    11. * @param setmealDto
    12. * @return
    13. */
    14. @PostMapping
    15. public R save(@RequestBody SetmealDto setmealDto){
    16. setmealService.saveWithDish(setmealDto);
    17. return R.success("新增套餐成功");
    18. }
    19. }

    2、套餐信息分页查询

    2.1、分析

    2.1.1、需求分析

    2.1.2、交互过程

    获取分页信息的请求:

    3、批量停售或启售套餐

    3.1、分析

    单个改变:

    批量改变: 

    3.2、代码

    1. /**
    2. * 批量修改套餐停售和启售
    3. * @param status
    4. * @param ids
    5. * @return
    6. */
    7. @PostMapping("/status/{status}")
    8. public R updateStatus(
    9. @PathVariable("status") int status,
    10. @RequestParam List ids
    11. ){
    12. List setmeals = new ArrayList<>();
    13. for (Long id : ids) {
    14. Setmeal setmeal = new Setmeal();
    15. setmeal.setStatus(status);
    16. setmeal.setId(id);
    17. setmeals.add(setmeal);
    18. }
    19. setmealService.updateBatchById(setmeals);
    20. return R.success("套餐状态修改成功");
    21. }

    4、删除套餐

    4.1、分析

    4.1.1、需求分析

    4.1.2、交互过程

    单个删除:

    批量删除

    4.2、代码

    ① 在 SetmealService 中添加方法

    1. /**
    2. * 删除套餐,同时删除套餐和菜品的关联数据
    3. * @param ids
    4. */
    5. public void removeWithDish(List ids);

    ② 在 SetmealServiceImpl 中实现方法

    1. /**
    2. * 删除套餐,同时删除套餐和菜品的关联数据
    3. * @param ids
    4. */
    5. @Override
    6. @Transactional
    7. public void removeWithDish(List ids) {
    8. // 查询套餐状态,确定是否可以删除
    9. LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    10. queryWrapper.in(Setmeal::getId, ids);
    11. queryWrapper.eq(Setmeal::getStatus, 1);
    12. int count = this.count(queryWrapper);
    13. if(count > 0){
    14. throw new CustomException("套餐正在售卖中,无法删除");
    15. }
    16. // 可以删除,先删除套餐表中的数据
    17. this.removeByIds(ids);
    18. // 删除关系表中的数据
    19. LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
    20. wrapper.in(SetmealDish::getSetmealId, ids);
    21. setmealDishService.remove(wrapper);
    22. }

    ③ 在 SetmealController 中使用方法

    1. /**
    2. * 批量删除套餐
    3. * @param ids
    4. * @return
    5. */
    6. @DeleteMapping
    7. public R delete(@RequestParam List ids){
    8. setmealService.removeWithDish(ids);
    9. return R.success("套餐数据删除成功");
    10. }

  • 相关阅读:
    Shell脚本之正则表达式详解
    【信号去噪】基于硬阈值、软阈值、半软阈值、Maxmin阈值、Garrote阈值小波变换实现心音去噪附matlab代码
    编程小白的自学笔记十七(python办公自动化操作EXCEL表格之作图)
    网鼎杯网络安全大赛玄武组_经典的一道CTF-WriteUP-SSRFME
    3D感知(一):初步认识
    华钜同创:亚马逊跨境电商平台六大营销策略
    【WebRTC】QoS 拥塞控制 GCC 理论 Sender Side BWE 或 REMB
    解决SpringBoot项目端口被占用的问题
    MySQL的存储引擎
    人类与机器:如何让身体与植入物长期共存?少突胶质细胞也许是答案
  • 原文地址:https://blog.csdn.net/Mr_zhangyj/article/details/126686603