【开源】SpringBoot框架开发农家乐订餐系统

目录
- 一、摘要
- 1.1 项目介绍
- 1.2 项目录屏
- 二、功能模块
- 2.1 用户
- 2.2 管理员
- 三、系统展示
- 四、核心代码
- 4.1 查询菜品类型
- 4.2 查询菜品
- 4.3 加购菜品
- 4.4 新增菜品收藏
- 4.5 新增菜品留言
- 五、免责说明
一、摘要
1.1 项目介绍
基于JAVA+Vue+SpringBoot+MySQL的农家乐订餐系统,包含了菜品类型模块、菜品档案模块、菜品收藏模块、菜品订餐模块、菜品资讯模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,农家乐订餐系统基于角色的访问控制,给订餐管理员、配送人员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
1.2 项目录屏
二、功能模块
2.1 用户
- 用户登录和注册功能。
- 资讯功能:用户可以任意浏览资讯列表和详细信息菜品库:支持通过查询来查找所需要菜品。
- 菜品信息:击到菜品详情页面,可以查看菜品介绍、图片、价格、销售、已购买户评论。
- 菜品收藏:在操作信息.详情,下方点击“收藏",进行收藏。
- 菜品选购:在菜品的详情页面,点击“加入购物车”,也可以直接点击“立即购买”菜品购物车:列出打算下单的菜品列表,支持数量增加和减小。
- 取消订单:在“我的订单”列表中,针对没有付款的订单,点击“取消申请",删除订单去付款::在“我的订单”咧表中,点击“去付款”,模拟付款。
- 留言:填写留言的内容,提交到网站管理后台。
2.2 管理员
- 会员列表:查看所有注册会员信息,支持册除录入资讯:录入资讯标题、内容等信息。
- 管理资讯:查看已录入资讯列表,支持删除和修改留言列表:所有用户留言信息列表,支持册除。
- 菜品分类管理:支持录入、查看、修改和册除已有分类。
- 菜品录入:选择菜品分类、录入菜品名称、库存、已销售、价格、上传菜品图片、填写菜品介绍。
- 菜品管理:查看所有已经录入的菜品信息、支持修改和册除。
- 菜品订单:查看所有用户下单的订单信息,包括下单时间、费用、用户信息、订单菜品信息和备注等。
- 订单处理:处理菜品信息等。
三、系统展示








