Java練手項目1:基於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方法,如下:
在這裏插入圖片描述
讀卡的一些規則和方式都在這裏麪包含了,詳情可以看一下代碼,主要就是讀取文件,解析出內部的文本,就能讀出卡片編號,然後再去查詢讀書表即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章