基于SpringBoot+Vue的酒类仓储管理系统

文档包含用例图、系统架构图、系统功能结构图、实体属性图、总体e-r图。

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

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版本;


二.系统实现(部分截图)

2.1 仓库人员功能实现

2.1.1 登录功能实现

仓库人员,通过输入账号、密码,选择对应的仓库管理员角色,输入图形验证码进行登录。前端将仓库人员输入的参数信息传递给后端接口/User/SignIn,执行登录方法,检查用户的信息是否存在于用户表,不存在,则提示仓库人员检查输入的信息是否正确。校验通过后,登录系统,进行操作系统。登录界面如图5-1所示。

关键代码:

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.1.2 商品资料管理功能实现

仓库商品资料管理,作为仓库管理人员,可以为仓库新增商品信息。包含商品、SKU、条码、品牌等信息,调用/Cargo/CreateOrEdit进行新增商品信息。当仓库商品有所变动时,可以进行修改,选择商品进行修改,调用/Cargo/Get获取商品的原始信息,修改后,调用/Cargo/CreateOrEdit接口进行修改。删除商品,有这个权限,但是最好不要删除商品信息。商品资料管理界面如图5-2所示。

关键代码:

//声明一个商品资料实体

Cargo Cargo = new Cargo();

//把前端传入的input参数拷贝到商品资料实体

BeanUtils.copyProperties(Cargo,input);

//调用数据库的增加或者修改方法

saveOrUpdate(Cargo);

//定义一个返回给前端的商品资料传输模型

CargoDto CargoDto=new CargoDto();

//同理把操作的商品资料实体拷贝给商品资料传输模型

BeanUtils.copyProperties(CargoDto,Cargo);

//把传输模型返回给前端

return CargoDto;

2.1.3 库区管理功能实现

仓库人员可以根据仓库的具体情况,进行设置库区,包含库区名称、库区编码。当发生酒类商品出入库操作时,系统通过业务逻辑层自动关联库区数据,系统实时更新该库区的库存数量字段。为库区设置库位信息,将当前库区Id传递给/WarehouseBin/CreateOrEdit接口,为库区新增库位信息。库区管理界面如图5-3所示。

关键代码:

if(input.getId()==null)

 {

     return new WarehouseAreaDto();

 }

 PagedResult<WarehouseAreaDto>  pagedResult =List(input);

 return pagedResult.getTotalCount()>0?pagedResult.getItems().stream().findFirst().get():new WarehouseAreaDto();

2.2超级管理员功能实现

2.2.1 数据图形化分析功能实现

超级管理员可以通过选择不同仓库,通过折线图查看每个仓库的最近7天出入库存数,最近7天出入订单数。环形图展示最近30天仓库出入库统计分析,展示该仓库的待补商品Top10,商品保质期预警Top10。数据图形化分析界面如图5-4所示。

关键代码:

 Map<String, Object> data = new HashMap<>();

data.put("name", "入库");

data.put("value", Math.abs(sum));

dataList.add(data);

//统计数量小于0的记录并且求和

double sum1 = inventoryRecords.stream().filter(x -> x.getQty() < 0).mapToDouble(x -> x.getQty()).sum();

Map<String, Object> data1 = new HashMap<>();

data1.put("name", "出库");

data1.put("value", Math.abs(sum1));

dataList.add(data1);

2.2.2 货主管理功能实现

超级管理员可以维护所有仓库的货主信息,为所有仓添加货主信息,填写货主名称、货主编码、货主电话、货主公司地址信息,调用/Customer/CreateOrEdit接口新增。当货主信息有所更改时,修改货主信息。当不再合作,可以删除货主信息。货主管理界面如图5-5所示。

关键代码:

//把Customer实体转换成Customer传输模型

List<CustomerDto> items= Extension.copyBeanList(pageRecords.getRecords(),CustomerDto.class);

for (CustomerDto 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);

    }  

}

//返回一个分页结构给前端

return PagedResult.GetInstance(items,totalCount);

2.2.3 库存预警功能实现

超级管理员登录系统后,库存预警模块。可对每一款商品单独设置库存预警。点击具体商品的编辑选项,超级管理输入商品的下限预警值,调用/EarlyWarning/CreateOrEdit接设置库存预警。此数值代表商品库存数量达到该值时,系统将触发预警。库存预警界面如图5-6所示。

关键代码:

//声明一个库存预警实体

EarlyWarning EarlyWarning = new EarlyWarning();

//把前端传入的input参数拷贝到库存预警实体

