基于Spring Boot+Vue的学院食材采供管理系统

一.系统开发工具与环境搭建

1.系统设计开发工具


后端使用Java编程语言的Spring boot框架
项目架构:B/S架构
运行环境:win10/win11、jdk17


前端:
技术:框架Vue.js;UI库:ElementUI;
开发工具:Visual Studio Code;



后端:
技术:Java语言、mybatis plus、Spring boot框架;
开发工具:IDEA 2023.3.3版本;



数据库:
数据库:mysql5.7/8.0
数据库工具:Navicat12版本;


二. 系统实现(部分展示)

1.登录模块

系统一共分为三个角色,管理员,食堂工作人员,供应商。根据角色的不同而展示的界面有所不同。输入用户名和密码,并选择自己对应的角色进行登录。

关键代码如下:

public String SignIn(AppUserDto input){
LambdaQueryWrapper<AppUser> queryWrapper = Wrappers.<AppUser>lambdaQuery()
.eq(Extension.isNotNullOrEmpty(input.getUserName()),AppUser::getUserName,input.getUserName())
.eq(Extension.isNotNullOrEmpty(input.getPassword()),AppUser::getPassword,input.getPassword())
.eq(input.getRoleType()!=null,AppUser::getRoleType,input.getRoleType());List<AppUser> items=_AppUserMpper.selectList(queryWrapper);
if(items.stream().count()==0)
{
throw  new CustomException("请检查登录的账号或者密码,角色是否都正确!");
}
Map<String, String> map = new HashMap<>();
map.put(SysConst.UserIdClaim,items.get(0).getId().toString());
map.put(SysConst.RoleTypeClaim,items.get(0).getRoleType().toString());
String token=JWTUtils.getToken(map);
return token;
}

2.数据分析

三种角色,可以查看每个食堂档口所购买的食材种类及数量,为了便于他们更直观地理解这些数据,提供了图表展示的功能。

关键代码如下:

//查询当前档口的采购单
List<PurchasingOrder> purchasingOrderList = purchasingOrders.stream().filter(purchasingOrder -> purchasingOrder.getStallsId().equals(stalls.getId())).collect(Collectors.toList());
//并且订单状态为采购完成
purchasingOrderList = purchasingOrderList.stream().filter(purchasingOrder -> purchasingOrder.getPurchasingOrderStatus().equals(Enums.PurchasingOrderStatus.已完成.index())).collect(Collectors.toList());
//得到这些采购订单的Id集合
List<Integer> purchasingOrderIds = purchasingOrderList.stream().map(PurchasingOrder::getId).collect(Collectors.toList());
//查询出关联的采购订单明细
List<PurchasingOrderDet> dets = purchasingOrderDets.stream().filter(purchasingOrderDet -> purchasingOrderIds.contains(purchasingOrderDet.getPurchasingOrderId())).collect(Collectors.toList());
//得到这些采购订单明细的食材Id集合
List<Integer> foodIds = dets.stream().map(PurchasingOrderDet::getFoodId).collect(Collectors.toList());
//对食材进行去重
foodIds = foodIds.stream().distinct().collect(Collectors.toList());

3.系统通知管理

管理员向所有用户或特定的用户群体传达必要的信息。这些通知可能包含关于系统维护、更新、政策变更、安全警告或其他紧急事项的重要公告。

关键代码如下:

public SysNoticeDto Get(SysNoticePagedInput input) {
if(input.getId()==null)
{
return new SysNoticeDto();
}
PagedResult<SysNoticeDto>  pagedResult =List(input);
return pagedResult.getTotalCount()>0?pagedResult.getItems().stream().findFirst().get():new SysNoticeDto();
}

4.用户管理

管理员需要管理用户的账户信息,包括创建、编辑或删除用户账户。

关键代码如下:

public AppUserDto Get(AppUserPagedInput input) {
if(input.getId()==null)
{
return new AppUserDto();
}
PagedResult<AppUserDto>  pagedResult =List(input);
return pagedResult.getTotalCount()>0?pagedResult.getItems().stream().findFirst().get():new AppUserDto();
}

5.档口管理

管理员负责维护档口的详细信息,包括档口的位置、所属工作人员等。这些信息对于顾客了解档口服务至关重要。

关键代码如下:

