基于RFID的图书仓储管理系统(可做毕设)

一、系统概述

基于RFID的图书仓储管理系统的设计以物联网的三层架构思想为理念,实现了图书仓储的入库、盘点、出库、查询等功能,从图书信息采集到数据传输处理再到数据应用,有效的提高了图书仓储的管理效率,为现代化图书仓储提供了便捷化的管理平台。本系统的设计包括应用层Web端管理软件、传输层C#数据采集中间软件以及感知层RFID硬件阅读器,通过这三个主要的部分,系统完成了数据从感知到应用的有序结合。

二、整体架构图

在这里插入图片描述

三、软件说明

1、Web端管理软件由Java语言开发,详情信息如下:
前端框架:
jsp+jquery+easyUI
后端框架:
SpringMVC+Hibernate+Spring jdbc
运行环境:
jdk7+tomcat7+Mysql+IntelliJ IDEA
运行要求注意:
1.Jdk必须为1.7
2.Tomcat版本不宜过高,tomcat8以下
3.Mysql版本5.8以下
4.开发环境为IDEA

代码结构:
a.后端代码结构:
在这里插入图片描述
上图中src目录为后端代码的主要存放目录,com.bjpowernode包下的所有文件夹均为系统必需代码,core为核心代码包,poi.excel为poi文档操作包,tag为前端tag标签封装类,以上三个包均为系统级的包,日常开发只需调用内部方法即可。
com.bjpowernode包下包含了众多配置文件,其中:
Dbconfig.properties为数据库配置文件
Ehcache.xml为缓存配置文件
Log4j.properties为日志配置文件
Spring-minidao.xml为持久层的miniDao配置文件,可弥补hibernate不足
Spring-mvc.xml为springmvc配置文件
Spring-mvc-aop.xml为切面拦截配置文件
Spring-mvc-context.xml为springmvc注解注入配置文件
Spring-mvc-hibernate.xml为hibernate配置文件
Spring-mvc-timeTask为任务调度配置文件
SysConfig.properties为系统配置文件,标记了内部系统的固定属性

而web包是后端代码需要存放的包,本系统的功能代码都是放在这个包下,提供给前端代码调用数据,如下图:
在这里插入图片描述
Web包下的buss包下面包含了图书入库、盘点、出库的主要功能代码,根据mvc的设计思想进行分隔,controller包下为控制层,提供给前端直接的调用,entity.base为实体类的存放包,service包内部包含了主要逻辑业务层,数据的查询获取等逻辑操作主要在这一层实现,而controller也是通过调用这一层的数据,返回给前端页面。
Rest.controller的包内是用户接口类,提供统一的用户管理,相当于公用层。
System包下为系统包含的功能包,菜单、角色、用户以及系统所包含的拦截器、实体类、监听器、工具类等等。

b.前端代码结构
在这里插入图片描述
Webcontent为前端代码、工具及文件的存放目录,内部包含了基础系统框架的代码以及功能模块的代码,其中context包为easyui标签库包,export为导出文件存放目录,Meta-INF为web项目基础目录,plug-in为系统所需的所有前端插件代码库,相当于工具包,swftools为pdf转换工具目录(暂时无用),upload为上传文件存放目录,userfiles为用户文件存放目录,web-inf为web项目的基础目录,包含lib中jar包以及整个项目的web.xml配置文件等等
以上目录均为系统目录或者用户文件存放目录,而webpage包是功能模块存放的主要目录,也是本系统功能实现的目录。
在这里插入图片描述
common包为共用页面存放包,包括错误页面、上传组件页面等等
Login包为系统登录页面的存放包,提供系统登录验证的页面展现
Main包为系统主要的框架布局、渲染、展现包,也是最基础的包
System为系统管理的页面存放包,包含系统中的部门管理、角色管理、用户管理、日志管理、菜单管理、操作信息管理等系统级管理功能页面。
Buss下为主要的功能页面存放包:
在这里插入图片描述
上图中,book内部的文件均为图书查询、入库、盘点、出库等的功能页面,可根据文件的英文名称区分每个文件的功能用途,例如tBbookList.jsp为图书查询管理的jsp界面,而js文件内部则包含了对jsp页面标签的控制和对后台数据的调用等功能
Press内部包含了图书出版社的功能页面,而lend包内的页面暂时无用,可删除。

