詳解:電商前端庫存邏輯的設計

23 評論 21549 瀏覽 197 收藏 12 分鐘

本文主要對電商平臺的訂單系統相關庫存邏輯進行了詳細的闡述,一起來文中看看~

一、庫存的概念

電商的業務場景中訂單的流程常常伴隨著庫存的變化;對于erp來說,庫存可能涉及入庫、出庫、分庫等操作,這里暫且不討論erp中庫存的處理邏輯,主要就電商平臺的訂單系統相關庫存邏輯進行說明。

  1. 總庫存指:供應商倉庫該商品的實際庫存;
  2. 凍結庫存指:訂單臨時占用的庫存,凍結庫存可以根據訂單取消或發貨等情況進行釋放;
  3. 可用庫存指:即總庫存-凍結庫存,一般指在前端顯示且用戶可下單的最大數量。

庫存的使用場景:

  1. 常規訂單流程:需要運用到總庫存,凍結庫存和可用庫存;
  2. 運營活動:特價商品活動需要占用一定的庫存,以保證能有充足的庫存支撐活動的進行;
  3. 贈品庫存:如果把贈品當做一款SKU的情況下,即和正常下單路徑一樣,當把贈品單獨出來的情況下,需要設置贈品庫存(在我們的業務系統中,贈品由商家手動添加并設置庫存),同時需要建立一套單獨的庫存處理體系。

二、常規訂單流程中庫存的處理

總庫存的數量可以同步ERP或人工設置,人工設置的情況下,供應商點擊“確認發貨”后減少,退款時若訂單已發貨則供應商點擊“同意退款”/系統自動同意退款則增加,退貨時供應商點擊“確認收貨”/系統自動確認收貨則增加。

同步ERP數據的條件下,總庫存可以不受訂單狀態的影響(值得注意的是:如果在ERP系統中,確認發貨的節點和扣減總庫存的節點存在時間差的情況下,這個時間段,實際上會造成系統已扣減凍結庫存了,但是ERP總庫存不變,所以會造成可用庫存短時間偏大),也可以先扣減/增加總庫存,因為總庫同步肯定會覆蓋之前修改后的數量。

凍結庫存在用戶從app下單時增加,在供應商確認發貨/取消訂單時減少,“待發貨”的訂單申請退款成功則減少。

另外,取消退款和退款失敗的情況下,對庫存無影響。

結合訂單流程的中各個節點進一步說明:

用戶下單:下單時由于訂單生成之后需要預定一定的庫存,保證該訂單能發貨,所以需要增加對應商品的凍結庫存;這里需要注意的是,不同的業務場景對于增加凍結庫存的節點定義不一樣。

一般來說在兩個節點考慮增加凍結庫存:一個是在生成訂單時,一個是在付款成功時。

對于庫存有限,時間緊迫的下單場景來說(比如:秒殺),在付款成功的時候增加凍結庫存會比較合理,因為未付款的訂單會影響到其他人購買這款商品。但對于常規場景來說,在生成訂單時占用庫存會比較好,否則會影響用戶的下單體驗(但是一定要有系統自動取消訂單的功能以釋放凍結庫存)。

確認發貨:確認發貨的動作可以是ERP訂單出庫的時候自動確認發貨,也可以是手動確認發貨。無論哪種場景,只要觸發發貨動作的話,均需扣減總庫存,同時扣減凍結庫存。若ERP自動同步總庫存的情況下,則ERP中會扣減總庫存并自動同步至系統。

取消訂單:首頁,在我們系統中定義在付款成功之前可以取消訂單,取消訂單的時候需要扣減凍結庫存(即去除庫存的占用)。

申請退款:若系統定義為商品付款后,發貨前可以申請退款的情況下,退款成功則需要扣減凍結庫存(商家操作“同意退款”或系統超時自動審核)。

申請退貨:若系統定義為商品發貨后,可以進行申請退貨的情況下,退款成功且供應商已收貨的情況下需要增加總庫存(商家操作“確認收貨”或系統自動確認收貨),若ERP自動同步庫存的情況下,則ERP中會增加總庫存并自動同步至系統。

附:下單流程圖

三、活動庫存的處理