IPage<Stalls> pageRecords = _StallsMpper.selectPage(page, queryWrapper);
//获取所有满足条件的数据行数
Long totalCount = _StallsMpper.selectCount(queryWrapper);
//把Stalls实体转换成Stalls传输模型
List<StallsDto> items = Extension.copyBeanList(pageRecords.getRecords(), StallsDto.class);
for (StallsDto item : items) 
//查询出关联的创建用户信息
AppUserDto CreatorAppUserDTO = new AppUserDto();
AppUser CreatorAppUserEntity = _AppUserMapper.selectOne(Wrappers.<AppUser>lambdaQuery().eq(AppUser::getId, item.getCreatorId()));
if (CreatorAppUserEntity != null) {
BeanUtils.copyProperties(CreatorAppUserDTO, CreatorAppUserEntity);
item.setCreatorAppUserDto(CreatorAppUserDTO);
}

6.食材管理

管理员需要管理食材的详细信息,如食材名称、价格、供应商信息、库存量等。这有助于确保食材的质量和供应的稳定性。

关键代码如下:

//声明一个支持食材查询的(拉姆达)表达式
LambdaQueryWrapper<Food> queryWrapper = Wrappers.<Food>lambdaQuery()
.eq(input.getId()!=null&&input.getId()!=0,Food::getId,input.getId())
.eq(input.getCreatorId()!=null,Food::getCreatorId,input.getCreatorId());

7.供应商管理

管理员负责配置和管理系统中的供应设置,包括供应商管理、价格设置、库存阈值等,以确保供应链的顺畅运作。

关键代码如下:

LambdaQueryWrapper<FoodSupply> queryWrapper = Wrappers.<FoodSupply>lambdaQuery()
.eq(input.getId() != null && input.getId() != 0, FoodSupply::getId, input.getId())
.eq(input.getCreatorId() != null, FoodSupply::getCreatorId, input.getCreatorId());
);

8.采购订单管理

管理员需要管理采购订单,包括档口、跟踪采购状态、采购日期等。这有助于确保食材和其他必需品的及时补充。

关键代码如下:

LambdaQueryWrapper<PurchasingOrder> queryWrapper = Wrappers.<PurchasingOrder>lambdaQuery()
.eq(input.getId() != null && input.getId() != 0, PurchasingOrder::getId, input.getId())
.eq(input.getCreatorId() != null, PurchasingOrder::getCreatorId, input.getCreatorId());

9.入库订单管理

管理员负责监督物品的入库流程,包括检查物品质量、记录入库数量、更新库存信息等。这是确保库存准确性的关键步骤。

关键代码如下:

LambdaQueryWrapper<InOrder> queryWrapper = Wrappers.<InOrder>lambdaQuery()
.eq(input.getId() != null && input.getId() != 0, InOrder::getId, input.getId())
.eq(input.getCreatorId() != null, InOrder::getCreatorId, input.getCreatorId());

10.出库订单管理

管理员需要管理物品的出库流程,包括订单状态、记录总数量、档口、用途等。

关键代码如下:


LambdaQueryWrapper<OutOrder> queryWrapper = Wrappers.<OutOrder>lambdaQuery()
.eq(input.getId() != null && input.getId() != 0, OutOrder::getId, input.getId())
.eq(input.getCreatorId() != null, OutOrder::getCreatorId, input.getCreatorId());

三.需求分析

(1) 管理员

1. 数据分析:可以查看每个食堂档口所购买的食材种类及数量,为了便于他们更直观地理解这些数据,提供了图表展示的功能。

2. 系统通知:管理员负责管理和配置系统通知,确保重要信息的及时传达。

3. 用户管理:管理员需要管理用户的账户信息,包括创建、编辑、删除用户账户。

4. 档口信息管理:管理员负责维护档口的详细信息,包括档口的位置、营业时间、联系方式等。

5. 食材管理:管理员需要管理食材的详细信息,如食材名称、价格、供应商信息、库存量等。

6. 供应配置管理:管理员负责配置和管理系统中的供应设置,包括供应商管理、价格设置、库存阈值等。

7. 采购订单管理:管理员需要管理采购订单,包括创建订单、跟踪订单状态、确认收货等。这有助于确保食材和其他必需品的及时补充。

8. 入库管理:管理员负责监督物品的入库流程,包括检查物品质量、记录入库数量、更新库存信息等。这是确保库存准确性的关键步骤。

9. 出库订单管理:管理员需要管理物品的出库流程,包括审核出库请求、记录出库数量、更新库存信息等。这有助于防止库存短缺,并确保物品的合理分配。

(2) 供应商

1.查看系统通知:通过实时监控这些通知,供应商能够及时响应各种情况,确保业务流程的顺畅。

