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