關鍵字:倉儲管理系統、軟件架構、前端開發
倉儲管理系統(Warehouse Management System,WMS)是一個實時的計算機軟件系統,它能夠按照運作的業務規則和運算法則,對信息、資源、行為、存貨和分銷等進行更完美的管理。
倉儲管理系統由軟件、硬件、流程、管理經驗等共同組成。計算機控制下的倉庫管理系統,目的是獨立實現倉儲管理的各種功能:收貨、存貨管理、定單處理、分揀和配送控制等。WMS將關注的焦點集中于對倉儲執行的優化和有效管理,同時延伸到運輸配送計劃、與上下游供應商客戶的信息交互,從而有效提高倉儲企業、配送中心和生產企業的倉庫的執行效率和生產率,降低成本,提高企業客戶滿意度,從而提升企業的核心競爭力。
●庫存精確、高效流轉;

圖1: WMS功能模塊
●針對現有業務開展及未來需求變更,具備較強的通用性和可擴展性;
●庫存合理,能夠為生產和銷售提供物資實體及可靠有效的智能輔助決策分析數據;
●計算機硬件配置低廉,軟件易學易用,維護簡單快捷,有降本增效的效果;
●將倉儲規劃、物流設備、計算機系統、軟件算法等相互結合,以優化倉庫的入庫管理、在庫管理、出庫管理等分配及執行策略,并最終提高倉庫的貨位利用率及貨物容積率;
●針對歷史數據進行數據分析、數據挖掘,以優化和完善倉儲管理系統的業務組織和流程驅動。
倉儲管理系統是通過出入庫業務、庫存調撥和虛倉管理等功能,對批次管理、物料對應、庫存盤點、質檢管理、生產和銷售管理等功能綜合運用的管理系統,有效控制并跟蹤倉庫業務的物流和成本管理全過程,完成和提升企業的信息化建設。WMS的功能模塊,如圖1。
本文主要介紹WMS的前端系統,結合倉儲管理的業務流程,通過對前端人機交互系統的軟件架構、技術選型、功能實現等進行歸納、總結。該系統可以獨立執行庫存操作,也可與外圍信息系統接口交互集成,為企業提供更為完整的工作流和數據流。
.Net Core是適用于Windows、Linux和Macos操作系統的免費、開源托管的計算機軟件框架,是微軟開發的第一個官方版本,具有跨平臺能力的應用程序開發框架。.Net Core包含.Net Framework的類庫,采用包化(Packages)的管理方式。
.Net Core項目的目標如下:
●支持或轉移到更多的操作系統平臺與芯片架構,將項目跨出Windows平臺;
●具有引人注目的性能與高可靠度;
●開發人員能快速與直接地獲取.Net Core開發環境。
B/S架構即瀏覽器和服務器架構模式,是隨著Internet技術的興起,對C/S架構的一種改進。在這種架構下,用戶工作界面是通過前端(Browser)實現,主要事務邏輯在服務器端(Server)實現,形成完整的三層結構體系。這種模式統一了客戶端,將系統功能實現的核心部分集中到Web服務器上,簡化了系統的開發、維護和使用??蛻魴C上只要安裝一個IE瀏覽器,數據庫服務器安裝Oracle等關系數據庫,瀏覽器通過Web Server同數據庫進行數據交互。這樣就大大簡化了客戶端電腦的配置及載荷,終端用戶無需考慮發布、部署、升級等情況,減輕了系統維護與升級的成本和工作量。
MVC全名是Model View Controller,是模型(Model)-視圖(View)-控制器(Controller)的縮寫,一種軟件設計典范,代碼組織采用業務邏輯、數據、界面顯示分離的方法,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。

圖2:MVC架構

圖3:WMS主頁面
Model(模型)是應用程序中用于處理應用程序數據邏輯的部分,通常模型對象負責在數據庫中存取數據。
View(視圖)是應用程序中處理數據顯示的部分,通常視圖是依據模型數據創建的。
Controller(控制器)是應用程序中處理用戶交互的部分,通??刂破髫撠煆囊晥D讀取數據,控制用戶輸入,并向模型發送數據。MVC架構,如圖2。
MVC分層有助于管理復雜的應用程序,可以在不依賴業務邏輯的情況下專注于視圖設計,也可以在不考慮業務邏輯的情況下進行UI設計。MVC分層同時也簡化了分組開發,不同的開發人員可同時開發視圖、控制器邏輯和業務邏輯。
Bootstrap是一個基于HTML、CSS、JAVASCRIPT,用于快速開發Web應用程序和網站的前端框架。具體優勢如下:
●容易上手:只要具備HTML和CSS的基礎知識。
●響應式設計:Bootstrap的響應式CSS能夠自適應于臺式機、平板電腦和手機,移動設備優先。
●其它:為創建接口提供了簡潔統一的解決方案;包含了功能強大的內置組件;提供了基于Web的定制;開源。
結合倉儲管理的領域特征、用戶需求及業務流程等,可將WMS劃分為以下若干功能模塊,每個功能模塊為一個功能組,每個功能組包括若干個功能項,每個功能項對應一個TAB頁面。系統主頁面,如圖3。

圖4:角色功能授權頁面

圖5:任務維護詳情頁面
系統管理模塊主要包括用戶維護、角色維護、參數維護、菜單管理等功能項。
菜單管理,用于配置Web主界面左側的功能樹,并且可以定義每個功能項所對應的頁面URL地址,另外通過數據定義的方式可以確定各個頁面所能提供的完整的增刪查改、確認、完成、取消等操作按鈕。
參數維護,用于配置WMS系統的所有配置參數,包括且不限于出入庫站臺配置、穿梭車充電策略配置、數據展示分頁大小配置、專業術語配置、垃圾數據清除配置等。
角色維護,可用于創建角色,管理和控制角色所擁有的功能頁面,配置角色在相應功能頁面下所具備的操作權限,最終將角色授權至不同用戶。
用戶維護,目的是為了確保不同的用戶可以操作不同的功能頁面,同一個功能頁面下不同用戶具備不同的按鈕權限。
以上方式不僅能最大化滿足用戶、角色、權限的細粒度管理,還能夠全面滿足軍工企業涉密信息系統的三員配置及職責分工。角色功能授權頁面,如圖4。
基礎管理模塊主要包括物料維護、配盤維護、位置維護等各類倉儲基礎數據的查詢及維護等功能。
物料維護用于管理物料分類、物料名稱、規格型號、計量單位、庫存上下限、存儲有效天數等屬性及內容。按照物料的種類及數量等,可以對物料劃分為大類和小類,便于數據篩選。通過對庫存上下限、存儲有效天數等屬性的管理,可以全面滿足倉儲物流系統中物資智能化管理,有效控制庫存的合理性、為庫存預警模塊提供柔性化控制。
結合倉儲項目的物流規劃和總體設計,可以通過位置維護功能將倉庫劃為為若干個庫區,每個庫區又劃分為若干個片區、貨道及儲位。還提供了貨道及儲位的凍結、禁入、禁出等日常維護操作,便于庫管員能夠靈活地管理倉庫,也能夠滿足各種場景下的運營需要。
物流管理模塊主要提供入庫管理、出庫管理、容器維護、任務維護等功能,以滿足物料組盤、人工/自動出入庫、批次跟蹤、質量控制等業務驅動及流程運轉的需要。
物流管理模塊下,所有的操作都是主從表操作,為了提高用戶體驗,在UI設計方面,Index首頁展示業務主表的數據。因為業務流水數據量較大,為了加快查詢速度,按照參數配置進行分頁顯示,并提供翻頁按鈕。每行記錄的前2個字段設置了跳轉鏈接,鼠標點擊時則跳轉至詳情頁。詳情頁分為上下兩個區間,上半區以Layout布局展示主表內容,下半區則以Detail布局展示明細內容。對于明細數據的新增、編輯等維護操作,則在單擊明細數據的鏈接字段時以彈窗的方式提供具體的輸入及維護操作。該方式可以在主頁面和詳情頁面之間輕松自由地切換跳轉。
對于頁面頂部的操作區,使用Bootstrap自帶的圖標按鈕,以提供查詢、刪除、保存、確認等操作,當光標落在圖標上方時,以tooltip的形式展示按鈕的中文描述。該UI設計方式充分考慮用戶體驗,具備操作簡潔、風格統一、易學易用、無二義性等特征。
以任務維護為例,主要用于查詢和維護所有的物流任務,當物流設備在搬運過程中出現異常時,提供指令下達、任務取消、任務結束等人工操作,以保證物流系統有條不紊的運行。任務維護詳情頁面,如圖5。
主要包括出入庫統計、在線庫存統計、庫存預警統計、收發存統計、貨位圖表統計等分析報表,對所有的統計結果均提供Excel導出功能,便于用戶對數據進行二次加工。貨位圖表統計,如圖6。
收發存統計公式為:期初庫存+累計入庫-累計出庫+盤盈-盤虧=期末庫存=在線庫存,本期的期末庫存自動結轉為下期的期初庫存。
庫存預警統計,可以結合物料主文件表的庫存上下限、存儲有效天數等屬性和參數,計算出當前立體庫內超越庫存上限、低于庫存下限、存儲時間超期的所有物料明細及匯總數據。便于庫管員對立體庫進行合理有效的管控,如補充庫存量、降低庫存量、提高近效期管理等。將庫存預警統計數據上傳至SAP、MES等上游系統,可以提高企業的生產管理及銷售管理,確保生產和銷售的有效銜接,同時也為企業管理層在輔助智能決策分析方面提供最為真實的支撐數據。

圖6:立庫貨位圖表統計

圖7:功能視圖頁代碼
在MVC開發中,所有業務邏輯層的控制器都需要繼承系統抽象類Controller。對WMS的UI部分的業務處理進行歸納、總結和抽象,定義出抽象類BaseController,該BaseController繼承系統抽象類Controller,而具體的業務控制器則繼承BaseController,并實現BaseController中的方法。BaseController中提供抽象方法和虛方法,以確保在業務控制器中必須去實現抽象方法或者選擇性實現虛方法。
通過上述方式可以有效規范各個業務邏輯控制器的開發,統一方法的命名,明確方法體的具體實現,規范視圖層到控制器的HttpPost請求調用,確保業務邏輯控制器將特定的JsonResult、ViewResult返回至視圖層。
結合功能模塊的設計說明,每個功能項對應一個控制器,每個控制器對應1至2個視圖??刂破髅幏稙椤扒熬Y + Controller”,如物料管理則命名為“MaterialController.cs”。對于視圖層,主頁面命名為“Index.cshtml”,跳轉的詳情頁面則命名為“IndexDetail.cshtml”。對于單表操作的頁面,僅提供主頁面,不提供跳轉頁面。提供編輯操作的模態框彈窗,相關代碼部署在其所屬的視圖頁面文件中。
按照MVC架構的要求,所有的控制器文件部署在Web項目的Controllers文件夾中,視圖文件則部署在Web項目的Views文件夾下,具體包含在以控制器前綴命名的子文件夾中。
控制器與視圖層之間是松耦合的,可以達到業務邏輯與UI頁面的分離。
針對所有頁面的查詢及維護操作統一規范數字,即2的N次方,并且定義在靜態實體類中,以列舉出增刪查改、確認、取消、完成等操作所對應數字,具體如下:
public static class OrderCode
{
public static readonly int Query = 2,Add = 4,Edit = 8,Delete =16,Export = 32,Affirm = 64,Cancel =128,Finish = 256;
}
在角色功能權限表中,將角色對應的功能頁面的操作權限定義在INT型字段OperateCount中,如為A角色針對任務維護頁面授予查詢、取消和完成3個操作權限,則確認授權時將對應記錄的OperateCount字段設置為386 = 2(Query,查詢) | 128(Cancel,取消) | 256(Finish,完成),即C#的按位或。
而在頁面初始化時,得到用戶角色對應的功能頁面的操作權限變量(即角色功能權限表的INT型字段OperateCount)。使用該變量與實體類OrderCode中各個操作屬性變量按位進行與運算,如果結果大于0,則說明有權限,否則說明無權限。如B角色針對庫存統計頁面的OperateCount值為34,34 & 2(Query,查詢) > 0,34 & 32(Export,導出) > 0,34 &OrderCode中其它值 = 0。因此B角色針對庫存統計頁面具有查詢和導出權限。
以上方式可以確保不同的用戶登錄系統后,針對同樣的功能頁面具有不同的操作權限。邏輯判斷在SysRole控制器中完成,提供公共JS方法InitOption向控制器SysRole發送Post請求以得到相應的權限結果,并根據權限結果控制視圖頁面按鈕的隱藏與否。注意事項:在各個視圖頁面中,操作按鈕命名同樣遵守OrderCode實體類的命名規范;另外,每個頁面加載時調用公共JS方法InitOption。
對于非法入侵,可以使用MVC的攔截器,自定義類GlobalFilter實現接口IActionFilter,并實現攔截器的接口方法OnActionExecuting(Act ionExecutingContext context)。在OnActionExecuting方法體中根據當前登錄用戶名、控制器名及行為方法名進行操作權限判斷,如果權限不滿足則跳轉至錯誤頁面。該方式即可有效抵御非法入侵。
MVC架構根據路由信息獲取控制器名稱,由控制器工廠生成控制器的實例。Web項目下Startup類的ConfigureServices方法中,可注冊業務控制器的依賴項。如services.AddScoped
通過依賴注入完成控制反轉,對象在被創建的時候,由一個調控系統內所有對象的外界實體將其所依賴的對象引用傳遞給它,最終充分降低代碼之間的耦合度。
自定義js文件DataOperatorScript.js,提供如初始化、查詢、新增、保存、刪除等js方法。在方法體中根據輸入參數得到Controller名和button id等參數,以HttpPost請求的方式調用相應業務控制器的方法。
在公共視圖頁_Layout中,引入DataOperatorScript.js文件,即執行。在具體的功能視圖頁中執行相應的js語句,以完成參數初始化、按鈕事件與DataOperatorScript中公共js方法的綁定等。
通過以上方式,即可最終實現增刪查改等具體業務。功能視圖頁的代碼,如圖7。
在常規主流的視圖頁中,UI開發人員僅需要調整視圖頁面布局,不需要深入了解和掌握js,最終保證UI開發人員把精力集中在外觀設計上。
通過上述的技術選型、軟件架構、模塊設計,最終形成的智能倉儲管理系統,可以全面滿足各個行業領域、各種物流規劃設計的倉儲管理信息系統前端建設。在硬件采購方面,可以降低終端計算機的配置及選型;在軟件設計方面,控制器與視圖層充分解耦,業務邏輯與外觀展示的分離,有利于軟件團隊的人員分工;在安全性方面,通過攔截器可以有效抵御非法入侵;在項目實施方面,可以提升開發速度、縮短項目交付工期,最終降低項目的實施和維護成本。
該產品已成功運用到若干個不同行業的倉儲物流集成項目中,并且得到了業主方及項目干系人的一致好評,對于倉儲管理系統的前端設計開發,具有一定的實用和參考價值。