2.食材管理:供应商能够提供各种各样的新鲜食材。这些食材不仅包括新鲜的蔬菜、水果,还包括各种肉类、海鲜等。

3.供应配置管理:供应商可以保证产品的及时供应,同时也能够根据市场需求的变化灵活调整供应策略。

4.采购订单管理:让食堂的工作人员需要进行食材采购,在查看了供应商的食材供应情况后,食堂工作人员可以根据自己的需求,选择是否接单。系统还提供了查看采购明细的功能。

(3) 食材工作人员

1. 采购订单:食堂工作人员根据自己自己的需求去采购,选择供应商,查询出该供应商的供应的食材,输入采购数量,进行采购。

2. 入库订单:食堂的工作人员拥有权限和能力去查看已经成功入库的订单。他们可以了解订单的具体信息,包括但不限于订单的日期、供应商、价格、数量以及预计的到货时间等。

3. 出库订单:这样的权限使得他们能够了解哪些物品已经被领取,从而更好地管理食堂的库存,确保食堂的正常运营。

4. 档口总库存:食堂工作人员可以查看总库存,这意味着他们可以通过系统或记录来了解食堂的存货情况。总库存是指食堂中所有食材、调料和其他物品的数量总和。

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

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

相关文章

【C++】vector模拟实现、迭代器失效问题(超详解)

vector会使用之后我们来模拟实现一下&#xff0c;通过对vector的模拟实现&#xff0c;我们来说一下迭代器失效问题。 1.准备工作 在头文件vector.h里声明和实现函数&#xff0c;然后在test.cpp里测试代码的正确性。 在vector.h中用命名空间分隔一下&#xff0c;因为c库里面也有…

基于SpringBoot的渔具管理系统【附源码】

基于SpringBoot的渔具管理系统 效果如下&#xff1a; 系统主页面 系统登陆页面 管理员主页面 用户管理页面 渔具信息管理页面 租赁信息管理页面 归还信息管理页面 渔具信息页面 用户登陆页面 个人中心页面 研究背景 随着社会的发展&#xff0c;渔具销售企业之间的竞争与合作…

string

文章目录 一. STL1.概念2.版本 二. string类2.1 为什么学习string类2. 标准库中的string类2.2.1 构造&#xff08;7个&#xff09;2.2.2 对string类对象进行访问和修改&#xff08;1&#xff09;operator[]&#xff08;2&#xff09;迭代器1.迭代器的使用2.迭代器的价值&#x…

B2B订货系统功能设计与代码开发(PHP + MySQL)

在B2B&#xff08;Business to Business&#xff09;电子商务中&#xff0c;企业之间的商品订购、交易和供应链管理是核心功能。一个高效的B2B订货系统可以帮助企业管理库存、订单、采购等业务流程。本文将介绍一个基于PHP与MySQL技术栈的B2B订货系统的功能设计与开发流程。 一…

【2024】前端学习笔记17-Vue初体验

学习笔记 1.什么是vue2.vue初体验3.代码拆分释义4.本文新内容1.什么是vue Vue是一个用于构建用户界面的渐进式JavaScript框架。 它专注于视图层,易于集成或与现有项目结合使用,也可以通过其生态系统实现更复杂的单页应用(SPA)。 Vue的核心特点包括响应式数据绑定、组件化开…

java动态代理

静态代理和动态代理 1、代理模式2、静态代理2.1 定义接口2.2 被代理对象实现2.3 代理对象2.4 客户端 3、JDK动态代理3.1 JDK动态代理例子3.1.1 定义接口3.1.2 被代理对象实现3.1.3 实现InvocationHandler接口3.1.4 创建代理对象 3.2 动态代理底层原理3.3 查看生成的代理类 4、C…

多线程的创建方式以及及Thread类详解

目录 一.线程的创建方法&#xff1a;&#xff08;重点&#xff09; 一&#xff1a;继承Thread类 写法一&#xff1a;正常写法 写法二&#xff1a;匿名内部类 二.实现Runnable接口 写法一&#xff1a;正常写法 写法二&#xff1a;匿名内部类 三. 实现 Callable 接口 ​…

408最后冲刺阶段,怎么做题才能考到120+?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 重要性排序如下&#xff1a;真题占据首位&#xff0c;紧随其后的是王道模拟题&#xff0c;王道书与题目则紧随其后&#xff0c;而408统考配套习题&#xff08;高教版&#xff09;与之大致相当。 真题&#xff0c;无疑…