2、Mysql数据库
在这里插入图片描述
本系统的数据库采用Mysql数据库,数据表命名存在规范,以t_s开头的表为系统级的数据表,以t_b开头的表为功能级的数据表,数据表解释如下:
t_b_bill 单据主表
t_b_bill_detail 单据详情表
t_b_book 图书表
t_b_lend 图书借阅表(无用,可删除)
t_b_press 出版社表
t_b_temp 单据缓存表
t_s_attachment 系统附件表
t_s_base_user 系统基础用户表
t_s_config系统配置表
t_s_demo 系统实例表
t_s_depart 系统部门表
t_s_document 系统文档表
t_s_fileno 系统文件编号表
t_s_function 系统菜单表
t_s_icon 系统图标表
t_s_log 系统日志表
t_s_operation 系统操作记录表
t_s_opintemplate 系统模板表
t_s_role 系统角色表
t_s_role_function 系统角色菜单表
t_s_role_user 系统角色用户表
t_s_territory 系统地域表
t_s_timetask 系统任务调度表
t_s_type 系统数据库字典详情表
t_s_typegroup 数据库字典表
t_s_user 系统用户表
t_s_version 系统版本表

3、C#数据传输中间件
在这里插入图片描述
需要打开此软件作为监听程序,用来监听RFID的卡片阅读记录,并将阅读到的卡片信息暂存,提供给web端进行数据读取和传输。

代码结构:
在这里插入图片描述

四、硬件说明

在这里插入图片描述
硬件包含RFID阅读器以及多个RFID卡片,通过采集卡片信息,将图书标签的信息读取到web端管理软件中。
此硬件的运行环境必须在windows中。

五、代码详细说明

整个系统的基础框架分为前端和后台两个部分,首先前端基于jsp、jquery、easyui搭建,jsp负责页面的展示,jquery负责jsp中组件以及数据的动态渲染,而easyui框架则负责提供一系列的前端插件,比如用到的数据表格、菜单树、查询组件、form表单等等;后台部分基于spring、springMvc、hibernate三部分开发完成,spring负责后台实体类的动态管理以及切面的加载,springMvc负责前台与后端的交互,包括接受前台请求并返回实体类的过程,hibernate作为持久层框架,是跟mysql数据库交互的必备框架,依靠它来完成数据的查询和存储。

1、关于core代码问题
Core代码包其实是系统必需的核心包,是代码的加载过程可能会用到的一些文件,其中大多数的这些类结合了后台各个框架的基本特性,比如注解、面向切面编程、实体类的转换、拦截器、多线程等等,如果想要弄懂这个core包内的知识点,必须要具备一些框架知识,这里只做一些对包的用处解释:
在这里插入图片描述
(1)annotaion注解包
这个包是基于spring框架特性开发的基础注解包,主要功能是为了扩展一部分注解,让系统功能更急完善,而这些注解都是以interface接口的定义形式实现的,可以在功能模块代码编写的时候直接定义在类名的位置,这样spring在加载这些注解的时候就会做出相应的操作,而不用编写大量的代码,让代码也更加的整洁。
包下目前包含的注解有automenu菜单注解、菜单操作按钮注解、缓存注解、实体名称注解。
(2)Aop切面编程包
这个包是spring两大特性中针对切面编程的扩展包,主要是扩展了几个切面,在功能模块开发过程中,如果用到切面,spring就会以不同的形式去加载这个方法,在此之前或者之后,亦或者执行时做出提前预设好的一些操作,比如在登录方法上添加日志切面,在用户登录并访问这个登录方法的时候,spring会根据切面模式进行不同时刻的日志输出,比如在方法前、方法后、执行时等等
包下用到的切面主要有缓存切面、Gzip解压缩切面、hibernate切面等等。
(3)Beanvalidator类转换包
只是一个转换实体类的工具包,将Hibernate收到或者反馈的实体类进行相应的转换。
(4)Common常用包
common包下的文件是一些基础功能实现所需要的controller、service、dao文件,主要完成的功能是作为一个基础框架层包,为其他功能模块的包提供一个父类方法,在执行功能模块的包时首先执行基础框架层包,例如内部包含的BaseController类,实现了分页转换以及日期转换,在功能模块的所有controller执行前都一定会执行这个类。
其实就相当于一个大门,想要进卧室门,必须要从这个门先进去才能进卧室的门。
(5)Constant、Def常量包
存放了一些系统相关的固定常量,比如说状态数据、系统固定死的用户等等。
(6)extend常量包
主要提供了一些datasource数据源工具、hql语言解析包、文档转换包、数据源模板包等等,提供了动态转换数据源、hql语言转换解析、pdf/word文档转换等功能。
(7)interceptor拦截器包
当系统有一些情况不想让其通过验证而进入系统或者作出某种操作时,需要有拦截器进行拦截请求,并让其作出其他的操作,这个包的功能就是编写一些拦截器,实现请求的转换处理。
(8)Servlet容器包
提供了一个上传图片servlet类,所有上传图片的接口都可以访问。
(9)timer任务包
提供了系统中需要用到调度任务,可以定时处理一些事情,必须每周六去扫描一下日志等等。
(10)util工具包
Util工具包提供了大量的工具类方法,包括很多平时开发过程中常用的工具,例如UUID、file处理、异常处理、数据库处理、数字处理等等。

