GreaterWMS:完全開源倉庫管理系統


項目介紹:

完全開源倉儲管理軟件,遵循Apache License 2.0協議,前后端分離,且完全開源,API使用restful協議,方便二次開發,前端代碼使用quasar進行構建,后端使用Python Django3.1,利用API,可以支持多倉,波次發貨,合並揀貨,Milk-Run等業務模型。

  • 軟件著作權編號:2018SR517685
  • GitHub地址:

 

  • Demo地址:

 

  • 商務聯系:mail@56yhz.com
  • 技術交流:GreaterWMS-01(加微信進群)

項目初衷:

我在供應鏈行業工作了15年,發現在我們這個專業的領域,沒有一款高自由度、高自定義化的軟件,來深度支持我們企業的業務。大多數軟件都是閉源的,而且很難去做二次開發,即使開發,周期也是非常長,開發失敗的案例也是比比皆是。由於企業選擇了一款軟件后,其二次開發也會被開發公司綁定,至於二次開發費用,只能說呵呵。所以,我設計了這個聚商匯WMS,為的是做到一款高自由度,高自定義開發的倉庫管理軟件,來深度支持企業的業務。

  • 願景:如果你從事着非IT行業的工作,而你又熱愛你的行業,那就用科技去改變他。

生命周期

  • V 1.0.0 -- 2019年7月 ~ 2020年12月(由於1.0.0版本的二次開發設計較為復雜,故2.0重新編寫)
  • V 2.0.0 -- 2020年12月 ~ 2021年3月(重新編寫業務邏輯,原生自帶API開發文檔,加入實時通信,方便企業用戶互相溝通)
  • V 2.1.0 -- 2021年3月 ~ 2021年6月(加入了客戶與企業之間的實時互動,增進企業與客戶之間的業務聯系,實現VMI)
  • V 2.2.0 -- 2020年6月 ~ 2021年9月(加入了供應商與企業之間的實時互動,增進企業與供應商之間的業務聯系,實現Milk-Run和看板拉動)
  • V 2.3.0 -- 2021年9月 ~ 2021年12月(庫存管理雛形,初步加入神經網絡,深度學習庫存變化)
  • V 3.0.0 -- 2021年12月 ~ 2022年3月(完全植入神經網絡,讓上下游企業可以以最低的成本運營整體的業務)
  • V 3.1.0 -- 2022年3月 ~ 2022年6月(區域倉庫業務布局,通過深度學習,實現多倉運營,成本最低化)

開發環境:

  • Python 版本為 V 3.8.0 +
  • Django 版本為 V 3.1.0 +(該版本Django才原生支持異步實時通信)
  • Django-rest-framework 版本為 V 3.12.2 + (更高版本的Django-rest-Framework對Django3的兼容比較好)
  • Django-silk 版本為 V 4.1.0 (如果是部署上線,請關閉silk,silk僅為調試API接口速度用,有可能會泄露用戶信息)
  • Quasar 版本為 V1.7.2 + (可以查看Quasar官網,來編輯GreaterWMS前端代碼:Quasar官網)
  • Vue 版本為 V 2.6.0 +(盡量不要使用Vue3,因為開發環境沒有使用Vue3,不知道會出現什么問題)
  • API,遵循 RESTful 架構

構建命令:

  • 下載代碼:
git clone https://github.com/Singosgu/GreaterWMS.git
  • 安裝Python庫:
pip install -r requirements.txt 

注意:安裝需要Twisted庫,這個庫有時候會安裝不上,需要下載下來本地安裝

pip install Twisted{你下載下來的版本名稱} 

注意:本地安裝需要注意路徑

  • 初始化數據庫:
python manage.py makemigrations 
  • 遷移數據庫:
python manage.py migrate 

創建數據庫,Django默認使用sqlite3作為數據庫,如果需要mysql數據庫,請在greaterwms/settings.py里面配置DATABASE

開發服務器運行:

  • 開發運行:
daphne -p 8008 greaterwms.asgi:application 

生產服務器運行:

  • supervisor守護進程:
pip install supervisor

使用supervisor來守護Django進程,再使用Nginx做反向代理,至於superevisor的教程有很多,這里不做講解

  • Nginx支持:

推薦使用Nginx進行部署,部署的時候需要指定WebSocket鏈接,如果不指定,實時通信功能將報錯

另需要修改axios_request.js里的ws_url

