電商技術(shù)解密之庫存系統(tǒng)

41 評論 69069 瀏覽 452 收藏 14 分鐘

今天來跟大家聊下電商平臺里的庫存系統(tǒng),相信大家對庫存系統(tǒng)最直觀的感受就是商詳頁上是否顯示“加入購物車”或者是“到貨通知”。只要能加入購物車就表示有庫存,顯示到貨通知就表示沒有庫存了,并沒有覺得這里面有多么的復(fù)雜。今天來跟大家一起解密下庫存系統(tǒng),來看一看是不是真的如大家想象中那么的簡單。

庫存系統(tǒng)的作用是什么?

最重要的作用就是管理好各個商品的實時庫存數(shù)據(jù),及時告訴用戶當(dāng)前商品是否可以購買?還可以購買幾件。

為了能夠更清楚的介紹庫存系統(tǒng)是如何管理商品庫存數(shù)據(jù)的,這里需要先簡單給大家介紹另外一個系統(tǒng),叫做倉庫系統(tǒng)。估計很多人分不清倉庫系統(tǒng)跟庫存系統(tǒng)之間的關(guān)系是什么?

倉庫系統(tǒng)實際真正管理的是物理倉庫里面的庫存的數(shù)量。我們經(jīng)常聽說的京東亞洲一號倉等等這些大型的倉庫,由于面積非常大,里面的商品數(shù)量也很多,所以需要有一套系統(tǒng)來幫助管理實體倉里面的庫存的數(shù)量。

簡單來說就是管理這個倉庫一天有多少商品進(jìn)入到這個倉庫里面來,每個商品的數(shù)量有多少?每天從這個倉庫發(fā)出去多少個商品?倉庫里面每個商品還剩下多少?剩下的這些商品分別存儲是倉庫的哪個儲位上等等。

那么有了倉庫系統(tǒng)就可以管理商品的數(shù)量,那么為什么還要有庫存系統(tǒng)呢?

下面給大家舉個例子,讓大家了解下倉庫系統(tǒng)和庫存系統(tǒng)之間的區(qū)別是什么?當(dāng)某個商品A在倉庫里面有10個數(shù)量的時候,倉庫系統(tǒng)負(fù)責(zé)管理這個商品A的數(shù)量,以及它的位置信息。那么倉庫里面這個商品A在網(wǎng)站上是不是一定可以允許賣10個呢?這是不一定的。因為倉庫里面有10個商品A,可能網(wǎng)站上已經(jīng)有3個被用戶買掉了,只不過這3個商品還沒有出庫,所以在倉庫系統(tǒng)里面看這個商品A目前還有10個在倉庫,但實際上已經(jīng)賣掉3個,網(wǎng)站上其實只能賣7個,這種可賣的數(shù)量倉庫系統(tǒng)是區(qū)分不出來的,它只是負(fù)責(zé)管理在當(dāng)前時刻倉庫里面一共有多少庫存,并不區(qū)分商品的狀態(tài)信息。所以庫存系統(tǒng)主要是用來解決這個問題,經(jīng)過一系列的計算告訴用戶當(dāng)前時刻商品A一共還可以買幾個。倉庫系統(tǒng)管理的是倉庫里面商品的實際數(shù)量,庫存系統(tǒng)管理的是商品的可銷售數(shù)量,這就是庫存系統(tǒng)和倉庫系統(tǒng)主要的區(qū)別。

在電商網(wǎng)站的商詳頁上展示當(dāng)前商品可售賣數(shù)量對庫存系統(tǒng)來說是相對比較簡單的,有貨的時候顯示當(dāng)前商品的數(shù)量,沒貨的時候告訴前端此商品庫存為0,前端展示到貨通知,如下圖:

庫存-到貨通知

庫存跟倉庫系統(tǒng)之間的交互

比較復(fù)雜的是如何對接倉庫的各種出入庫事件來管理商品的數(shù)量。下面來跟你介紹一下庫存跟倉庫系統(tǒng)之間交互的幾個比較重要的事件。