四、核心代码
4.1 查询菜品类型
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询菜品类型")
public Result<IPage<DishType>> getByPage(@ModelAttribute DishType dishType ,@ModelAttribute PageVo page){QueryWrapper<DishType> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(dishType.getTitle())) {qw.like("title",dishType.getTitle());}if(!ZwzNullUtils.isNull(dishType.getStatus())) {qw.eq("status",dishType.getStatus());}IPage<DishType> data = iDishTypeService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<DishType>>().setData(data);
}
4.2 查询菜品
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询菜品")
public Result<IPage<DishVariety>> getByPage(@ModelAttribute DishVariety dishVariety ,@ModelAttribute PageVo page){QueryWrapper<DishVariety> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(dishVariety.getTitle())) {qw.like("title",dishVariety.getTitle());}if(!ZwzNullUtils.isNull(dishVariety.getType())) {qw.eq("type",dishVariety.getType());}if(!ZwzNullUtils.isNull(dishVariety.getContent())) {qw.like("content",dishVariety.getContent());}IPage<DishVariety> data = iDishVarietyService.page(PageUtil.initMpPage(page),qw);User currUser = securityUtil.getCurrUser();for (DishVariety vo : data.getRecords()) {QueryWrapper<DishCollect> collQw = new QueryWrapper<>();collQw.eq("collect_id",currUser.getId());collQw.eq("dish_id",vo.getId());vo.setCollectFlag(iDishCollectService.count(collQw));QueryWrapper<DishOrder> orderQw = new QueryWrapper<>();orderQw.eq("dish_id",vo.getId());orderQw.eq("status","已加购");orderQw.last("limit 1");DishOrder order = iDishOrderService.getOne(orderQw);vo.setBuyNumber(order == null ? BigDecimal.ZERO : order.getNumber());}return new ResultUtil<IPage<DishVariety>>().setData(data);
}
4.3 加购菜品
@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "加购")
public Result<DishOrder> addOne(@RequestParam String id, @RequestParam BigDecimal number){DishVariety dish = iDishVarietyService.getById(id);if(dish == null) {return ResultUtil.error("菜品不存在");}User currUser = securityUtil.getCurrUser();QueryWrapper<DishOrder> qw = new QueryWrapper<>();qw.eq("dish_id",dish.getId());qw.eq("status","已加购");qw.eq("order_id",currUser.getId());qw.last("limit 1");DishOrder order = iDishOrderService.getOne(qw);if(order != null) {order.setNumber(order.getNumber().add(number));iDishOrderService.saveOrUpdate(order);return ResultUtil.success();}DishOrder o = new DishOrder();o.setDishId(dish.getId());o.setTitle(dish.getTitle());o.setType(dish.getType());o.setContent(dish.getContent());o.setImage(dish.getImage());o.setPrice(dish.getPrice());o.setStatus("已加购");o.setNumber(number);o.setOrderId(currUser.getId());o.setOrderName(currUser.getNickname());o.setOrderTime(DateUtil.now());iDishOrderService.saveOrUpdate(o);return ResultUtil.success();
}
4.4 新增菜品收藏
@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增收藏")
public Result<DishCollect> addOne(@RequestParam String id){DishVariety dish = iDishVarietyService.getById(id);if(dish == null) {return ResultUtil.error("菜品不存在");}User currUser = securityUtil.getCurrUser();QueryWrapper<DishCollect> qw = new QueryWrapper<>();qw.eq("dish_id",id);qw.eq("collect_id",currUser.getId());if(iDishCollectService.count(qw) > 0L) {return ResultUtil.success();}DishCollect dishCollect = new DishCollect();dishCollect.setDishId(dish.getId());dishCollect.setTitle(dish.getTitle());dishCollect.setType(dish.getType());dishCollect.setContent(dish.getContent());dishCollect.setImage(dish.getImage());dishCollect.setPrice(dish.getPrice());dishCollect.setCollectId(currUser.getId());dishCollect.setCollectName(currUser.getNickname());dishCollect.setCollectTime(DateUtil.now());iDishCollectService.saveOrUpdate(dishCollect);return ResultUtil.success();
}
4.5 新增菜品留言
@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增菜品留言")
public Result<Message> insert(Message message){User currUser = securityUtil.getCurrUser();message.setUserId(currUser.getId());message.setUserName(currUser.getNickname());message.setUserTime(DateUtil.now());message.setReplyContent("");message.setReplyName("");message.setReplyTime("");message.setReplyId("");iMessageService.saveOrUpdate(message);return new ResultUtil<Message>().setData(message);
}
五、免责说明
- 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
- 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
- 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!
- 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
- 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
- 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
- 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