實際做法:由于在數據庫中沒有活動庫存這個字段,導致原公式:可用庫存=總庫存-凍結庫存,無法統一修改;在實際開發中凍結庫存=普通商品凍結庫存+活動庫存之和,另外活動庫存仍將保留在活動表中,活動表中包括字段活動庫存,活動已用庫存。

1. 活動庫存概念

特價商品在設置活動時,可設置活動庫存,目的為限制本商品以特價銷售的數量(設置的活動庫存不能大于總庫存),同時也保證參加活動的商品的數量,超出活動數量的商品(活動庫存用光的時候)將以原價購買。

2. 數據庫庫存相關字段

商品表相關字段:總庫存、凍結庫存;活動表相關字段:活動庫存、活動凍結庫存。

普通商品可用庫存=總庫存-凍結庫存-活動庫存之和

活動商品可用庫存=活動庫存-活動凍結庫存

(實際上在我們開發過程中,由于初期數據庫設計未能考慮到后面的拓展性,頁面取數據的時候,普通商品可用庫存=總庫存-凍結庫存,到后面增加促銷活動時,這個公式若需要變動則影響太大了。所以我們保持原來的公式不變,讓凍結庫存=普通商品凍結庫存+活動庫存之和,這個問題凸顯了技術架構的重要性。)

3. 下單過程中的庫存邏輯

活動創建成功,則對應的商品需將活動庫存A件從總庫存B件中間分出 ,此時普通商品可用庫存為(B-A)件,特價商品活動可用庫存為A件。

用戶下單時,以活動價購買商品C件,則普通商品可用庫存仍為(B-A)件,特價商品可用庫存為(A-C)件,活動凍凍結庫存為C件。

活動庫存不足/超出限購數量時,下單D件,其中以特價購買的為D1件,以普通價購買的商品為D2件。則普通商品可用庫存為(B-A-D2)件,普通商品凍結庫存D2件,特價商品活動可用庫存為(A-D1),活動凍結庫存為D1件。

當特價商品可用庫存不足時,特價商品售完,所有商品都以普通價購買。當活動期間若有訂單取消或退款、退貨,則活動庫存重新>0時,可繼續以剩余的數量按特價購買商品。

4. 活動商品庫存扣減及回滾

活動商品售出之后,增加活動凍結庫存,活動有效期間取消訂單/退款成功則減少活動凍結庫存;普通商品的庫存不受影響,但是特價商品的可購數量需要增加/減少。

活動中若ERP由于發貨需要調整凍結庫存和總庫存,此時不管發貨的是不是特價商品,都是直接扣減凍結庫存和總庫存(因為ERP沒有分庫而且庫存自動同步的情況下,總庫存一定會減少,那邊此時也需要扣減凍結庫存保證普通商品的可購數量保持不變,而活動商品的庫存不需要處理)。

活動結束:如活動庫存100件,賣了20件,則將該商品的活動庫存清零,且活動凍結庫存的數量合并到凍結庫存后活動凍結庫存也清零。最終凍結庫存加20,此外由于活動庫存變小,普通商品可用庫存也變大(等于是把活動庫存沒用完的還回去)。

四、贈品庫存的處理

贈品庫存基于我當前的業務系統情況進行說明,我們目前的贈品總庫存及贈品活動庫存都是在后臺手動設置的,所以是一套單獨的邏輯。

贈品表相關字段:贈品總庫存,贈品活動庫存可用;活動表相關字段:贈品活動庫存,贈品已用庫存;

贈品總庫存可人工設置,每個使用贈品的活動都會設置對應的贈品活動庫存。贈品活動庫存可用=贈品總庫存-贈品活動庫存之和。(注意這個贈品庫存可用,是指在后臺添加贈品活動時可以設置的最大活動庫存數量)

購買商品時,所送的贈品不能大于贈品活動庫存;贈品活動庫存不夠送的情況下,要友好提示客戶。當提交訂單后,若有送贈品,則自動扣減對應的贈品活動庫存和贈品總庫存。

活動有效期間,取消訂單/退貨,退款審核通過則自動增加贈品活動庫存和贈品總庫存;活動失效后,取消訂單/退貨,退款審核通過則自動增加贈品總庫存?;顒邮r,對應的贈品活動庫存清零。

五、前端庫存展示

