【开源】基于Vue和SpringBoot的社区买菜系统

news2024/11/19 1:52:47

在这里插入图片描述

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

目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、系统设计
    • 2.1 功能模块设计
      • 2.1.1 数据中心模块
      • 2.1.2 菜品分类模块
      • 2.1.3 菜品档案模块
      • 2.1.4 菜品订单模块
      • 2.1.5 菜品收藏模块
      • 2.1.6 收货地址模块
    • 2.2 可行性分析
    • 2.3 用例分析
    • 2.4 实体类设计
      • 2.4.1 菜品分类模块
      • 2.4.2 菜品档案模块
      • 2.4.3 菜品订单模块
      • 2.4.4 菜品收藏模块
      • 2.4.5 收货地址模块
  • 三、系统实现
  • 四、核心代码展示
    • 4.1 菜品实体类设计
    • 4.2 收货地址实体类设计
    • 4.3 查询菜品接口设计
    • 4.4 菜品下单接口设计
    • 4.5 菜品收藏接口设计
  • 五、免责说明


一、摘要

1.1 项目介绍

基于Vue+SpringBoot+MySQL的社区买菜系统包含菜品分类模块、菜品档案模块、菜品订单模块、菜品收藏模块、收货地址模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,社区买菜系统基于角色的访问控制,给买菜者、菜品管理员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

随着计算机技术和网络技术的日益普及,给社区菜市场信息化建设带来了机遇,利用先进技术建立多种方式的社区买菜系统,这是一个明智的选择。通过电子屏和网站两种方式发布市场管理信息、商品信息(包括价格、质量等),能够起到增强市场和市民之间的信息交流,达到繁荣市场,更好的为市民服务之目的。本文采用B/S 模式相结合的架构,设计和实现了基于 Java EE 的社区买菜系统。

1.2 项目录屏

源码下载


二、系统设计

2.1 功能模块设计

社区买菜系统的功能性需求主要包含数据中心模块、菜品分类模块、菜品档案模块、菜品订单模块、菜品收藏模块、收货地址模块这六大模块,系统是基于浏览器运行的web管理后端,其中各个模块详细说明如下。
在这里插入图片描述

2.1.1 数据中心模块

数据中心模块包含了社区买菜系统的系统基础配置,如登录用户的管理、运营公司组织架构的管理、用户菜单权限的管理、系统日志的管理、公用文件云盘的管理。

其中登录用户管理模块,由管理员负责运维工作,管理员可以对登录用户进行增加、删除、修改、查询操作。

组织架构,指的是高校的组织架构,该模块适用于管理这些组织架构的部门层级和教师的部门归属情况。

用户菜单权限管理模块,用于管理不同权限的用户,拥有哪些具体的菜单权限。

系统日志的管理,用于维护用户登入系统的记录,方便定位追踪用户的操作情况。

公用云盘管理模块,用于统一化维护社区买菜系统中的图片,如合同签订文件、合同照片等等。

在这里插入图片描述

2.1.2 菜品分类模块

不同的菜品有着不同的类型,不同类型的菜品往往需要区分管理,所以需要建立菜品分类模块,菜品分类的数据包括类型名称、类型状态、排序值、备注、创建人、创建时间、更新人、更新时间,管理员可以新增、删除、编辑和条件查询角色数据,用户可以查询管理员发布的角色数据。
在这里插入图片描述

2.1.3 菜品档案模块

菜品是社区买菜系统的核心实体,需要建立菜品档案模块对系统上架的菜品数据进行管理,菜品的字段包括菜品名称、菜品介绍、菜品分类、剩余库存、创建人、创建时间、更新人、更新时间,管理员可以新增、删除、编辑和条件查询菜品数据,用户可以查询管理员发布的菜品数据。
在这里插入图片描述

2.1.4 菜品订单模块

有了菜品数据之后,用户就可以在社区买菜系统中下单了,菜品订单的数据包括菜品、下单数量、总价、收货地址、创建人、创建时间、更新人、更新时间,用户可以发起下单申请,管理员可以处理用户发起的菜品订单。

在这里插入图片描述

2.1.5 菜品收藏模块

为了更好的服务用户,社区买菜系统支持对菜品进行收藏,以便于用户更方便快捷的下单自己喜欢的菜品,菜品收藏字段包括菜品ID、菜品名称、菜品图片、收藏人、创建人、创建时间、更新人、更新时间,用户可以发起菜品收藏申请,管理员可以查询用户的菜品收藏信息。

在这里插入图片描述

2.1.6 收货地址模块

为了方便用户更快捷的下单,用户可以对自己的收货地址进行管理,在菜品下单时可以快捷选择自己维护的收货地址。收货地址字段包括挂靠人、收货地址、联系人、联系电话、创建人、创建时间、更新人、更新时间,用户可以新增、编辑、删除和条件查询自己的收货地址,管理员可以查询全部用户的收货地址。