BeanUtils.copyProperties(EarlyWarning, input);

//调用数据库的增加或者修改方法

saveOrUpdate(EarlyWarning);

//定义一个返回给前端的库存预警传输模型

EarlyWarningDto EarlyWarningDto = new EarlyWarningDto();

//同理把操作的库存预警实体拷贝给库存预警传输模型

BeanUtils.copyProperties(EarlyWarningDto, EarlyWarning);

//把传输模型返回给前端

return EarlyWarningDto;

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

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

相关文章

月付物理服务器租用平台-青蛙云

青蛙云物理服务器租用服务概述 青蛙云是一家提供物理服务器租用服务的平台&#xff0c;支持月付、年付等灵活付费方式&#xff0c;物理服务器适合企业或个人用户的高性能计算需求。其服务覆盖多地区机房&#xff0c;提供多种配置选项&#xff0c;支持定制化需求。 核心优势 …

基于二分类方法和安全系数方法使用comsol with matlab蒙特卡洛模拟实现边坡失效概率计算——随机变量模型

基于二分类方法和安全系数方法使用comsol with matlab蒙特卡洛模拟实现边坡失效概率计算——随机变量模型 模型和全部代码下载随机变量模拟加载comsol模型蒙特卡洛模拟(分类模型)蒙特卡洛模拟(安全系数模型)内聚力和内摩擦角随机变量分布二分类稳定性1000次运行结果失效概率…

机器学习-02(深度学习的基本概念)

机器学习的步骤 1.定义带有未知参数的函数 线性模型&#xff08;linear models&#xff09;具有较大的限制&#xff08;Model Bias&#xff09; y b wx 无论如何更改b或者w&#xff0c;其只会呈现出一条直线&#xff0c;不能满足更加复杂的现实情况。 我们可以将复杂的函…

InspireFace C++ 架构分析

InspireFace C 架构分析 https://github.com/deepinsight/insightface/tree/master/cpp-package/inspireface 1. 项目概述 InspireFace 是一个高性能的人脸识别和分析 SDK&#xff0c;采用 C 开发&#xff0c;提供了完整的人脸检测、跟踪、特征提取、活体检测、属性分析等功…

【网络安全】Webshell命令执行失败解决思路

前言费尽心思上传了webshell&#xff0c;上传下载都没问题&#xff0c;却发现命令执行总是失败&#xff1f;最近也打点也遇到了这些问题&#xff0c;网上有部分文章&#xff0c;但都是零碎知识点并且实战不一定能用&#xff0c;今天就结合我个人经验剖析webshell上线后cmd命令执…

【机器人】复现 HOV-SG 机器人导航 | 分层 开放词汇 | 3D 场景图

HOV-SG 是通过语言指令实现机器人导航的&#xff0c;核心特点是分层结构、开放词汇、3D场景图。 来自RSS 2024&#xff0c;大规模、多层次的环境构建精确的、开放词汇的3 场景图&#xff0c;并使机器人能够通过语言指令在其中有效地导航。 论文地址&#xff1a;Hierarchical …

jvm 锁升级机制

Java 虚拟机&#xff08;JVM&#xff09;中的锁升级机制&#xff08;也称为锁膨胀&#xff09;是 HotSpot 虚拟机为了优化 synchronized 关键字的性能而引入的一项重要技术。它的核心思想是&#xff1a;根据实际遇到的竞争激烈程度&#xff0c;动态地将锁从开销最小的状态逐步升…

金蝶云星空 (9.0版本) ERP的WebApi接口随机出现SSLException

环境&#xff1a; java-1.8.0-openjdk-1.8.0.131 hutool-all 依赖&#xff0c; 5.8.25版本 项目背景&#xff1a; 发版上线&#xff0c;用的hutool工具类 HttpUtil.createPost() &#xff0c;请求域名为https://xxx.ik3cloud.com/k3cloud 的金蝶ERP webapi接口 问题&#xff1…

用java,把12.25.pdf从最后一个点分割,得到pdf

要在Java中从文件名 12.25.pdf 的最后一个点&#xff08;.&#xff09;分割文件名和扩展名&#xff0c;可以使用 String 类的 lastIndexOf() 和 substring() 方法。以下是一个示例代码&#xff1a; public class FileNameSplitter {public static void main(String[] args) {St…

UE5 重新编译插件版本

