计算机毕业设计 社区买菜系统 Vue+SpringBoot+MySQL

作者主页:Designer 小郑
作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师,全栈领域优质创作者。

在这里插入图片描述

项目内容
项目名称 社区买菜系统( S 011 ) \color{red}{社区买菜系统(S011)} 社区买菜系统(S011
项目类型付费项目
源码获取源码自助获取
部署版无需源码即可在本地运行
交流答疑帖你可以在贴吧中交流讨论该项目
项目录屏你可以查看本项目的动态演示
增值服务 文档、部署、讲解 \color{red}{文档、部署、讲解} 文档、部署、讲解】《付费项目服务标准》

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

目录

  • 一、摘要
  • 二、系统设计
    • 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 收货地址模块
  • 三、系统实现
    • 3.1 系统展示
    • 3.2 配套文档展示
  • 四、核心代码展示
    • 4.1 菜品实体类设计
    • 4.2 收货地址实体类设计
    • 4.3 查询菜品接口设计
    • 4.4 菜品下单接口设计
    • 4.5 菜品收藏接口设计
  • 五、免责说明


一、摘要

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


二、系统设计

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 收货地址模块

在这里插入图片描述


三、系统实现

3.1 系统展示

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

3.2 配套文档展示

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


四、核心代码展示

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.mzph.cn/news/68505.shtml

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

相关文章

electron win系统通知修改通知标题栏

标题栏的 electron.app.Electron 如何修改&#xff1a; var package require("../package.json"); app.setAppUserModelId(package.description); app.setAppUserModelId 在主进程的app这里修改

R语言Meta分析核心技术

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

使用ICMP协议来判断UDP端口的存活状态

我们使用了原始套接字&#xff08;socket.SOCK_RAW&#xff09;来发送和接收ICMP消息&#xff0c;也就是通过模拟ICMP协议来进行UDP端口的探测。我们构造了一个简单的ICMP数据包&#xff0c;并将其发送到目标主机的特定端口。然后&#xff0c;我们等待接收目标主机返回的ICMP消…

SpringBoot2.0(Spring读取配置文件常用方法,打war包在Tomcat中启动)

目录 一&#xff0c;SpringBoot中读取配置文件的常用方法1.1&#xff0c;使用Value读取1.2&#xff0c;使用ConfigurationProperties1.3&#xff0c;使用Environment1.4&#xff0c;自定义配置文件读取 二&#xff0c;SpringBoot部署war项目到tomcat9和启动原理 一&#xff0c;…

详解4种类型的爬虫技术

聚焦网络爬虫是“面向特定主题需求”的一种爬虫程序&#xff0c;而通用网络爬虫则是捜索引擎抓取系统&#xff08;Baidu、Google、Yahoo等&#xff09;的重要组成部分&#xff0c;主要目的是将互联网上的网页下载到本地&#xff0c;形成一个互联网内容的镜像备份。 增量抓取意…

fastjson2 打开 AutoType

1. 功能简介 FASTJSON支持AutoType功能&#xff0c;这个功能在序列化的JSON字符串中带上类型信息&#xff0c;在反序列化时&#xff0c;不需要传入类型&#xff0c;实现自动类型识别。 2. AutoType安全机制介绍 必须显式打开才能使用。和fastjson 1.x不一样&#xff0c;fast…

HTML <map> 标签的使用

map标签的用途&#xff1a;是与img标签绑定使用的&#xff0c;常被用来赋予给客户端图像某处区域特殊的含义&#xff0c;点击该区域可跳转到新的文档。 编写格式&#xff1a; <img src"图片" border"0" usemap"#planetmap" alt"Planets…

【vue】vuex持久化插件vuex-persistedstate:

文章目录 一、说明&#xff1a;二、手动利用HTML5的本地存储&#xff1a;三、利用vuex-persistedstate插件【1】安装【2】配置使用【3】存储sessionStorage的情况【4】存储cookie的情况【5】默认持久化所有state&#xff0c;指定需要持久化的state,配置如下【6】vuex引用多个插…

ElementUI浅尝辄止23:Loading 加载

Loading加载组件&#xff1a;加载数据时显示动效。 常见于加载数据量大的业务操作&#xff0c;附带动态效果。 1.如何使用&#xff1f;区域加载 在表格等容器中加载数据时显示。 /*Element 提供了两种调用 Loading 的方法&#xff1a;指令和服务。对于自定义指令v-loading&am…

公园气象站——观测实时气象,保障游客安全

公园气象站是一种用于监测和记录气象数据的系统。在公园内设置公园气象站可以帮助我们了解公园内的气候状况&#xff0c;包括空气湿度、空气温度、风速和风向等参数。这些数据是公园管理、游客安全和环境保护等方面重要的辅助依据。 负氧离子监测&#xff1a;负氧离子是指空气…

数学建模--非多项式拟合法的Python实现

目录 1.算法异同区别 2.算法核心步骤 3.算法核心代码 4.算法效果展示 1.算法异同区别 #*************************************************************************************************************# 方法区别探究 1.对于多项式拟合你需要大致知道这些点的分布&#xf…

Dubbo 接口测试原理及多种方法实践总结

1、什么是 Dubbo&#xff1f; Dubbo 最开始是应用于淘宝网&#xff0c;由阿里巴巴开源的一款优秀的高性能服务框架&#xff0c;由 Java 开发&#xff0c;后来贡献给了 Apache 开源基金会组织。 下面以官网的一个说明来了解一下架构的演变过程&#xff0c;从而了解 Dubbo 的诞…

如何使用SQL系列 之 如何在SQL中使用WHERE条件语句

引言 在结构化查询语言 (SQL)语句中&#xff0c;WHERE子句限制了给定操作会影响哪些行。它们通过定义特定的条件(称为搜索条件)来实现这一点&#xff0c;每一行都必须满足这些条件才能受到操作的影响。 本指南将介绍WHERE子句中使用的通用语法。它还将概述如何在单个WHERE子句…

开了抖店后就可以直播带货了吗?想在抖音带货的,建议认真看完!

我是王路飞。 关于抖店和直播带货的关系&#xff0c;其实很多人经常搞不清楚。 不然的话&#xff0c;也不会有这个问题的出现了&#xff1a;开了抖店后就可以直播带货了吗&#xff1f; 在我看来&#xff0c;这个问题很简单&#xff0c;但在不了解抖音电商和直播带货其中门道…

LeetCode——和为K的子数组(中等)

题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], k 3 输出&#xff1a;2 题解 …

