【瑞吉外卖】day07:新增套餐、套餐分页查询、 删除套餐(一)

简介: 【瑞吉外卖】day07:新增套餐、套餐分页查询、 删除套餐

1. 新增套餐


1.1 需求分析


套餐就是菜品的集合。

后台系统中可以管理套餐信息,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,并且需要上传套餐对应的图片,在移动端会按照套餐分类来展示对应的套餐。

image.png

1.2 数据模型


新增套餐,其实就是将新增页面录入的套餐信息插入到setmeal表,还需要向setmeal_dish表插入套餐和菜品关联数据。所以在新增套餐时,涉及到两个表:

说明 备注
setmeal 套餐表 存储套餐的基本信息
setmeal_dish 套餐菜品关系表 存储套餐关联的菜品的信息(一个套餐可以关联多个菜品)

两张表具体的表结构如下:

1). 套餐表setmeal

image.png

在该表中,套餐名称name字段是不允许重复的,在建表时,已经创建了唯一索引。

image.png

2). 套餐菜品关系表setmeal_dish

image.png

在该表中,菜品的名称name,菜品的原价price 实际上都是冗余字段,因为我们在这张表中存储了菜品的ID(dish_id),根据该ID我们就可以查询出name,price的数据信息,而这里我们又存储了name,price,这样的话,我们在后续的查询展示操作中,就不需要再去查询数据库获取菜品名称和原价了,这样可以简化我们的操作。

1.3 准备工作


在开发业务功能前,先将需要用到的类和接口基本结构创建好,在做这一块儿的准备工作时,我们无需准备Setmeal的相关实体类、Mapper接口、Service接口及实现,因为之前在做分类管理的时候,我们已经引入了Setmeal的相关基础代码。 接下来,我们就来完成以下的几步准备工作:

1). 实体类 SetmealDish

ps.直接从课程资料中导入即可,Setmeal实体前面课程中已经导入过了。

所属包: com.itheima.reggie.entity

importcom.baomidou.mybatisplus.annotation.FieldFill;
importcom.baomidou.mybatisplus.annotation.TableField;
importlombok.Data;
importjava.io.Serializable;
importjava.math.BigDecimal;
importjava.time.LocalDateTime;
/*** 套餐菜品关系*/@DatapublicclassSetmealDishimplementsSerializable {
privatestaticfinallongserialVersionUID=1L;
privateLongid;
//套餐idprivateLongsetmealId;
//菜品idprivateLongdishId;
//菜品名称 (冗余字段)privateStringname;
//菜品原价privateBigDecimalprice;
//份数privateIntegercopies;
//排序privateIntegersort;
@TableField(fill=FieldFill.INSERT)
privateLocalDateTimecreateTime;
@TableField(fill=FieldFill.INSERT_UPDATE)
privateLocalDateTimeupdateTime;
@TableField(fill=FieldFill.INSERT)
privateLongcreateUser;
@TableField(fill=FieldFill.INSERT_UPDATE)
privateLongupdateUser;
//是否删除privateIntegerisDeleted;
}

2). DTO SetmealDto

该数据传输对象DTO,主要用于封装页面在新增套餐时传递过来的json格式的数据,其中包含套餐的基本信息,还包含套餐关联的菜品集合。直接从课程资料中导入即可。

所属包: com.itheima.reggie.dto

importcom.itheima.reggie.entity.Setmeal;
importcom.itheima.reggie.entity.SetmealDish;
importlombok.Data;
importjava.util.List;
@DatapublicclassSetmealDtoextendsSetmeal {
privateList<SetmealDish>setmealDishes;//套餐关联的菜品集合privateStringcategoryName;//分类名称}

3). Mapper接口 SetmealDishMapper

所属包: com.itheima.reggie.mapper

importcom.baomidou.mybatisplus.core.mapper.BaseMapper;
importcom.itheima.reggie.entity.SetmealDish;
importorg.apache.ibatis.annotations.Mapper;
@MapperpublicinterfaceSetmealDishMapperextendsBaseMapper<SetmealDish> {
}

4). 业务层接口 SetmealDishService

所属包: com.itheima.reggie.service

importcom.baomidou.mybatisplus.extension.service.IService;
importcom.itheima.reggie.entity.SetmealDish;
publicinterfaceSetmealDishServiceextendsIService<SetmealDish> {
}

5). 业务层实现类 SetmealDishServiceImpl

所属包: com.itheima.reggie.service.impl

importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
importcom.itheima.reggie.entity.SetmealDish;
importcom.itheima.reggie.mapper.SetmealDishMapper;
importcom.itheima.reggie.service.SetmealDishService;
importlombok.extern.slf4j.Slf4j;
importorg.springframework.stereotype.Service;
@Service@Slf4jpublicclassSetmealDishServiceImplextendsServiceImpl<SetmealDishMapper,SetmealDish>implementsSetmealDishService {
}

6). 控制层 SetmealController

套餐管理的相关业务,我们都统一在 SetmealController 中进行统一处理操作。

所属包: com.itheima.reggie.service.impl

