【外卖系统】新增菜品

news2024/11/24 18:50:04

需求分析

在后台中,通过新增功能来添加一个新的菜品,在添加菜品时需要选择当前菜品所属的菜品分类,并且需要上传的菜品图片。

代码开发

需要添加的类和基本接口:实体类DishFlavor、Mapper接口DishFlavorMapper、业务层接口DishFlavorService、业务层实现类DishFlavorServiceImpl、控制层DishController

  • 页面发送ajax请求,请求服务器端获取菜品分类数据并展示到下拉框
  • 页面发送请求进行图片上传,请求服务端将图片保存到服务器
  • 页面发送请求进行图片下载,将上传的图片进行回显
  • 点击保存按钮,发送ajax请求,将菜品相关数据以json形式提交到服务端

获取菜品分类列表(下拉框)

// 获取菜品分类列表
const getCategoryList = (params) => {
  return $axios({
    url: '/category/list',
    method: 'get',
    params
  })
}

前端发送aiax请求的地址是'/category/list',所以应该在CategoryController中写这个方法
添加菜品功能,通过调试前端发现查看菜品分类没有报错。
在这里插入图片描述在这里插入图片描述

 /**
     * 根据条件,获取菜品分类列表
     * @param category
     * @return
     */
    @GetMapping("/list")
    public R<List<Category>> list(Category category)
    {
        //条件构造器
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        //添加条件
        queryWrapper.eq(category.getType() != null,Category::getType,category.getType());
        //添加排序条件 优先使用sort排序 当sort相同的情况下 使用更新时间进行排序
        queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);
        List<Category> list = categoryService.list(queryWrapper);
        return R.success(list);
    }

排序也是正确的
在这里插入图片描述

上传图片

这里我上传了两次,第一次上传的图片超过了2MB,所以报错了,然后我只能上传大笨狗,上传成功了。下图分别是上传和浏览请求成功的提示。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

接受页面提交的数据

在这里插入图片描述数据格式:
在这里插入图片描述此时save()的参数不能直接使用Dish dish,因为通过前端传送的数据格式可以看到有flavors这个参数。
在这里插入图片描述解决办法:导入DishDto,用于封装页面提交的数据
检查封装的数据是否有问题:
在这里插入图片描述

2023-08-01 10:18:03.969  INFO 8552 --- [nio-8060-exec-2] c.s.reggie.controller.DishController     : DishDto(flavors=[DishFlavor(id=null, dishId=null, name=甜味, value=["无糖","少糖","半糖","多糖","全糖"], createTime=null, updateTime=null, createUser=null, updateUser=null, isDeleted=null), DishFlavor(id=null, dishId=null, name=温度, value=["热饮","常温","去冰","少冰","多冰"], createTime=null, updateTime=null, createUser=null, updateUser=null, isDeleted=null)], categoryName=null, copies=null)

测试代码:

 @PostMapping
    public R<String> save(@RequestBody DishDto dishDto)//记得封装要加RequestBody注解
    {
        log.info(dishDto.toString());
        return null;
    }

在这里插入图片描述新增大笨狗成功。

/**
 * 菜品管理
 */
@RestController
@RequestMapping("/dish")
@Slf4j
public class DishController {
    @Autowired
    private DishService dishService;//菜品服务
    @Autowired
    private DishFlavorService dishFlavorService;//菜品口味

