有贊零售供應鏈實踐
作者:王博文
部門:同城零售 / 運營支撐
一、背景
在一個實體商家的生產經營活動過程中,供應鏈是一個不可迴避的話題。供應鏈貫穿了整個商家的生產銷售環節,一個好的供應鏈,能夠讓商家的經營活動效率提升、成本降低。而有贊作爲 SaaS 服務公司,在爲零售商家提供服務的過程中,自然接收到了商家對供應鏈管理相關的訴求,爲達成幫助每一位重視產品和服務的商家成功的使命,供應鏈也是我們要爲商家提供的功能之一。
二、供應鏈業務模型
供應鏈業務的特點是重流程,業務鏈路比較複雜,舉一個要貨鏈路整體的業務流程
三、供應鏈架構
3.1 供應鏈業務架構
庫存需求計劃:用於商家制定供應鏈計劃以及對計劃制定做輔助業務的數據信息。
庫存需求:主要負責商家業務活動過程中的流程,通常是存在多方的交互,如採購訂單包含供應商和入庫倉庫,調撥 / 配銷包含出庫方和入庫方。
倉庫作業:負責商家不需要進行外部協調的庫內操作。
供應鏈主數據:用於管理基礎主數據信息,如倉庫信息,供應商數據,倉庫庫存,唯一碼。
3.2 供應鏈應用間關係
網關層:提供外部接口和內部接口的映射,對用戶信息和權限做基礎校驗。
查詢搜索:基於 CQRS 拆分出來的單據搜索查詢模塊。
業務系統:提供具體的業務功能
retail-stock:目前承載着庫存主數據和庫存需求的業務功能,隨着後續業務功能和規模的發展,會從中繼續拆分出其他系統。
retail-stock-purchase:承載着庫存需求層的業務功能。
retail-stock-scm:用於負載供應鏈向銷售端鋪貨關係和收發貨的入口。
基礎服務:提供基礎設施。
3.3 供應鏈應用架構
庫存系統:
服務聚合層:用來對接展現層,主要負責對公共服務的編排和數據信息的組裝,來完成一次完整的業務操作。
公共服務層:業務流程的核心,用來提供領域模型和領域服務。
基礎設施:提供通用的技術能力。
四、複雜性的解決方案
4.1 分而治之,梳理清楚各個業務的邊界
針對供應鏈這種複雜業務場景,領域驅動設計是能比較好的能將其複雜度做一個拆解,將供應鏈劃分爲一個個子域並明確邊界,這樣做一是能夠解決系統的複雜流程,後續不同行業的業務鏈路差異,也可以很好的通過串聯各個領域進行組合,可以做到業務代碼的複用。按照領域劃分後,對整個要貨鏈路的梳理如下:
4.2 流程編排,處理業務流程的差異
針對於不同商家的不同流程,我們會將每個業務操作原子化,每次操作完成後會發送一個事件消息,流程編排接收到事件消息後基於商家的配置來選擇並執行下一個操作,這樣每個操作更加純粹,不會耦合業務編排的邏輯
4.3 操作內部功能抽象,解決操作內部的差異
上邊的處理措施主要是解決商家流程的不同差異,那麼對於商家一個業務操作本身的差異,也會對每個內部的業務操作進行抽象,通過策略模式來加載每個步驟要做的事情。
五、供應端與銷售端之間的關係
5.1 業務模型
在傳統的電商場景,電商對於商家來說只是一個銷售渠道,那麼銷售庫存也是直接設置在銷售渠道上的一個數值,不過實際的零售商家使用場景來說,銷售庫存更多是基於他本身的庫存信息,由於有贊本身提供供應鏈的業務,那麼我們也會去做供應鏈庫存向銷售庫存的一個轉化:目前有贊庫存的業務模型如圖:
倉庫庫存層:供應鏈的庫存模型,包含實物庫存,佔用庫存,在途庫存,計劃庫存。
調度庫存層:調度庫存層通過庫存資源和供貨關係計算來確定銷售庫存的數量。
1.庫存資源:承接倉庫庫存的庫存數量,會屏蔽掉倉庫庫存的很多庫存類型,只會感知這個倉庫可以使用的庫存有哪些;
2.供貨關係包含兩個角色,分別是供貨倉庫(有倉儲能力的單元,如倉庫,門店)和銷售渠道(有銷售能力的單元,如門店,網店)。
銷售庫存層:各個銷售渠道可以售賣的庫存數量。
5.2 下單扣減庫存流程
由於存在一個倉庫給多個渠道供貨的場景,如果直接扣減銷售庫存的話,會爲商家帶來超賣的問題,所以在做交易庫存扣減的時候,是直接扣減到調度庫存的庫存資源,然後觸發銷售庫存的更新,銷售庫存更多是一個展示的功能
交易下單扣減庫存的大致流程:
用戶發起下單之後,由履約系統來查詢調度層的供貨關係和對應倉庫的資源數據,再根據本身的一些路由規則,綜合選擇出哪個倉庫來履約,確認好履約倉庫後,交易側攜帶着派單結果進行庫存的扣減。在生單成功後,創建對應的履約單,由履約單來供應鏈創建發貨任務。
六、總結與思考
本文整體介紹了一下供應鏈業務的複雜度,應對其複雜度的挑戰所考慮的解決措施,以及供應鏈庫存與銷售庫存的關係。不過目前對於供應鏈的業務編排上目前還是採用的異步事件消息的方式,這種方式目前帶來比較大的問題就是對業務流程執行可讀性較差,難以理解,目前也在對接有贊內部的流程引擎,通過流程的可視化來解決以上問題。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/VoOoGYnbDsgSBQadGqmAUA