当前位置: 首页 > news >正文

基于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.mrgr.cn/news/70010.html

相关文章:

  • 《Redis集群高可用环境构建与优化》
  • idea 删除本地分支后,弹窗 delete tracked brank
  • 刷算法题(C++)
  • 制作图片木马
  • 半导体制造技术导论(第二版)萧宏 第二章集成电路工艺介绍答案
  • 开源 - Ideal库 - 常用枚举扩展方法(二)
  • 大厂面试真题-说说tomcat的优缺点
  • C++builder中的人工智能(19):如何在C++中制作一个简单但强大的聊天机器人?
  • 【Steam登录】protobuf协议逆向 | 续
  • Chrome浏览器如何导出所有书签并导入书签
  • Node Game(CRLF注入)
  • gtfToGenePred如何下载
  • 对于大根堆的计算时间复杂度的过程
  • Spring Boot 监视器
  • 【IT人物系列】之Java之父
  • lineageos-19 仓库群遍历,打印第一条git log
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:新技术融合的无限可能(下)(12/30)
  • 7个常用的JavaScript数组操作进阶用法
  • 蜜蜂交配优化算法(Honey-Bee Mating Optimization Algorithm,HBMOA)的MATLAB实现
  • 解非线性方程组
  • C++代码优化(四):通过分层来体现 “有一个“ 或 “用...来实现“
  • 07 P1164 小A点菜
  • [强网杯 2019]随便注 1
  • Dubbo源码解析(二)
  • 快速傅里叶变换(FFT)基础(附python实现)
  • 【高等数学】奇点与留数