按正常邏輯:如果商品不存在特價/秒殺活動的情況下,直接以普通價購買,顯示普通商品可用庫存即可;如果商品存在秒殺/特價活動的情況下,應該要顯示活動商品的庫存。

但是存在一種情況就是購買的一批商品中部分商品需要按照活動價算,剩余商品按照普通價算,那么這時候取普通商品可用庫存/活動商品可用庫存都是不對的。

所以最終我們在權衡之下,還是用了普通商品可用庫存+活動商品可用庫存之和(即總庫存-凍結庫存-活動凍結庫存之和)。

 

本文由 @不橈 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 好文必須點贊,學到了!

    來自四川 回復
  2. 講得好,贊一下??!

    來自四川 回復
  3. 咨詢一下,關于消費者已經收到貨后的退貨退款,您圖中是先審核再退款,退款成功后再生成退貨訂單,倉庫收貨是在哪個環節呢?如果是在生成退貨訂單之后,是否會造成倉庫積壓退貨產品呢?

    來自湖南 回復
  4. 有問題咨詢下:是否存在一個商品同時參加多個促銷活動,且多個促銷活動均有活動庫存,如果存在這種情況,扣庫存的時候,是不是就有問題了,不知道應該扣哪個庫存

    來自廣東 回復
    1. 這種后臺不支持設置的,后臺能設置的是產品活動價+活動庫存+促銷截止時間,同一時間內不會支持創建另一個促銷價

      來自黑龍江 回復
  5. 咨詢一個問題,對于多倉商家,活動庫存需要指定倉庫嗎,還是只指定一個總數。
    舉例,要做一個秒殺活動,活動庫存總數100個,這100個是分派到各個倉庫呢,還是只是一個總數;
    如果是指定一個總數;
    1、普通商品購買時如何處理呢;每一筆交易難道都去檢查一下,對應商品,所有倉的庫存總剩余嗎;
    2、會不會出現一種情況,熱點地區的倉庫按照普通銷售賣太多了,秒殺的時候達不到促銷效果呢;

    來自廣東 回復
  6. 這個下單流程圖 能傳一份清晰的給我嗎 感謝

    來自廣東 回復
  7. “活動中若ERP由于發貨需要調整凍結庫存和總庫存,此時不管發貨的是不是特價商品,都是直接扣減凍結庫存和總庫存(因為ERP沒有分庫而且庫存自動同步的情況下,總庫存一定會減少,那邊此時也需要扣減凍結庫存保證普通商品的可購數量保持不變,而活動商品的庫存不需要處理)。”
    您好,這一段沒太看懂。個人認為活動中如果需要臨時調貨,應當增加活動庫存,同時減少普通商品庫存,而總庫存不變,凍結商品庫存也不應當改變(因為凍結商品庫存是用戶已經下單購買的)。

    來自北京 回復
    1. ERP里是不存在設置活動價格和活動庫存的,ERP里只有總庫存和凍結庫存,它不管你拿這個產品來干啥?;顒訋齑嬖谏唐分信_完成設置

      來自黑龍江 回復
  8. 收!

    回復
  9. 我們后臺是沒有做凍結庫存這種邏輯的,在提交訂單扣減庫存、取消訂單、退款成功增加庫存的增減庫存是同樣時,就只有一個總庫存,例如一個普通商品的總庫存為100個,設為秒殺商品,庫存為10個,普通商品和秒殺商品共用總庫存,如果普通商品比秒殺商品先賣完,則秒殺商品也不能秒殺了,前臺顯示已秒完,這種沒有凍結庫存的邏輯會引發什么問題么?

    來自廣東 回復
    1. 第一,就像你描述的,普通商品賣完之后,秒殺商品就沒得賣的,那你們秒殺商品庫存的意義僅僅在于限制了最大可秒數量,而不能保證本次活動的數量,自然就達不到引流的目的
      第二,為什么我們系統引入了凍結庫存的概念:如果把系統按照“前臺”“中臺”“后臺”來區分的話,商家的ERP等于是后臺,ERP中的總庫存是真實庫存,erp中發貨了就是真實庫存減少了同時也扣減了總庫存,那么自然是不需要凍結庫存的;但是站在平臺方的角度,我的庫存同步于ERP的,但是下單之后且ERP未發貨之前,ERP的庫存不會減少,那么對于已下單的商品來說,要占用對應數量的庫存(凍結庫存),同時也告訴其他客戶可以采購的數量減少了(即可用庫存),否則下單到發貨的這個時間差會導致商品超賣

      來自廣東 回復
    2. 感謝,受教受教

      來自廣東 回復
    3. 沒庫存照樣賣,對于秒殺只需要定好秒殺數量就行。沒有誰鐵定說沒庫存就不能秒殺,規則人定的,可以變的。沒庫存抓緊進貨,這種情況PO的配合很重要。O(∩_∩)O~~

      來自廣東 回復
    4. 商品及時補貨這個在活動及運營策略上的確是需要注意的點,但是目前討論的問題是指系統庫存在前、中、后臺的增減流程邏輯合理性問題,不是指運營及商品上的人為增減庫存

      來自廣東 回復
    5. 主要還是前臺庫存取自商品中臺,商品中臺庫存取自ERP,前臺和中臺可以頻繁交互,而中臺和ERP如果頻繁交互會比較耗資源。而且誠如作者回復,會產生在兩次交互的中間空檔期導致前臺產品多賣,而erp實際庫存不夠的問題。

      來自黑龍江 回復
  10. 你好,有幾個疑問煩請賜教。

    關于贈品庫存的處理,文章有提到“當提交訂單后,若有送贈品,則自動扣減對應的贈品活動庫存和贈品總庫存?!?br /> 1、“贈品可用庫存”這個名詞,按照前面2種(常規和活動)增扣庫存的名詞定義,功能為什么不類比它們的“xx商品可用庫存”;并且增加一個“贈品活動凍結庫存”呢?
    這句話即變為,“當提交訂單后,若有送贈品,則自動扣減對應的贈品可用庫存,增加凍結庫存?!?br /> 2、按照你的思路,我理解為:贈品可用庫存=某一贈品活動預設的的庫存閾值,贈品活動庫存=該贈品活動的可用庫存,是否正確?
    3、常規訂單,確認發貨時“扣減總庫存,同時扣減凍結庫存”;贈品庫存的處理,提交訂單后,怎么就磨刀霍霍向贈品總庫存了呢?

    來自上海 回復
    1. 關于第2點,你的理解是正確的; 第三點:因為我們這邊系統往ERP系統中同步訂單明細的時候,贈品不會同步過去;所以贈品就采用了一種簡單方式來處理; 沒有對于錯,只是因為這樣更符合我們的業務場景

      來自廣東 回復
    2. 好的,謝謝啦

      來自上海 回復
  11. 您好,有個商品入庫的問題想請教下。
    現在公司打算重新打造供應鏈系統,每個商品入庫的時候都需要按照后臺系統規則重新貼條形碼。
    我的問題是應該買什么樣的機器才能按照系統規則生成對應的條形碼?
    這個機器怎么連接到后臺系統,在入庫時按照采購單以及sku信息實時去生成條形碼?

    回復
    1. 對于ERP的商品入庫這一塊沒有做過深入了解,所以提幾條建議僅供參考:
      1,條形碼與商品是一一對應的,這個應該是由廠家去報備申請,所以你們肯定不是后臺按照一定的規則去生成條形碼
      2,市場上有對應的掃條槍,按照我的理解:每個掃碼槍都會有一個獨特的設備ID號,而你們的erp需要先有一個條形碼庫,條形碼庫應該至少包括商品ID和條形碼兩個字段,那么在使用機器進行掃碼并輸入對應的數量的時候,掃碼槍可以對商品上的條形碼進行解析,erp就可以獲取到哪個商品進貨了多少數量;但是需要注意的是進貨的信息還包括商品的生成日期,有效期,這些信息應該是不包含在條形碼內的

      來自廣東 回復
    2. 條形碼是和商品對應的,但是存在的問題是有些商品廠家存在一個條形碼對應多個SKU的情況,所以就沒有辦法按照商品條碼掃碼入庫。

      來自北京 回復
    3. 這么看來應該是廠家有問題呢,條形碼和SKU必須是一一對應的,否則很難開展后續的入庫工作呀

      來自黑龍江 回復