在这里插入图片描述

2.2 可行性分析

我将首先调查同类型市场的社区买菜系统,了解其优缺点,然后询问一些与系统和买菜相关的专家,并与他们讨论我们的初步想法。然后,我将对客户进行实地调查,以了解他们对这类社区买菜系统的具体要求。最后,我们将总结上述所有要点,以澄清我们的系统与类似产品之间的区别,并确定我们将开发的社区买菜系统的特点,使其在推出后在市场上更有前景。

2.3 用例分析

UML是面向对象的图形化建模语言,具有表示容易,定义友好,适用范畴广泛,功能强大。

用例图是用例模型的一种,需求分析人员可采用用例图表示用户操作行为。社区买菜系统的用例图设计主要包括用户用例设计和管理员用例设计。
在这里插入图片描述

2.4 实体类设计

2.4.1 菜品分类模块

在这里插入图片描述

2.4.2 菜品档案模块

在这里插入图片描述

2.4.3 菜品订单模块

在这里插入图片描述

2.4.4 菜品收藏模块

在这里插入图片描述

2.4.5 收货地址模块

在这里插入图片描述


三、系统实现

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


四、核心代码展示

4.1 菜品实体类设计

@Table(name = "a_dish")
@TableName("a_dish")
@ApiModel(value = "菜品")
public class Dish extends ZwzBaseEntity {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "菜品名称")
    private String title;

    @ApiModelProperty(value = "菜品介绍")
    private String content;

    @ApiModelProperty(value = "菜品分类")
    private String type;

    @ApiModelProperty(value = "单价")
    private BigDecimal unit;

    @ApiModelProperty(value = "剩余库存")
    private BigDecimal stock;

    @ApiModelProperty(value = "供应商")
    private String supplier;

    @ApiModelProperty(value = "图片")
    private String image;

    @Transient
    @TableField(exist=false)
    @ApiModelProperty(value = "是否收藏")
    private Boolean collectionFlag;
}

4.2 收货地址实体类设计

@Table(name = "a_shipping_address")
@TableName("a_shipping_address")
@ApiModel(value = "收货地址")
public class ShippingAddress extends ZwzBaseEntity {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "挂靠人ID")
    private String userId;

    @ApiModelProperty(value = "挂靠人")
    private String userName;

    @ApiModelProperty(value = "收货地址")
    private String address;

    @ApiModelProperty(value = "收货人")
    private String consignee;

    @ApiModelProperty(value = "联系电话")
    private String mobile;
}

4.3 查询菜品接口设计

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询菜品")
public Result<IPage<Dish>> getByPage(@ModelAttribute Dish dish ,@ModelAttribute PageVo page){
    QueryWrapper<Dish> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(dish.getTitle())) {
        qw.like("title",dish.getTitle());
    }
    if(!ZwzNullUtils.isNull(dish.getContent())) {
        qw.like("content",dish.getContent());
    }
    if(!ZwzNullUtils.isNull(dish.getSupplier())) {
        qw.like("supplier",dish.getSupplier());
    }
    User currUser = securityUtil.getCurrUser();
    IPage<Dish> data = iDishService.page(PageUtil.initMpPage(page),qw);
    for (Dish vo : data.getRecords()) {
        QueryWrapper<DishCollection> collQw = new QueryWrapper<>();
        collQw.eq("user_id",currUser.getId());
        collQw.eq("dish_id",vo.getId());
        vo.setCollectionFlag(iDishCollectionService.count(collQw) > 0L);
    }
    return new ResultUtil<IPage<Dish>>().setData(data);
}

4.4 菜品下单接口设计

@RequestMapping(value = "/addOneOrder", method = RequestMethod.POST)
@ApiOperation(value = "从购物车下单")
public Result<Object> addOneOrder(@RequestParam String[] ids){
    List<DishOrderItem> itemList = new ArrayList<>();
    List<ShoppingCart> cartList = new ArrayList<>();
    BigDecimal sumMoney = BigDecimal.ZERO;
    for(String id: ids) {
        ShoppingCart sc = iShoppingCartService.getById(id);
        if(sc == null) {
            return ResultUtil.error("购物车已被删除");
        }
        cartList.add(sc);
        Dish dish = iDishService.getById(sc.getDishId());
        if(dish == null) {
            return ResultUtil.error("菜品已下架");
        }
        DishOrderItem item = new DishOrderItem();
        item.setDishId(dish.getId());
        item.setDishName(dish.getTitle());
        item.setUnit(dish.getUnit());
        item.setImage(dish.getImage());
        item.setNumber(sc.getNumber());
        item.setSumMoney(item.getUnit().multiply(item.getNumber()));
        itemList.add(item);
        sumMoney = sumMoney.add(item.getSumMoney());
    }
    User currUser = securityUtil.getCurrUser();
    DishOrder order = new DishOrder();
    order.setUserId(currUser.getId());
    order.setUserName(currUser.getNickname());
    order.setOrderTime(DateUtil.now());
    order.setSumMoney(sumMoney);
    order.setOrderSize(BigDecimal.valueOf(itemList.size()));
    order.setStatus("已下单");
    iDishOrderService.saveOrUpdate(order);
    for (DishOrderItem item : itemList) {
        item.setOrderId(order.getId());
        iDishOrderItemService.saveOrUpdate(item);
    }
    for (ShoppingCart vo : cartList) {
        iShoppingCartService.removeById(vo.getId());
    }
    return ResultUtil.success();
}

