劉 聰 朱恒偉 李 燁
(1.德州學院計算機與信息學院,山東 德州253023;2.山東省立第三醫院信息網絡部,山東 濟南250031)
本系統是符合現代企業需求的B/S結構的系統,前臺使用jsp和基于Jquery的框架 Jquery-EasyUI ,界面美觀,操作方便。后臺使用servlet處理業務邏輯。系統的主要功能模塊包括:用戶管理模塊,實現對用戶和崗位信息進行維護;物料管理模塊,包括采購單列表、擬定采購單、檢驗采購單以及供應商和庫存物料進行維護;分銷商模塊,實現對產品、分銷商、以及訂單配貨發貨等流程進行維護;數據加密模塊,實現對企業重要信息的加密。企業通過本系統,可有效控制倉庫原料的質量,并且根據分銷商的訂單數量和庫存產品數量,及時擬定采購單進行采購,對企業來說,DRP系統可以為企業帶來巨大的效益。
針對商貿企業現狀,結合DRP的特點,進行開發,整合資源,改善庫存質量,擴展銷售渠道,達到控制產品質量,提高效益的目的。結合企業目前的情況,確定DRP系統實現以下幾方面的功能:對用戶信息、采購單數量、價格、供應商信息進行加密;對倉庫人員和崗位進行維護,包括倉庫管理員、檢驗員、采購員、產品經理;對采購單、物料、供應商進行維護,包括擬定采購單、檢驗、入庫;對倉庫管理人員、分銷商登錄進行控制;對庫存產品、分銷商、訂單進行維護,包括產品數量、價格,分銷商個人信息,訂單狀態;分銷商下單,及時檢查該產品是否有庫存,分銷商下單后,實時更新產品庫存數量。
2.1 系統總體設計
根據軟件設計的思想,對DRP系統進行分析,系統包括企業內部倉庫管理人員和企業外部分銷商兩個部門。分為倉庫用戶信息維護模塊、采購單維護模塊、訂單維護模塊、數據加密模塊。其中,采購單維護模塊主要實現管理員擬定采購單,新增采購單時可以指定采購人,擬定采購日期等;采購員根據管理員擬定的采購單進行采購;檢驗員對采購的物料進行檢驗;檢驗合格后管理員及時入庫。訂單維護模塊主要實現分銷商提交訂單信息,管理員進行配貨、發貨、及時更新庫存數量等功能。經研究設計出DRP系統的功能。
2.2 類的設計
類圖是由于許多類組成的,用圖形的形式表示系統結構,軟件系統中離不開類的設計。一個進行深入開發時,需要對相關的類進行說明,類圖是軟件設計和開發時必不可少的圖,系統是通過各個類圖連接起來,相互協作的。本系統使用的類圖較多,無法一一列舉,但是每個模塊的類圖都是相似的,用戶模塊的類圖如圖1所示:
BaseDao是公共的接口,它定義了所有模塊通用的一些方法,包括添加對象、修改對象、刪除對象、通過ID查找返回對應的對象、查詢數據庫中所有的對象。BaseDaoImpl實現了BaseDao接口,實現了這些公共的方法,這些方法使用反射和泛型來實現的,用戶接口UserDao繼承自BaseDao,UserDao中還可以定義用戶模塊中特有的方法,UserDaoImpl 繼承自BaseDaoImpl,實現UserDao接口,UserDaoImpl類只需要實現UserDao接口中定義的特有方法就可以了,其他的公共方法都被繼承過來了。UserServlet處理相關的業務邏輯,調用UserDaoImpl中相應的方法與數據庫交互。User實體封裝了相關的數據,與UserServlet是關聯關系。
2.3 系統數據庫設計
根據系統的功能需求,系統包含10個模型,因為模型封裝了數據,與數據庫進行交互,所以系統中的模型與數據庫中的表是一一對應的,模型中的所有屬性對應數據庫相應表中的字段。根據對系統分析,包括用戶表、采購表、用戶-采購表、角色表、供應商表、庫存表、物料表、產品表、分銷商表和訂單表。其中用戶購買表是一張中間表,與用戶表、采購表和角色表通過外鍵建立關聯關系。根據分析,對數據庫中的表做了以下設計:

表1 用戶表

表2 采購表

表3 用戶-采購表

表4 角色表

表5 供應商表

表6 庫存表

表7 物料表

表8 產品表

表9 分銷商表