相关文章:
【开源】SpringBoot框架开发农家乐订餐系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统,…...
OSQP文档学习
OSQP官方文档 1 QSQP简介 OSQP求解形式为的凸二次规划: x ∈ R n x∈R^n x∈Rn:优化变量 P ∈ S n P∈S^n_ P∈Sn:半正定矩阵 特征 (1)高效:使用了一种自定义的基于ADMM的一阶方法,只需…...
ONLYOFFICE 8.0:引领数字化办公新纪元
目录 前言 软件安装 软件启动 软件新版本特性 个人评价 总结 前言 在当今快节奏的数字化世界中,高效的办公软件已成为企业竞争力的关键因素。ONLYOFFICE,作为全球领先的办公解决方案提供商,始终致力于通过技术创新来优化用户体验。如今…...
「Linux」基础命令
目录结构 Linux只有1个顶级目录,称为“根目录”路径之间的层级关系,使用/来表示,例如:/usr/local/hello.txt 开头的/表示根目录后面的/表示层级关系 命令入门 命令的通用格式:command [ -options ] [ parameter] c…...
三防平板丨平板终端丨加固平板丨户外勘测应用
随着科技的不断发展,现代勘测业也在不断升级。相较于传统的勘测设备,三防平板在户外勘测中有着广泛的应用。那么,三防平板在户外勘测中究竟有哪些优势呢? 首先,三防平板具备极强的防水、防尘、防摔能力。在野外勘测中&…...
npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题
转载:npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题_npm err! code cert_has_expired npm err! errno cert-CSDN博客 npm config set registry http://registry.cnpmjs.org npm config set registry http://registry.npm.taobao.org...
npm报错之package-lock.json found. 问题和淘宝镜像源过期问题
1、package-lock.json found. 问题的解决 在执行yarn add react-transition-group -S 安装react-transition-group时出现package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in orde…...
大模型提示学习、Prompting微调知识
为什么需要提示学习? 提示学习是一种在自然语言处理任务中引入人类编写的提示或示例来辅助模型生成更准确和有意义的输出的技术。以下是一些使用提示学习的原因: 解决模糊性:在某些任务中,输入可能存在歧义或模糊性,通…...
vue 导出,下载错误提示、blob与json数据转换
一、成功/失败 - 页面展示 失败 成功 二、成功/失败 - 接口请求/响应展示成功 2. 失败 三、解决 // 导出列表exportReceivedExcel() {if (this.tableCheckedValue) {this.form.ids this.tableCheckedValue.map(v > {return v.id || null})}this.loadingReceivedExcel …...
代码随想录算法训练营|二叉树总结
二叉树的定义: struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(int val):val(val),left(nullptr),right(nullptr){}TreeNode(int val,TreeNode* left,TreeNode* right):val(val),left(left),…...
rtt的io设备框架面向对象学习-uart设备
目录 1.uart设备基类2.uart设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 1.uart设备基类 此层处于设备驱动框架层。也是抽象类。 在/ components / drivers / include / drivers 下的serial.h定义了如下uart设备基类 struc…...
PyCharm - Script parameters (脚本参数)
PyCharm - Script parameters [脚本参数] References Run -> Edit Configurations… -> Run/Debug Configurations -> Configuration -> Script parameters 命令行: python display_yolo_log.py ./person_training_log/person_train_log_DIMM40_stdout…...
Security6.2 中的SpEL 表达式应用(权限注解使用)
最近学习若依框架,里面的权限注解涉及到了SpEL表达式 PreAuthorize("ss.hasPermi(system:user:list)"),若依项目中用的是自己写的方法进行权限处理, 也可以只用security 来实现权限逻辑代码,下面写如何用security 实现。…...
软考笔记--信息系统开发方法(下)
信息系统是一个极其复杂的人机交互系统,它不仅包含计算机技术,通信技术和网络规划以及其他的工程技术,而且,它还是一个复杂的管理系统,需要管理理论和方法的支持,因此,与其他工程项目相比&#…...
从 AGP 4.1.2 到 7.5.1——XmlParser、GPathResult、QName 过时
新年首发, 去年的问题,今年解决~ 问题 & 排查 1: Task failed with an exception. ----------- * What went wrong: Execution failed for task :app:processCommonReleaseManifest. > org.xml.sax.SAXParseException; lineNumber: 1; columnNu…...
spring boot 使用AOP实现是否已登录检测
前后端分离的开发中,用户http请求应用服务的接口时, 如果要求检测该用户是否已登录。可以实现的方法有多种, 本示例是通过aop 的方式实现,简单有效。 约定:前端http的post 请求 export async function request(url,data) {const …...
为什么从没有负值的数据中绘制的小提琴图(Violin Plot)会出现负值部分?
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 小提琴图(Violin Plot) 是一种用于展示和比较数据分布的可视化工具。它结合了箱形图(Box Plot)和密度图(Kernel Density Plot)的特…...
有哪几种行为会导致服务器被入侵
导致服务器被入侵的行为有很多种,以下是一些常见的行为: 系统漏洞:服务器操作系统或软件存在漏洞,攻击者可以通过利用这些漏洞获取系统权限,从而入侵服务器。 弱口令:服务器的账号密码过于简单或者未及时更…...
Redis RabbitMQ
Redis:轻量级,NoSQL数据库 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这…...
http 和 https 的区别?
目录 1.http 和 https 的基本概念 2.http 和 https 的区别 3.https 协议的工作原理 4.https 协议的优点 5.https 协议的缺点 1.http 和 https 的基本概念 http: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
