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

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

圖2:MVC架構(gòu)

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

圖4:角色功能授權(quán)頁面

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

圖6:立庫貨位圖表統(tǒng)計

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