当前位置: 首页 > news >正文

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

文章目录

  • 效果展示
  • 新增套餐需求分析
    • 数据模型 - setmeal
  • 代码开发
    • 搭建框架
      • 导入实体类SetmealDish
      • 导入SetmealDto.java
      • 新建SetmealDishMapper.java
      • 新建SetmealDishService.java
      • 新建SetmealDishServiceImpl.java
      • 新建SetmealController.java
    • 梳理交互过程
      • 编写dishController.java
  • 功能测试
    • 添加过滤条件status
      • 编辑DishController.java
      • 测试sql
  • 根据请求信息完善最后提交功能
    • 分析提交信息
    • 编写SetmealController.java
    • 测试业务准确性
    • 编写SetmealService.java
    • 编写SetmealServiceImpl.java
    • 完善SetmealController.java
  • 功能测试

效果展示

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

新增套餐需求分析

在这里插入图片描述

数据模型 - 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

在这里插入图片描述

功能测试

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

相关文章:

  • Android 的定位分层架构
  • 基于docker搭建es集群
  • 2.可视化基础(上)
  • 解决Vue项目中ESLint和Prettier冲突问题[Vue.js项目实践: 新冠自检系统]
  • 【misc】buu-面具下的flag——zip伪加密+用NTFS流隐藏文件
  • java毕业设计企业安全与设备管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  • Message Bus Solace Deeper Dive
  • Android-AGP之手写你的第一款自定义plugin插件
  • 入门力扣自学笔记159 C++ (题目编号788)
  • java毕业设计奇妙店铺电子商务网站源码+lw文档+mybatis+系统+mysql数据库+调试
  • 类与对象(十四)----包package
  • Codeforces Round #820 (Div. 3)A. Two Elevators
  • 实现淘宝购物车RecyclerView或LIstView的嵌套选择的逻辑
  • (pt可视化)利用torch的make_grid进行张量可视化
  • MQTT协议规范总结
  • ----------
  • 【Leetcode】101. 对称二叉树
  • 07.Android之多媒体问题
  • Android优雅地处理按钮重复点击
  • CSS 三角实现
  • CSS中外联样式表代表的含义
  • ES2017异步函数现已正式可用
  • Gradle 5.0 正式版发布
  • HTTP--网络协议分层,http历史(二)
  • PermissionScope Swift4 兼容问题
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Swoft 源码剖析 - 代码自动更新机制
  • 阿里云购买磁盘后挂载
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • - 概述 - 《设计模式(极简c++版)》
  • 高性能JavaScript阅读简记(三)
  • 什么软件可以剪辑音乐?
  • 使用Swoole加速Laravel(正式环境中)
  • 学习使用ExpressJS 4.0中的新Router
  • 延迟脚本的方式
  • 优化 Vue 项目编译文件大小
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​第20课 在Android Native开发中加入新的C++类
  • #{}和${}的区别?
  • #HarmonyOS:软件安装window和mac预览Hello World
  • $jQuery 重写Alert样式方法
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (04)odoo视图操作
  • (八)Flask之app.route装饰器函数的参数
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)使用VMware vSphere标准交换机设置网络连接
  • ***原理与防范
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core使用ef 6
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 设计模式—简单工厂(Simple Factory Pattern)