4.5 菜品收藏接口设计

@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "添加单条收藏")
public Result<Object> addOne(@RequestParam String id){
    Dish dish = iDishService.getById(id);
    if(dish == null) {
        return ResultUtil.error("菜品不存在");
    }
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<DishCollection> qw = new QueryWrapper<>();
    qw.eq("user_id",currUser.getId());
    qw.eq("dish_id",dish.getId());
    if(iDishCollectionService.count(qw) > 0L) {
        return ResultUtil.error("您已收藏");
    }
    DishCollection dc = new DishCollection();
    dc.setDishId(dish.getId());
    dc.setDishName(dish.getTitle());
    dc.setUserId(currUser.getId());
    dc.setUserName(currUser.getNickname());
    dc.setCollectionTime(DateUtil.now());
    iDishCollectionService.saveOrUpdate(dc);
    return ResultUtil.success();
}

五、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

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

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

在这里插入图片描述

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

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

相关文章

浅谈抄表环境对抄表质量的影响

众所周知&#xff0c;抄表环境对抄表质量影响是不言而喻的。不仅影响着营销“三率”&#xff0c;还影响着企业的社会形象。尽管&#xff0c;随着水表出户、物联网技术的发展&#xff0c;抄表环境得到很大改善&#xff0c;但受资金、政策、技术的制约&#xff0c;抄表环境问题仍…

深入了解Java Period类,对时间段的精确控制

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概2900多字&#xff0c;预计阅读时间长需要3分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…

二阶变系数线性微分方程

1、变量替换法 欧拉方程 是常数&#xff0c;是已知的函数。 二阶欧拉方程 (1) 当时&#xff0c;令,则 代入&#xff08;1&#xff09;中&#xff0c; .这样就把欧拉方程&#xff0c;化成了二阶常系数非齐次微分方程 当x<0时&#xff0c;令, 例题 解:令,则 代入上面的推…

VPS服务器”性价比之王”系列:RackNerd

2023 黑五&#xff01;&#xff01;&#xff01;新 Ryzen 系列 洛杉矶dc02机房重新补货&#xff01; 支付方式&#xff1a;支付宝、PayPal、信用卡、数字货币 2023 黑五促销活动&#xff08;限量&#xff09; CPU内存硬盘(SSD)流量带宽价格(续费同价)购买链接1核768 MB15GB…

GSLB是什么?谈谈对该技术的一点理解

GSLB是什么&#xff1f;它又称为全局负载均衡&#xff0c;是主流的负载均衡类型之一。众所周知&#xff0c;负载均衡位于服务器的前面&#xff0c;负责将客户端请求路由到所有能够满足这些请求的服务器&#xff0c;同时最大限度地提高速度和资源利用率&#xff0c;并确保无任何…

acwing-Linux学习笔记

acwing-Linux课上的笔记 acwing-Linux网址 文章目录 1.1常用文件管理命令homework作业测评命令 2.1 简单的介绍tmux与vimvimhomeworktmux教程vim教程homework中的一些操作 3 shell语法概论注释变量默认变量数组expr命令read命令echo命令printf命令test命令与判断符号[]逻辑运算…

【Virtual Box】显示界面后无反应

本文记录本人在使用Virtual Box中遇到的问题 1.Virtual Box启动后无反应点击菜单栏是可用的&#xff0c;但界面里的无法操作 【解决方法】&#xff1a;以管理员身份启动virtual Box

Linux:dockerfile编写搭建tomcat练习(9)

我使用的httpyum仓库 本地使用了5个文件&#xff0c;tomcat使用的官网解压直接用的包】 Dockerfile 主配置文件 基于centos基础镜像 jdk1.8.0_91 java环境 run.sh 启动脚本 centos.repo 仓库文件 tomcat 源码包 vim Dockerfile写入FROM centos MAINTAINER ta…