## 示例更改前
const baseurl = 'http://127.0.0.1:8008/'
const wsurl = 'ws://127.0.0.1:8008/'

## 示例更改后
const baseurl = 'https://你的域名/'
const wsurl = 'wss://你的域名/websocket/'

如果服務器啟用了SSL,請使用https和wss,如果沒有啟用SSL,則使用http和ws

修改后需要重新build前端代碼


開發擴展:

因為使用的前后端分離的設計,所以可以通過API,開發更多的軟件應用

物流智能AGV

  • AGV的項目也已經開源,由於場地受限,僅實現智能發貨,定點回庫,使用的循跡感應器,超聲波避障感應器,紅外避障感應器,所有的指令通過網絡傳輸,AGV綁定MAC地址和IP地址,保證了安全性,前提是,你需要有一個樹莓派。

進銷存

  • 可以直接當一個進銷存系統使用,簡化倉庫庫位設置等操作即可。

APP和小程序

  • Quasar原生可以直接打包成IOS APP和Android APP
  • 小程序的開發可以通過API開做二次開發,但小程序不支持put請求,所以需要自己再寫一個請求接口。
  • API的組合可以達到100萬種,這樣我們可以根據查詢請求,來獲得實時報表和數據監控

供應鏈管理系統

  • 產品的數量,創建時間,最后使用時間是各方面統計的,所以可以方便采購計划和調撥計划進行庫存的分析
  • V 2.3.0及其以后的版本,將自帶深度學習分析,所以可以直接使用分析結果作為供應鏈管理系統工具使用

多倉管理

  • OPENID為用戶的數據唯一標識,數據組統一標識為APPID,所以很方便可以實現多倉管理

波次揀貨,發貨

  • 可以設置固定時間向服務器發出請求,從而達到波次揀貨的功能
  • 也可以直接使用任務工作,通過API查詢分析結果來實現,推薦使用APScheduler

~~~python pip install apscheduler ~~~

Milk-Run

  • V 2.2.0及其以上版本,將原生支持此功能
  • 如果現在就需要這個業務,可以根據API調用庫存消耗,來實現此功能

VMI

  • V 2.1.0及其以上版本,將原生支持此功能
  • 如果現在就需要這個業務,可以根據API調用庫存消耗,來實現此功能

揀貨路線優化

  • 現在的揀貨路線是按照庫位排序
  • V 2.3.0以后版本將原生支持此功能
  • 如果現在需要這個業務,可以根據每天的揀貨明細,調用API來實現此功能

開發指南:

baseurl

  • 是發起請求的基本網址,如果是本地調試,則默認為 ,如果部署在服務器,則需要將其改為你的網站訪問url
  • 修改方式為,修改axios_request.js,注意websocket的修改之前已經提到了

Django-silk

  • django-silk為開發時的調試工具,可以統計每個接口的響應速度,如果需要部署到生產環境,請刪除Django-silk相關配置,因為會有泄露用戶信息的風險,或者直接修改Django-silk庫,讓用戶只能看到自己的請求數據

數據庫存儲

  • 數據庫設計時考慮到數據遷移等問題,所以只有users里面的user_id和Django自帶的user_id做了外鍵,其余所有字段全部沒有使用外鍵,方便數據備份和數據庫遷移
  • 數據庫是4段式設計
  • 驗證數據用戶歸屬
  • 驗證數據安全性
  • 驗證數據是否可以存入數據庫
  • 存入數據庫,並返回Response

關於數據傳輸

  • 需要在所有的請求頭headers里面加入token值,這個值就是用戶的數據唯一標識OPENID
  • 所有的數據傳輸需要設定content-type為application/json

OPENID

  • OPENID是注冊用戶數據的唯一標識,當管理員直接注冊時,會有developer=1這個管理員標識。
  • 你可以根據developer標識來做自定義二次開發

APPID

  • APPID是用戶數據組唯一標識
  • 如果需要多公司運營,或者多倉運營,可以通過APPID做統一鏈接,來實現多公司,多倉操作

用戶權限

  • 未對用戶權限做過多限制,請根據自身的業務需要,做二次開發限制

業務流程:

管理員

  • 點擊注冊,可以注冊成為管理員賬號,從而實現初始化程序設置
  • 注冊后會得到2個ID和1個開發者標識,OPENID是用戶數據組唯一標識,通過OPENID綁定此OPENID下所有的數據,APPID是用戶組數據唯一標識,通過APPID來實現多公司,多倉庫功能,Developer標識是個布爾值,True代表這是個管理員賬號
  • 用戶登入分2種:
  1. 使用OPENID和員工名稱直接登入
  2. 管理員使用賬號和密碼登入

 

  • 登入后前端會存儲登入信息
  • 可以通過查看我的OPENID來查看用戶數據組的OPENID
  • 如果需要多公司,多倉庫操作,注意需要更改OPENID
  • 更多管理員權限,請自行開發

員工管理

  • 注冊管理員后,新建一個員工
  • 員工有2個字段,Staff_name(用於員工登入),Staff_type(員工類型來控制員工的權限)
  • 系統沒有對員工權限做任何限制,如果需要員工權限,請根據企業業務模型,自行修改Templates
  • 點擊Edit,可以修改員工信息
  • 點擊Delete,可以刪除員工信息,系統后台會將Is_delete調成True
  • 點擊Contact:
  1. 可以直接和員工實時聊天,但是不可以和自己聊天
  2. 可以新建一個備忘錄員工,這樣做其實是當成備忘錄使用
  3. 在個人中心,可以查看最近的聯系人
  4. Message標識會提醒你現在有多少未讀消息

 

司機管理

  • 司機管理只會在發貨流程中用到
  • 你需要知道貨物是哪個司機提貨取走的

倉庫設置

  • Warehouse
  1. 倉庫的創建只可以創建一個倉庫,現在可以創建多個,但是只有第一個會起作用
  2. 如果需要多倉處理,可以通過APPID進行二次開發,也可以直接重新創建一個管理員賬號
  3. 倉庫的城市一定要填寫,這是用來計算運費的

 

  • Bin_Property
  1. 庫位屬性決定了倉庫中貨物屬於什么屬性的貨物
  2. 4種屬性:破損(Damage),鎖定(Holding),質檢(Inspection),正常(Normal)
  3. Beta版中,屬性可以修改和刪除,正式版將無法刪除和修改
  4. 所有的發貨,都只會匹配Normal庫位的貨物
  5. 收貨上架和移庫,都會根據庫位屬性,直接修改庫存數量,倉庫的庫存數量不會出現負數

 

  • Bin_Size
  1. 庫位的尺寸是幫助操作人員查看貨物是否可以放入庫位
  2. 現行的版本沒有對上架和移庫尺寸做檢查,將來會加入自動檢查

 

  • Bin_Set
  1. 庫位設置是必須的,通常庫位設置是橫縱橫縱,比如A010101,即A橫01縱01橫01縱
  2. 庫位的設置需要設置庫位屬性和尺寸,屬性很重要,他決定了此庫位的貨物是否為正常貨物

 

基礎設置

  • Company
  1. 公司基本信息的創建只可以創建一個公司,現在可以創建多個,但是只有第一個會起作用
  2. 如果需要多公司處理,可以通過APPID進行二次開發,也可以直接重新創建一個管理員賬號
  3. 公司的城市一定要填寫,這是用來顯示在收發貨單上的

 

  • Supplier
  1. 供應商的基礎信息
  2. 供應商的城市一定要填寫,這是用來顯示在收貨單上的,並且也是要自動計算運費的

 

  • Customer
  1. 客戶的基礎信息
  2. 客戶的城市一定要填寫,這是用來顯示在發貨單上的,並且也是要自動計算運費的

 

商品管理

  • Unit
  1. 商品的單位,系統會初始化創建一些,但可以自己添加和修改

 

  • Class
  1. 商品的類型,可以自己添加和修改

 

  • Color
  1. 商品的顏色,系統會初始化創建一些,但可以自己添加和修改

 

  • Brand
  1. 商品的品牌,可以自己添加和修改

 

  • Shape
  1. 商品的形狀,系統會初始化創建一些,但可以自己添加和修改

 

  • Specs
  1. 商品的規格,可以自己添加和修改

 

  • Origin
  1. 商品的產地,可以自己添加和修改

 

  • Goods List
  1. 商品的列表

 

固定資產

  • Capital
  1. 固定資產創建,沒有做過多拓展,只是記錄使用
  2. 可以統計托盤賬目等

 

