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