Java 设计模式——备忘录模式

目录 1.概述2.结构3.案例实现3.1.“白箱”备忘录模式3.2.”黑箱”备忘录模式 4.优缺点5.使用场景 1.概述 &#xff08;1&#xff09;备忘录模式 (Memento Pattern) 又称为快照模式&#xff0c;是一种行为型设计模式&#xff0c;它提供了一种保存和恢复对象状态的机制。备忘录模…

Python-图片去重

直接上代码 # 修改一下第34行文件夹路径以及13行图片后缀名即可使用 import os from hashlib import md5def remove_duplicate_images(folder_path):image_files []duplicate_images set()# 遍历文件夹&#xff0c;找到所有 JPG 图片文件for root, dirs, files in os.walk(f…

夜莺专业版网络设备功能介绍

网络设备采集简介 网络设备的问题通常会产生较大范围的影响&#xff0c;因此采集监控网络设备是一项常见的任务。不同公司在实施网络设备采集时可能采用不同的方案&#xff0c;主要有三类&#xff1a; SNMP&#xff08;Simple Network Management Protocol&#xff09;&#x…

【源码篇】基于SpringBoot+Vue实现的在线考试系统

文章目录 系统说明技术选型成果展示账号地址及其他说明 系统说明 基于SpringBootVue实现的在线考试系统是为高校打造的一款在线考试平台。 系统功能说明 1、系统共有管理员、老师、学生三个角色&#xff0c;管理员拥有系统最高权限。 2、老师拥有考试管理、题库管理、成绩管…

⭐ Unity + ARKIT 介绍 以及 平面检测的实现

在AR插件中&#xff0c;ARKIT是比较特殊的一个&#xff0c;首先他在很多追踪上的效果要比其他的AR插件要好&#xff0c;但是只能在IOS系统设备上运行。 1.首先ARKIT在最新版Unity已经集成在AR Foundation中&#xff0c;那我们就需要ARSession 和ARSessionOrigin这两个重要组件…

【CMD】工具脚本-输出其他cmd脚本的头部注释

小轮子&#xff0c;用于管理自己的脚本。 如下图的运行结果所示&#xff0c;效果便是输出本工具脚本所在路径下的其他cmd脚本的头部注释(用于提醒健忘的自己曾经写了啥东西。 可以把不时会用得上的个人脚本&#xff0c;集中放进一个文件夹中&#xff0c;然后将这个文件夹的路径…

【C++】赋值运算符重载

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

“学习强国”学习达人挑战赛流程

“学习强国”学习达人挑战赛通过赛易知识竞赛云平台完成&#xff0c;完整竞赛流程和规则如下&#xff1a; 比赛形式&#xff1a;“学习强国”学习平台首届达人挑战赛决赛为电视知识竞赛&#xff0c;前期需录入100名选手个人信息与各环节竞赛题库。 比赛载体&#xff1a;手机在…

龙迅#LT6911GX是一款高性能HDMI2.1至MIPI或LVDS芯片,支持图像处理,DSC压缩和嵌入式LPDDR4 旋转功能!

1.描述 应用功能&#xff1a;LT6711GX适用于HDMI2.1转MIPICSI/DSI&#xff1b;HDMI2.1转LVDS&#xff0c;支持高刷模式&#xff0c;带HDCP 方案&#xff01; 分辨率&#xff1a;最高支持8K30HZ 工作温度范围&#xff1a;−40C to 85C 产品封装&#xff1a;BGA169&#xff08;9*…

RabbitMQ 的七种消息传递形式

文章目录 一、RabbitMQ 架构简介二、准备工作 三、消息收发1. Hello World2. Work queues3. Publish/Subscrite3.1. Direct3.2. Fanout3.3. Topic3.4. Header 4. Routing5. Topics 大部分情况下&#xff0c;我们可能都是在 Spring Boot 或者 Spring Cloud 环境下使用 RabbitMQ&…

【powerjob】定时任务调度器 xxl-job和powerjob对比

文章目录 同类产品对比资源及部署相关资源占用对比&#xff1a;部署方式&#xff1a;xxl job :调度器&#xff1a;执行器&#xff1a; powerjob&#xff1a;调度器&#xff1a;执行器&#xff1a; 总结 背景&#xff1a; 目前系统的定时任务主要通过Spring框架自带的Scheduled注…

SpringBoot:SpringMVC(上)

文章目录 前言一、SpringMVC是什么&#xff1f;1.1 MVC的定义&#xff1a;1.2 MVC 和 Spring MVC 的关系 二、Spring MVC 创建和连接2.1创建springmvc2.2接下来&#xff0c;创建⼀个 UserController 类&#xff0c;实现⽤户到 Spring 程序的互联互通&#xff0c;具体实现代码如…