庫存管理

  • Stock List
  1. 在庫的貨物總的庫存數據量
  2. Onhand_stock現有的庫存數量
  3. Can Order,可以用於下單發貨的庫存數量,因為有些貨物已經被下了訂單,雖然有現有庫存,但是不可以再被訂貨
  4. Ordered Stock,已經被下單的貨物數量
  5. ASN Stock,已經下了到貨通知書,但還沒有確認到貨通知書的貨物數量
  6. DN Stock,已被下單,但是還沒有確認訂單數量
  7. Pre Load,預計到貨貨物數量
  8. Pre Sort,已經到貨,卸貨完成,等待分揀的貨物數量
  9. Sorted Stock,貨物分揀完成,等待上架的貨物數量
  10. Pick Stock,發貨單生成了揀貨單,等待揀貨的貨物數量
  11. Picked Stock,已經揀貨完成,等待和司機交接的貨物數量
  12. Back Order Stock,欠貨訂單數量

 

  • Bin Stock
  1. Total Stock,這個庫位該產品的所有庫存數量
  2. Pick Stock,這個庫位需要揀貨的數量
  3. Picked Stock,這個庫位揀貨完成的數量
  4. Move To Bin, 移庫,移庫后,會根據庫位屬性,直接更新庫存數量,如果庫位全部移空,則該庫位會更新為空庫位

 

  • Empty Bin
  1. 空庫位明細

 

  • Occupied Bin
  1. 非空庫位明細

 

收貨管理

  • ASN到貨通知書狀態
  1. ASN Status = 1, ASN到貨通知書創建完成,狀態1是唯一可以刪除和修改ASN信息的狀態,他會顯示在Pre Delivery中,即有了到貨通知書,但是還沒有到貨,點擊Confirm Delivery,即確認貨物已經到達,ASN Status更新到2,此時已經無法再修改ASN信息
  2. ASN Status = 2, 拓展開發為司機到貨排隊,如果我們有很多司機到貨,這可以做成一個排隊系統,同時也可以讓采購和銷售看到到貨信息,減少不必要的郵件和電話溝通,點擊Finish Loading,即確認貨物已經卸貨完成,ASN Status更新到3,貨物信息會出現在Sorting,此時的ASN狀態表示,貨物已卸到倉庫,等待分揀
  3. ASN Status = 3, 貨物分揀是必須的一個流程,沒有貨物分揀,貨物是無法上架的,上架的原則就是貨物整理好,擺放到相對應的庫位上,點擊Confirm Sorted,ASN Status更新到4,即確認分揀完成,等待上架
  4. 此時移動Sorted頁面,會出現需要上架的貨物明細,點擊Move To Bin,上架完成,當然,系統會根據上架后的庫位屬性,自動更新商品庫存數量信息

 

發貨管理

  • DN發貨單狀態
  1. DN Status = 1, DN發貨單創建完成,此時訂單還是可以修改狀態,且系統中的庫存數量不會發生任何改變,點擊Confirm Order,DN Status更新到2,即訂單已經被確認,且無法更改,同時系統中的貨物庫存數量會自動更新,比如Can Order數量和Ordered數量
  2. DN Status = 2, 這是訂單被確認等待生成揀貨單的過程,你可以點擊單條訂單Order Release來生成一個訂單的揀貨單,你也可以點擊Release All Order,來將所有訂單生成揀貨單,如果是所有訂單Release,那么會根據時間的先后進行庫存匹配,庫存不足時,會生成Back Order,即欠貨訂單,在這個過程中,DN單號是會發生改變的,如一家客戶的多張訂單,會被統一到一張訂單中進行揀貨,如客戶訂單無法滿足,會將未滿足部分生成欠貨訂單,欠貨訂單如果仍未得到匹配庫存滿足,將不再生成新的訂單,DN Status會更新到3,即等待揀貨的過程,已確認的訂單和欠貨訂單都時Status為2的狀態
  3. DN Status = 3, 直接揀貨,此功能會出現在Beta5更新中,暫時未更新
  4. DN Status = 4, 發貨交接,此功能會出現在Beta6更新中,暫時未更新
  5. DN Status = 5, 客戶簽收,此功能會出現在Beta7更新中,暫時未更新
  6. DN Status = 6, 對賬結束,訂單關閉,此功能會出現在Beta7更新中,暫時未更新

 

退貨管理

  • RO退貨訂單 此功能將會出現在正式版中

運費管理

  • Transportation Fee API已經完成,前端暫未更新入口,如果想要使用,可以直接調用Payment下的Transportation Fee API進行使用,運費自動計算模塊已經做進收發貨流程中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM