7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)

目录

新增套餐

需求分析和设计

代码开发

根据分类id查询菜品

Controller层

Service层

ServiceImpl层

Mapper层

DishMapper.xml

新增套餐

实体类

mapper层

Service层

 ServiceImpl层

Mapper层

SetmealMapper.xml

 setmealDishMapper.xml

套餐分页查询

需求分析和设计

代码开发

设计DTO类

Controller层

Service层

ServiceImpl

Mapper

SetmealMapper.xml

功能测试


1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客

2--苍穹外卖-SpringBoot项目中员工管理 详解(一)-CSDN博客

3--苍穹外卖-SpringBoot项目中员工管理 详解(二)-CSDN博客

4--苍穹外码-SpringBoot项目中分类管理 详解-CSDN博客

5--苍穹外卖-SpringBoot项目中菜品管理 详解(一)-CSDN博客

6--苍穹外卖-SpringBoot项目中菜品管理 详解(二)-CSDN博客

新增套餐

需求分析和设计

 在页面原型中看到

业务规则:

  • 套餐名称必须是唯一的

  • 新增套餐时可以根据情况选择需要添加的菜品

  • 每个套餐必须对应一张图片

接口设计:

  • 根据类型查询分类(已完成)

  • 文件上传(已完成)

  • 新增套餐

  • 根据分类id查询菜品

代码开发

根据分类id查询菜品

Controller层
 //根据分类id查询菜品
    @GetMapping("/list")
    @ApiOperation("根据分类id查询菜品")
    public Result<List<Dish>> getByCategoryId(Long categoryId){
        log.info("根据分类id查询菜品;{}",categoryId);
        List<Dish> list=dishService.getByCategoryId(categoryId);
        return Result.success(list);
    }
Service层
 //根据分类id查询菜品
    List<Dish> getByCategoryId(Long categoryId);
ServiceImpl层
//根据分类id查询菜品
    @Override
    public List<Dish> getByCategoryId(Long categoryId) {
        return dishMapper.getByCategoryId(categoryId);
    }
Mapper层
 //根据分类id查询菜品

    List<Dish> getByCategoryId(Long categoryId);
DishMapper.xml
  <select id="getByCategoryId" resultType="com.sky.entity.Dish">
        select *from dish
        where status=1
        <if test="categoryId!=null">
            and category_id=#{categoryId}
        </if>
        order by create_time desc
    </select>

新增套餐

实体类

在sky-pojo的DTO中新建SetmealDTO

package com.sky.dto;

import com.sky.entity.SetmealDish;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Data
public class SetmealDTO implements Serializable {

    private Long id;

    //分类id
    private Long categoryId;

    //套餐名称
    private String name;

    //套餐价格
    private BigDecimal price;

    //状态 0:停用 1:启用
    private Integer status;

    //描述信息
    private String description;

    //图片
    private String image;

    //套餐菜品关系
    private List<SetmealDish> setmealDishes = new ArrayList<>();

}
mapper层

在sky-server中

//新增套餐
    @PostMapping
    @ApiOperation("新增套餐")
    public Result<String> save(@RequestBody SetmealDTO setmealDTO){
        log.info("新增套餐:{}",setmealDTO);
        setmealService.saveWithDish(setmealDTO);
        return Result.success();
    }
Service层

在sky-server中

 //新增套餐
    void saveWithDish(SetmealDTO setmealDTO);
 ServiceImpl层
 //新增套餐
    @Override
    public void saveWithDish(SetmealDTO setmealDTO) {
        Setmeal setmeal = new Setmeal();
        BeanUtils.copyProperties(setmealDTO,setmeal);

        //向套餐表中插入1条数据
        setmealMapper.insert(setmeal);

        //获取insert语句生成的主键值
        Long setmealId = setmeal.getId();

        List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();

           /* setmealDishes.forEach(setmealDish -> {
                        setmealDish.setDishId(setmealId);*/

        setmealDishes.forEach(setmealDish -> {
            setmealDish.setDishId(setmealId);
        });
        //向套餐关联的菜品表中插入n条数据
        SetmealDishMapper.insertBatch(setmealDishes);



    }
Mapper层
 //插入套餐数据
    @AutoFill(value = OperationType.INSERT)
    void insert(Setmeal setmeal);
SetmealMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.SetmealMapper">

    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into setmeal(category_id, name, price, description, image,
                    create_time, update_time, create_user, update_user)
VALUES (#{categoryId},#{name},#{price},#{description},#{image},
        #{createTime},#{updateTime},#{createUser},#{updateUser})

    </insert>
</mapper>
 setmealDishMapper.xml
<insert id="insertBatch">
        insert into setmeal_dish(setmeal_id, dish_id, name, price, copies)
        VALUES
         <foreach collection="setmealDishs" item="sd" separator=",">
             (#{sd.setmealId},#{sd.dishId},#{sd.name},#{sd.price},#{sd.copies})
         </foreach>
    </insert>

套餐分页查询

需求分析和设计

业务规则:

  • 根据页码展示菜品信息

  • 每页展示10条数据

  • 分页查询时可以根据需要输入套餐名称、套餐分类、套餐状态进行查询

代码开发

设计DTO类

根据菜品分页查询接口定义设计对应的DTO:

在sky-pojo模块中

package com.sky.dto;

import lombok.Data;

import java.io.Serializable;

@Data
public class SetmealPageQueryDTO implements Serializable {

    private int page;

    private int pageSize;

    private String name;

    //分类id
    private Integer categoryId;

    //状态 0表示禁用 1表示启用
    private Integer status;

}

Controller层

 //套餐分页查询
    @GetMapping("/page")
    @ApiOperation("套餐分页查询")
    public Result<PageResult> page(SetmealPageQueryDTO setmealPageQueryDTO){
        log.info("套餐分页查询:{}",setmealPageQueryDTO);
        PageResult pageResult=setmealService.pageQuery(setmealPageQueryDTO);
        return Result.success(pageResult);
    }

Service层

 //套餐分页查询
    PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);

ServiceImpl

//套餐分页查询
    @Override
    public PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO) {
        PageHelper.startPage(setmealPageQueryDTO.getPage(),setmealPageQueryDTO.getPageSize());
        Page<SetmealVO> page=setmealMapper.pageQuery(setmealPageQueryDTO);
        return new PageResult(page.getTotal(),page.getResult());
    }

Mapper

 //套餐分页查询
    Page<SetmealVO> pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);

SetmealMapper.xml

<select id="pageQuery" resultType="com.sky.vo.SetmealVO">
        select s.*,c.name as categoryName from setmeal s left join category c on s.category_id=c.id
        <where>
            <if test="name!=null and name!=''">
                and s.name like concat('%',#{name},'%')
            </if>

        <if test="categoryId!=null">
            and s.category_id=#{categoryId}
        </if>

                <if test="status!=null ">
                    and s.status=#{status}
                </if>
        </where>
        order by s.create_time desc
    </select>

功能测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值