• 瑞吉外卖(19) - 新增套餐业务开发


    效果展示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    新增套餐需求分析

    在这里插入图片描述

    数据模型 - setmeal

    在这里插入图片描述

    代码开发

    在这里插入图片描述

    搭建框架

    导入实体类SetmealDish

    package com.taotao.reggie.entity;
    
    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.TableField;
    import lombok.Data;
    import java.io.Serializable;
    import java.math.BigDecimal;
    import java.time.LocalDateTime;
    
    /**
     * 套餐菜品关系
     */
    @Data
    public class SetmealDish implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        private Long id;
    
    
        //套餐id
        private Long setmealId;
    
    
        //菜品id
        private Long dishId;
    
    
        //菜品名称 (冗余字段)
        private String name;
    
        //菜品原价
        private BigDecimal price;
    
        //份数
        private Integer copies;
    
    
        //排序
        private Integer sort;
    
    
        @TableField(fill = FieldFill.INSERT)
        private LocalDateTime createTime;
    
    
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private LocalDateTime updateTime;
    
    
        @TableField(fill = FieldFill.INSERT)
        private Long createUser;
    
    
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Long updateUser;
    
    
        //是否删除
        private Integer isDeleted;
    }
    
    

    导入SetmealDto.java

    package com.taotao.reggie.dto;
    
    import com.taotao.reggie.entity.Setmeal;
    import com.taotao.reggie.entity.SetmealDish;
    import lombok.Data;
    import java.util.List;
    
    @Data
    public class SetmealDto extends Setmeal {
    
        private List<SetmealDish> setmealDishes;
    
        private String categoryName;
    }
    
    

    新建SetmealDishMapper.java

    package com.taotao.reggie.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.taotao.reggie.entity.SetmealDish;
    import org.apache.ibatis.annotations.Mapper;
    
    /**
     * create by 刘鸿涛
     * 2022/9/25 16:20
     */
    @SuppressWarnings({"all"})
    @Mapper
    public interface SetmealDishMapper extends BaseMapper<SetmealDish> {
    
    }
    
    

    新建SetmealDishService.java

    package com.taotao.reggie.service;
    
    import com.baomidou.mybatisplus.extension.service.IService;
    import com.taotao.reggie.entity.SetmealDish;
    
    /**
     * create by 刘鸿涛
     * 2022/9/25 16:25
     */
    @SuppressWarnings({"all"})
    public interface SetmealDishService extends IService<SetmealDish> {
    }
    
    

    新建SetmealDishServiceImpl.java

    package com.taotao.reggie.service.impl;
    
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import com.taotao.reggie.entity.SetmealDish;
    import com.taotao.reggie.mapper.SetmealDishMapper;
    import com.taotao.reggie.service.SetmealDishService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Service;
    
    /**
     * create by 刘鸿涛
     * 2022/9/25 16:27
     */
    @SuppressWarnings({"all"})
    @Service
    @Slf4j
    public class SetmealDishServiceImpl extends ServiceImpl<SetmealDishMapper, SetmealDish> implements SetmealDishService {
    }
    
    

    新建SetmealController.java

    package com.taotao.reggie.controller;
    
    import com.taotao.reggie.service.SetmealDishService;
    import com.taotao.reggie.service.SetmealService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * create by 刘鸿涛
     * 2022/9/25 16:32
     */
    @SuppressWarnings({"all"})
    @RestController
    @RequestMapping("/setmeal")
    @Slf4j
    public class SetmealController {
        @Autowired
        private SetmealService setmealService;
    
        @Autowired
        private SetmealDishService setmealDishService;
    }
    
    

    梳理交互过程

    前后端一共6次交互过程
    在这里插入图片描述
    看到这里的请求时dish/list,所以我们编辑dishController.java
    在这里插入图片描述

    编写dishController.java

        /**
         * 根据条件来查询对应的菜品数据
         * @param dish
         * @return
         */
        @GetMapping("/list")
        public R<List<Dish>> list(Dish dish){
            //构造查询条件
            LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
    
            //因为传过来的时id,所以是等值查询
            queryWrapper.eq(dish.getCategoryId() != null,Dish::getCategoryId,dish.getCategoryId());
            //添加排序条件
            queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
    
            List<Dish> list = dishService.list(queryWrapper);
    
            return R.success(list);
        }
    

    功能测试

    结果正常
    在这里插入图片描述

    添加过滤条件status

    编辑DishController.java

            //添加条件,查询状态为1(起售状态)的菜品
            queryWrapper.eq(Dish::getStatus,1);
    

    测试sql

    在这里插入图片描述

    根据请求信息完善最后提交功能

    分析提交信息

    在这里插入图片描述

    编写SetmealController.java

        /**
         * 新增套餐
         * @param setmealDto
         * @return
         */
        @PostMapping    //因为是post请求所以用postmapping
        public R<String> save(@RequestBody SetmealDto setmealDto){
            log.info("套餐信息:{}",setmealDto);
            return null;
        }
    

    测试业务准确性

    在这里插入图片描述

    编写SetmealService.java

    public void saveWithDish(SetmealDto setmealDto);
    

    编写SetmealServiceImpl.java

    package com.taotao.reggie.service.impl;
    
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import com.taotao.reggie.dto.SetmealDto;
    import com.taotao.reggie.entity.Setmeal;
    import com.taotao.reggie.entity.SetmealDish;
    import com.taotao.reggie.mapper.SetmealMapper;
    import com.taotao.reggie.service.SetmealDishService;
    import com.taotao.reggie.service.SetmealService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * create by 刘鸿涛
     * 2022/6/8 8:23
     */
    @SuppressWarnings({"all"})
    @Slf4j
    @Service
    public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal> implements SetmealService {
        @Autowired
        private SetmealDishService setmealDishService;
        /**
         * 新增套餐,同时需要保存套餐和菜品的关联关系
         * @param setmealDto
         */
        @Override
        @Transactional //事务注解
        public void saveWithDish(SetmealDto setmealDto) {
    
            //保存套餐的基本信息,操作setmeal,执行insert操作
            this.save(setmealDto);
    
            List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
            setmealDishes.stream().map((item) ->{
                item.setSetmealId(setmealDto.getId());
                return item;
            }).collect(Collectors.toList());
    
            //保存套餐和菜品的关联信息,操作setmeal_dish,执行insert操作
            setmealDishService.saveBatch(setmealDishes); //saveBatch批量保存
    
    
        }
    }
    
    

    完善SetmealController.java

    在这里插入图片描述

    功能测试

    正常
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Java集合知识点
    在PHP项目中使用阿里云消息队列MQ集成RabbitMQ的完整指南与问题解决
    小米手机怎么识别图片上的表格文字?
    【qml】QML与C++混合开发总结
    一文2600字手把手教你编写性能测试用例
    微信小程序使用 MoxB 实现全局状态管理
    Java架构师系统架构设计原则
    FPGA/数字IC(芯海科技2022)面试题 2(解析版)
    ES之倒排索引
    Xilinx的TestPattern模块编译错误解决方法
  • 原文地址:https://blog.csdn.net/qq_39123467/article/details/127039035