采購入庫

當(dāng)B2C電商網(wǎng)站類似京東、當(dāng)當(dāng)這種想賣一個商品的時候首選要發(fā)起采購計劃,這時候需要在倉庫系統(tǒng)里面建立一個采購單。目的是記錄哪個商品采購了多少數(shù)量,將會把這批貨采購到哪個倉庫里面去。

采購單發(fā)起之后過一段時間實際的商品會入庫。這時候倉庫系統(tǒng)會把相應(yīng)的商品數(shù)量進(jìn)行更改。這個時候倉庫系統(tǒng)同時會通知庫存系統(tǒng),告訴庫存系統(tǒng)某個商品入庫了,數(shù)量是多少,庫存系統(tǒng)會把相應(yīng)的數(shù)量加上。

時序圖

采購入庫時序圖

下單鎖庫存

商品采購入庫之后庫存系統(tǒng)就會增加相應(yīng)的數(shù)量,這時候在網(wǎng)站端這個商品就可以開始賣了。當(dāng)有人購買這個商品的時候,庫存系統(tǒng)會將這個商品數(shù)量先鎖定。然后等待倉庫出貨。當(dāng)倉庫真正出貨的時候,庫存系統(tǒng)才會將相應(yīng)的數(shù)量減掉。這里解釋下庫存系統(tǒng)為什么要有一個鎖定的狀態(tài)?

還是舉個例子來說。當(dāng)一個手機(jī)A采購入庫10個的時候,庫存系統(tǒng)也會顯示這個手機(jī)在庫存系統(tǒng)里面有10個數(shù)量。也就是說網(wǎng)站上可以銷售的數(shù)量為10。

1111

當(dāng)一個用戶買了一個手機(jī)A的時候。庫存系統(tǒng)會將這個商品先鎖定一件。表示有一個商品已經(jīng)有人付錢要進(jìn)行購買了,這個時候庫存系統(tǒng)會告訴網(wǎng)站端此商品目前能購買的數(shù)量為9個。

2222

訂單取消解鎖庫存

當(dāng)用戶下了單買了手機(jī)A之后,過了一會可能由于種種原因后悔了,或者是不想買了或者是想換一個更好的手機(jī),這個時候用戶會將這個訂單取消掉。在倉庫沒有將這個手機(jī)發(fā)出去之前用戶是可以取消的,這個時候我們需要將剛剛鎖定的數(shù)量解鎖掉,變化后的庫存數(shù)量如下:

3333

出庫扣庫存

如果上面用戶沒有取消訂單,那么倉庫里面的工作人員將這個商品找到、打好包裹、寄出去之后,倉庫系統(tǒng)會通知庫存系統(tǒng)這個手機(jī)已經(jīng)出庫,這個時候庫存系統(tǒng)需要將數(shù)量減少,具體變化如下:

44444

倉庫的實際數(shù)量變?yōu)椋?,鎖定數(shù)量變?yōu)椋?,可售賣的數(shù)量仍然為9。

倉庫間調(diào)撥

這個純屬電商倉庫管理的后臺流程,普通用戶是感知不到的,稍微大一點的商家或者自營平臺,類似京東、蘇寧這種自建倉庫的平臺商家都會有很多個倉庫分布式在全國各地,商品也是有一定規(guī)則的分布在各個倉庫一定的數(shù)量,當(dāng)用戶下單的時候盡量從離用戶最近的倉庫發(fā)貨,這樣速度比較快并且距離也比較短,物流成本也比較低。但實際上會由于各種原因?qū)е履承┥唐穾齑鏀?shù)量分配的并不是很合理,可能南方的倉庫已經(jīng)賣沒了,北方的倉庫還積壓很多沒賣出去,這個時候為了讓商品盡快的賣出去,需要將這個商品從北方的倉庫調(diào)撥到南方的倉庫,這就是調(diào)撥的業(yè)務(wù)場景。