importcom.itheima.reggie.service.SetmealDishService;
importcom.itheima.reggie.service.SetmealService;
importlombok.extern.slf4j.Slf4j;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.*;
/*** 套餐管理*/@RestController@RequestMapping("/setmeal")
@Slf4jpublicclassSetmealController {
@AutowiredprivateSetmealServicesetmealService;
@AutowiredprivateSetmealDishServicesetmealDishService;
}    

1.4 前端页面分析


服务端的基础准备工作我们准备完毕之后,在进行代码开发之前,需要梳理一下新增套餐时前端页面和服务端的交互过程:

1). 点击新建套餐按钮,访问页面(backend/page/combo/add.html),页面加载发送ajax请求,请求服务端获取套餐分类数据并展示到下拉框中(==已实现==)

image.png

获取套餐分类列表的功能我们不用开发,之前已经开发完成了,之前查询时type传递的是1,查询菜品分类; 本次查询时,传递的type为2,查询套餐分类列表。


2). 访问页面(backend/page/combo/add.html),页面加载时发送ajax请求,请求服务端获取菜品分类数据并展示到添加菜品窗口中(==已实现==)

image.png

本次查询分类列表,传递的type为1,表示需要查询的是菜品的分类。查询菜品分类的目的,是添加套餐关联的菜品时,我们需要根据菜品分类,来过滤查询菜品信息。查询菜品分类列表的代码已经实现, 具体展示效果如下:

image.png

3). 当点击添加菜品窗口左侧菜单的某一个分类, 页面发送ajax请求,请求服务端,根据菜品分类查询对应的菜品数据并展示到添加菜品窗口中

image.png

4). 页面发送请求进行图片上传,请求服务端将图片保存到服务器(==已实现==)

5). 页面发送请求进行图片下载,将上传的图片进行回显(==已实现==)

image.png

6). 点击保存按钮,发送ajax请求,将套餐相关数据以json形式提交到服务端

image.png

经过上述的页面解析及流程分析,我们发送这里需要发送的请求有5个,分别是 :

A. 根据传递的参数,查询套餐分类列表

B. 根据传递的参数,查询菜品分类列表

C. 图片上传

D. 图片下载展示

E. 根据菜品分类ID,查询菜品列表

F. 保存套餐信息

相关文章
|
11月前
阿里云短信价格查询
阿里云短信价格查询,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
108 0
|
11月前
|
人工智能 固态存储 关系型数据库
阿里云国际短信价格查询
阿里云国际短信价格查询,​​阿里云国际短信费用价格表,印度短信0.216元一条、中国香港短信0.33元一条、美国短信0.053元一条、日本短信0.514元一条、俄罗斯短信1.02元一条、印尼短信1.01元一条、意大利短信0.565元一条、伊朗短信0.592元一条,阿里云国际短信支持东南亚、欧洲、非洲、美洲等国家和地区
181 0
|
1月前
|
移动开发 API 开发者
标准详情API接口h5优惠券到手价信息采集
为了提高用户体验和满足用户需求,开放了其详情API接口,使得第三方开发者可以方便地访问和利用这些商品信息 淘宝详情API接口是淘宝开放平台提供的一套接口,它允许第三方开发者通过编程方式获取淘宝商品详情信息。这些信息包括但不限于商品标题、价格、销量、评价等。开发者可以使用这些信息为自己的应用程序提供支持,从而为用户提供更优质的服务。
|
11月前
阿里云短信发送价格
阿里云短信发送价格,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
99 0
|
11月前
阿里云每条短信价格
阿里云每条短信价格,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
|
11月前
阿里云短信套餐价格
阿里云短信套餐价格,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
93 0
|
前端开发 Java 测试技术
基于Springboot外卖系统18:套餐分页查询模块+删除套餐+多数据表同步
系统中的套餐数据很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据
85 0
|
API
云市场资源包额度预警设置及使用明细查询操作指导
阿里云云市场是软件交易及交付平台。云市场致力于为中小型企业提供全方面的 IT 服务,大幅降低企业互联网化成本, 打造企业上云、产品选购、服务落地、交易一体化流程。共同构建云上生态,让信息化更简单。作为阿里云的战略发展点,承接着中国云生态各个链条产品的落地。云市场平台提供完备的服务监管来保障用户利益,并把更多的产品、品牌及销售资源赋能商家。客户在购买使用云市场服务后为了避免当资源包耗尽时,面临服务不可用风险。通常有设置资源包额度预警和查看使用明细得需求。但是由于云市场控制台的不熟悉,往往不知如果进行额度预警的调整及设置。本文简单介绍设置资源包额度预警和查看资源包用量明细操作步骤,以供参考
519 0
云市场资源包额度预警设置及使用明细查询操作指导
|
前端开发 测试技术 数据库
【瑞吉外卖】day07:新增套餐、套餐分页查询、 删除套餐(三)
【瑞吉外卖】day07:新增套餐、套餐分页查询、 删除套餐
328 0
【瑞吉外卖】day07:新增套餐、套餐分页查询、 删除套餐(三)
|
JSON 前端开发 测试技术
【瑞吉外卖】day07:新增套餐、套餐分页查询、 删除套餐(二)
【瑞吉外卖】day07:新增套餐、套餐分页查询、 删除套餐
233 0
【瑞吉外卖】day07:新增套餐、套餐分页查询、 删除套餐(二)