2024年最新【项目实战】仓库信息管理系统(layui+SSM+SpringBoot,每个程序员都必须掌握的8种数据结构

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

前言

此项目为仓库管理系统,是我大二下的实训课作业,虽然是从学期初开始写的,但是实际写项目的日子也就十多天(前面都没怎么动,果然只有临近ddl效率才高)。

到我写这篇博文的时候,实际上项目还有小部分功能未完成,当然如果你不是逐个试过去你是发现不了的(笑哭)。

说实话,我实在不想在未完成前写类似实验报告的文档,而且我也不喜欢写文档。我一直认为写项目根本不需要那么多死板的文档(反正也只是作业)。

有人可能又会奇怪我不喜欢写文档为啥写那么多博文?这个嘛,我写博文的目的也只是想把我彼时彼刻的情感和经验分享出来,我更倾向于那种随性的分享,不想循规蹈矩的写那些死板的文档。

挺不喜欢那些老师每次要做项目都得要我们交各种图,各种功能业务表。那些图对于那些简单的项目还可以,毕竟不复杂,但是对于一个稍微大点的项目,光代码就一大堆,画那些业务图要画到猴年马月去?

有时候,围绕着一个增删改查的小项目大谈架构,这并不是一个明智的选择。

好了,碎碎念了这么多,实在抱歉,下面是正文:

一、项目概述

1.项目需求

实现材料仓库的管理:提供材料出入库管理等实用功能。 材料入库管理:材料检验入库、入库查询、入库类别按月统计;
材料出库管理:材料库存查询、材料出库、出库查询、出库类别按月统计; 辅助管理:仓库系统的人员管理、基础表的管理。

当然啦,以上只是简单的需求,多的我也不展示了。

2.总述

此项目为Javaweb项目,前后端不分离,典型的单体架构,主要功能是对仓库转入转出等业务进行管理,并对数据进行可视化展示,同时有部分权限管理的功能(为什么这么说呢,因为我这部分做的并不严谨,如果后面有时间我会尽可能完善)。

3.技术栈选择

前端:layui、jquery、echarts、thymeleaf模板引擎
后端:mysql、maven、tomcat、mybatis、springMVC、spring、SpringBoot、logback

注意:这里的前端页面我拿了gitee上的开源模板layui-mini,地址

4.环境介绍

数据库:mysql8.0
项目结构:maven
数据库连接池:Druid
前端框架:layui、jquery、echarts、thymeleaf模板引擎
后端框架:SpringBoot、SSM
语言:Java
jdk版本:8
编写的IDE:IDEA

5.效果图展示

为了更直观的展示项目,这里先放几张效果图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、设计思路

在说明自己的设计思路之前,我们先来看看一般意义上的SSM项目的架构图

1.SSM项目(单体架构)示意图

在这里插入图片描述

由上图可以看到SSM项目中大致的组成。
一般的SSM应用都会分三层——数据库层,业务层,控制层,而我们这个仓库信息管理系统也是如此。

2.前后端交互示意图

有人可能不太明白SSMweb应用是如何进行前后端交互的,因此我又补充了交互的部分,如下图:
在这里插入图片描述

前后端的交互都以HTTP请求展开的。有些请求是请求页面的;有些请求是请求静态资源的,如css文件,图片等;有些请求是请求数据的,比如出入库记录。

下面是三层调用的细节示意图

在这里插入图片描述

上图中我们可以直观的看到SSM项目的基本运行流程。

当请求到来时,先会经过拦截器链,拦截器利用反射机制实现了对请求处理和返回的处理,可以利用它来实现鉴权服务和权限控制

之后请求分发,对应的请求会有对应处理程序来处理,而这就是Controller控制层的工作,而控制层也会调用相应的业务层方法来进行操作或者返回对应的静态资源、页面等。

Service业务层专门处理业务层面的操作,比如入库,出库,出库成功会创建相应的申请记录同时改变库存数据,至于如何改变,如何增加这是数据库层的事情,在这层只需调用对应的Dao层方法即可。而有些操作需要保证失败回滚的机制,所以可以在Service层开启事务功能。

Dao层通常与数据库中的表一一对应,一般都是去实现增删改查,而mybatis框架将sql语句和程序分离,极大简化了我们的开发。

3.仓库管理系统架构图

在看完了SSM单体项目一般是如何架构之后,再来看看我们的系统架构图(由于业务比较少,所以这里可以直接把各个类写到上面)
在这里插入图片描述

和上面的大差不差,只不过这里利用拦截器实现了token机制来进行三级权限控制,同时多用了点spring的aop来处理日志信息,以及利用增强Controller处理全局异常信息,返回对应的错误响应。

4.响应格式

对于前后端分离的项目,响应格式必定是前后端交流非常重要的一环。虽说这里并不是前后端分离开发,但为了规范,还是规定了请求响应的格式。

status:状态码
statusInfo:{
	message:字段作为接口处理失败时, 给予用户的友好的提示信息, 即所有给用户的提示信息都统一由后端来处理
	detail:字段用来放置接口处理失败时的详细错误信息. 只是为了方便排查错误, 前端无需使用.
}
data:返回的数据
count:分页请求数据时使用的参数,意为有多少数据

5.异常处理机制

利用增强Controller的机制来处理全局的异常,然后返回给前端对应的错误响应,如:
在这里插入图片描述

6.日志记录机制

利用spring的aop机制,我们可以轻松的在controller接口处理请求之前打印请求的相关信息到日志文件中。

7.鉴权服务设计与实现

关于此系统的鉴权服务,也就是我们常说的注册登录,我用的是自己实现的一套简单的token机制,示意图如下:
在这里插入图片描述

简而言之,用户登录后会进行校验密码(为了安全期间,数据库中的密码是经过加密存储的,所以比对时我们也会对密码加密再进行比对),校验通过会给前端一个token令牌的凭证(实际上是根据登录用户名,如邮箱,以当前时间作为盐进行MD5加密后返回的一串字符串)。

该令牌会存储在系统的认证令牌池中,而用户得到的用户凭证会被存储在浏览器的cookie中。

用户每次访问系统资源时,请求头里都会携带token凭证,而每次请求(登录请求,发送验证码等特殊请求除外)都会被userIntercepter拦截器拦截,该拦截器会取出请求中的token凭证,然后去和认证令牌池中校验。如果有且未过期,则放行,同时将该认证令牌放入到请求的Atribute中以便后面的程序处理;否则重定向回登录页面让用户进行登录操作。

关于这个鉴权服务,我写过另一篇博文——手把手教你用Java实现一套简单的鉴权服务(SpringBoot,SSM)(万字长文),有兴趣可以去看看。

8.业务功能简述

在这里插入图片描述

该系统主要的就是模拟仓库出入库的流程,所以我把用户的角色氛围普通用户、审核员、仓管员和系统管理员。

普通用户可以填写出入库申请进行制单,然后相应的审核人进行审核,审核员可以指定该仓库的仓管员进行验收,或者审核不通过;当审核成功,货物成功到达仓库时,仓库员进行验收操作,如果验收通过,则成功入库或者出库,相应的库存信息也发生变化。

系统管理员可以管理网站用户,同时发布网站公告。(这个角色权限管理的部分我还没完成,目前所有用户都可以操作所有功能)

除此之外,我还对与一些出入库申请、库存、仓库等信息进行查询和可视化的操作,让仓库管理员可以更直观的看到仓库信息的变化。

三、数据库设计

1.数据库模型设计概览

在这里插入图片描述

2.数据库表设计

①depository

在这里插入图片描述

描述: 该表存储仓库的信息,比如仓库名称,仓库地址和仓库介绍

表结构:

序号字段名数据类型主键非空默认值描述
1idINT(10)仓库id
2dnameVARCHAR(255)仓库名称
3addressVARCHAR(255)仓库地址
4introduceVARCHAR(255)仓库介绍
②仓库调度记录(depository_record)

描述: 该表记录仓库调度的记录,同时该表也是数据也可以看做一条条申请信息。

表结构:

序号字段名数据类型主键非空默认值描述
1idINT(10)记录id
2application_idINT(10)申请编号(暂时无用)
3mnameVARCHAR(255)产品名称
4depository_idINT(10)调度的仓库id
5typeINT(10)0调度记录类型(0出库,1入库)
6quantityDOUBLE(22)数量
7priceDOUBLE(22)价格
8stateVARCHAR(255)状态(待审核/审核未通过,未入库/出库/检验不通过,待验收/已入库/已出库)
9applicant_idINT(10)申请人id
10apply_remarkVARCHAR(255)申请备注
11apply_timeDATETIME申请时间
12reviewer_idINT(10)审核人id
13review_remarkVARCHAR(255)审核结果备注
14review_timeDATETIME审核时间
15review_passINT(10)审核是否通过,0表示未通过,1表示通过
16checker_idINT(10)验货人id
17check_remarkVARCHAR(255)验收备注
18check_timeDATETIME出入库时间(验货时间)
19check_passINT(10)验收是否通过

3、产品信息记录(库存)(material)

在这里插入图片描述

描述: 产品信息记录(库存信息)

表结构:

序号字段名数据类型主键非空默认值描述
1idINT(10)存储id
2depository_idINT(10)仓库名称
3mnameVARCHAR(255)材料名称
4quantityDOUBLE(22)数量
5priceDOUBLE(22)总金额
6type_idINT(10)材料种类id

4、material_type

描述: 材料种类,我对材料进行了分类,这样统计起来也方便很多,另外建一个表是为了防止以后可能会对材料类型做的补充,同时节省存储空间。

表结构:

序号字段名数据类型主键非空默认值描述
1idINT(10)类型id
2tnameVARCHAR(255)类型名称
3introduceVARCHAR(255)类型介绍

5、notice

描述: 公告表,用于存储公告信息

表结构:

序号字段名数据类型主键非空默认值描述
1idINT(10)公告主键
2titleVARCHAR(255)公告标题
3contentVARCHAR(255)公告内容
4timeDATETIME发布时间

6、standing_book

在这里插入图片描述

描述: 台账表,作业要求里有要台账表,但我觉得这和仓库调度表没啥区别,所以这个表我虽然建了,但实际并未使用。

表结构:

序号字段名数据类型主键非空默认值描述
1idINT(10)台账记录id
2typeINT(10)0表示调入,1表示调出(外部);2表示调入(退料),3表示调出(领料)(内部调用)
3quantityINT(10)0数量
4priceINT(10)0总价
5material_nameVARCHAR(255)材料名称

7、transfer_record

在这里插入图片描述

描述: 转移表,这个是用来关联转移操作的。

表结构:

序号字段名数据类型主键非空默认值描述
1idINT(10)转移记录id
2from_idINT(10)转出仓库记录id
3to_idINT(10)转入仓库记录id

8、 user

在这里插入图片描述

描述: 用户表,这里的密码是经过加密存储的,所以就算黑客破解数据库了,那损失也不会太大。

表结构:

序号字段名数据类型主键非空默认值描述
1idINT(10)用户id
2unameVARCHAR(255)用户名称
3authorityVARCHAR(255)表示权限等级(游客/员工/审核员/仓管员/系统管理员)
4pwdVARCHAR(255)用户登录密码(数据库存储的是加密后的)
5sexVARCHAR(255)性别
6depository_idINT(10)负责仓库,序号表示仓库id,0表示全部仓库
7entry_dateDATE入职日期
8emailVARCHAR(255)邮箱
9phoneVARCHAR(255)手机号

四、功能设计与展示

功能设计概览图

在这里插入图片描述

1.鉴权认证

这块如果要讲,如果要详细讲,东西会很多。这里只简要的提一下。
用户注册的时候,输入邮箱后点击发送验证码,服务器会先判断该用户邮箱是否已经被注册,如果没有则会向相应邮箱发送验证码,验证码有效时间默认为5分钟,有则返回提示信息告知用户该邮箱已被注册。

在这里插入图片描述

在这里插入图片描述

而输入信息和验证码后系统会进行校验,如果成功就对密码进行MD5加密,然后存入用户信息表中。

而对于用户登录,我采用的是token机制。

2.仓库管理

①出入库申请流程

参与出入库申请的角色有三个——发起申请的普通用户,审核申请的审核人,仓库验收的仓管员。
普通用户发起申请(制单)->审核人审核申请->相应仓管员验收货物->入库或出库

用户能发起三种类型的申请——出库,入库,转移
在这里插入图片描述

在这里插入图片描述

②出入库管理
1.出入库查询

在这里插入图片描述

用户可以查看出入库申请记录,同时也可以选择开始日期,仓库,材料名称等来进行自己期望的查询,并可以点击详情查看详细信息。

注:这里表格的数据并不是一次全部给前端,而是前端根据自己的需求分页获取

在这里插入图片描述

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

求分页获取

在这里插入图片描述

[外链图片转存中…(img-S3izyNwW-1715667712360)]
[外链图片转存中…(img-91uCADdA-1715667712361)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值