可以看到調(diào)撥是一個商品在兩個倉之間的周轉(zhuǎn),這就為管理增加了難度,完成一次調(diào)撥有三個步驟:發(fā)起調(diào)撥申請、調(diào)撥出庫、調(diào)撥入庫。

發(fā)起調(diào)撥申請:當(dāng)決定把商品A從北方倉調(diào)撥到南方倉的時候,首選需要發(fā)起一個申請,表示哪個商品從哪個倉調(diào)撥到哪個倉,調(diào)撥的數(shù)量是多少。

為了方便大家理解,我們舉個例子,將商品A從北方倉調(diào)撥到南方倉100個。當(dāng)發(fā)起調(diào)撥申請的時候,庫存系統(tǒng)會先在北方倉鎖定100個商品A的數(shù)量。庫存的變化如下:

55555

發(fā)起調(diào)撥前

6666

發(fā)起調(diào)撥后

看到這里有同學(xué)會奇怪為什么發(fā)起調(diào)撥的時候也要先將調(diào)撥數(shù)量進(jìn)行鎖定,因為如果不進(jìn)行鎖定的話極端情況下北方倉的這個商品可能突然就賣掉了950件,這時候倉庫只剩下了50個,倉庫就沒有辦法進(jìn)行100個商品的調(diào)撥,會影響商家的整體統(tǒng)籌安排,所以需要在發(fā)起調(diào)撥的時候預(yù)先鎖下,保證調(diào)撥可以正常進(jìn)行。

調(diào)撥出庫:即當(dāng)A商品從北方倉出庫的時候,這個時候我們需要將庫存數(shù)量進(jìn)行相應(yīng)的調(diào)整,調(diào)整后數(shù)量如下:

7777

將北方倉的實際庫存數(shù)量和鎖定數(shù)量都減掉100,可銷售的數(shù)量仍然是900。

調(diào)撥入南方倉

在這100個商品進(jìn)入到南方倉之前,我們看下南方倉的庫存數(shù)量,如下:

88888

當(dāng)這個100個單品進(jìn)入到南方倉之后,南方倉這個商品的數(shù)量會進(jìn)行調(diào)整,如下:

9999

實際數(shù)量和可售賣數(shù)量都變成了100。

至此我們完成了一次完成的調(diào)撥流程。這里面大家可以看到,其實庫存與倉庫之間交互的事件比較多,邏輯也比較復(fù)雜。上面只是簡單列舉了幾個比較核心的流程。實際生產(chǎn)中還有很多更細(xì)節(jié)的事件需要管理。例如,退貨的流程、換貨的流程、損益的流程等等。如果任何一個地方出現(xiàn)誤差,就會導(dǎo)致倉庫的數(shù)量與庫存的數(shù)量不一致。

如果出現(xiàn)不一致,那就是庫存系統(tǒng)的最大失敗,庫存系統(tǒng)就是用來管理庫存的,這就是它的職責(zé)。但是實際業(yè)務(wù)中由于復(fù)雜的邏輯會出現(xiàn)一部分商品庫存管理出現(xiàn)錯誤,這時候會導(dǎo)致兩種后果,一種是倉庫系統(tǒng)明明只有5個商品,庫存那邊計算成了10個。這樣可能會有10個用戶來購買,但是倉庫只有5個,會導(dǎo)致有5個用戶的商品不能發(fā)貨,這就是我們所謂的超賣。這種是比較嚴(yán)重的后果,用戶的體驗非常不友好。另外一種情況是倉庫里面還有10個商品,但是庫存系統(tǒng)計算成只有5個,這樣會導(dǎo)致商品少賣會造成商品在倉庫的積壓。所以倉庫跟庫存還有一個比較重要的邏輯就是對賬每天都要核對一下兩邊的庫存數(shù)量是否一致。

