齊桂芳
(東營(yíng)市勝利油田物資供應(yīng)處信息檔案中心,山東東營(yíng)257024)
現(xiàn)代社會(huì)生產(chǎn)力的快速發(fā)展,普通的市場(chǎng)交易已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足我們的購(gòu)物需求。 隨著網(wǎng)絡(luò)的發(fā)展和普及,網(wǎng)上交易系統(tǒng)就顯得格外重要。 本課題將模擬一個(gè)小型制造企業(yè)構(gòu)建一個(gè)網(wǎng)上訂單交易系統(tǒng),使客戶能夠從很便捷的在網(wǎng)上訂購(gòu)公司產(chǎn)品,以擴(kuò)大公司產(chǎn)品銷售市場(chǎng)。
網(wǎng)上交易系統(tǒng)將產(chǎn)品管理系統(tǒng)與網(wǎng)上訂購(gòu)系統(tǒng)有效地結(jié)合在一起,通過網(wǎng)站實(shí)現(xiàn)企業(yè)的在線交易來銷售自己的產(chǎn)品,進(jìn)一步擴(kuò)大市場(chǎng)范圍;網(wǎng)上交易系統(tǒng)有效地整合了產(chǎn)品發(fā)布系統(tǒng)、客戶管理系統(tǒng)、購(gòu)物車功能、訂單管理、在線支付模塊。
開發(fā)環(huán)境簡(jiǎn)介。 本項(xiàng)目的運(yùn)行環(huán)境是Win2000 或更高、IIS5.0 以上版本以及IE6.0 以上版本;數(shù)據(jù)庫(kù)使用Oracle 9i;開發(fā)工具包括Visual Studio 2003、PL/SQL Developer 和VSS 等。
本系統(tǒng)是使企業(yè)能有效處理網(wǎng)上定購(gòu)、 材料采購(gòu)業(yè)務(wù)的管理系統(tǒng),具體實(shí)現(xiàn)功能模塊包括:權(quán)限維護(hù)、產(chǎn)品瀏覽、購(gòu)物車、客戶訂制訂單、顯示訂單詳細(xì)、訂單類型轉(zhuǎn)換、訂單審計(jì)、原材料采購(gòu)、原材料入庫(kù)、產(chǎn)品生產(chǎn)、產(chǎn)品銷售和庫(kù)存預(yù)警訂單。整個(gè)系統(tǒng)的功能構(gòu)成分為前臺(tái)和后臺(tái)兩個(gè)部分。
本系統(tǒng)處理的訂單包括以下四種:客戶預(yù)定訂單、客戶實(shí)際訂單、預(yù)計(jì)轉(zhuǎn)實(shí)際訂單和庫(kù)存預(yù)警訂單。
它們的基本流程:訂單定制→訂單審計(jì)→原來料采購(gòu)→原材料入庫(kù)→產(chǎn)品生產(chǎn)→訂單發(fā)貨,其中預(yù)計(jì)訂單到原料入庫(kù)結(jié)束,預(yù)計(jì)轉(zhuǎn)實(shí)際訂單從產(chǎn)品生產(chǎn)開始。
本系統(tǒng)的核心是對(duì)4 種類型訂單的處理,主要過程包括:訂單訂制、訂單查詢、訂單轉(zhuǎn)化、訂單審計(jì)、材料采購(gòu)、材料入庫(kù)、產(chǎn)品生產(chǎn)和產(chǎn)品銷售。 另外,為使系統(tǒng)功能豐富完備,又加入了以下過程:權(quán)限維護(hù)和產(chǎn)品瀏覽等。
2.2.1 權(quán)限維護(hù)描述
提供注冊(cè)功能,建立客戶基本資料(如:客戶編號(hào)、名稱、地址、電話、統(tǒng)一編號(hào)等)。 用戶在下次進(jìn)入時(shí)需要先登陸,提高用戶信息保密性和安全性。
2.2.2 產(chǎn)品瀏覽描述
在網(wǎng)頁(yè)上分類顯示公司的所有產(chǎn)品,這些產(chǎn)品可以被任何用戶所瀏覽。此外,用戶還能查看這些產(chǎn)品的詳細(xì)信息,以方便客戶對(duì)自己感興趣的商品進(jìn)行篩選。
2.2.3 訂單訂制描述
成功登陸本系統(tǒng)的合法用戶可以按照自身的需求定制預(yù)計(jì)產(chǎn)品需求訂單(需要注明實(shí)際需求日期)。 系統(tǒng)提供產(chǎn)品實(shí)際生產(chǎn)周期,并且實(shí)際需求日期必須不大于產(chǎn)品最大生產(chǎn)周期, 否則定制訂單失敗。此外,客戶確認(rèn)風(fēng)險(xiǎn)內(nèi)容,并按照訂單金額提供訂金。
2.2.4 訂單查詢描述
客戶合法登陸后可以對(duì)以前訂制過的訂單進(jìn)行查詢,要求操作簡(jiǎn)便,界面友好。系統(tǒng)需要為用戶提供訂單的詳細(xì)信息,提高與用戶的交互能力。
2.2.5 訂單轉(zhuǎn)化描述
用戶可以根據(jù)自己的需要和產(chǎn)品的生產(chǎn)周期訂制預(yù)計(jì)訂單和實(shí)際訂單。客戶按照預(yù)定需求所下訂單,待到預(yù)計(jì)訂單原材料入庫(kù)完畢,通知用戶將預(yù)計(jì)訂單轉(zhuǎn)為實(shí)際訂單,減少損失,縮短實(shí)際需求時(shí)的生產(chǎn)時(shí)間。
2.2.6 訂單審計(jì)描述
客戶提交的訂單由銷售部門確認(rèn)得到訂單及驗(yàn)證資料的合法性。如果資料合法, 提供備料風(fēng)險(xiǎn)說明以及賠償信息等訂單認(rèn)證信息;如果資料不合法,駁回客戶訂單并注明原因等信息。
銷售部門審計(jì)訂單及訂金數(shù)額,如無誤訂單審計(jì)結(jié)束,并將合法訂單提供給采購(gòu)部門,更改訂單狀態(tài)為【審計(jì)通過】。
2.2.7 材料采購(gòu)描述
采購(gòu)部門將【審計(jì)通過】的訂單匯總,按照每單、每產(chǎn)品生成采購(gòu)批次信息。 合計(jì)需求采購(gòu)原料信息,生成采購(gòu)訂單,提交給原料提供商。并更改訂單狀態(tài)為【正在采購(gòu)】,注明原料預(yù)計(jì)購(gòu)入日期。訂單所有原料材料采購(gòu)?fù)瓿?,訂單狀態(tài)更改為【采購(gòu)?fù)瓿伞俊?/p>
2.2.8 材料入庫(kù)描述
當(dāng)采購(gòu)的原料入庫(kù)后,倉(cāng)庫(kù)管理將材料入庫(kù)信息按照原材料信息進(jìn)行入庫(kù)。 并標(biāo)明所屬采購(gòu)批次,如果完成采購(gòu)批次對(duì)應(yīng)的訂單材料已經(jīng)備齊,系統(tǒng)按照采購(gòu)批次更改訂單中狀態(tài)為【采購(gòu)?fù)瓿伞俊?/p>
2.2.9 產(chǎn)品生產(chǎn)描述
采購(gòu)?fù)戤叺挠唵芜M(jìn)入生產(chǎn)環(huán)節(jié),生產(chǎn)部門按照每單、每產(chǎn)品為單位制定生產(chǎn)批次。 訂單狀態(tài)設(shè)置為【正在生產(chǎn)中】。
生產(chǎn)按照產(chǎn)品為單位進(jìn)行。 每生產(chǎn)結(jié)束一批產(chǎn)品,按照生產(chǎn)批次將訂單中產(chǎn)品狀態(tài)設(shè)置為【生產(chǎn)完成】。
當(dāng)訂單中所有產(chǎn)品生產(chǎn)完成,訂單狀態(tài)設(shè)置為【生產(chǎn)完成】。
2.2.10 產(chǎn)品銷售描述
當(dāng)訂單狀態(tài)為 【生產(chǎn)完成】, 銷售部門按照客戶提供信息進(jìn)行發(fā)貨。訂單狀態(tài)設(shè)置為【發(fā)貨中】。客戶得到貨物后,確認(rèn)訂單完成。訂單狀態(tài)設(shè)置為【完成】。
2.2.11 庫(kù)存預(yù)警訂單描述
為保障銷售順暢,對(duì)于低成本,高需求的產(chǎn)品,若數(shù)量低于安全庫(kù)存數(shù)量?jī)?nèi)部制定庫(kù)存預(yù)警訂單。
完成網(wǎng)上交易系統(tǒng)所需要的訂單訂制、訂單查詢、訂單轉(zhuǎn)化、訂單審計(jì)、材料采購(gòu)、材料入庫(kù)、產(chǎn)品生產(chǎn)、產(chǎn)品銷售、權(quán)限維護(hù)和產(chǎn)品瀏覽等業(yè)務(wù)需求。
采用Client-Server 模式,應(yīng)用程序在服務(wù)器端運(yùn)行,用戶在客戶端通過網(wǎng)絡(luò)訪問應(yīng)用程序和數(shù)據(jù)庫(kù),使用之前先要對(duì)應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行部署。
本系統(tǒng)的數(shù)據(jù)庫(kù)可以用5 個(gè)部分來概括: 用戶權(quán)限維護(hù)部分、客戶訂單部分、產(chǎn)品信息部分、材料采購(gòu)部分和日志部分。
4.1.1 用戶權(quán)限維護(hù)部分
用戶權(quán)限又分為客戶權(quán)限和管理權(quán)限兩部分??蛻魴?quán)限主要包括客戶網(wǎng)頁(yè)登陸權(quán)限、商品瀏覽權(quán)限、查看商品詳細(xì)信息權(quán)限、定制訂單權(quán)限、修改訂單權(quán)限以及當(dāng)條件滿足時(shí)下達(dá)預(yù)計(jì)訂單轉(zhuǎn)實(shí)際訂單命令權(quán)限等;而管理權(quán)限主要指部門網(wǎng)頁(yè)登陸權(quán)限、客戶訂單審計(jì)權(quán)限、生成原料采購(gòu)訂單權(quán)限、原料入庫(kù)權(quán)限、商品生產(chǎn)權(quán)限、產(chǎn)品發(fā)貨權(quán)限和管理查詢權(quán)限等。 使用用戶信息表記錄客戶注冊(cè)時(shí)所填寫的內(nèi)容,如登陸名、電話、公司、郵箱等,還要記錄用戶登陸權(quán)限等信息。使用內(nèi)部操作人員表來記錄公司的內(nèi)部人員的注冊(cè)信息, 如登錄名、 電話、部門、郵箱、傳真等,同樣也需要記錄該用戶的相關(guān)權(quán)限等信息。
4.1.2 客戶訂單部分
訂單信息表等記錄了關(guān)于客戶訂單的所有信息,其中包括訂單基礎(chǔ)信息表(訂單編號(hào)、用戶編號(hào)、訂單類型、創(chuàng)建和結(jié)束日期等),訂單詳細(xì)信息表(訂單編號(hào)、產(chǎn)品編號(hào)、仍需數(shù)量、預(yù)定數(shù)量、單位、價(jià)格、需求日期和結(jié)束日期等),訂單狀態(tài)信息表(訂單編號(hào)、訂單類型、審計(jì)狀態(tài)和日期、采購(gòu)狀態(tài)和日期、入庫(kù)狀態(tài)和日期、生產(chǎn)狀態(tài)和日期、發(fā)送狀態(tài)和日期、結(jié)束狀態(tài)和日期等)。 另外還有一個(gè)庫(kù)存預(yù)警訂單表。
預(yù)計(jì)訂單向?qū)嶋H訂單的轉(zhuǎn)換是本系統(tǒng)的一個(gè)重點(diǎn)。為了完成該功能,需要建立預(yù)計(jì)訂單轉(zhuǎn)正式訂單信息表(預(yù)計(jì)訂單編號(hào)、轉(zhuǎn)換后的訂單編號(hào)、轉(zhuǎn)換日期等)和預(yù)計(jì)訂單轉(zhuǎn)正式訂單產(chǎn)品信息表(預(yù)計(jì)訂單編號(hào)、轉(zhuǎn)換后的訂單編號(hào)、轉(zhuǎn)制產(chǎn)品編號(hào)、需求數(shù)量、需求日期等)。
4.1.3 產(chǎn)品信息部分
該部分包括了產(chǎn)品信息描述表(產(chǎn)品編號(hào)、類型編號(hào)、產(chǎn)品名稱、單位名稱、單位數(shù)量、價(jià)格、生產(chǎn)周期等),產(chǎn)品詳細(xì)信息描述表(產(chǎn)品編號(hào)、產(chǎn)品名稱、產(chǎn)品大小、裝包大小、重量等),產(chǎn)品類別表(類型編號(hào)、類型名稱、父類型編號(hào)等),原材料構(gòu)成表(產(chǎn)品編號(hào)、材料編號(hào)、需求數(shù)量等),原材料信息表(材料編號(hào)、材料名稱、價(jià)格、購(gòu)買周期、單位名稱、單位數(shù)量、供應(yīng)商名稱等),以及產(chǎn)品庫(kù)存表(產(chǎn)品編號(hào)、入庫(kù)數(shù)量、安全庫(kù)存量、需要購(gòu)買數(shù)量等)。
4.1.4 材料采購(gòu)部分
這部分包含了原材料采購(gòu)訂單表(采購(gòu)訂單編號(hào)、供應(yīng)商名稱、入庫(kù)日期等),采購(gòu)訂單詳細(xì)信息表(采購(gòu)訂單編號(hào)、原材料編號(hào)、需求數(shù)量總和、需求日期、入庫(kù)日期等),訂單材料批次信息表(批次號(hào)、采購(gòu)訂單編號(hào)、客戶訂單編號(hào)、產(chǎn)品編號(hào)、原材料編號(hào)、需求數(shù)量、入庫(kù)日期等)。
材料采購(gòu)設(shè)計(jì)是為了采購(gòu)客戶訂單中所訂購(gòu)產(chǎn)品需要的材料而設(shè)計(jì)的,其中設(shè)計(jì)訂單材料批次信息表的目的是為了能夠?qū)崿F(xiàn)將采購(gòu)回來的原材料按照客戶訂單的需求進(jìn)行分別入庫(kù),便于日后生產(chǎn)。
4.1.5 日志部分
日志包括客戶瀏覽日志(時(shí)間、用戶編號(hào)、瀏覽頁(yè)面編號(hào)、產(chǎn)品編號(hào)、時(shí)間戳等)和操作日志(時(shí)間戳、時(shí)間、用戶編號(hào)、頁(yè)面編號(hào)、)產(chǎn)品編號(hào)、操作編號(hào)、操作狀態(tài)等)。
門面模式就是其中的一種,其含義是指外部與一個(gè)子系統(tǒng)的通信必須通過一個(gè)統(tǒng)一的門面(Facade)對(duì)象進(jìn)行。 門面模式就如同醫(yī)院的接待員一樣, 它的門面類將客戶端與子系統(tǒng)的內(nèi)部復(fù)雜性分隔開,使得客戶端只需要與門面對(duì)象打交道,而不需要與子系統(tǒng)內(nèi)部的很多對(duì)象打交道。
本系統(tǒng)共包括權(quán)限控制、用戶登陸、產(chǎn)品瀏覽、定單定制、原材料采購(gòu)、庫(kù)存及生產(chǎn)和產(chǎn)品銷售7 個(gè)模塊,邏輯性強(qiáng),適合使用UML 進(jìn)行類圖設(shè)計(jì)。
4.4.1 分析理解項(xiàng)目需求
4.4.2 安裝項(xiàng)目需求環(huán)境
4.4.3 搭建程序框架
4.4.4 按照需求設(shè)計(jì)WEB 頁(yè)面
4.4.5 創(chuàng)建數(shù)據(jù)表,并插入測(cè)試數(shù)據(jù)
4.4.6 根據(jù)業(yè)務(wù)流程編寫代碼
4.4.7 進(jìn)行單元測(cè)試
4.4.8 進(jìn)行集成測(cè)試
4.4.9 分析存在問題,對(duì)系統(tǒng)進(jìn)行改進(jìn)
訂單采購(gòu)模塊對(duì)已經(jīng)審計(jì)通過的非轉(zhuǎn)換類型的客戶訂單建立批次信息、在以上訂單中選出需要進(jìn)行采購(gòu)的客戶訂單、將選出的訂單按照原材料和供應(yīng)商關(guān)系整合并生成原材料采購(gòu)訂單、最后更改原材料購(gòu)買狀態(tài)為“正在購(gòu)買”。
第一,批次信息的建立。 利用ORACLE 的觸發(fā)器,在訂單審計(jì)過程中,使用PL/SQL 實(shí)現(xiàn)該功能。
第二,原材料訂單生成。 在選擇客戶訂單并點(diǎn)擊生成采購(gòu)訂單按鈕后,使用ORACLE 的存儲(chǔ)過程實(shí)現(xiàn)該功能。
原材料入庫(kù)模塊首先查找購(gòu)買狀態(tài)為完成的客戶訂單,將這些客戶訂單按照批次信息進(jìn)行原材料入庫(kù)。若向一個(gè)供應(yīng)商提供的訂單材料已經(jīng)全部入庫(kù)則該采購(gòu)訂單狀態(tài)更改為“完成”,若一個(gè)客戶訂單的所有原材料已經(jīng)采購(gòu)?fù)瓿蓜t將該客戶訂單狀態(tài)更改為“已入庫(kù)”。
庫(kù)存預(yù)警訂單生成模塊是一個(gè)比較特殊的模塊,采用數(shù)據(jù)庫(kù)觸發(fā)器實(shí)現(xiàn)。 這樣做的好處是可以自動(dòng)生成庫(kù)存預(yù)警訂單,以后都不需要人工干預(yù),十分方便。
本項(xiàng)目業(yè)務(wù)流程復(fù)雜,知識(shí)點(diǎn)多,開發(fā)難度較大,這里將主要介紹具有代表性的數(shù)據(jù)結(jié)構(gòu)和算法。
6.1.1 原材料采購(gòu)訂單模塊
在訂單審計(jì)過程中,ORACLE 的行級(jí)觸發(fā)器Trigger_BatchInfo 就已經(jīng)開始工作了。 它建立在訂單狀態(tài)表的審計(jì)狀態(tài)字段上,當(dāng)條件滿足時(shí)在訂單材料批次表中創(chuàng)建批次信息。 此時(shí),該批次信息對(duì)應(yīng)的采購(gòu)訂單還沒有產(chǎn)生。
在內(nèi)部管理人員選擇了審計(jì)通過的非轉(zhuǎn)換類型的客戶的訂單,并且點(diǎn)擊生成采購(gòu)訂單按鈕后,ORACLE 的存儲(chǔ)過程p_create_stock 就被啟動(dòng)了。 該存儲(chǔ)過程幾乎操作了除權(quán)限管理模塊之外所有的數(shù)據(jù)表,但是主要操作的數(shù)據(jù)表為原材料采購(gòu)訂單表、采購(gòu)訂單詳細(xì)表和訂單材料批次表。 對(duì)前兩個(gè)表的操作主要是生成原材料采購(gòu)訂單,即向數(shù)據(jù)表中插入數(shù)據(jù);而對(duì)后一個(gè)表的操作主要是更新批次信息中以前設(shè)置為null 的采購(gòu)訂單編號(hào)字段。 對(duì)這三個(gè)表的操作結(jié)束后,還需要更改訂單狀態(tài)信息表中的購(gòu)買狀態(tài)字段。
6.1.2 原材料入庫(kù)模塊
入庫(kù)部分的主要工作是將內(nèi)部管理人員選擇的訂單狀態(tài)信息表中的購(gòu)買狀態(tài)為“完成”的客戶訂單,按照批次信息表中的相應(yīng)信息,在采購(gòu)訂單詳細(xì)表中的完成狀態(tài)置為“完成”。并判斷該原材料采購(gòu)訂單中的所有的原材料是否都已經(jīng)完成入庫(kù),若完成則把該原材料采購(gòu)訂單的入庫(kù)狀態(tài)置為“完成”,否則不修改數(shù)據(jù)。 然后判斷客戶訂單中的所有原材料是否都已經(jīng)完成入庫(kù),即訂單材料批次信息表中的同一訂單包含的原材料的入庫(kù)狀態(tài)是否都已經(jīng)被置為“完成”,若為“完成”則修改訂單狀態(tài)表中入庫(kù)狀態(tài)字段置為“完成”,并注明入庫(kù)時(shí)間,否則不修改數(shù)據(jù)。
6.1.3 庫(kù)存預(yù)警訂單模塊
庫(kù)存預(yù)警訂單是由ORACLE 的觸發(fā)器trigger_AlertOrder 實(shí)現(xiàn)。它的功能是當(dāng)產(chǎn)品庫(kù)存表中的庫(kù)存量stockNum 小于安全庫(kù)存量safe-Stock 時(shí),自動(dòng)生成一個(gè)新訂單,即在訂單基礎(chǔ)信息表、訂單詳細(xì)信息表和訂單狀態(tài)表中各插入一條記錄。
6.1.4 CHECKBOX 全選代碼
使用JavaScript 實(shí)現(xiàn)。 函數(shù)參數(shù)是CheckBox 本身。 其主要思想是通過將該頁(yè)面所有的CheckBox 與全選CheckBox 進(jìn)行比較, 如果該CheckBox 不是全選CheckBox 的話就將其置為與全選CheckBox 相同的狀態(tài)。
本程序采用了白盒測(cè)試與黑盒測(cè)試這兩種方法來進(jìn)行的。 其中,白盒測(cè)試最常用的是全路徑覆蓋法;黑盒測(cè)試則是邊界值法。 在單元測(cè)試中,我們集中使用了白盒測(cè)試中的全路徑測(cè)試法,測(cè)試達(dá)到路徑覆蓋率100%時(shí)結(jié)束測(cè)試。在集成測(cè)試環(huán)節(jié),黑盒測(cè)試中的邊界值法被廣泛使用。 同時(shí)尤其注意對(duì)WEB 程序點(diǎn)擊次序的測(cè)試。
本系統(tǒng)的目標(biāo)是實(shí)現(xiàn)一個(gè)純動(dòng)態(tài)網(wǎng)站,其中所有的數(shù)據(jù)都是從數(shù)據(jù)庫(kù)獲取,這使得對(duì)數(shù)據(jù)的維護(hù)變得容易。
它的另一個(gè)特點(diǎn)是使用了三層結(jié)構(gòu)來訪問數(shù)據(jù)庫(kù),這減弱了代碼之間的關(guān)聯(lián)、增強(qiáng)了模塊獨(dú)立性、提高了代碼的重用性、加快了程序的開發(fā)效率。
除此之外,在設(shè)計(jì)階段采用了門面設(shè)計(jì)的思想。 在項(xiàng)目開發(fā)過程中嚴(yán)格遵照軟件工程的思想,有效的避免了許多常見錯(cuò)誤。
[1]Thuan Thai, Hoang Q. Lam. .NET 框架精髓[M].王敏之,譯.中國(guó)電力出版社,2001,12.
[2]Jesse Liberty, Dan Hurwitz.Programming ASP.NET 中文版[M].第3 版.瞿杰,趙立東,張昊,譯.電子工業(yè)出版社,2007,2.
[3]David Flanagan.JavaScript 權(quán)威指南[M].4 版. 張銘澤, 譯. 機(jī)械工業(yè)出版社,2003,1.
[4]李蘭友.Visual C#.NET 程序設(shè)計(jì)[M].北方交大出版社,2004,4.