黑马瑞吉外卖之新增菜品

前端页面分析以及需求分析

接下来我们去完成新增菜品的功能。首先还是来看前端页面。
新增菜品这个功能自然是在菜品的前端功能界面。
首先来看这个界面,这里绑定了按钮,并传入add。
在这里插入图片描述
调用到下面的方法,st就是掺入的一个参数,由上面可知传入了add,所以这里就是走到添加菜品的页面。
在这里插入图片描述

在这里插入图片描述
一路追溯的话其实可以看到其实还是调用到了这个请求,其实这个请求就是为了获取到分类,这个获取分类的功能其实我们之前写过,就是分类功能界面里面。
在这里插入图片描述
所以调用的就是原来的我们的功能实现,这里传入参数type,值为1,所以最终查询的就是菜品。
在这里插入图片描述

在这里插入图片描述

所以我们找到这个界面。所以就是走·到这个界面,但是你会发现这个界面里面还有一些新的出来的属性,口味?

在这里插入图片描述

先运行项目来看这个界面,这是添加菜品的前端界面,可以看到这里有一些供选的数据选项。

在这里插入图片描述

我们可以在菜品分类这里获取到菜品分类。

当我们点击到这里这个框的时候就会出现下面这些供选的列表数据。
在这里插入图片描述
然后还可以添加数据。我们可以在相应的口味名称下面添加一些口味。
在这里插入图片描述
那么这个是如何实现的,还是来看我们的前端页面。
我们可以定位到这个方法,该方法其实是对口味这个数据模型设置了一些值。

在这里插入图片描述
在上面挂载的方法对此进行了调用
在这里插入图片描述
那么从该页面来看,前端这里其实菜品是关联了口味这些数据,并且前端保存了一些预备的临时数据,我们进行添加菜品的时候要多口味进行选择,然后提交给后端。所以我们得出一个要求就是一定需要有一个菜品和口味的关联的表,所以我们就会想到还需要新的实体类,其实数据库设计的时候具有对口味表的提供。
在这里插入图片描述
是如何关联的呢?其实还是和之气前的一样的关联的方法,就像套餐和菜品的关联的方式一样,通过在一张表中对应到对方的id。

所以在数据库给出这样的表折后我们还需要设置对应的实体类。
叫做菜品口味实体类。

其实我们可以去运行项目,我们现在先不要写后端代码,运行程序,添加菜品,然后在浏览器中去查询请求这些数据。我们到这里去添加菜品。
在这里插入图片描述
我们可以去看标头
在这里插入图片描述

在负载这里我们也可以查看到具体的参数。

在这里插入图片描述

其实你通过这里可以非常清楚的看到,提交的信息划分为两类,一类是菜品,一类是口味。于是后端在保存提交的彩屏的时候需要去一方面保存菜品,一方面保存菜品关联口味这些数据。

还是十分容易设计的。

后端菜品添加的功能开发

这里首先还需要再DishDto这里扩展一下字段属性,口味数据是列表形式的数据。
在这里插入图片描述

首先我么按照口味表来设计出来实体类和相关的三层架构的类。

package com.jgdabc.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
菜品口味
 */
@Data
public class DishFlavor implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;


    //菜品id
    private Long dishId;


    //口味名称
    private String name;


    //口味数据list
    private String value;


    @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;

}

于是还是按照之前的一个过程,设计mapper也就是dao层,然后service,然后service的实现类,
dao层

package com.jgdabc.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jgdabc.entity.DishFlavor;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface DishFlavorMapper extends BaseMapper<DishFlavor> {
}

service层

package com.jgdabc.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jgdabc.entity.DishFlavor;

public interface DishFlavorService extends IService<DishFlavor> {
}

然后service的实现类。

package com.jgdabc.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jgdabc.entity.DishFlavor;
import com.jgdabc.mapper.DishFlavorMapper;
import com.jgdabc.service.DishFlavorService;
import com.jgdabc.service.DishService;
import org.springframework.stereotype.Service;

@Service
public class DishFlavorServiceImpl extends ServiceImpl<DishFlavorMapper, DishFlavor> implements DishFlavorService {
}

上面已经说道,需要保存新增的菜品和菜品口味数据。我们现在需要去改造一下菜品的service类,然后我们改进一下dish 的service下面的具体的保存的方法。

在这里插入图片描述

 @Autowired
    private DishFlavorService dishFlavorService;
    @Transactional
    public void saveWithFlavor(DishDto dishDto) {
//        保存菜品的基本信息
//这里首先保存了菜品,
        this.save(dishDto);
        Long dishId = dishDto.getId();//菜品id
        List<DishFlavor> flavors = dishDto.getFlavors();//获取到对应id的菜品口味
       flavors = flavors.stream().map((item)->
        {
            //拿到的这个item就是这个DishFlavor集合
            item.setDishId(dishId);//让口味和id 上
            return item;
        }).collect(Collectors.toList());
//        保存菜品口味数据到菜品口味表
        dishFlavorService.saveBatch(flavors);//批量保存


    }

前端传来的数据是这样的。
在这里插入图片描述
菜品的基本的信息的保存是没有任何问题的,我们还需要去保存口味数据。但是口味数据这边前端传来的并没有id这些数据,我们看下面的数据库表中就可以明白,两个id必不可少。我们需要获取到的是dishid。于是我们上面还是去通过流的方式获取到了dishid,并进行了响应的设置赋值。然后我们进行了批量的保存。这样数据就完整了。
在这里插入图片描述

主要解释一下这里。

然后呢,我们就去Controller。
在这里插入图片描述

  //    新增菜品
    @PostMapping
    public R_<String> save(@RequestBody DishDto dishDto) {

        log.info(dishDto.toString());
        dishService.saveWithFlavor(dishDto);
        return R_.success("新增菜品成功");
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰舟千帆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值