上面跟大家介紹了下庫存系統(tǒng)的大體業(yè)務(wù)邏輯,相信已經(jīng)有不少人已經(jīng)看暈了,后面再找時間跟大家介紹下如此復(fù)雜的庫存系統(tǒng)是如何實現(xiàn)的?這里需要解決的問題是如何保數(shù)據(jù)一致性?跨庫的事務(wù)如何解決?采用什么樣的策略進(jìn)行補償?對賬如何做?商詳?shù)恼埱罅勘容^大,如何保證庫存的性能?等等。有好的方案歡迎留言討論。

相關(guān)閱讀

電商技術(shù)解密:如何讓用戶快速地打開商品詳情頁?

電商技術(shù)解密之購物車

電商技術(shù)解密之跨店鋪促銷

 

本文由 @Nicole 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 在庫存調(diào)撥的時候有一個漏洞,在商品調(diào)撥入庫前,貨品的跟蹤處于系統(tǒng)監(jiān)控的真空狀態(tài)。在北方倉出庫后,在南方倉入庫前這批貨物在兩個倉庫系統(tǒng)之間都沒有數(shù)據(jù)可以查閱到這批貨物,這對商品的盤點是不利的。所以個人認(rèn)為在庫存系統(tǒng)中需要有在途庫存這個狀態(tài)。

    來自浙江 回復(fù)
    1. 在南方入庫前,北方的鎖定的100貨就是這批貨物;當(dāng)南方入庫后,鎖定的100件或釋放為0,南方的庫存為100;每個過程,肯定是能查閱到這批貨的。

      來自陜西 回復(fù)
    2. 你沒仔細(xì)看文章和我的回復(fù)哦~

      來自浙江 回復(fù)
    3. 我明白你的回復(fù),是我想的有問題 ?? 對于北方已經(jīng)出庫了,南方還未入庫的貨物在途過程是必須要監(jiān)控的。

      來自陜西 回復(fù)
    4. 哈哈,研發(fā)庫存和采購系統(tǒng)時的一點經(jīng)驗。歡迎交流,互相學(xué)習(xí)。

      來自浙江 回復(fù)
    5. 我們應(yīng)該是同一行業(yè)的 ??

      來自陜西 回復(fù)
  2. 這些應(yīng)該屬于WMS的范疇了吧

    來自北京 回復(fù)
  3. 請問下下面這些問題有相應(yīng)的介紹嗎:復(fù)雜的庫存系統(tǒng)是如何實現(xiàn)的?這里需要解決的問題是如何保數(shù)據(jù)一致性?跨庫的事務(wù)如何解決?采用什么樣的策略進(jìn)行補償?對賬如何做?表示幫助很大,希望老師能發(fā)更多的講解

    來自浙江 回復(fù)
  4. 還好做過ERP的實施

    來自江蘇 回復(fù)
  5. 還好自己開過天貓,能理解 ??

    來自安徽 回復(fù)
  6. 還好有基礎(chǔ),提到的這些都能夠理解看明白。 ??

    來自北京 回復(fù)
  7. 寫的很棒,知道商品庫存是怎么減的,又是什么時候鎖的了,這幾個問題好想知道,希望作者慷慨發(fā)表哦!“復(fù)雜的庫存系統(tǒng)是如何實現(xiàn)的?這里需要解決的問題是如何保數(shù)據(jù)一致性?跨庫的事務(wù)如何解決?采用什么樣的策略進(jìn)行補償?對賬如何做?商詳?shù)恼埱罅勘容^大,如何保證庫存的性能?”

    來自湖北 回復(fù)
  8. 退貨是否需要退回庫存呢?

    來自廣東 回復(fù)
    1. 退貨一般分很多種情況,在不影響二次銷售(也就是七天無理由退換貨)這種情況,是直接入庫操作的,下次正常銷售,但是如果影響二次銷售的,存在質(zhì)量問題的情況,又會有很多種處理方式,例如返廠維修、轉(zhuǎn)二手商品出售…….

      來自云南 回復(fù)
  9. 產(chǎn)品小白,能否解答下贈品出庫這一塊的邏輯呢?

    來自中國 回復(fù)
  10. 作者什么時候能再來一篇庫存管理如何實現(xiàn)的文章。這篇文章收獲頗豐,但是意猶未盡。另外 有個問題,下面有個朋友說 出庫減庫存是個坑,他們采用下架減庫存。請問下,為什么出庫減庫存是坑呢?具體的場景能幫忙介紹下嗎?

    來自北京 回復(fù)
  11. 實際上庫存鎖也是有 A 鎖,B 鎖,也就是預(yù)鎖/正式鎖的區(qū)分的,當(dāng)然就是對鎖的狀態(tài)進(jìn)行細(xì)分,這樣的話可以更詳細(xì)區(qū)分業(yè)務(wù)場景,和數(shù)據(jù)統(tǒng)計分析的有效性,當(dāng)然這個也增加了系統(tǒng)和流程的復(fù)雜性,雙刃劍也是沒辦法的。

    來自北京 回復(fù)
  12. 出庫減庫存也是一個坑,我們設(shè)計的是上架加庫存,下架減庫存

    來自北京 回復(fù)
    1. 出庫減庫存為什么是坑,能詳細(xì)解釋下嗎 謝謝

      來自北京 回復(fù)
    2. 這個是什么邏輯,上架加庫存,下架減庫存?你這樣真的是實際庫存嗎?你這個最多只是可賣商品數(shù);

      來自云南 回復(fù)
    3. 下架減庫存不合理,實際下架的商品還在倉庫內(nèi),處于出庫中狀態(tài),如果遇到取消訂單或者其他需要調(diào)用這批貨的情況就很難處理了

      來自廣東 回復(fù)
  13. 兩個系統(tǒng)有點類似會計上的權(quán)責(zé)發(fā)生制與收付實現(xiàn)制

    來自江蘇 回復(fù)
  14. 建議建立電商產(chǎn)品經(jīng)理微信群,我也是電商產(chǎn)品經(jīng)理,最近做erp

    回復(fù)
    1. 有聯(lián)系方式嗎?

      回復(fù)
    2. 群有了嗎?這個真的可以有,涉及到倉儲、庫存,學(xué)問太大,大家可以相互交流各自經(jīng)驗。

      來自廣東 回復(fù)
  15. 喜歡這種介紹實質(zhì)業(yè)務(wù)處理的文章,想入門想了解,就是要通過這些才行。

    來自廣東 回復(fù)
  16. 在調(diào)撥那塊必須加上在途這么一種狀態(tài),不然你在貨物從北倉到南倉的這段時間豈不是消失了。影響整體庫存不說,對財務(wù)也是一種誤導(dǎo),一般庫存都是和財務(wù)有直接關(guān)聯(lián)的,這種倉庫之間的調(diào)撥也不是常規(guī)出庫。

    回復(fù)
    1. 恩,看來你是行家,實際是有調(diào)撥在途,包括采購在途的。我為了讓大家更好理解,沒寫這塊,加上在途的話邏輯更復(fù)雜了。

      來自江蘇 回復(fù)
    2. 感謝查漏補缺

      來自浙江 回復(fù)
    3. 在途本身來說不算消失,整體計算的時候可以計算為在庫,因為不會發(fā)生庫存移動單價變化。

      來自四川 回復(fù)
    4. 庫存最重要的功能就在于管理貨物狀態(tài),通過貨物的狀態(tài)去控制前臺商品是否可以銷售(在途一般情況下是不可銷售,單庫存可見),同時貨物狀態(tài)的改變也會觸發(fā)財務(wù)系統(tǒng)對接的部分功能(應(yīng)收、應(yīng)付),庫存不單單是用來做貨物數(shù)量統(tǒng)計作用。

      來自廣東 回復(fù)
    5. :mrgreen:

      來自四川 回復(fù)
    6. 不錯。
      商品的狀態(tài)是需要定義的,不同的操作狀態(tài)也會自動變更,并與其它系統(tǒng)如財務(wù)、采購、物流等產(chǎn)生交互,不僅僅是入庫、出庫等狀態(tài)。

      來自重慶 回復(fù)