【开源】基于Vue和SpringBoot的农家乐订餐系统

news/2024/7/10 21:46:03 标签: 开源, vue.js, spring boot

在这里插入图片描述

项目编号: S 043 ,文末获取源码。 \color{red}{项目编号:S043,文末获取源码。} 项目编号:S043,文末获取源码。


目录

  • 一、摘要
    • 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.niftyadmin.cn/n/5214932.html

相关文章

在浏览器中直接打开PDF

1 使用iframe标签 <iframe src"./test.pdf" height"900px;" width"800px"></iframe> 如果PDF是base64参考如下 <iframe id"pdfView" width"100%" height"100%" allow"fullscreen" typ…

c++ 重写 多态

1 重写(继承后(拼接基类后)) 1.1 非虚函数 同名成员函数 (各自有一个xFunction() 内存 ) #include <iostream> #include <String> class BaseClass { public:void xFunction() {std::cout << "BaseClass::xFunction()\n"; } };class Subclass1 …

Mono 8、Mono 10、Mono 10 Packed、Mono 12、Mono 12 Packe等像素格式简介

Mono 8、Mono 10、Mono 10 Packed、Mono 12、Mono 12 Packed这几种像素格式在灰度图中的区别和联系如下&#xff1a; Mono 8&#xff1a;每个像素使用8位&#xff08;1字节&#xff09;表示灰度值&#xff0c;范围是0-255。这种格式在处理黑白图像时非常常见。 Mono 10&#…

微软 Edge 浏览器目前无法支持 avif 格式

avif 格式在微软 Edge 浏览器中还是没有办法支持。 如果你希望能够查看 avif 格式&#xff0c;那么只能通过浏览器打开&#xff0c;然后浏览器将会把这个文件格式下载到本地。 avif 格式已经在其他的浏览器上得到了广泛的支持&#xff0c;目前不支持的可能就只有 Edge 浏览器。…

使用Ruby过滤目录容量大小

实际使用的&#xff0c;显示大于某种容量的目录或文件。 #encoding:utf-8input STDIN.read input.lines.each do |line|num line.gsub(/^([0-9\.])G.*$/,"\\1")if num.to_i > ARGV[0].to_iputs lineend end使用如下命令运行&#xff1a; $ du -hs * 2>/dev…

思维模型 波纹效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。小变化&#xff0c;大影响。 1 波纹效应的应用 1.1 波纹效应在市场中的应用 2008 年&#xff0c;美国金融危机爆发&#xff0c;导致全球经济陷入衰退。这场危机的起因是美国房地产市场的崩…

Redis-Redis 高并发分布式锁

集群分布式场景高并发 1.negix配置代理和路由 高并发场景超卖问题 1.使用原生redis控制超卖时(若是商品&#xff0c;则可以将商品id作为锁对象)&#xff0c;会遇到的问题 问题一&#xff1a;若直接使用&#xff1a;将获取锁的对象和设置的超时的时间分开&#xff0c;则不能控…

基于改进莱维飞行和混沌映射粒子群优化算法(LPSO)-BP神经网络的时间序列预测模型

基于改进莱维飞行和混沌映射粒子群优化算法(LPSO)原理&#xff1a; 通过引入混沌映射机制&#xff0c;对其群体进行初始化&#xff0c;增加粒子群个体的多样性&#xff1b;然后在粒子群个体的位置更新公式上引入改进的莱维飞行机制&#xff0c;提高搜索精度&#xff0c;帮助粒…