    @PostMapping
    public R<String> save(@RequestBody DishDto dishDto)//记得封装要加RequestBody注解
    {
        log.info(dishDto.toString());
        dishService.saveWithFlavor(dishDto);
        return R.success("新增菜品成功...");
    }
package com.springboot.reggie.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.springboot.reggie.dto.DishDto;
import com.springboot.reggie.entity.Dish;
import com.springboot.reggie.entity.DishFlavor;
import com.springboot.reggie.mapper.DishMapper;
import com.springboot.reggie.service.DishFlavorService;
import com.springboot.reggie.service.DishService;
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;

@Service
@Slf4j

public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {

    @Autowired
    private DishFlavorService dishFlavorService;
    /**
     * 新增菜品 同时保存对应的口味
     * @param dishDto
     */
    @Transactional //需要加上事务控制 因为涉及到多张表的操作
    public void saveWithFlavor(DishDto dishDto)
    {
        //保存菜品的基本信息到菜品表
        this.save(dishDto);
        Long dishId = dishDto.getId();//给菜品id赋值
        //菜品口味
        List<DishFlavor> flavors = dishDto.getFlavors();
       flavors =  flavors.stream().map((item)->{
            item.setDishId(dishId);
            return  item;
        }).collect(Collectors.toList());
        //保存菜品口味数据到菜品口味表
       dishFlavorService.saveBatch(flavors);

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/820035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

顶尖211,央企收割机!面试仅16%!超线30分,稳稳上岸!

一、学校及专业介绍 南京理工大学&#xff08;Nanjing University of Science and Technology&#xff09;&#xff0c;简称南理&#xff0c;位于南京市&#xff0c;是隶属于工业和信息化部的全国重点大学&#xff0c;是国家“双一流”建设高校&#xff0c;“211工程”。由于学…

百模征战,如何解决数据卡脖子问题?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 继ChatGPT以来&#xff0c;大模型在国内掀起了一股热潮&#xff0c;大有百模征战之意。而其中数据、算法、算力作为大模型训练的三驾马车&#xff0c;预训练数据的数量、质量、多样性成为大模型能力表现的关键性因素&#x…

8.Winform界面打包成DLL提供给其他的项目使用

背景 希望集成一个Winform的框架&#xff0c;提供权限菜单&#xff0c;根据权限出现各个Winform子系统的菜单界面。不希望把所有的界面都放放在同一个解决方案下面。用各个子系统建立不同的解决方案&#xff0c;建立代码仓库&#xff0c;进行管理。 实现方式 将Winform的UI界…

Linux系统使用(超详细,暑假弯道超车!!)

目录 Linux操作系统简介 Linux和windows区别 Linux常见命令 Linux目录结构 Linux命令提示符 常用命令 ls cd pwd touch cat echo mkdir rm cp mv vim vim的基本使用 grep netstat Linux面试题 Linux操作系统简介 Linux操作系统是和windows操作系统是并列的关系。只不过只…

牛客网Verilog刷题——VL54

牛客网Verilog刷题——VL54 题目答案 题目 实现一个深度为8&#xff0c;位宽为4bit的双端口RAM&#xff0c;数据全部初始化为0000。具有两组端口&#xff0c;分别用于读数据和写数据&#xff0c;读写操作可以同时进行。当读数据指示信号read_en有效时&#xff0c;通过读地址信号…

SpringBoot 集成Swagger2

一、入门 1、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!-- https://mvnrepository.com…

IIC协议原理及IIC通信的具体实现(S3C2440裸机开发)

文章目录 前言一、IIC协议二、IIC的控制2.1 IIC控制相关寄存器2.2 IIC控制中的特征信号2.3 IIC的数据传输格式2.3.1 ACK信号2.3.2 数据读写操作2.3.3 中止通信 三、 IIC编程3.1 IIC编程的相关寄存器3.2 IIC代码实现 总结 前言 本期和大家主要分享的是一种非常常见并且非常常用…

【笔记】欧拉回路与欧拉路径

先放结论 对于一个无向连通图1&#xff1a; 存在欧拉路径的充分必要条件为&#xff1a;度数为奇数的点只有 0 0 0 或 2 2 2 个。存在欧拉回路的充分必要条件为&#xff1a;没有度数为奇数的点。 对于一个有向连通图&#xff1a; 存在欧拉路径的充分必要条件为&#xff1a; 所…

asm:常用语法

常用语法 1、循环1.1、使用条件跳转指令实现循环1.2、使用LOOP指令实现循环 2、字符串2.1、指定字符串的长度2.2、字符串指令2.3、重复前缀 3、数组4、递归5、宏6、文件操作7、内存管理 1、循环 1.1、使用条件跳转指令实现循环 汇编语言中实现循环通常需要使用跳转指令和条件…

k8s概念-DaemonSet

回到目录 参考链接https://v1-23.docs.kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/ DaemonSet 确保全部&#xff08;或者某些&#xff09;节点上运行一个 Pod 的副本 当节点加入到K8S集群中&#xff0c;pod会被&#xff08;DaemonSet&#xff09;调度到…

昆腾存储XSAN架构迁移误格式化系统的服务器数据恢复案例

服务器数据恢复环境&#xff1a; 昆腾存储&#xff0c; 操作系统&#xff1a;MAC OS&#xff0c; 存放的数据类型&#xff1a;MXF、MOV等格式视频文件。 存储中有9个数据卷&#xff0c;其中包括1个META信息卷&#xff0c;8个DATA信息卷。 服务器故障&#xff1a; 由于业务需求…

《入门级-Cocos2d 4.0塔防游戏开发》---实战

第一课&#xff1a;coco2dx4.0开发环境搭建 在uos专业版本搭建cocos2dx4.0开发环境 ---》 点击学习 第二课&#xff1a;游戏加载界面开发 介绍coco2dx4.0的场景添加. ---》 点击学习 第三课&#xff1a;欢迎界面开发&#xff08;一&#xff09; 开发欢迎界面的精灵添加和位…

git 生成change-id的解决方法

解决问题 1&#xff0c;在提交代码时的信息会要求添加change-id的要求&#xff0c;但对于默认的git来说&#xff0c;是不会自动生成change-id的 2&#xff0c;当git push的时候&#xff0c;报错 remote: ERROR: commit 7c30eda: missing Change-Id in message footer 解决办…

Boost开发指南-3.7intrusive_ptr

intrusive_ptr intrusive_ptr也是一种引用计数型智能指针&#xff0c;但与之前介绍的 scoped_ptr&#xff0c;shared_ptr 不同&#xff0c;需要额外增加一些的代码才能使用。它的名字可能会给人造成误解&#xff0c;实际上它并不一定要修改代理对象的内部数据。 如果现存代码…

一个月,英语能提高多少?附资料分享

学习语言是一个漫长的过程&#xff0c;但对于我这样一个英语小白&#xff0c;利用业余时间&#xff0c;一个月的学习&#xff0c;还是能看到不少的进步。除了听、说、读、写等能力方面有提升之外&#xff0c;最大的收获就是培养了英语学习和运用的兴趣。这样的结果对我来说&…

《Python深度学习-Keras》精华笔记1:深度学习数学基础及张量

公众号&#xff1a;尤而小屋作者&#xff1a;Peter编辑&#xff1a;Peter 持续更新《Python深度学习》一书的精华内容&#xff0c;仅作为学习笔记分享。 本文是第一篇&#xff1a;深度学习中的数学基础和张量操作 In [1]: import pandas as pd import numpy as npimport tens…

【linux--->传输层协议】

文章目录 [TOC](文章目录) 一、端口号1.端口号划分范围2.常用知名端口号 二、网络命令1.netstat 命令2.pidof 命令 三、UDP协议1.格式2.协议的分离和合并3.特点4.缓冲区 四、TCP协议1.格式2.4位的数据偏移3.确认应答机制4.序号与确认序号5.16位窗口6.标志位7.超时重传8.三次握手…

腾讯云TencentOS Server镜像系统常见问题解答

腾讯云TencentOS Server镜像是腾讯云推出的Linux操作系统&#xff0c;完全兼容CentOS生态和操作方式&#xff0c;TencentOS Server操作系统为云上运行的应用程序提供稳定、安全和高性能的执行环境&#xff0c;TencentOS可以运行在腾讯云CVM全规格实例上&#xff0c;包括黑石物理…

2023-07-31力扣每日一题

链接&#xff1a; 143. 重排链表 题意&#xff1a; 将链表L0 → L1 → … → Ln - 1 → Ln变成L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 解&#xff1a; 线性表法还是好写的 这边搞一下翻转法&#xff0c;快慢指针求翻转点&#xff08;翻转后面一半然后双指针合并…

【运维】linkis1.3.2版本保姆级安装

文章目录 一.建议配置1 软硬件环境建议配置1.1 Linux 操作系统版本要求1.2 服务器建议配置1.3 软件要求1.4 客户端 Web 浏览器要求2.3 LDAP设置&#xff08;暂时不需要&#xff09; 二. 下载三. 安装部署linkis server端1. 首次安装准备事项1.1 Linux服务器1.2 添加部署用户 2.…