表10 訂單表
2.4系統模塊設計
2.4.1 用戶登錄模塊設計
用戶進入DRP系統的登錄界面,在登錄界面輸入用戶名、密碼、選擇登錄角色是倉庫人員或者分銷商、輸入驗證碼,將登錄信息傳遞到后臺。如果是倉庫管理人員,會調用DAO層相關方法,查詢用戶表中是否有相應的記錄,如果有相應的記錄,會通過用戶名查詢到相應的用戶實體,把用戶信息放到session中。并且把登錄成功的提示信息以及用戶角色信息通過json格式的字符串寫回到前臺,前臺獲取到json格式的字符串,提示用戶登錄成功,并且跳轉到倉庫人員的管理界面,如果用戶表中沒有相應的記錄,會把錯誤信息通過json格式的字符串寫回到前臺,前臺獲取到json格式字符串,提示用戶用戶名或者密碼錯誤;如果用戶登錄時選擇分銷商登錄,會調用DAO層相應的方法,查詢分銷商表中是否有相應的記錄,如果分銷商表中有相應的記錄,會把登錄成功以及用戶角色信息通過json格式字符串形式寫回到前臺,前臺獲取到json格式字符串,提示用戶登錄成功,跳轉到分銷商管理主界面。如果數據庫中沒有相應記錄,前臺獲取到相應json格式字符串,提示用戶用戶名或者密碼錯誤。用戶登錄流程如圖2所示:

圖2 用戶登錄流程圖
2.4.2 采購管理設計
采購單包括5個狀態,在數據庫中分別用1到5進行標識。分別表示正在采購中、采購完成,正在檢驗中、檢驗完成,產品合格、檢驗完成,產品不合格、產品已入庫。在前臺,管理員進入物料模塊時,會根據采購單的狀態顯示不同的信息。采購單由管理員擬定、采購員采購、檢驗員檢驗、最后檢驗合格后由管理員進行入庫。管理員進入系統后,會顯示所有的采購單狀態。擬定采購單時,會彈出采購單對話框,管理員輸入采購原料名稱,擬定采購日期,采購數量、價格。其中,采購單的數量和價格是加密的,以密文的形式存到數據庫中,管理員可以指定采購員進行采購,在彈出對話框時,系統會從數據庫中查出所有的采購員列表,然后再前臺填充到采購下單列表中,管理員選擇其中一個采購員進行采購。采購單擬定之后,會保存到數據庫的采購表中。另外用戶-采購表只一張中間表,它通過外鍵和用戶表、采購表和角色表進行關聯。采購單在采購表中添加之后,會在用戶-采購表中添加兩條記錄,分別是管理員id和采購單id建立的關聯關系,以及制定采購員的id和采購單id建立的關聯關系。將這兩條記錄存放到用戶-采購表中。方便查詢采購單出擬定采購人和采購單的指定采購員。采購員登錄系統后,會在采購員任務列表中查詢到自己的任務列表,查詢過程中,首先獲取到session中用戶的信息,然后根據采購員的id,通過用戶表、采購表、用戶-采購表三張表關聯,進行多表查詢,查詢到自己的任務列表,顯示在采購員列表中。當采購員確認采購完成時,會在數據庫中更新采購單狀態,采購單狀態變為2。檢驗員登錄后,會在檢驗單任務列表中看到自己的檢驗任務列表,如果檢驗合格,檢驗員操作后,采購單的狀態變為3,如果檢驗為不合格,檢驗員操作后,采購單的狀態變為4。管理員會檢查檢驗合格的采購單,及時進行入庫,入庫后,采購單的狀態變為5。采購單的流程圖如圖3所示:

圖3 采購單流程圖
2.4.3 訂單管理設計
訂單包括5個狀態,分別是等待處理、已處理、已發貨、倉庫缺貨、已完成。分銷商登錄之后,系統轉向分銷商管理界面,訂單列表中會顯示已經提交訂單的處理狀態,每種狀態用不同的顏色顯示出來,便于查看。分銷商首先添加新訂單,分銷商點擊新訂單,會彈出對話框,要求輸入產品貨號、收貨人姓名、收貨人地址、收貨人電話等信息,輸入產品貨號之后,會通過AJAX向后臺發送一條請求,同時這在提交產品貨號頁面設置一個全局變量flag,根據分銷商輸入的產品貨號,查找庫存產品表中是否存在該產品,如果存在該產品,提示分銷商“產品貨號填寫正確”,同時flag的值設置為true,如果找不到該產品,會提示分銷商產品“該產品貨號不存在,請重新填寫”,同時flag的值設置為false。分銷商填寫完相應訂單信息后,如果flag的值為true,則提交表單到后臺進行處理,否則無法提交。提交訂單后,后臺為每個訂單生成一個UUID,代表唯一的訂單編號,保存到數據庫中。分銷商每次下一個訂單,庫存中相應產品的數量就會減少一個。下單時更新庫存采用觀察者模式,觀察者模式包括觀察者和目標,目標首先把觀察者對象放到list集合中。當新訂單調用數據層的方法保存后,目標會通知觀察者對象。在通知的方法中,會遍歷目標類中list集合中的所有觀察者對象進行更新庫存操作。把產品貨號作為參數傳遞到更新庫存方法中,然后根據產品貨號在數據庫中查出該產品的庫存數量,進行減一操作,把減一后的庫存數量保存到數據庫中,執行更新操作。新增訂單后,訂單狀態為等待處理。管理員收到訂單后,會通知倉庫進行配貨,管理員確認已經配貨之后,數據庫中訂單狀態更新為2,表示訂單為已處理。如果倉庫缺貨,訂單狀態會更新為3,表示倉庫缺貨,等待處理。如果已經發貨完成,數據庫中訂單狀態更新為4,訂單完成后,數據庫中訂單狀態會更新為5。訂單流程圖如圖4所示:

圖4 訂單流程圖
3.1 數據訪問層的實現
數據訪問層,即DAO層,主要完成與數據庫訪問的實現細節,所有的sql語句都在這一層實現,service層是主要面向功能的,service層所有功能的實現都需要調用DAO與數據庫訪問來實現。系統中所有常用的方法都在DAO層進行了封裝,service層只要調用一下就可以了。系統所有的功能模塊都有DAO層,但是所有模塊的DAO層都繼承自BaseDao,BaseDao使用反射和泛型封裝了所有常用的方法,這樣可以實現代碼的復用。Java中的反射機制是在運行狀態的,對于任何一個類,service層只要把對象傳遞過來,就能通過該對象獲取到所屬類的所有屬性和方法。
3.2用戶登錄功能實現
進入系統登錄界面后,頁面會首先向后臺發送請求,生成驗證碼,驗證碼的生成是隨機數字和字母加隨機顏色,通過java的圖片類生產一張圖片。用戶每點擊一次圖片時,也會向后臺發送請求,重新生成一次新的驗證碼。輸入用戶名和密碼,選擇登錄角色,輸入驗證碼,點擊確定,會把輸入信息提交給后臺,前臺和后臺使用json格式的字符串進行數據傳輸。系統登錄界面如圖5所示:

圖5 系統登錄界面
3.3 采購管理功能實現
采購單管理包括擬定采購單、采購單采購、檢驗單檢驗、入庫等操作。管理員登錄后臺,進入采購單管理模塊,會顯示出所有采購單的狀態。采購員進入后,只會顯示自己等待采購的采購單,采購員的采購單上面會顯示擬采購單人。檢驗員進入系統后,在檢驗模塊查看的是待檢驗的任務列表。采購單管理和采購員任務列表的界面如下:

圖6 采購單管理界面
4.1 用戶登錄測試
軟件測試的核心部分是測試用例,測試用例是為驗證軟件的某一功能而編寫的一組測試輸入、操作及預期效果。根據用例的輸入,輸入與預期效果得對比來測試程序是否正確。用戶登錄的測試用例如下表11所示:

表11 用戶登錄測試用例
4.2采購單測試
采購單相關功能的測試用例如下表12所示:

表12 采購單測試用例
4.3 訂單測試
訂單相關功能的測試用例如下表13所示:

表13 訂單測試用例
本次測試選取了用戶登錄、采購單管理、訂單管理三個功能進行黑盒測試,本次測試中,主要發現兩類錯誤,一是程序語法錯誤,二是邏輯方面的錯誤。對于語法錯誤,主要通過java自帶的編譯程序尋找語法點,逐一解決,對于邏輯錯誤,主要在運行時設置斷點,然后通過斷點一步一步跟進,尋找錯誤點,然后解決。最終使每一個測試用例達到了預期的效果,測試通過。
DRP系統是企業現代管理系統和現代計算機結合的產物。本文針對目前企業的現狀,闡述了DRP系統的產生背景,并且進行了詳細的設計和實現。流程清晰、頁面簡單明了。系統主要在可擴展性和代碼復用方面進行了優化,符合軟件設計準則。代碼復用性強,可擴展性好。能夠解決企業目前存在的難題。