項目介紹:
完全開源倉儲管理軟件,遵循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庫,這個庫有時候會安裝不上,需要下載下來本地安裝
- 下載地址: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
- 是發起請求的基本網址,如果是本地調試,則默認為http://127.0.0.1:8008/ ,如果部署在服務器,則需要將其改為你的網站訪問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種:
- 使用OPENID和員工名稱直接登入
- 管理員使用賬號和密碼登入
- 登入后前端會存儲登入信息
- 可以通過查看我的OPENID來查看用戶數據組的OPENID
- 如果需要多公司,多倉庫操作,注意需要更改OPENID
- 更多管理員權限,請自行開發
員工管理
- 注冊管理員后,新建一個員工
- 員工有2個字段,Staff_name(用於員工登入),Staff_type(員工類型來控制員工的權限)
- 系統沒有對員工權限做任何限制,如果需要員工權限,請根據企業業務模型,自行修改Templates
- 點擊Edit,可以修改員工信息
- 點擊Delete,可以刪除員工信息,系統后台會將Is_delete調成True
- 點擊Contact:
- 可以直接和員工實時聊天,但是不可以和自己聊天
- 可以新建一個備忘錄員工,這樣做其實是當成備忘錄使用
- 在個人中心,可以查看最近的聯系人
- Message標識會提醒你現在有多少未讀消息
司機管理
- 司機管理只會在發貨流程中用到
- 你需要知道貨物是哪個司機提貨取走的
倉庫設置
- Warehouse
- 倉庫的創建只可以創建一個倉庫,現在可以創建多個,但是只有第一個會起作用
- 如果需要多倉處理,可以通過APPID進行二次開發,也可以直接重新創建一個管理員賬號
- 倉庫的城市一定要填寫,這是用來計算運費的
- Bin_Property
- 庫位屬性決定了倉庫中貨物屬於什么屬性的貨物
- 4種屬性:破損(Damage),鎖定(Holding),質檢(Inspection),正常(Normal)
- Beta版中,屬性可以修改和刪除,正式版將無法刪除和修改
- 所有的發貨,都只會匹配Normal庫位的貨物
- 收貨上架和移庫,都會根據庫位屬性,直接修改庫存數量,倉庫的庫存數量不會出現負數
- Bin_Size
- 庫位的尺寸是幫助操作人員查看貨物是否可以放入庫位
- 現行的版本沒有對上架和移庫尺寸做檢查,將來會加入自動檢查
- Bin_Set
- 庫位設置是必須的,通常庫位設置是橫縱橫縱,比如A010101,即A橫01縱01橫01縱
- 庫位的設置需要設置庫位屬性和尺寸,屬性很重要,他決定了此庫位的貨物是否為正常貨物
基礎設置
- Company
- 公司基本信息的創建只可以創建一個公司,現在可以創建多個,但是只有第一個會起作用
- 如果需要多公司處理,可以通過APPID進行二次開發,也可以直接重新創建一個管理員賬號
- 公司的城市一定要填寫,這是用來顯示在收發貨單上的
- Supplier
- 供應商的基礎信息
- 供應商的城市一定要填寫,這是用來顯示在收貨單上的,並且也是要自動計算運費的
- Customer
- 客戶的基礎信息
- 客戶的城市一定要填寫,這是用來顯示在發貨單上的,並且也是要自動計算運費的
商品管理
- Unit
- 商品的單位,系統會初始化創建一些,但可以自己添加和修改
- Class
- 商品的類型,可以自己添加和修改
- Color
- 商品的顏色,系統會初始化創建一些,但可以自己添加和修改
- Brand
- 商品的品牌,可以自己添加和修改
- Shape
- 商品的形狀,系統會初始化創建一些,但可以自己添加和修改
- Specs
- 商品的規格,可以自己添加和修改
- Origin
- 商品的產地,可以自己添加和修改
- Goods List
- 商品的列表
固定資產
- Capital
- 固定資產創建,沒有做過多拓展,只是記錄使用
- 可以統計托盤賬目等
庫存管理
- Stock List
- 在庫的貨物總的庫存數據量
- Onhand_stock現有的庫存數量
- Can Order,可以用於下單發貨的庫存數量,因為有些貨物已經被下了訂單,雖然有現有庫存,但是不可以再被訂貨
- Ordered Stock,已經被下單的貨物數量
- ASN Stock,已經下了到貨通知書,但還沒有確認到貨通知書的貨物數量
- DN Stock,已被下單,但是還沒有確認訂單數量
- Pre Load,預計到貨貨物數量
- Pre Sort,已經到貨,卸貨完成,等待分揀的貨物數量
- Sorted Stock,貨物分揀完成,等待上架的貨物數量
- Pick Stock,發貨單生成了揀貨單,等待揀貨的貨物數量
- Picked Stock,已經揀貨完成,等待和司機交接的貨物數量
- Back Order Stock,欠貨訂單數量
- Bin Stock
- Total Stock,這個庫位該產品的所有庫存數量
- Pick Stock,這個庫位需要揀貨的數量
- Picked Stock,這個庫位揀貨完成的數量
- Move To Bin, 移庫,移庫后,會根據庫位屬性,直接更新庫存數量,如果庫位全部移空,則該庫位會更新為空庫位
- Empty Bin
- 空庫位明細
- Occupied Bin
- 非空庫位明細
收貨管理
- ASN到貨通知書狀態
- ASN Status = 1, ASN到貨通知書創建完成,狀態1是唯一可以刪除和修改ASN信息的狀態,他會顯示在Pre Delivery中,即有了到貨通知書,但是還沒有到貨,點擊Confirm Delivery,即確認貨物已經到達,ASN Status更新到2,此時已經無法再修改ASN信息
- ASN Status = 2, 拓展開發為司機到貨排隊,如果我們有很多司機到貨,這可以做成一個排隊系統,同時也可以讓采購和銷售看到到貨信息,減少不必要的郵件和電話溝通,點擊Finish Loading,即確認貨物已經卸貨完成,ASN Status更新到3,貨物信息會出現在Sorting,此時的ASN狀態表示,貨物已卸到倉庫,等待分揀
- ASN Status = 3, 貨物分揀是必須的一個流程,沒有貨物分揀,貨物是無法上架的,上架的原則就是貨物整理好,擺放到相對應的庫位上,點擊Confirm Sorted,ASN Status更新到4,即確認分揀完成,等待上架
- 此時移動Sorted頁面,會出現需要上架的貨物明細,點擊Move To Bin,上架完成,當然,系統會根據上架后的庫位屬性,自動更新商品庫存數量信息
發貨管理
- DN發貨單狀態
- DN Status = 1, DN發貨單創建完成,此時訂單還是可以修改狀態,且系統中的庫存數量不會發生任何改變,點擊Confirm Order,DN Status更新到2,即訂單已經被確認,且無法更改,同時系統中的貨物庫存數量會自動更新,比如Can Order數量和Ordered數量
- DN Status = 2, 這是訂單被確認等待生成揀貨單的過程,你可以點擊單條訂單Order Release來生成一個訂單的揀貨單,你也可以點擊Release All Order,來將所有訂單生成揀貨單,如果是所有訂單Release,那么會根據時間的先后進行庫存匹配,庫存不足時,會生成Back Order,即欠貨訂單,在這個過程中,DN單號是會發生改變的,如一家客戶的多張訂單,會被統一到一張訂單中進行揀貨,如客戶訂單無法滿足,會將未滿足部分生成欠貨訂單,欠貨訂單如果仍未得到匹配庫存滿足,將不再生成新的訂單,DN Status會更新到3,即等待揀貨的過程,已確認的訂單和欠貨訂單都時Status為2的狀態
- DN Status = 3, 直接揀貨,此功能會出現在Beta5更新中,暫時未更新
- DN Status = 4, 發貨交接,此功能會出現在Beta6更新中,暫時未更新
- DN Status = 5, 客戶簽收,此功能會出現在Beta7更新中,暫時未更新
- DN Status = 6, 對賬結束,訂單關閉,此功能會出現在Beta7更新中,暫時未更新
退貨管理
- RO退貨訂單 此功能將會出現在正式版中
運費管理
- Transportation Fee API已經完成,前端暫未更新入口,如果想要使用,可以直接調用Payment下的Transportation Fee API進行使用,運費自動計算模塊已經做進收發貨流程中