王 軍
(上海理工大學(xué)機(jī)械工程學(xué)院,上海 200093)
庫(kù)存管理工作是高校后勤管理處的一項(xiàng)重要的工作。運(yùn)用信息化手段開(kāi)發(fā)一款適合高校后勤管理處的簡(jiǎn)潔實(shí)用的庫(kù)存管理系統(tǒng)十分必要。
本文針對(duì)筆者所在高校后勤管理處下屬的一個(gè)物料倉(cāng)庫(kù)的需求,利用Python 語(yǔ)言開(kāi)發(fā)的一款Web框架Django作為開(kāi)發(fā)框架,用MySQL 數(shù)據(jù)庫(kù)持久化數(shù)據(jù),采用前后端不分離技術(shù)設(shè)計(jì)開(kāi)發(fā)了一款庫(kù)存管理系統(tǒng),以提高庫(kù)存管理的效率。
通過(guò)實(shí)地走訪調(diào)研學(xué)校的后勤管理倉(cāng)庫(kù)發(fā)現(xiàn),在管理物料庫(kù)存過(guò)程中存在兩個(gè)需要解決的問(wèn)題。
一是貨物進(jìn)庫(kù)以及領(lǐng)料人進(jìn)行領(lǐng)料時(shí)需要記錄,由倉(cāng)庫(kù)管理員開(kāi)具紙質(zhì)單據(jù),由于單據(jù)量比較多而無(wú)法做到高效的管理,而且記錄容易出錯(cuò)。
二是倉(cāng)庫(kù)管理員每月要對(duì)當(dāng)月的進(jìn)出庫(kù)記錄進(jìn)行分類(lèi)統(tǒng)計(jì)建表并報(bào)送給上級(jí)檢查,這樣就需要找到當(dāng)月的所有進(jìn)出庫(kù)紙質(zhì)單據(jù),還要按日期篩選,工作繁瑣,耗費(fèi)人力。
經(jīng)過(guò)與倉(cāng)庫(kù)管理員溝通,確定系統(tǒng)應(yīng)包含以下幾個(gè)功能模塊。
⑴基礎(chǔ)信息管理功能,對(duì)領(lǐng)料員信息,材料供應(yīng)商信息,材料的基礎(chǔ)信息進(jìn)行管理。
⑵進(jìn)出庫(kù)管理功能,對(duì)貨物進(jìn)庫(kù)時(shí)間,進(jìn)庫(kù)數(shù)量等關(guān)鍵數(shù)據(jù)進(jìn)行管理。
⑶庫(kù)存盤(pán)點(diǎn)功能,按照固定周期對(duì)庫(kù)內(nèi)的材料進(jìn)行盤(pán)點(diǎn)并對(duì)盤(pán)貨信息錄入,同時(shí)可以修正錯(cuò)誤的庫(kù)存記錄,此功能需要設(shè)置用戶權(quán)限。
⑷信息查詢與報(bào)表導(dǎo)出功能,倉(cāng)庫(kù)管理員可以根據(jù)時(shí)間、材料等信息,在查詢相關(guān)的進(jìn)出庫(kù)記錄時(shí)可以對(duì)相應(yīng)的記錄導(dǎo)出Excel報(bào)表報(bào)送上級(jí)審核。
⑴穩(wěn)定性要求,系統(tǒng)在服務(wù)器上可以穩(wěn)定運(yùn)行,避免由于用戶的誤操作所引起的系統(tǒng)宕機(jī),保證數(shù)據(jù)正常交互。
⑵界面簡(jiǎn)潔友好,操作界面上應(yīng)避免過(guò)于復(fù)雜化,各個(gè)功能模塊分區(qū)清楚。
⑶系統(tǒng)響應(yīng)要求,用戶在發(fā)起請(qǐng)求時(shí),應(yīng)盡量縮短系統(tǒng)的響應(yīng)時(shí)間與更新時(shí)間。
本系統(tǒng)采用B/S(Brower/Server)模式,是Web 興起后的一種網(wǎng)絡(luò)結(jié)構(gòu)。這種模式客戶端主要軟件時(shí)Web 瀏覽器,統(tǒng)一了客戶端,實(shí)現(xiàn)將系統(tǒng)的功能實(shí)現(xiàn)核心部分集中到服務(wù)器上,簡(jiǎn)化了系統(tǒng)的開(kāi)發(fā)、維護(hù)和使用。用戶只需在客戶端安裝一個(gè)瀏覽器,我們?cè)诜?wù)器上安裝MySQL 數(shù)據(jù)庫(kù),這樣就可以進(jìn)行數(shù)據(jù)交互。這種結(jié)構(gòu)的優(yōu)點(diǎn)在于具有分布性特點(diǎn),處理業(yè)務(wù)便捷;業(yè)務(wù)擴(kuò)展簡(jiǎn)單方便,通過(guò)增加頁(yè)面即可增加服務(wù)器功能;維護(hù)簡(jiǎn)單方便。
Django 框架是由Python 語(yǔ)言編寫(xiě)的開(kāi)放源代碼的Web應(yīng)用程序框架。本系統(tǒng)設(shè)計(jì)采用的Django版本是2.0.1。這是一款基于MVC 架構(gòu)的框架,實(shí)際在使用過(guò)程中控制器接受用戶輸入的部分由框架自行處理所以是M(Model)T(Template)V(View)框架模式。Model層負(fù)責(zé)處理與數(shù)據(jù)相關(guān)的所有事務(wù),以Python類(lèi)的形式定義數(shù)據(jù)模型。Template層處理與表現(xiàn)相關(guān)的決定,此處放置的是前端框架代碼。View 層是模型與模板的橋梁,存取模型及調(diào)取模板的相關(guān)業(yè)務(wù)邏輯。
根據(jù)需求,對(duì)系統(tǒng)進(jìn)行模塊化設(shè)計(jì),具體如圖1所示分為基礎(chǔ)信息、進(jìn)庫(kù)管理、出庫(kù)管理、庫(kù)存管理、盤(pán)貨管理五大模塊。
支撐應(yīng)選用鋼材焊接加工制作而成。支撐應(yīng)連接牢靠、布置合理、方便施工,且不影響后面工序的正常施工。支盤(pán)成孔過(guò)程中所設(shè)置的鋼支撐結(jié)構(gòu)不予取出,以增加支盤(pán)的柔性。
圖1 系統(tǒng)功能模塊圖
基本信息模塊包含領(lǐng)料人管理,供應(yīng)商管理,材料管理,用戶管理四個(gè)子模塊。后續(xù)各個(gè)模塊的信息創(chuàng)建都依賴于基礎(chǔ)信息部分。
⑴ 領(lǐng)料人子模塊。根據(jù)學(xué)校實(shí)際庫(kù)存管理情況,對(duì)所有的領(lǐng)料人統(tǒng)一進(jìn)行信息管理,主要記錄和查看人員姓名、部門(mén),聯(lián)系方式等關(guān)鍵信息。
⑵供應(yīng)商子模塊。供應(yīng)商是創(chuàng)建入庫(kù)單所必需關(guān)鍵信息,此模塊主要實(shí)現(xiàn)對(duì)供應(yīng)商名稱(chēng),聯(lián)系方式,地址等關(guān)鍵信息的查看、創(chuàng)建、刪除,修改功能。
⑶ 材料模塊。由于后勤倉(cāng)庫(kù)的材料種類(lèi)比較多,為了方便管理在對(duì)材料信息進(jìn)行管理時(shí)需要添加分類(lèi)屬性,同時(shí)也包含材料名稱(chēng),規(guī)格,單位等信息。對(duì)于材料信息可以做到創(chuàng)建、修改,刪除功能。
⑷用戶模塊。用戶在此模塊可以進(jìn)行用戶名與密碼的修改,同時(shí)也可以進(jìn)行注銷(xiāo)賬戶。
系統(tǒng)的進(jìn)、出庫(kù)設(shè)計(jì)邏輯相似,均包含進(jìn)/出庫(kù)單管理與進(jìn)/出庫(kù)查詢。
⑴進(jìn)出庫(kù)單模塊。進(jìn)庫(kù)單管理部分包括對(duì)貨物入庫(kù)的編號(hào)、數(shù)量、金額、供應(yīng)商、時(shí)間等關(guān)鍵的部分的創(chuàng)建、修改、刪除。出庫(kù)單部分管理包括對(duì)出庫(kù)的編號(hào)、數(shù)量、時(shí)間、領(lǐng)料人等信息的創(chuàng)建、修改、刪除功能。領(lǐng)料人在出庫(kù)領(lǐng)料時(shí)需要填寫(xiě)出庫(kù)單用途,否則無(wú)法完成出庫(kù)單的創(chuàng)建。進(jìn)出庫(kù)單模塊均可以一鍵導(dǎo)出報(bào)表。進(jìn)出庫(kù)流程如圖2所示。
圖2 進(jìn)出庫(kù)流程圖
⑵進(jìn)出庫(kù)查詢。用戶可以根據(jù)實(shí)際情況,以單一條件或復(fù)合條件查詢相關(guān)貨物的進(jìn)出庫(kù)記錄,根據(jù)用戶權(quán)限可以對(duì)查詢到的記錄進(jìn)行修改和刪除同時(shí)也可以對(duì)查詢到的記錄導(dǎo)出報(bào)表。
數(shù)據(jù)庫(kù)設(shè)計(jì)需要保證系統(tǒng)業(yè)務(wù)需求、數(shù)據(jù)的一致性和較好的擴(kuò)展性以及高效的數(shù)據(jù)查詢效率。因此設(shè)計(jì)建表過(guò)程中通過(guò)唯一索引、外鍵、主鍵以及分表等方法來(lái)實(shí)現(xiàn)。根據(jù)系統(tǒng)的模塊設(shè)計(jì),在數(shù)據(jù)庫(kù)中分別建立用戶表、貨物信息表、供應(yīng)商表、領(lǐng)料人表、進(jìn)庫(kù)單表、出庫(kù)單表、庫(kù)存表以及盤(pán)貨單表。為了保證數(shù)據(jù)的完整性需要將數(shù)據(jù)庫(kù)中一些關(guān)鍵的字段設(shè)置為非空字段,對(duì)應(yīng)到前端是用戶必填項(xiàng)。同時(shí)Django中也嵌入了ORM 框架,不需要直接面向數(shù)據(jù)庫(kù)編程可以通過(guò)模型類(lèi)和對(duì)象完成數(shù)據(jù)庫(kù)表的增刪改查。
系統(tǒng)首頁(yè)是各個(gè)模塊入口界面,為了考慮到頁(yè)面簡(jiǎn)潔使用,本系統(tǒng)前端首頁(yè)主要采用了如圖3的布局。
圖3 系統(tǒng)首頁(yè)界面
數(shù)據(jù)導(dǎo)入與顯示是本系統(tǒng)最基本也是最重要的功能?;拘畔⒛K,進(jìn)出庫(kù)單以及庫(kù)存模塊都需要數(shù)據(jù)導(dǎo)入與展示。系統(tǒng)會(huì)根據(jù)用戶發(fā)起的請(qǐng)求判斷是POST請(qǐng)求或是GET請(qǐng)求再經(jīng)視圖函數(shù)層進(jìn)一步處理。數(shù)據(jù)導(dǎo)入即創(chuàng)建新記錄的過(guò)程屬于用戶發(fā)起POST請(qǐng)求,View 層函數(shù)先實(shí)例化一個(gè)模型類(lèi)對(duì)象,再?gòu)那岸双@取數(shù)據(jù)存入該對(duì)象的各個(gè)屬性中,最后通過(guò)模型對(duì)象的save()函數(shù)保存到數(shù)據(jù)庫(kù)中。若View層判斷若是收到GET 請(qǐng)求,則通過(guò)模型類(lèi)的object.all()方法,獲取對(duì)象集再通過(guò)render()方法將數(shù)據(jù)渲染到前端頁(yè)面,如圖4所示。
圖4 貨物基礎(chǔ)信息界面
數(shù)據(jù)查詢功能,在進(jìn)出庫(kù)單查詢模塊以及庫(kù)存盤(pán)貨模塊會(huì)涉及。View 層首先會(huì)獲取前端頁(yè)面用戶所輸入的所有查詢條件,然后通過(guò)有限搜索條件的排列組合以及if 選擇語(yǔ)句去匹配對(duì)應(yīng)的搜索條件,最后通過(guò)模型類(lèi)的object.filter()方法查詢數(shù)據(jù)庫(kù)得到所要查詢的對(duì)象或?qū)ο蠹?。同時(shí)當(dāng)用戶輸入的搜索條件矛盾時(shí),系統(tǒng)會(huì)返回并告知用戶不合規(guī)搜索格式。
打印報(bào)表功能是將用戶需要的數(shù)據(jù)導(dǎo)出成Excel并下載到本地。此處導(dǎo)入Python 的xlwt 模塊來(lái)實(shí)現(xiàn)。首先會(huì)通過(guò)該模塊新建一個(gè)工作簿,在工作簿的基礎(chǔ)上新建工作表,創(chuàng)建完工作表后設(shè)計(jì)利用for循環(huán)將需導(dǎo)出對(duì)象數(shù)據(jù)寫(xiě)入到Excel 文件中,最后通過(guò)創(chuàng)建操作二進(jìn)制數(shù)據(jù)的對(duì)象將Excel 數(shù)據(jù)寫(xiě)入到內(nèi)存中完成該模塊的功能實(shí)現(xiàn)。
本文針對(duì)高校大多數(shù)后勤倉(cāng)庫(kù)進(jìn)出庫(kù)工作多采用人工全流程紙質(zhì)化管理、管理方式效率低下、易出錯(cuò)等問(wèn)題基于Django 框架設(shè)計(jì)了一套庫(kù)存管理的Web 系統(tǒng)。從部署上線后的運(yùn)行效果看,本系統(tǒng)運(yùn)行穩(wěn)定,基本實(shí)現(xiàn)了進(jìn)出庫(kù)管理流程的信息化、透明化。
由于目前該系統(tǒng)實(shí)現(xiàn)的是單個(gè)倉(cāng)庫(kù)管理,下一步將解決多個(gè)倉(cāng)庫(kù)同步管理、倉(cāng)庫(kù)間的管理平衡,以及倉(cāng)庫(kù)庫(kù)位容量的可視化等問(wèn)題。