【开源】JAVA+Vue.js实现农家乐订餐系统

在这里插入图片描述


目录

  • 一、摘要
    • 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 用户

  1. 用户登录和注册功能。
  2. 资讯功能:用户可以任意浏览资讯列表和详细信息菜品库:支持通过查询来查找所需要菜品。
  3. 菜品信息:击到菜品详情页面,可以查看菜品介绍、图片、价格、销售、已购买户评论。
  4. 菜品收藏:在操作信息.详情,下方点击“收藏",进行收藏。
  5. 菜品选购:在菜品的详情页面,点击“加入购物车”,也可以直接点击“立即购买”菜品购物车:列出打算下单的菜品列表,支持数量增加和减小。
  6. 取消订单:在“我的订单”列表中,针对没有付款的订单,点击“取消申请",删除订单去付款::在“我的订单”咧表中,点击“去付款”,模拟付款。
  7. 留言:填写留言的内容,提交到网站管理后台。

2.2 管理员

  1. 会员列表:查看所有注册会员信息,支持册除录入资讯:录入资讯标题、内容等信息。
  2. 管理资讯:查看已录入资讯列表,支持删除和修改留言列表:所有用户留言信息列表,支持册除。
  3. 菜品分类管理:支持录入、查看、修改和册除已有分类。
  4. 菜品录入:选择菜品分类、录入菜品名称、库存、已销售、价格、上传菜品图片、填写菜品介绍。
  5. 菜品管理:查看所有已经录入的菜品信息、支持修改和册除。
  6. 菜品订单:查看所有用户下单的订单信息,包括下单时间、费用、用户信息、订单菜品信息和备注等。
  7. 订单处理:处理菜品信息等。

三、系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、核心代码

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 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

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

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

相关文章

0基础学习VR全景平台篇第143篇:限定访问功能

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01;这期&#xff0c;我们将为大家介绍如何使用限定访问功能。 一.什么是限定访问功能&#xff1f; 限定访问&#xff0c;就是可以在编辑后台设置可以访问作品的用户的类型&#xff0c;还有可以访问作品的IP…

【leetcode热题】环形链表

难度&#xff1a; 简单通过率&#xff1a; 34.9%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个链表&#xff0c;判断链表中是否有环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索…

【CSS】简单的抽屉面板展开收起自然过渡效果的css

目录 效果展示css固定梯形按钮至抽屉面板中间梯形按钮css过渡动画 效果展示 1.收起时点击蓝色梯形按钮展开 2. 展开时点击蓝色按钮收起 3.展开收起时需要过渡自然&#xff0c;有抽屉推拉效果 css 固定梯形按钮至抽屉面板中间 .toggle{ position: absolute;left:-21px;top…

pdf文件超出上传大小怎么压缩?值得学习的几个方法

平时我们在使用pdf文件的时候&#xff0c;不管是上传还是进行存储&#xff0c;都会面临pdf太大的情况&#xff0c;尤其是当我们需要把pdf文件上传到一些平台上去的时候&#xff0c;那么pdf怎么压缩的小一点呢&#xff1f;为了解决这个问题&#xff0c;可以通过一些软件将pdf压缩…

关于并发编程和并行

目录 前言: 并发编程: 1.并发编程的定义: 2. 并发编程的目的 2.1提高性能&#xff1a; 2.2增强响应性&#xff1a; 2.3资源利用&#xff1a; 3. 并发编程的实现方式 3.1多线程&#xff1a; 3.2多进程&#xff1a; 3.3异步编程&#xff1a; 3.4协程&#xff1a; 4. …

【JAVA/Web】数组转对象

一. 需求 数组转对象 数组结构 List:[{id:1,code:phone,value:10101001},{id:2,code:name,value:admin},{id:3,code:address,value:XXXXXX} ]二. 数组转对象&#xff08;键值对映射关系&#xff09; 对象结构 object:{phone:10101001,name:admin,address:XXXXXX }2.1 Java…

桌搭和DIY,或许攒机才能满足宅男们的情绪价值

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 最近几年&#xff0c;人们突然对品牌机没有那么感兴趣了&#xff0c;反而重新开始热衷于自己动手攒机。这…