如何对接低价又稳定的影视会员渠道?

对接低价折扣影视会员渠道通常涉及到与影视内容提供商或第三方分销商的合作。以下是一些基本步骤和注意事项&#xff0c;帮助你顺利对接这类渠道&#xff1a; 1. 市场调研 了解市场&#xff1a;研究市场上现有的影视会员服务提供商&#xff0c;包括价格、服务、用户反馈等。确…

crond 任务调度 (Linux相关指令:crontab)

相关视频链接 crontab 进行 定时任务 的设置 概述 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序 任务调度的分类&#xff1a; 1.系统工作&#xff1a;有些重要的工作必须周而复始地执行。如病毒扫描等。 2.个别用户可能希望执行某些程序&#xff0c;比如…

顺序表+ArrayList

文章目录 一、基础知识1.1 数据结构类的继承图1.2 List 介绍1.3 线性表 二、数据结构 -- 顺序表2.1 什么是顺序表以及优缺点2.2 用数组实现顺序表细节解析代码 三、ArrayList3.1 Java中如何使用ArrayList3.2 ArrayList源码无参构造方法add方法扩容方法指定初始容量构造利用其他…

【工具变量】排污权交易政策试点DID(2000-2023)

数据简介&#xff1a;在过去几十年间的“高增长、高能耗、高污染”的经济发展背景下&#xff0c;随着社会各界不断反应高经济增长背后付出的巨大环境代价&#xff0c;中国ZF将节能环保减排纳入长期规划治理中。在2007年&#xff0c;我国开始启动了二氧化硫&#xff08;SO2&…

通用特效Shader

一、通用特效Shader介绍 1.1 什么是通用特效材质 Unity支持SRP Batcher后&#xff0c;使用UberShader的优势非常明显。所谓&#xff0c;UberShader&#xff0c;即一个超级Shader&#xff0c;覆盖一类功能&#xff0c;而不是多个分散的小Shader&#xff0c;比如一个通用特效Sh…

网络安全SQL初步注入2

六.报错注入 mysql函数 updatexml(1,xpath语法,0) xpath语法常用concat拼接 例如: concat(07e,(查询语句),07e) select table_name from information_schema.tables limit 0,1 七.宽字节注入(如果后台数据库的编码为GBK) url编码:为了防止提交的数据和url中的一些有特殊意…

Golang--面向对象

Golang语言面向对象编程说明&#xff1a; Golang也支持面向对象编程(OOP)&#xff0c;但是和传统的面向对象编程有区别&#xff0c;并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。Golang没有类(class)&#xff0c;Go语言的结构体(struct)和其…

英国留学论文写作中复合句式基础知识讲解

从句子的结构出发&#xff0c;复合句式是将两个以上的独立、完整的字句子通过coordinating conjunction或者分号连接在一起。因此&#xff0c;复合句式可以理解成为两个以上的简单句子组合在一起。下面英国翰思教育通过举例的方式&#xff0c;来介绍如何将独立的句子连接在一起…

从奇富科技,QQ钱包看信贷服务、贷款超市的的客户注册认证流程有什么不同

概览 奇富科技作为港股信贷第一企业&#xff0c;目前已服务2.4亿用户&#xff0c;是国内头部信贷科技服务平台。 QQ钱包&#xff0c;作为8亿用户的贷款超市&#xff0c;拥有其他贷款超市产品梦寐以求的流量入口。 产品模式 奇富科技作为信贷科技服务平台&#xff0c;主要提…

寻找伤感短视频素材 这些网站帮你轻松下载无水印资源

无论是制作情感类短视频&#xff0c;还是为抖音视频寻找合适的素材&#xff0c;伤感视频素材一直是创作者们关注的重点。如果你正在为如何找到高质量的伤感素材而困扰&#xff0c;那么今天我将推荐一些非常实用的素材网站&#xff0c;帮助你快速找到适合的伤感视频素材&#xf…

Java项目实战II基于Spring Boot的大学生智能消费记账系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当今社会…

Linux 抓包工具 --- tcpdump

序言 在传输层 Tcp 的学习中&#xff0c;我们了解了 三次握手和四次挥手 的概念&#xff0c;但是看了这么多篇文章&#xff0c;我们也只是停留在 纸上谈兵。  欲知事情如何&#xff0c;我们其实可以尝试去看一下具体的网络包的信息。在这篇文章中将向大家介绍&#xff0c;在 L…