The WebSocket session [x] has been closed and no method (apart from close())

在向客户端发送消息时&#xff0c;session关闭了。 不管是单客户端发送消息还是多客户端发送消息&#xff0c;在发送消息之前判断session 是否关闭 使用 isOpen() 方法

Mysql-DML(数据处理语言)

-- 插入数据 insert into member values(1,张三,21,5000); insert into member(id,name) values(2,李四); insert into member values(3,王五,23,3000) ,(4,纪六,24,4000) ,(5,查七,25,5000); -- 更新&#xff08;修改数据) 不加限制条件 该字段全部修改 update member set age…

python .gitignore文件配置

logs/ venv/ *.log .idea/ dist/test.py注意&#xff1a;.gitignore最好放在根目录中。如果gitignore放在被忽略的父目录中&#xff0c;那忽略文件就无法生效。 .gitignore规则 .gitignore只能忽略那些原来没有被track的文件&#xff0c;如果某些文件已经被纳入了版本管理中&…

Elasticsearch 8.X 可以按照数组下标取数据吗?

1、线上环境问题 老师、同学们&#xff0c;有人遇到过这个问题么&#xff0c;索引中有一个 integer 数组字段&#xff0c;然后通过脚本获取数组下标为1的值作为运行时字段&#xff0c;发现返回的值是乱的&#xff0c;并不是下标为1的值&#xff0c; 具体如下: DELETE my_index …

sql:SQL优化知识点记录(六)

&#xff08;1&#xff09;索引优化1 查看一下有没有建立索引&#xff1a; 用到索引中的一个&#xff1a;type中的ref决定访问性能 用到索引中的两个&#xff1a;通过key_len的长度可以看出来&#xff0c;比第一个大一点。或者通过ref&#xff1a;中用到了两个常量const 用到了…