電商技術(shù)解密之庫(kù)存系統(tǒng)
今天來(lái)跟大家聊下電商平臺(tái)里的庫(kù)存系統(tǒng),相信大家對(duì)庫(kù)存系統(tǒng)最直觀的感受就是商詳頁(yè)上是否顯示“加入購(gòu)物車(chē)”或者是“到貨通知”。只要能加入購(gòu)物車(chē)就表示有庫(kù)存,顯示到貨通知就表示沒(méi)有庫(kù)存了,并沒(méi)有覺(jué)得這里面有多么的復(fù)雜。今天來(lái)跟大家一起解密下庫(kù)存系統(tǒng),來(lái)看一看是不是真的如大家想象中那么的簡(jiǎn)單。
庫(kù)存系統(tǒng)的作用是什么?
最重要的作用就是管理好各個(gè)商品的實(shí)時(shí)庫(kù)存數(shù)據(jù),及時(shí)告訴用戶當(dāng)前商品是否可以購(gòu)買(mǎi)?還可以購(gòu)買(mǎi)幾件。
為了能夠更清楚的介紹庫(kù)存系統(tǒng)是如何管理商品庫(kù)存數(shù)據(jù)的,這里需要先簡(jiǎn)單給大家介紹另外一個(gè)系統(tǒng),叫做倉(cāng)庫(kù)系統(tǒng)。估計(jì)很多人分不清倉(cāng)庫(kù)系統(tǒng)跟庫(kù)存系統(tǒng)之間的關(guān)系是什么?
倉(cāng)庫(kù)系統(tǒng)實(shí)際真正管理的是物理倉(cāng)庫(kù)里面的庫(kù)存的數(shù)量。我們經(jīng)常聽(tīng)說(shuō)的京東亞洲一號(hào)倉(cāng)等等這些大型的倉(cāng)庫(kù),由于面積非常大,里面的商品數(shù)量也很多,所以需要有一套系統(tǒng)來(lái)幫助管理實(shí)體倉(cāng)里面的庫(kù)存的數(shù)量。
簡(jiǎn)單來(lái)說(shuō)就是管理這個(gè)倉(cāng)庫(kù)一天有多少商品進(jìn)入到這個(gè)倉(cāng)庫(kù)里面來(lái),每個(gè)商品的數(shù)量有多少?每天從這個(gè)倉(cāng)庫(kù)發(fā)出去多少個(gè)商品?倉(cāng)庫(kù)里面每個(gè)商品還剩下多少?剩下的這些商品分別存儲(chǔ)是倉(cāng)庫(kù)的哪個(gè)儲(chǔ)位上等等。
那么有了倉(cāng)庫(kù)系統(tǒng)就可以管理商品的數(shù)量,那么為什么還要有庫(kù)存系統(tǒng)呢?
下面給大家舉個(gè)例子,讓大家了解下倉(cāng)庫(kù)系統(tǒng)和庫(kù)存系統(tǒng)之間的區(qū)別是什么?當(dāng)某個(gè)商品A在倉(cāng)庫(kù)里面有10個(gè)數(shù)量的時(shí)候,倉(cāng)庫(kù)系統(tǒng)負(fù)責(zé)管理這個(gè)商品A的數(shù)量,以及它的位置信息。那么倉(cāng)庫(kù)里面這個(gè)商品A在網(wǎng)站上是不是一定可以允許賣(mài)10個(gè)呢?這是不一定的。因?yàn)閭}(cāng)庫(kù)里面有10個(gè)商品A,可能網(wǎng)站上已經(jīng)有3個(gè)被用戶買(mǎi)掉了,只不過(guò)這3個(gè)商品還沒(méi)有出庫(kù),所以在倉(cāng)庫(kù)系統(tǒng)里面看這個(gè)商品A目前還有10個(gè)在倉(cāng)庫(kù),但實(shí)際上已經(jīng)賣(mài)掉3個(gè),網(wǎng)站上其實(shí)只能賣(mài)7個(gè),這種可賣(mài)的數(shù)量倉(cāng)庫(kù)系統(tǒng)是區(qū)分不出來(lái)的,它只是負(fù)責(zé)管理在當(dāng)前時(shí)刻倉(cāng)庫(kù)里面一共有多少庫(kù)存,并不區(qū)分商品的狀態(tài)信息。所以庫(kù)存系統(tǒng)主要是用來(lái)解決這個(gè)問(wèn)題,經(jīng)過(guò)一系列的計(jì)算告訴用戶當(dāng)前時(shí)刻商品A一共還可以買(mǎi)幾個(gè)。倉(cāng)庫(kù)系統(tǒng)管理的是倉(cāng)庫(kù)里面商品的實(shí)際數(shù)量,庫(kù)存系統(tǒng)管理的是商品的可銷(xiāo)售數(shù)量,這就是庫(kù)存系統(tǒng)和倉(cāng)庫(kù)系統(tǒng)主要的區(qū)別。
在電商網(wǎng)站的商詳頁(yè)上展示當(dāng)前商品可售賣(mài)數(shù)量對(duì)庫(kù)存系統(tǒng)來(lái)說(shuō)是相對(duì)比較簡(jiǎn)單的,有貨的時(shí)候顯示當(dāng)前商品的數(shù)量,沒(méi)貨的時(shí)候告訴前端此商品庫(kù)存為0,前端展示到貨通知,如下圖:
庫(kù)存跟倉(cāng)庫(kù)系統(tǒng)之間的交互
比較復(fù)雜的是如何對(duì)接倉(cāng)庫(kù)的各種出入庫(kù)事件來(lái)管理商品的數(shù)量。下面來(lái)跟你介紹一下庫(kù)存跟倉(cāng)庫(kù)系統(tǒng)之間交互的幾個(gè)比較重要的事件。
采購(gòu)入庫(kù)
當(dāng)B2C電商網(wǎng)站類(lèi)似京東、當(dāng)當(dāng)這種想賣(mài)一個(gè)商品的時(shí)候首選要發(fā)起采購(gòu)計(jì)劃,這時(shí)候需要在倉(cāng)庫(kù)系統(tǒng)里面建立一個(gè)采購(gòu)單。目的是記錄哪個(gè)商品采購(gòu)了多少數(shù)量,將會(huì)把這批貨采購(gòu)到哪個(gè)倉(cāng)庫(kù)里面去。
采購(gòu)單發(fā)起之后過(guò)一段時(shí)間實(shí)際的商品會(huì)入庫(kù)。這時(shí)候倉(cāng)庫(kù)系統(tǒng)會(huì)把相應(yīng)的商品數(shù)量進(jìn)行更改。這個(gè)時(shí)候倉(cāng)庫(kù)系統(tǒng)同時(shí)會(huì)通知庫(kù)存系統(tǒng),告訴庫(kù)存系統(tǒng)某個(gè)商品入庫(kù)了,數(shù)量是多少,庫(kù)存系統(tǒng)會(huì)把相應(yīng)的數(shù)量加上。
采購(gòu)入庫(kù)時(shí)序圖
下單鎖庫(kù)存
商品采購(gòu)入庫(kù)之后庫(kù)存系統(tǒng)就會(huì)增加相應(yīng)的數(shù)量,這時(shí)候在網(wǎng)站端這個(gè)商品就可以開(kāi)始賣(mài)了。當(dāng)有人購(gòu)買(mǎi)這個(gè)商品的時(shí)候,庫(kù)存系統(tǒng)會(huì)將這個(gè)商品數(shù)量先鎖定。然后等待倉(cāng)庫(kù)出貨。當(dāng)倉(cāng)庫(kù)真正出貨的時(shí)候,庫(kù)存系統(tǒng)才會(huì)將相應(yīng)的數(shù)量減掉。這里解釋下庫(kù)存系統(tǒng)為什么要有一個(gè)鎖定的狀態(tài)?
還是舉個(gè)例子來(lái)說(shuō)。當(dāng)一個(gè)手機(jī)A采購(gòu)入庫(kù)10個(gè)的時(shí)候,庫(kù)存系統(tǒng)也會(huì)顯示這個(gè)手機(jī)在庫(kù)存系統(tǒng)里面有10個(gè)數(shù)量。也就是說(shuō)網(wǎng)站上可以銷(xiāo)售的數(shù)量為10。
當(dāng)一個(gè)用戶買(mǎi)了一個(gè)手機(jī)A的時(shí)候。庫(kù)存系統(tǒng)會(huì)將這個(gè)商品先鎖定一件。表示有一個(gè)商品已經(jīng)有人付錢(qián)要進(jìn)行購(gòu)買(mǎi)了,這個(gè)時(shí)候庫(kù)存系統(tǒng)會(huì)告訴網(wǎng)站端此商品目前能購(gòu)買(mǎi)的數(shù)量為9個(gè)。
訂單取消解鎖庫(kù)存
當(dāng)用戶下了單買(mǎi)了手機(jī)A之后,過(guò)了一會(huì)可能由于種種原因后悔了,或者是不想買(mǎi)了或者是想換一個(gè)更好的手機(jī),這個(gè)時(shí)候用戶會(huì)將這個(gè)訂單取消掉。在倉(cāng)庫(kù)沒(méi)有將這個(gè)手機(jī)發(fā)出去之前用戶是可以取消的,這個(gè)時(shí)候我們需要將剛剛鎖定的數(shù)量解鎖掉,變化后的庫(kù)存數(shù)量如下:
出庫(kù)扣庫(kù)存
如果上面用戶沒(méi)有取消訂單,那么倉(cāng)庫(kù)里面的工作人員將這個(gè)商品找到、打好包裹、寄出去之后,倉(cāng)庫(kù)系統(tǒng)會(huì)通知庫(kù)存系統(tǒng)這個(gè)手機(jī)已經(jīng)出庫(kù),這個(gè)時(shí)候庫(kù)存系統(tǒng)需要將數(shù)量減少,具體變化如下:
倉(cāng)庫(kù)的實(shí)際數(shù)量變?yōu)椋?,鎖定數(shù)量變?yōu)椋?,可售賣(mài)的數(shù)量仍然為9。
倉(cāng)庫(kù)間調(diào)撥
這個(gè)純屬電商倉(cāng)庫(kù)管理的后臺(tái)流程,普通用戶是感知不到的,稍微大一點(diǎn)的商家或者自營(yíng)平臺(tái),類(lèi)似京東、蘇寧這種自建倉(cāng)庫(kù)的平臺(tái)商家都會(huì)有很多個(gè)倉(cāng)庫(kù)分布式在全國(guó)各地,商品也是有一定規(guī)則的分布在各個(gè)倉(cāng)庫(kù)一定的數(shù)量,當(dāng)用戶下單的時(shí)候盡量從離用戶最近的倉(cāng)庫(kù)發(fā)貨,這樣速度比較快并且距離也比較短,物流成本也比較低。但實(shí)際上會(huì)由于各種原因?qū)е履承┥唐穾?kù)存數(shù)量分配的并不是很合理,可能南方的倉(cāng)庫(kù)已經(jīng)賣(mài)沒(méi)了,北方的倉(cāng)庫(kù)還積壓很多沒(méi)賣(mài)出去,這個(gè)時(shí)候?yàn)榱俗屔唐繁M快的賣(mài)出去,需要將這個(gè)商品從北方的倉(cāng)庫(kù)調(diào)撥到南方的倉(cāng)庫(kù),這就是調(diào)撥的業(yè)務(wù)場(chǎng)景。
可以看到調(diào)撥是一個(gè)商品在兩個(gè)倉(cāng)之間的周轉(zhuǎn),這就為管理增加了難度,完成一次調(diào)撥有三個(gè)步驟:發(fā)起調(diào)撥申請(qǐng)、調(diào)撥出庫(kù)、調(diào)撥入庫(kù)。
發(fā)起調(diào)撥申請(qǐng):當(dāng)決定把商品A從北方倉(cāng)調(diào)撥到南方倉(cāng)的時(shí)候,首選需要發(fā)起一個(gè)申請(qǐng),表示哪個(gè)商品從哪個(gè)倉(cāng)調(diào)撥到哪個(gè)倉(cāng),調(diào)撥的數(shù)量是多少。
為了方便大家理解,我們舉個(gè)例子,將商品A從北方倉(cāng)調(diào)撥到南方倉(cāng)100個(gè)。當(dāng)發(fā)起調(diào)撥申請(qǐng)的時(shí)候,庫(kù)存系統(tǒng)會(huì)先在北方倉(cāng)鎖定100個(gè)商品A的數(shù)量。庫(kù)存的變化如下:
發(fā)起調(diào)撥前
發(fā)起調(diào)撥后
看到這里有同學(xué)會(huì)奇怪為什么發(fā)起調(diào)撥的時(shí)候也要先將調(diào)撥數(shù)量進(jìn)行鎖定,因?yàn)槿绻贿M(jìn)行鎖定的話極端情況下北方倉(cāng)的這個(gè)商品可能突然就賣(mài)掉了950件,這時(shí)候倉(cāng)庫(kù)只剩下了50個(gè),倉(cāng)庫(kù)就沒(méi)有辦法進(jìn)行100個(gè)商品的調(diào)撥,會(huì)影響商家的整體統(tǒng)籌安排,所以需要在發(fā)起調(diào)撥的時(shí)候預(yù)先鎖下,保證調(diào)撥可以正常進(jìn)行。
調(diào)撥出庫(kù):即當(dāng)A商品從北方倉(cāng)出庫(kù)的時(shí)候,這個(gè)時(shí)候我們需要將庫(kù)存數(shù)量進(jìn)行相應(yīng)的調(diào)整,調(diào)整后數(shù)量如下:
將北方倉(cāng)的實(shí)際庫(kù)存數(shù)量和鎖定數(shù)量都減掉100,可銷(xiāo)售的數(shù)量仍然是900。
調(diào)撥入南方倉(cāng)
在這100個(gè)商品進(jìn)入到南方倉(cāng)之前,我們看下南方倉(cāng)的庫(kù)存數(shù)量,如下:
當(dāng)這個(gè)100個(gè)單品進(jìn)入到南方倉(cāng)之后,南方倉(cāng)這個(gè)商品的數(shù)量會(huì)進(jìn)行調(diào)整,如下:
實(shí)際數(shù)量和可售賣(mài)數(shù)量都變成了100。
至此我們完成了一次完成的調(diào)撥流程。這里面大家可以看到,其實(shí)庫(kù)存與倉(cāng)庫(kù)之間交互的事件比較多,邏輯也比較復(fù)雜。上面只是簡(jiǎn)單列舉了幾個(gè)比較核心的流程。實(shí)際生產(chǎn)中還有很多更細(xì)節(jié)的事件需要管理。例如,退貨的流程、換貨的流程、損益的流程等等。如果任何一個(gè)地方出現(xiàn)誤差,就會(huì)導(dǎo)致倉(cāng)庫(kù)的數(shù)量與庫(kù)存的數(shù)量不一致。
如果出現(xiàn)不一致,那就是庫(kù)存系統(tǒng)的最大失敗,庫(kù)存系統(tǒng)就是用來(lái)管理庫(kù)存的,這就是它的職責(zé)。但是實(shí)際業(yè)務(wù)中由于復(fù)雜的邏輯會(huì)出現(xiàn)一部分商品庫(kù)存管理出現(xiàn)錯(cuò)誤,這時(shí)候會(huì)導(dǎo)致兩種后果,一種是倉(cāng)庫(kù)系統(tǒng)明明只有5個(gè)商品,庫(kù)存那邊計(jì)算成了10個(gè)。這樣可能會(huì)有10個(gè)用戶來(lái)購(gòu)買(mǎi),但是倉(cāng)庫(kù)只有5個(gè),會(huì)導(dǎo)致有5個(gè)用戶的商品不能發(fā)貨,這就是我們所謂的超賣(mài)。這種是比較嚴(yán)重的后果,用戶的體驗(yàn)非常不友好。另外一種情況是倉(cāng)庫(kù)里面還有10個(gè)商品,但是庫(kù)存系統(tǒng)計(jì)算成只有5個(gè),這樣會(huì)導(dǎo)致商品少賣(mài)會(huì)造成商品在倉(cāng)庫(kù)的積壓。所以倉(cāng)庫(kù)跟庫(kù)存還有一個(gè)比較重要的邏輯就是對(duì)賬每天都要核對(duì)一下兩邊的庫(kù)存數(shù)量是否一致。
上面跟大家介紹了下庫(kù)存系統(tǒng)的大體業(yè)務(wù)邏輯,相信已經(jīng)有不少人已經(jīng)看暈了,后面再找時(shí)間跟大家介紹下如此復(fù)雜的庫(kù)存系統(tǒng)是如何實(shí)現(xiàn)的?這里需要解決的問(wèn)題是如何保數(shù)據(jù)一致性?跨庫(kù)的事務(wù)如何解決?采用什么樣的策略進(jìn)行補(bǔ)償?對(duì)賬如何做?商詳?shù)恼?qǐng)求量比較大,如何保證庫(kù)存的性能?等等。有好的方案歡迎留言討論。
相關(guān)閱讀
電商技術(shù)解密:如何讓用戶快速地打開(kāi)商品詳情頁(yè)?
本文由 @Nicole 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
在庫(kù)存調(diào)撥的時(shí)候有一個(gè)漏洞,在商品調(diào)撥入庫(kù)前,貨品的跟蹤處于系統(tǒng)監(jiān)控的真空狀態(tài)。在北方倉(cāng)出庫(kù)后,在南方倉(cāng)入庫(kù)前這批貨物在兩個(gè)倉(cāng)庫(kù)系統(tǒng)之間都沒(méi)有數(shù)據(jù)可以查閱到這批貨物,這對(duì)商品的盤(pán)點(diǎn)是不利的。所以個(gè)人認(rèn)為在庫(kù)存系統(tǒng)中需要有在途庫(kù)存這個(gè)狀態(tài)。
在南方入庫(kù)前,北方的鎖定的100貨就是這批貨物;當(dāng)南方入庫(kù)后,鎖定的100件或釋放為0,南方的庫(kù)存為100;每個(gè)過(guò)程,肯定是能查閱到這批貨的。
你沒(méi)仔細(xì)看文章和我的回復(fù)哦~
我明白你的回復(fù),是我想的有問(wèn)題 ?? 對(duì)于北方已經(jīng)出庫(kù)了,南方還未入庫(kù)的貨物在途過(guò)程是必須要監(jiān)控的。
哈哈,研發(fā)庫(kù)存和采購(gòu)系統(tǒng)時(shí)的一點(diǎn)經(jīng)驗(yàn)。歡迎交流,互相學(xué)習(xí)。
我們應(yīng)該是同一行業(yè)的 ??
這些應(yīng)該屬于WMS的范疇了吧
請(qǐng)問(wèn)下下面這些問(wèn)題有相應(yīng)的介紹嗎:復(fù)雜的庫(kù)存系統(tǒng)是如何實(shí)現(xiàn)的?這里需要解決的問(wèn)題是如何保數(shù)據(jù)一致性?跨庫(kù)的事務(wù)如何解決?采用什么樣的策略進(jìn)行補(bǔ)償?對(duì)賬如何做?表示幫助很大,希望老師能發(fā)更多的講解
還好做過(guò)ERP的實(shí)施
還好自己開(kāi)過(guò)天貓,能理解 ??
還好有基礎(chǔ),提到的這些都能夠理解看明白。 ??
寫(xiě)的很棒,知道商品庫(kù)存是怎么減的,又是什么時(shí)候鎖的了,這幾個(gè)問(wèn)題好想知道,希望作者慷慨發(fā)表哦!“復(fù)雜的庫(kù)存系統(tǒng)是如何實(shí)現(xiàn)的?這里需要解決的問(wèn)題是如何保數(shù)據(jù)一致性?跨庫(kù)的事務(wù)如何解決?采用什么樣的策略進(jìn)行補(bǔ)償?對(duì)賬如何做?商詳?shù)恼?qǐng)求量比較大,如何保證庫(kù)存的性能?”
退貨是否需要退回庫(kù)存呢?
退貨一般分很多種情況,在不影響二次銷(xiāo)售(也就是七天無(wú)理由退換貨)這種情況,是直接入庫(kù)操作的,下次正常銷(xiāo)售,但是如果影響二次銷(xiāo)售的,存在質(zhì)量問(wèn)題的情況,又會(huì)有很多種處理方式,例如返廠維修、轉(zhuǎn)二手商品出售…….
產(chǎn)品小白,能否解答下贈(zèng)品出庫(kù)這一塊的邏輯呢?
作者什么時(shí)候能再來(lái)一篇庫(kù)存管理如何實(shí)現(xiàn)的文章。這篇文章收獲頗豐,但是意猶未盡。另外 有個(gè)問(wèn)題,下面有個(gè)朋友說(shuō) 出庫(kù)減庫(kù)存是個(gè)坑,他們采用下架減庫(kù)存。請(qǐng)問(wèn)下,為什么出庫(kù)減庫(kù)存是坑呢?具體的場(chǎng)景能幫忙介紹下嗎?
實(shí)際上庫(kù)存鎖也是有 A 鎖,B 鎖,也就是預(yù)鎖/正式鎖的區(qū)分的,當(dāng)然就是對(duì)鎖的狀態(tài)進(jìn)行細(xì)分,這樣的話可以更詳細(xì)區(qū)分業(yè)務(wù)場(chǎng)景,和數(shù)據(jù)統(tǒng)計(jì)分析的有效性,當(dāng)然這個(gè)也增加了系統(tǒng)和流程的復(fù)雜性,雙刃劍也是沒(méi)辦法的。
出庫(kù)減庫(kù)存也是一個(gè)坑,我們?cè)O(shè)計(jì)的是上架加庫(kù)存,下架減庫(kù)存
出庫(kù)減庫(kù)存為什么是坑,能詳細(xì)解釋下嗎 謝謝
這個(gè)是什么邏輯,上架加庫(kù)存,下架減庫(kù)存?你這樣真的是實(shí)際庫(kù)存嗎?你這個(gè)最多只是可賣(mài)商品數(shù);
下架減庫(kù)存不合理,實(shí)際下架的商品還在倉(cāng)庫(kù)內(nèi),處于出庫(kù)中狀態(tài),如果遇到取消訂單或者其他需要調(diào)用這批貨的情況就很難處理了
兩個(gè)系統(tǒng)有點(diǎn)類(lèi)似會(huì)計(jì)上的權(quán)責(zé)發(fā)生制與收付實(shí)現(xiàn)制
建議建立電商產(chǎn)品經(jīng)理微信群,我也是電商產(chǎn)品經(jīng)理,最近做erp
有聯(lián)系方式嗎?
群有了嗎?這個(gè)真的可以有,涉及到倉(cāng)儲(chǔ)、庫(kù)存,學(xué)問(wèn)太大,大家可以相互交流各自經(jīng)驗(yàn)。
喜歡這種介紹實(shí)質(zhì)業(yè)務(wù)處理的文章,想入門(mén)想了解,就是要通過(guò)這些才行。
在調(diào)撥那塊必須加上在途這么一種狀態(tài),不然你在貨物從北倉(cāng)到南倉(cāng)的這段時(shí)間豈不是消失了。影響整體庫(kù)存不說(shuō),對(duì)財(cái)務(wù)也是一種誤導(dǎo),一般庫(kù)存都是和財(cái)務(wù)有直接關(guān)聯(lián)的,這種倉(cāng)庫(kù)之間的調(diào)撥也不是常規(guī)出庫(kù)。
恩,看來(lái)你是行家,實(shí)際是有調(diào)撥在途,包括采購(gòu)在途的。我為了讓大家更好理解,沒(méi)寫(xiě)這塊,加上在途的話邏輯更復(fù)雜了。
感謝查漏補(bǔ)缺
在途本身來(lái)說(shuō)不算消失,整體計(jì)算的時(shí)候可以計(jì)算為在庫(kù),因?yàn)椴粫?huì)發(fā)生庫(kù)存移動(dòng)單價(jià)變化。
庫(kù)存最重要的功能就在于管理貨物狀態(tài),通過(guò)貨物的狀態(tài)去控制前臺(tái)商品是否可以銷(xiāo)售(在途一般情況下是不可銷(xiāo)售,單庫(kù)存可見(jiàn)),同時(shí)貨物狀態(tài)的改變也會(huì)觸發(fā)財(cái)務(wù)系統(tǒng)對(duì)接的部分功能(應(yīng)收、應(yīng)付),庫(kù)存不單單是用來(lái)做貨物數(shù)量統(tǒng)計(jì)作用。
不錯(cuò)。
商品的狀態(tài)是需要定義的,不同的操作狀態(tài)也會(huì)自動(dòng)變更,并與其它系統(tǒng)如財(cái)務(wù)、采購(gòu)、物流等產(chǎn)生交互,不僅僅是入庫(kù)、出庫(kù)等狀態(tài)。