Android14音频进阶:AudioTrack如何拿到AudioFlinger创建的匿名共享内存(六十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

阿里云域名在腾讯云处做接入备案的操作流程

根据注册的相关规定&#xff0c;“谁连接谁负责”&#xff0c;所以你使用的服务器都会向服务器注册。 例如&#xff0c;您在腾讯云上购买了域名并成功注册&#xff0c;但现在切换到阿里云服务器&#xff0c;那么访问注册就必须在阿里云中进行&#xff08;PS&#xff1a;具体请参…

Jenkins集成SonarQube

文章目录 SonarQube端开启权限验证生成Jenkins登录的token Jenkins端安装SonarQube Scanner插件配置SonarQube凭证配置Jenkins的Sonar Qube信息配置SonarQube Scanner 配置项目的SonarScannerJAVA项目C#项目 效果 SonarQube端 开启权限验证 生成Jenkins登录的token 生成后记得…

如何在Linux用Docker部署MySQL数据库并远程访问本地数据库

文章目录 前言1 .安装Docker2. 使用Docker拉取MySQL镜像3. 创建并启动MySQL容器4. 本地连接测试4.1 安装MySQL图形化界面工具4.2 使用MySQL Workbench连接测试 5. 公网远程访问本地MySQL5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主…

RabbitMQ理论:RabbitMQ学习思维导图

参考资料 RabbitMQ五种消息模型

信号隔离器4-20mA一进二出直流电流电压变送模拟量输出0-10V泰华

品牌&#xff1a;泰华仪表 您需要一款这样的隔离器&#xff0c;转换精度高&#xff0c;响应速度快&#xff0c;耐压隔离高&#xff0c;三端隔离技术&#xff0c;低功耗。 DC24V供电&#xff0c;为现场的变送器提供隔离配电电源&#xff0c;同时将变送器产生的电流信号从现场…

Springboot 打成jar包后 结合idea remote 远程debug

1、将测试demo打成jar 2、 将jar放到某个目录下&#xff0c;并运行起来 java -jar -agentlib:jdwptransportdt_socket,servery,suspendn,address*:10087 base_admin-1.0.0.jar 3、在Idea中编辑Remote调试 4、在浏览器中打开刚启动的jar&#xff0c;比如我的项目地址&#x…

在NAT模式下,局域网内的其他电脑要访问使用NAT模式的虚拟机或设备

在NAT模式下&#xff0c;局域网内的其他电脑要访问使用NAT模式的虚拟机或设备 可以通过以下几种方式&#xff1a; 1、端口映射&#xff1a;在NAT模式下&#xff0c;你可以配置端口映射&#xff0c;类似于Docker中的端口映射。这样&#xff0c;局域网内的其他电脑就可以通过特…

Galxe:被低估的加密市场掘金地+Web3门户

在BTC ETF获得 SEC 的批准之后&#xff0c;机构资金大量买入推动BTC上涨&#xff0c;并带动整个加密市场回暖进入牛市。那么&#xff0c;对于习惯了熊市保守心态的投资者来说&#xff0c;接下来如何转换策略适应牛市&#xff1f;对即将进场的Web2用户来说&#xff0c;如何玩赚W…

一次简单操作代替所有异常处理

一、背景 在服务端处理前端发过来的响应的时候&#xff0c;开发者不可能穷尽用户的所有奇怪的操作。除此之外&#xff0c;我们还需要应付前端人员对我们的无情吐槽&#xff0c;你对XXXX请求返回的为啥是奇怪的响应数据呢&#xff1f;于是全局异常处理应运而生&#xff0c;一次处…

奖励建模(Reward Modeling)实现人类对智能体的反馈

奖励建模&#xff08;Reward Modeling&#xff09;是强化学习中的一个重要概念和技术&#xff0c;它主要用于训练智能体&#xff08;如AI机器人或大型语言模型&#xff09;如何更有效地学习和遵循人类期望的行为。在强化学习环境中&#xff0c;智能体通过尝试不同的行为获得环境…

C#实现插入排序算法

C#实现插入排序算法 以下是使用C#实现插入排序算法的示例代码&#xff1a; using System;class InsertionSort {static void Main(string[] args){int[] arr { 64, 25, 12, 22, 11 };Console.WriteLine("排序前&#xff1a;");PrintArray(arr);InsertionSortAlgori…

JavaScript 二分查找(迭代与递归)

二分搜索被定义为一种在排序数组中使用的搜索算法&#xff0c;通过重复将搜索间隔一分为二。二分查找的思想是利用数组已排序的信息&#xff0c;将时间复杂度降低到O(log N)。 二分查找算法示例 何时在数据结构中应用二分查找的条件&#xff1a; 应用二分查找算法&#xff1a…