劉 聰 朱恒偉 李 燁
(1.德州學(xué)院計算機與信息學(xué)院,山東 德州253023;2.山東省立第三醫(yī)院信息網(wǎng)絡(luò)部,山東 濟南250031)
本系統(tǒng)是符合現(xiàn)代企業(yè)需求的B/S結(jié)構(gòu)的系統(tǒng),前臺使用jsp和基于Jquery的框架 Jquery-EasyUI ,界面美觀,操作方便。后臺使用servlet處理業(yè)務(wù)邏輯。系統(tǒng)的主要功能模塊包括:用戶管理模塊,實現(xiàn)對用戶和崗位信息進行維護;物料管理模塊,包括采購單列表、擬定采購單、檢驗采購單以及供應(yīng)商和庫存物料進行維護;分銷商模塊,實現(xiàn)對產(chǎn)品、分銷商、以及訂單配貨發(fā)貨等流程進行維護;數(shù)據(jù)加密模塊,實現(xiàn)對企業(yè)重要信息的加密。企業(yè)通過本系統(tǒng),可有效控制倉庫原料的質(zhì)量,并且根據(jù)分銷商的訂單數(shù)量和庫存產(chǎn)品數(shù)量,及時擬定采購單進行采購,對企業(yè)來說,DRP系統(tǒng)可以為企業(yè)帶來巨大的效益。
針對商貿(mào)企業(yè)現(xiàn)狀,結(jié)合DRP的特點,進行開發(fā),整合資源,改善庫存質(zhì)量,擴展銷售渠道,達到控制產(chǎn)品質(zhì)量,提高效益的目的。結(jié)合企業(yè)目前的情況,確定DRP系統(tǒng)實現(xiàn)以下幾方面的功能:對用戶信息、采購單數(shù)量、價格、供應(yīng)商信息進行加密;對倉庫人員和崗位進行維護,包括倉庫管理員、檢驗員、采購員、產(chǎn)品經(jīng)理;對采購單、物料、供應(yīng)商進行維護,包括擬定采購單、檢驗、入庫;對倉庫管理人員、分銷商登錄進行控制;對庫存產(chǎn)品、分銷商、訂單進行維護,包括產(chǎn)品數(shù)量、價格,分銷商個人信息,訂單狀態(tài);分銷商下單,及時檢查該產(chǎn)品是否有庫存,分銷商下單后,實時更新產(chǎn)品庫存數(shù)量。
2.1 系統(tǒng)總體設(shè)計
根據(jù)軟件設(shè)計的思想,對DRP系統(tǒng)進行分析,系統(tǒng)包括企業(yè)內(nèi)部倉庫管理人員和企業(yè)外部分銷商兩個部門。分為倉庫用戶信息維護模塊、采購單維護模塊、訂單維護模塊、數(shù)據(jù)加密模塊。其中,采購單維護模塊主要實現(xiàn)管理員擬定采購單,新增采購單時可以指定采購人,擬定采購日期等;采購員根據(jù)管理員擬定的采購單進行采購;檢驗員對采購的物料進行檢驗;檢驗合格后管理員及時入庫。訂單維護模塊主要實現(xiàn)分銷商提交訂單信息,管理員進行配貨、發(fā)貨、及時更新庫存數(shù)量等功能。經(jīng)研究設(shè)計出DRP系統(tǒng)的功能。
2.2 類的設(shè)計
類圖是由于許多類組成的,用圖形的形式表示系統(tǒng)結(jié)構(gòu),軟件系統(tǒng)中離不開類的設(shè)計。一個進行深入開發(fā)時,需要對相關(guān)的類進行說明,類圖是軟件設(shè)計和開發(fā)時必不可少的圖,系統(tǒng)是通過各個類圖連接起來,相互協(xié)作的。本系統(tǒng)使用的類圖較多,無法一一列舉,但是每個模塊的類圖都是相似的,用戶模塊的類圖如圖1所示:
BaseDao是公共的接口,它定義了所有模塊通用的一些方法,包括添加對象、修改對象、刪除對象、通過ID查找返回對應(yīng)的對象、查詢數(shù)據(jù)庫中所有的對象。BaseDaoImpl實現(xiàn)了BaseDao接口,實現(xiàn)了這些公共的方法,這些方法使用反射和泛型來實現(xiàn)的,用戶接口UserDao繼承自BaseDao,UserDao中還可以定義用戶模塊中特有的方法,UserDaoImpl 繼承自BaseDaoImpl,實現(xiàn)UserDao接口,UserDaoImpl類只需要實現(xiàn)UserDao接口中定義的特有方法就可以了,其他的公共方法都被繼承過來了。UserServlet處理相關(guān)的業(yè)務(wù)邏輯,調(diào)用UserDaoImpl中相應(yīng)的方法與數(shù)據(jù)庫交互。User實體封裝了相關(guān)的數(shù)據(jù),與UserServlet是關(guān)聯(lián)關(guān)系。
2.3 系統(tǒng)數(shù)據(jù)庫設(shè)計
根據(jù)系統(tǒng)的功能需求,系統(tǒng)包含10個模型,因為模型封裝了數(shù)據(jù),與數(shù)據(jù)庫進行交互,所以系統(tǒng)中的模型與數(shù)據(jù)庫中的表是一一對應(yīng)的,模型中的所有屬性對應(yīng)數(shù)據(jù)庫相應(yīng)表中的字段。根據(jù)對系統(tǒng)分析,包括用戶表、采購表、用戶-采購表、角色表、供應(yīng)商表、庫存表、物料表、產(chǎn)品表、分銷商表和訂單表。其中用戶購買表是一張中間表,與用戶表、采購表和角色表通過外鍵建立關(guān)聯(lián)關(guān)系。根據(jù)分析,對數(shù)據(jù)庫中的表做了以下設(shè)計:
表1 用戶表
表2 采購表
表3 用戶-采購表
表4 角色表
表5 供應(yīng)商表
表6 庫存表
表7 物料表
表8 產(chǎn)品表
表9 分銷商表
表10 訂單表
2.4系統(tǒng)模塊設(shè)計
2.4.1 用戶登錄模塊設(shè)計
用戶進入DRP系統(tǒng)的登錄界面,在登錄界面輸入用戶名、密碼、選擇登錄角色是倉庫人員或者分銷商、輸入驗證碼,將登錄信息傳遞到后臺。如果是倉庫管理人員,會調(diào)用DAO層相關(guān)方法,查詢用戶表中是否有相應(yīng)的記錄,如果有相應(yīng)的記錄,會通過用戶名查詢到相應(yīng)的用戶實體,把用戶信息放到session中。并且把登錄成功的提示信息以及用戶角色信息通過json格式的字符串寫回到前臺,前臺獲取到j(luò)son格式的字符串,提示用戶登錄成功,并且跳轉(zhuǎn)到倉庫人員的管理界面,如果用戶表中沒有相應(yīng)的記錄,會把錯誤信息通過json格式的字符串寫回到前臺,前臺獲取到j(luò)son格式字符串,提示用戶用戶名或者密碼錯誤;如果用戶登錄時選擇分銷商登錄,會調(diào)用DAO層相應(yīng)的方法,查詢分銷商表中是否有相應(yīng)的記錄,如果分銷商表中有相應(yīng)的記錄,會把登錄成功以及用戶角色信息通過json格式字符串形式寫回到前臺,前臺獲取到j(luò)son格式字符串,提示用戶登錄成功,跳轉(zhuǎn)到分銷商管理主界面。如果數(shù)據(jù)庫中沒有相應(yīng)記錄,前臺獲取到相應(yīng)json格式字符串,提示用戶用戶名或者密碼錯誤。用戶登錄流程如圖2所示:
圖2 用戶登錄流程圖
2.4.2 采購管理設(shè)計
采購單包括5個狀態(tài),在數(shù)據(jù)庫中分別用1到5進行標識。分別表示正在采購中、采購?fù)瓿?,正在檢驗中、檢驗完成,產(chǎn)品合格、檢驗完成,產(chǎn)品不合格、產(chǎn)品已入庫。在前臺,管理員進入物料模塊時,會根據(jù)采購單的狀態(tài)顯示不同的信息。采購單由管理員擬定、采購員采購、檢驗員檢驗、最后檢驗合格后由管理員進行入庫。管理員進入系統(tǒng)后,會顯示所有的采購單狀態(tài)。擬定采購單時,會彈出采購單對話框,管理員輸入采購原料名稱,擬定采購日期,采購數(shù)量、價格。其中,采購單的數(shù)量和價格是加密的,以密文的形式存到數(shù)據(jù)庫中,管理員可以指定采購員進行采購,在彈出對話框時,系統(tǒng)會從數(shù)據(jù)庫中查出所有的采購員列表,然后再前臺填充到采購下單列表中,管理員選擇其中一個采購員進行采購。采購單擬定之后,會保存到數(shù)據(jù)庫的采購表中。另外用戶-采購表只一張中間表,它通過外鍵和用戶表、采購表和角色表進行關(guān)聯(lián)。采購單在采購表中添加之后,會在用戶-采購表中添加兩條記錄,分別是管理員id和采購單id建立的關(guān)聯(lián)關(guān)系,以及制定采購員的id和采購單id建立的關(guān)聯(lián)關(guān)系。將這兩條記錄存放到用戶-采購表中。方便查詢采購單出擬定采購人和采購單的指定采購員。采購員登錄系統(tǒng)后,會在采購員任務(wù)列表中查詢到自己的任務(wù)列表,查詢過程中,首先獲取到session中用戶的信息,然后根據(jù)采購員的id,通過用戶表、采購表、用戶-采購表三張表關(guān)聯(lián),進行多表查詢,查詢到自己的任務(wù)列表,顯示在采購員列表中。當(dāng)采購員確認采購?fù)瓿蓵r,會在數(shù)據(jù)庫中更新采購單狀態(tài),采購單狀態(tài)變?yōu)?。檢驗員登錄后,會在檢驗單任務(wù)列表中看到自己的檢驗任務(wù)列表,如果檢驗合格,檢驗員操作后,采購單的狀態(tài)變?yōu)?,如果檢驗為不合格,檢驗員操作后,采購單的狀態(tài)變?yōu)?。管理員會檢查檢驗合格的采購單,及時進行入庫,入庫后,采購單的狀態(tài)變?yōu)?。采購單的流程圖如圖3所示:
圖3 采購單流程圖
2.4.3 訂單管理設(shè)計
訂單包括5個狀態(tài),分別是等待處理、已處理、已發(fā)貨、倉庫缺貨、已完成。分銷商登錄之后,系統(tǒng)轉(zhuǎn)向分銷商管理界面,訂單列表中會顯示已經(jīng)提交訂單的處理狀態(tài),每種狀態(tài)用不同的顏色顯示出來,便于查看。分銷商首先添加新訂單,分銷商點擊新訂單,會彈出對話框,要求輸入產(chǎn)品貨號、收貨人姓名、收貨人地址、收貨人電話等信息,輸入產(chǎn)品貨號之后,會通過AJAX向后臺發(fā)送一條請求,同時這在提交產(chǎn)品貨號頁面設(shè)置一個全局變量flag,根據(jù)分銷商輸入的產(chǎn)品貨號,查找?guī)齑娈a(chǎn)品表中是否存在該產(chǎn)品,如果存在該產(chǎn)品,提示分銷商“產(chǎn)品貨號填寫正確”,同時flag的值設(shè)置為true,如果找不到該產(chǎn)品,會提示分銷商產(chǎn)品“該產(chǎn)品貨號不存在,請重新填寫”,同時flag的值設(shè)置為false。分銷商填寫完相應(yīng)訂單信息后,如果flag的值為true,則提交表單到后臺進行處理,否則無法提交。提交訂單后,后臺為每個訂單生成一個UUID,代表唯一的訂單編號,保存到數(shù)據(jù)庫中。分銷商每次下一個訂單,庫存中相應(yīng)產(chǎn)品的數(shù)量就會減少一個。下單時更新庫存采用觀察者模式,觀察者模式包括觀察者和目標,目標首先把觀察者對象放到list集合中。當(dāng)新訂單調(diào)用數(shù)據(jù)層的方法保存后,目標會通知觀察者對象。在通知的方法中,會遍歷目標類中l(wèi)ist集合中的所有觀察者對象進行更新庫存操作。把產(chǎn)品貨號作為參數(shù)傳遞到更新庫存方法中,然后根據(jù)產(chǎn)品貨號在數(shù)據(jù)庫中查出該產(chǎn)品的庫存數(shù)量,進行減一操作,把減一后的庫存數(shù)量保存到數(shù)據(jù)庫中,執(zhí)行更新操作。新增訂單后,訂單狀態(tài)為等待處理。管理員收到訂單后,會通知倉庫進行配貨,管理員確認已經(jīng)配貨之后,數(shù)據(jù)庫中訂單狀態(tài)更新為2,表示訂單為已處理。如果倉庫缺貨,訂單狀態(tài)會更新為3,表示倉庫缺貨,等待處理。如果已經(jīng)發(fā)貨完成,數(shù)據(jù)庫中訂單狀態(tài)更新為4,訂單完成后,數(shù)據(jù)庫中訂單狀態(tài)會更新為5。訂單流程圖如圖4所示:
圖4 訂單流程圖
3.1 數(shù)據(jù)訪問層的實現(xiàn)
數(shù)據(jù)訪問層,即DAO層,主要完成與數(shù)據(jù)庫訪問的實現(xiàn)細節(jié),所有的sql語句都在這一層實現(xiàn),service層是主要面向功能的,service層所有功能的實現(xiàn)都需要調(diào)用DAO與數(shù)據(jù)庫訪問來實現(xiàn)。系統(tǒng)中所有常用的方法都在DAO層進行了封裝,service層只要調(diào)用一下就可以了。系統(tǒng)所有的功能模塊都有DAO層,但是所有模塊的DAO層都繼承自BaseDao,BaseDao使用反射和泛型封裝了所有常用的方法,這樣可以實現(xiàn)代碼的復(fù)用。Java中的反射機制是在運行狀態(tài)的,對于任何一個類,service層只要把對象傳遞過來,就能通過該對象獲取到所屬類的所有屬性和方法。
3.2用戶登錄功能實現(xiàn)
進入系統(tǒng)登錄界面后,頁面會首先向后臺發(fā)送請求,生成驗證碼,驗證碼的生成是隨機數(shù)字和字母加隨機顏色,通過java的圖片類生產(chǎn)一張圖片。用戶每點擊一次圖片時,也會向后臺發(fā)送請求,重新生成一次新的驗證碼。輸入用戶名和密碼,選擇登錄角色,輸入驗證碼,點擊確定,會把輸入信息提交給后臺,前臺和后臺使用json格式的字符串進行數(shù)據(jù)傳輸。系統(tǒng)登錄界面如圖5所示:
圖5 系統(tǒng)登錄界面
3.3 采購管理功能實現(xiàn)
采購單管理包括擬定采購單、采購單采購、檢驗單檢驗、入庫等操作。管理員登錄后臺,進入采購單管理模塊,會顯示出所有采購單的狀態(tài)。采購員進入后,只會顯示自己等待采購的采購單,采購員的采購單上面會顯示擬采購單人。檢驗員進入系統(tǒng)后,在檢驗?zāi)K查看的是待檢驗的任務(wù)列表。采購單管理和采購員任務(wù)列表的界面如下:
圖6 采購單管理界面
4.1 用戶登錄測試
軟件測試的核心部分是測試用例,測試用例是為驗證軟件的某一功能而編寫的一組測試輸入、操作及預(yù)期效果。根據(jù)用例的輸入,輸入與預(yù)期效果得對比來測試程序是否正確。用戶登錄的測試用例如下表11所示:
表11 用戶登錄測試用例
4.2采購單測試
采購單相關(guān)功能的測試用例如下表12所示:
表12 采購單測試用例
4.3 訂單測試
訂單相關(guān)功能的測試用例如下表13所示:
表13 訂單測試用例
本次測試選取了用戶登錄、采購單管理、訂單管理三個功能進行黑盒測試,本次測試中,主要發(fā)現(xiàn)兩類錯誤,一是程序語法錯誤,二是邏輯方面的錯誤。對于語法錯誤,主要通過java自帶的編譯程序?qū)ふ艺Z法點,逐一解決,對于邏輯錯誤,主要在運行時設(shè)置斷點,然后通過斷點一步一步跟進,尋找錯誤點,然后解決。最終使每一個測試用例達到了預(yù)期的效果,測試通過。
DRP系統(tǒng)是企業(yè)現(xiàn)代管理系統(tǒng)和現(xiàn)代計算機結(jié)合的產(chǎn)物。本文針對目前企業(yè)的現(xiàn)狀,闡述了DRP系統(tǒng)的產(chǎn)生背景,并且進行了詳細的設(shè)計和實現(xiàn)。流程清晰、頁面簡單明了。系統(tǒng)主要在可擴展性和代碼復(fù)用方面進行了優(yōu)化,符合軟件設(shè)計準則。代碼復(fù)用性強,可擴展性好。能夠解決企業(yè)目前存在的難題。