打开要转换的UE的安装目录&#xff0c;一直找到这个文件 不要双击&#xff0c;在地址栏里输入cmd打开命令行&#xff0c;输入如下指令 RunUAT.bat BuildPlugin -plugin"E:\OldPlugin\chatbot5.3\chatbot\chatbot.uplugin" -package"E:\NewPlugin"-plugin…

Linux下的调试器-gdb(16)

文章目录 预备知识&#xff08;9-2.30.00&#xff09;快速认识 gdbgdb 的命令1. 更换成 cgdb2. 打和去除断点3. 逐语句与逐过程4. 使能&#xff08;激活&#xff09;断点 调试思想1. 找到问题&#xff08;找到问题所在的区域&#xff09;2. 查看代码的上下文 补充调试技巧1. wa…

李宏毅NLP-7-计算分数和训练和测试

文章目录 分数计算训练测试 分数计算 插入式序列生成模型的概率计算逻辑&#xff0c;核心是将 “生成序列 h 的过程” 拆解为一系列插入操作&#xff0c;并通过步骤概率的乘积计算总概率 P ( h ∣ X ) P(h∣X) P(h∣X)。以下从 模型框架、步骤分解、概率计算 三个层面解析&…

Python字符与ASCII转换方法

在Python中&#xff0c;可以使用内置函数 ord() 和 chr() 来转换字符和ASCII码&#xff1a; ​获取字符的ASCII码​ - 用 ord() ascii_code ord(A) # 返回 65 ​将ASCII码转为字符​ - 用 chr() character chr(65) # 返回 A 示例&#xff1a; # 打印字母A-Z的ASCII码…

[IMX][UBoot] 10.启动流程 (6) - bootz 命令启动 Linux

文章链接 UBoot 启动流程 (1) - 基本流程 UBoot 启动流程 (2) - 平台前期初始化阶段 - board_init_f UBoot 启动流程 (3) - UBoot 程序重定位 - relocate_code UBoot 启动流程 (4) - 平台后期初始化阶段 - board_init_r UBoot 启动流程 (5) - UBoot 运行阶段 - main_loop …

TCP 三次握手协商 MSS 前,如何确定 MSS 值(结合 Linux 内核源码分析)

文章目录 一、SYN总结影响 SYN MSS 的因素 二、SYNACK总结影响 SYNACK MSS 的因素 结合 Linux 内核源码 一、SYN 总结影响 SYN MSS 的因素 套接字选项 TCP_MAXSEG路由选项 advmss出口 MTU 减去 40(TCP 和 IP 的固定首部大小)IPV4_MAX_PMTU - 40(同上) 二、SYNACK 总结影响 SY…

面试150 矩阵置0

思路 我们使用两个标记集合&#xff0c;分别记录当矩阵的元素为0的时候的横、纵坐标。然后在对矩阵元素进行遍历&#xff0c;如果所在行或者所在列的索引在集合中&#xff0c;对应的矩阵元素修改为0即可 class Solution:def setZeroes(self, matrix: List[List[int]]) -> N…

Element UI 完整使用实战示例

以下是 Element UI 的完整使用实战示例&#xff0c;涵盖从环境搭建、基础组件使用到项目实战的全流程&#xff0c;结合多个实际场景和代码示例&#xff1a; 一、环境搭建与基础配置 1. 安装 Element UI 通过 npm 或 yarn 安装&#xff1a; npm install element-ui --save # …

C# 线程同步(一)同步概念介绍

目录 1.阻塞&#xff08;Blocking&#xff09; 2.阻塞 VS 轮询 3.线程状态 到目前为止&#xff0c;我们已经阐述了如何在线程上启动任务、配置线程以及实现双向数据传递。同时&#xff0c;我们也说明了局部变量是线程私有的&#xff0c;而引用可以通过共享字段在线程间传递以…

解决leetcode第3588题.找到最大三角形面积

3588.找到最大三角形面积难度&#xff1a;中等问题描述&#xff1a;给你一个二维数组coords&#xff0c;大小为nx2&#xff0c;表示一个无限笛卡尔平面上n个点的坐标。找出一个最大三角形的两倍面积&#xff0c;其中三角形的三个顶点来自coords中的任意三个点&#xff0c;并且该…

WIFI 安全测试记录

之前为实训课特意买的无线网卡没用上&#xff0c;但是我怎么可能让他荒废。所以用了几个下午&#xff0c;浅学了WiFi&#xff0c;当然没找到什么好教材&#xff0c;自己摸索着学的很基础&#xff0c;主要是当练习了&#xff0c;特此把我此前学习…WiFi密码实践过程写上来。 省流…