2、数据库连接的实现过程
因为持久层框架用的是hibernate,而没有采用传统的jdbc方式,可能比较难理解,首先需要搞清楚,Hibernate是一个对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将实体类与数据库表建立了映射关系,是一个全自动的映射框架,hibernate可以自动生成SQL语句,自动执行,可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,在本系统中首先通过spring-mvc-hibernate.xml文件进行链接配置,来设置用户名和密码等数据,然后配置需要扫描的实体类对象包,最后他会自动跟数据库表生成一个映射关系,就相当于对应好了,当你查询数据的时候,他就会根据你传递的对象实体名,去查询相应的数据库表就可以了。

3、如何实现一个查询功能
在系统中一个查询的完成过程是这样的,不知道你想了解的查询是什么样的,举个例子,比如说咱界面上的那个查询按钮,其实是easyui前端框架的一个组件,这个前端的框架其实封装的很多东西,查询按钮也被封装到了grid插件中,你点击那个查询的时候,他其实是找到的这个文件:
在这里插入图片描述
在这里插入图片描述
查询按钮其实被放置在了这里面,这样做的目的其实就是为了减少代码的编写量,因为有很多地方都会用到查询、重置这两个按钮,如果每个页面都去写这两个东西,代码会显得很冗余,而你点击这个按钮的时候,他会去重新加载你的表格,,这个时候肯定就是去查询加载表格的那个链接,例如:
在这里插入图片描述
如图,这样的话他就会根据这个链接,访问到后台的TBTempController类中的datagrid方法,并且将参数也一起传递给这个方法,来到后台后,可以看一下这个方法:
在这里插入图片描述
在这个方法中,它又会去调用TBTempServiceI这个类中的getDataGridReturn这个方法,而这个类只是一个接口,java学的可以的话你会知道,它还会有一个具体实现方法的类,叫做TBTempServiceImpl类,具体方法都在这里面,例如:
在这里插入图片描述
在这里插入图片描述
此时点击去后,你会找不到getDataGridReturn这个方法,因为这个类它继承了一个父类,我们调用的这个方法实际上是一个父类方法,在它的父类里面,我们看到了这个方法,数据就是通过这个方法,链接了hibernate,找到了我们那张表,才又这个过程逆向返回到前台,前台也就查询出了数据,这就是一个查询数据的完整流程

4、如何进行RFID卡号获取和动态加载
首先,RFID卡片的存储规则只能是十六进制数,汉字是无法存储到卡片中的,那我们的图书信息怎么办呢?是这样的,一个正常的仓储物流系统在入库和出库前期,首先要去对接一些其他的系统,例如ERP、SCM这些物料系统,用来获取即将入库和出库的基本商品信息,但是我们的系统并没有其他的系统提供来对接,所以只能临时通过内部的图书表来获取图书的全部信息,而编号我们将它写入到卡片中去即可,首先入库时,RFID扫描到卡片,电脑端打开我们的中间传输软件,传输软件会将我们的卡片编号写入到D盘的一个临时文件中card.txt中去,而我们web端就会去定时扫描我们电脑中的这个文件,从而读取到卡片编号,再通过卡片编号,查询到图书表中对应的其他信息,最后返回到前端页面并给页面赋值,如果这个卡片编号图书表中不存在,那前段页面就只显示卡号和默认入库的数量,这个默认数量是为了提高用户体验而设计的,可以在代码中修改。盘点的页面其实也是这样的过程,只不过盘点页面要求必须是系统中已经存在的图书编号才可以,如果不存在的话,会有相应的提示。
具体的代码如下:
在这里插入图片描述
这一段代码是定时去后台扫描卡片编号的方法,此处设置为了1秒钟扫描一次,但是如果前台页面和文件中编号是一致的就不会去更新前台赋值。图片中可以看到,请求的后台路径为:tBPutInController.do中的tBReadCard方法,如下:
在这里插入图片描述
读卡的一些规则和方式都在这里面包含了,详情可以看一下代码,主要就是读取文件,解析出内部的文本,就能读出卡片编号,然后再去查询读书表即可。

发布了3 篇原创文章 · 获赞 11 · 访问量 443

猜你喜欢

转载自blog.csdn.net/JavaToShare/article/details/105000227