詳解:電商前端庫存邏輯的設(shè)計(jì)
本文主要對電商平臺的訂單系統(tǒng)相關(guān)庫存邏輯進(jìn)行了詳細(xì)的闡述,一起來文中看看~
一、庫存的概念
電商的業(yè)務(wù)場景中訂單的流程常常伴隨著庫存的變化;對于erp來說,庫存可能涉及入庫、出庫、分庫等操作,這里暫且不討論erp中庫存的處理邏輯,主要就電商平臺的訂單系統(tǒng)相關(guān)庫存邏輯進(jìn)行說明。
- 總庫存指:供應(yīng)商倉庫該商品的實(shí)際庫存;
- 凍結(jié)庫存指:訂單臨時(shí)占用的庫存,凍結(jié)庫存可以根據(jù)訂單取消或發(fā)貨等情況進(jìn)行釋放;
- 可用庫存指:即總庫存-凍結(jié)庫存,一般指在前端顯示且用戶可下單的最大數(shù)量。
庫存的使用場景:
- 常規(guī)訂單流程:需要運(yùn)用到總庫存,凍結(jié)庫存和可用庫存;
- 運(yùn)營活動:特價(jià)商品活動需要占用一定的庫存,以保證能有充足的庫存支撐活動的進(jìn)行;
- 贈品庫存:如果把贈品當(dāng)做一款SKU的情況下,即和正常下單路徑一樣,當(dāng)把贈品單獨(dú)出來的情況下,需要設(shè)置贈品庫存(在我們的業(yè)務(wù)系統(tǒng)中,贈品由商家手動添加并設(shè)置庫存),同時(shí)需要建立一套單獨(dú)的庫存處理體系。
二、常規(guī)訂單流程中庫存的處理
總庫存的數(shù)量可以同步ERP或人工設(shè)置,人工設(shè)置的情況下,供應(yīng)商點(diǎn)擊“確認(rèn)發(fā)貨”后減少,退款時(shí)若訂單已發(fā)貨則供應(yīng)商點(diǎn)擊“同意退款”/系統(tǒng)自動同意退款則增加,退貨時(shí)供應(yīng)商點(diǎn)擊“確認(rèn)收貨”/系統(tǒng)自動確認(rèn)收貨則增加。
同步ERP數(shù)據(jù)的條件下,總庫存可以不受訂單狀態(tài)的影響(值得注意的是:如果在ERP系統(tǒng)中,確認(rèn)發(fā)貨的節(jié)點(diǎn)和扣減總庫存的節(jié)點(diǎn)存在時(shí)間差的情況下,這個時(shí)間段,實(shí)際上會造成系統(tǒng)已扣減凍結(jié)庫存了,但是ERP總庫存不變,所以會造成可用庫存短時(shí)間偏大),也可以先扣減/增加總庫存,因?yàn)榭値焱娇隙〞采w之前修改后的數(shù)量。
凍結(jié)庫存在用戶從app下單時(shí)增加,在供應(yīng)商確認(rèn)發(fā)貨/取消訂單時(shí)減少,“待發(fā)貨”的訂單申請退款成功則減少。
另外,取消退款和退款失敗的情況下,對庫存無影響。
結(jié)合訂單流程的中各個節(jié)點(diǎn)進(jìn)一步說明:
用戶下單:下單時(shí)由于訂單生成之后需要預(yù)定一定的庫存,保證該訂單能發(fā)貨,所以需要增加對應(yīng)商品的凍結(jié)庫存;這里需要注意的是,不同的業(yè)務(wù)場景對于增加凍結(jié)庫存的節(jié)點(diǎn)定義不一樣。
一般來說在兩個節(jié)點(diǎn)考慮增加凍結(jié)庫存:一個是在生成訂單時(shí),一個是在付款成功時(shí)。
對于庫存有限,時(shí)間緊迫的下單場景來說(比如:秒殺),在付款成功的時(shí)候增加凍結(jié)庫存會比較合理,因?yàn)槲锤犊畹挠唵螘绊懙狡渌速徺I這款商品。但對于常規(guī)場景來說,在生成訂單時(shí)占用庫存會比較好,否則會影響用戶的下單體驗(yàn)(但是一定要有系統(tǒng)自動取消訂單的功能以釋放凍結(jié)庫存)。
確認(rèn)發(fā)貨:確認(rèn)發(fā)貨的動作可以是ERP訂單出庫的時(shí)候自動確認(rèn)發(fā)貨,也可以是手動確認(rèn)發(fā)貨。無論哪種場景,只要觸發(fā)發(fā)貨動作的話,均需扣減總庫存,同時(shí)扣減凍結(jié)庫存。若ERP自動同步總庫存的情況下,則ERP中會扣減總庫存并自動同步至系統(tǒng)。
取消訂單:首頁,在我們系統(tǒng)中定義在付款成功之前可以取消訂單,取消訂單的時(shí)候需要扣減凍結(jié)庫存(即去除庫存的占用)。
申請退款:若系統(tǒng)定義為商品付款后,發(fā)貨前可以申請退款的情況下,退款成功則需要扣減凍結(jié)庫存(商家操作“同意退款”或系統(tǒng)超時(shí)自動審核)。
申請退貨:若系統(tǒng)定義為商品發(fā)貨后,可以進(jìn)行申請退貨的情況下,退款成功且供應(yīng)商已收貨的情況下需要增加總庫存(商家操作“確認(rèn)收貨”或系統(tǒng)自動確認(rèn)收貨),若ERP自動同步庫存的情況下,則ERP中會增加總庫存并自動同步至系統(tǒng)。
附:下單流程圖
三、活動庫存的處理
實(shí)際做法:由于在數(shù)據(jù)庫中沒有活動庫存這個字段,導(dǎo)致原公式:可用庫存=總庫存-凍結(jié)庫存,無法統(tǒng)一修改;在實(shí)際開發(fā)中凍結(jié)庫存=普通商品凍結(jié)庫存+活動庫存之和,另外活動庫存仍將保留在活動表中,活動表中包括字段活動庫存,活動已用庫存。
1. 活動庫存概念
特價(jià)商品在設(shè)置活動時(shí),可設(shè)置活動庫存,目的為限制本商品以特價(jià)銷售的數(shù)量(設(shè)置的活動庫存不能大于總庫存),同時(shí)也保證參加活動的商品的數(shù)量,超出活動數(shù)量的商品(活動庫存用光的時(shí)候)將以原價(jià)購買。
2. 數(shù)據(jù)庫庫存相關(guān)字段
商品表相關(guān)字段:總庫存、凍結(jié)庫存;活動表相關(guān)字段:活動庫存、活動凍結(jié)庫存。
普通商品可用庫存=總庫存-凍結(jié)庫存-活動庫存之和
活動商品可用庫存=活動庫存-活動凍結(jié)庫存
(實(shí)際上在我們開發(fā)過程中,由于初期數(shù)據(jù)庫設(shè)計(jì)未能考慮到后面的拓展性,頁面取數(shù)據(jù)的時(shí)候,普通商品可用庫存=總庫存-凍結(jié)庫存,到后面增加促銷活動時(shí),這個公式若需要變動則影響太大了。所以我們保持原來的公式不變,讓凍結(jié)庫存=普通商品凍結(jié)庫存+活動庫存之和,這個問題凸顯了技術(shù)架構(gòu)的重要性。)
3. 下單過程中的庫存邏輯
活動創(chuàng)建成功,則對應(yīng)的商品需將活動庫存A件從總庫存B件中間分出 ,此時(shí)普通商品可用庫存為(B-A)件,特價(jià)商品活動可用庫存為A件。
用戶下單時(shí),以活動價(jià)購買商品C件,則普通商品可用庫存仍為(B-A)件,特價(jià)商品可用庫存為(A-C)件,活動凍凍結(jié)庫存為C件。
活動庫存不足/超出限購數(shù)量時(shí),下單D件,其中以特價(jià)購買的為D1件,以普通價(jià)購買的商品為D2件。則普通商品可用庫存為(B-A-D2)件,普通商品凍結(jié)庫存D2件,特價(jià)商品活動可用庫存為(A-D1),活動凍結(jié)庫存為D1件。
當(dāng)特價(jià)商品可用庫存不足時(shí),特價(jià)商品售完,所有商品都以普通價(jià)購買。當(dāng)活動期間若有訂單取消或退款、退貨,則活動庫存重新>0時(shí),可繼續(xù)以剩余的數(shù)量按特價(jià)購買商品。
4. 活動商品庫存扣減及回滾
活動商品售出之后,增加活動凍結(jié)庫存,活動有效期間取消訂單/退款成功則減少活動凍結(jié)庫存;普通商品的庫存不受影響,但是特價(jià)商品的可購數(shù)量需要增加/減少。
活動中若ERP由于發(fā)貨需要調(diào)整凍結(jié)庫存和總庫存,此時(shí)不管發(fā)貨的是不是特價(jià)商品,都是直接扣減凍結(jié)庫存和總庫存(因?yàn)镋RP沒有分庫而且?guī)齑孀詣油降那闆r下,總庫存一定會減少,那邊此時(shí)也需要扣減凍結(jié)庫存保證普通商品的可購數(shù)量保持不變,而活動商品的庫存不需要處理)。
活動結(jié)束:如活動庫存100件,賣了20件,則將該商品的活動庫存清零,且活動凍結(jié)庫存的數(shù)量合并到凍結(jié)庫存后活動凍結(jié)庫存也清零。最終凍結(jié)庫存加20,此外由于活動庫存變小,普通商品可用庫存也變大(等于是把活動庫存沒用完的還回去)。
四、贈品庫存的處理
贈品庫存基于我當(dāng)前的業(yè)務(wù)系統(tǒng)情況進(jìn)行說明,我們目前的贈品總庫存及贈品活動庫存都是在后臺手動設(shè)置的,所以是一套單獨(dú)的邏輯。
贈品表相關(guān)字段:贈品總庫存,贈品活動庫存可用;活動表相關(guān)字段:贈品活動庫存,贈品已用庫存;
贈品總庫存可人工設(shè)置,每個使用贈品的活動都會設(shè)置對應(yīng)的贈品活動庫存。贈品活動庫存可用=贈品總庫存-贈品活動庫存之和。(注意這個贈品庫存可用,是指在后臺添加贈品活動時(shí)可以設(shè)置的最大活動庫存數(shù)量)
購買商品時(shí),所送的贈品不能大于贈品活動庫存;贈品活動庫存不夠送的情況下,要友好提示客戶。當(dāng)提交訂單后,若有送贈品,則自動扣減對應(yīng)的贈品活動庫存和贈品總庫存。
活動有效期間,取消訂單/退貨,退款審核通過則自動增加贈品活動庫存和贈品總庫存;活動失效后,取消訂單/退貨,退款審核通過則自動增加贈品總庫存。活動失效時(shí),對應(yīng)的贈品活動庫存清零。
五、前端庫存展示
按正常邏輯:如果商品不存在特價(jià)/秒殺活動的情況下,直接以普通價(jià)購買,顯示普通商品可用庫存即可;如果商品存在秒殺/特價(jià)活動的情況下,應(yīng)該要顯示活動商品的庫存。
但是存在一種情況就是購買的一批商品中部分商品需要按照活動價(jià)算,剩余商品按照普通價(jià)算,那么這時(shí)候取普通商品可用庫存/活動商品可用庫存都是不對的。
所以最終我們在權(quán)衡之下,還是用了普通商品可用庫存+活動商品可用庫存之和(即總庫存-凍結(jié)庫存-活動凍結(jié)庫存之和)。
本文由 @不橈 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
好文必須點(diǎn)贊,學(xué)到了!
講得好,贊一下?。?/p>
咨詢一下,關(guān)于消費(fèi)者已經(jīng)收到貨后的退貨退款,您圖中是先審核再退款,退款成功后再生成退貨訂單,倉庫收貨是在哪個環(huán)節(jié)呢?如果是在生成退貨訂單之后,是否會造成倉庫積壓退貨產(chǎn)品呢?
有問題咨詢下:是否存在一個商品同時(shí)參加多個促銷活動,且多個促銷活動均有活動庫存,如果存在這種情況,扣庫存的時(shí)候,是不是就有問題了,不知道應(yīng)該扣哪個庫存
這種后臺不支持設(shè)置的,后臺能設(shè)置的是產(chǎn)品活動價(jià)+活動庫存+促銷截止時(shí)間,同一時(shí)間內(nèi)不會支持創(chuàng)建另一個促銷價(jià)
咨詢一個問題,對于多倉商家,活動庫存需要指定倉庫嗎,還是只指定一個總數(shù)。
舉例,要做一個秒殺活動,活動庫存總數(shù)100個,這100個是分派到各個倉庫呢,還是只是一個總數(shù);
如果是指定一個總數(shù);
1、普通商品購買時(shí)如何處理呢;每一筆交易難道都去檢查一下,對應(yīng)商品,所有倉的庫存總剩余嗎;
2、會不會出現(xiàn)一種情況,熱點(diǎn)地區(qū)的倉庫按照普通銷售賣太多了,秒殺的時(shí)候達(dá)不到促銷效果呢;
這個下單流程圖 能傳一份清晰的給我嗎 感謝
“活動中若ERP由于發(fā)貨需要調(diào)整凍結(jié)庫存和總庫存,此時(shí)不管發(fā)貨的是不是特價(jià)商品,都是直接扣減凍結(jié)庫存和總庫存(因?yàn)镋RP沒有分庫而且?guī)齑孀詣油降那闆r下,總庫存一定會減少,那邊此時(shí)也需要扣減凍結(jié)庫存保證普通商品的可購數(shù)量保持不變,而活動商品的庫存不需要處理)。”
您好,這一段沒太看懂。個人認(rèn)為活動中如果需要臨時(shí)調(diào)貨,應(yīng)當(dāng)增加活動庫存,同時(shí)減少普通商品庫存,而總庫存不變,凍結(jié)商品庫存也不應(yīng)當(dāng)改變(因?yàn)閮鼋Y(jié)商品庫存是用戶已經(jīng)下單購買的)。
ERP里是不存在設(shè)置活動價(jià)格和活動庫存的,ERP里只有總庫存和凍結(jié)庫存,它不管你拿這個產(chǎn)品來干啥?;顒訋齑嬖谏唐分信_完成設(shè)置
收!
我們后臺是沒有做凍結(jié)庫存這種邏輯的,在提交訂單扣減庫存、取消訂單、退款成功增加庫存的增減庫存是同樣時(shí),就只有一個總庫存,例如一個普通商品的總庫存為100個,設(shè)為秒殺商品,庫存為10個,普通商品和秒殺商品共用總庫存,如果普通商品比秒殺商品先賣完,則秒殺商品也不能秒殺了,前臺顯示已秒完,這種沒有凍結(jié)庫存的邏輯會引發(fā)什么問題么?
第一,就像你描述的,普通商品賣完之后,秒殺商品就沒得賣的,那你們秒殺商品庫存的意義僅僅在于限制了最大可秒數(shù)量,而不能保證本次活動的數(shù)量,自然就達(dá)不到引流的目的
第二,為什么我們系統(tǒng)引入了凍結(jié)庫存的概念:如果把系統(tǒng)按照“前臺”“中臺”“后臺”來區(qū)分的話,商家的ERP等于是后臺,ERP中的總庫存是真實(shí)庫存,erp中發(fā)貨了就是真實(shí)庫存減少了同時(shí)也扣減了總庫存,那么自然是不需要凍結(jié)庫存的;但是站在平臺方的角度,我的庫存同步于ERP的,但是下單之后且ERP未發(fā)貨之前,ERP的庫存不會減少,那么對于已下單的商品來說,要占用對應(yīng)數(shù)量的庫存(凍結(jié)庫存),同時(shí)也告訴其他客戶可以采購的數(shù)量減少了(即可用庫存),否則下單到發(fā)貨的這個時(shí)間差會導(dǎo)致商品超賣
感謝,受教受教
沒庫存照樣賣,對于秒殺只需要定好秒殺數(shù)量就行。沒有誰鐵定說沒庫存就不能秒殺,規(guī)則人定的,可以變的。沒庫存抓緊進(jìn)貨,這種情況PO的配合很重要。O(∩_∩)O~~
商品及時(shí)補(bǔ)貨這個在活動及運(yùn)營策略上的確是需要注意的點(diǎn),但是目前討論的問題是指系統(tǒng)庫存在前、中、后臺的增減流程邏輯合理性問題,不是指運(yùn)營及商品上的人為增減庫存
主要還是前臺庫存取自商品中臺,商品中臺庫存取自ERP,前臺和中臺可以頻繁交互,而中臺和ERP如果頻繁交互會比較耗資源。而且誠如作者回復(fù),會產(chǎn)生在兩次交互的中間空檔期導(dǎo)致前臺產(chǎn)品多賣,而erp實(shí)際庫存不夠的問題。
你好,有幾個疑問煩請賜教。
關(guān)于贈品庫存的處理,文章有提到“當(dāng)提交訂單后,若有送贈品,則自動扣減對應(yīng)的贈品活動庫存和贈品總庫存?!?br /> 1、“贈品可用庫存”這個名詞,按照前面2種(常規(guī)和活動)增扣庫存的名詞定義,功能為什么不類比它們的“xx商品可用庫存”;并且增加一個“贈品活動凍結(jié)庫存”呢?
這句話即變?yōu)?,“?dāng)提交訂單后,若有送贈品,則自動扣減對應(yīng)的贈品可用庫存,增加凍結(jié)庫存。”
2、按照你的思路,我理解為:贈品可用庫存=某一贈品活動預(yù)設(shè)的的庫存閾值,贈品活動庫存=該贈品活動的可用庫存,是否正確?
3、常規(guī)訂單,確認(rèn)發(fā)貨時(shí)“扣減總庫存,同時(shí)扣減凍結(jié)庫存”;贈品庫存的處理,提交訂單后,怎么就磨刀霍霍向贈品總庫存了呢?
關(guān)于第2點(diǎn),你的理解是正確的; 第三點(diǎn):因?yàn)槲覀冞@邊系統(tǒng)往ERP系統(tǒng)中同步訂單明細(xì)的時(shí)候,贈品不會同步過去;所以贈品就采用了一種簡單方式來處理; 沒有對于錯,只是因?yàn)檫@樣更符合我們的業(yè)務(wù)場景
好的,謝謝啦
您好,有個商品入庫的問題想請教下。
現(xiàn)在公司打算重新打造供應(yīng)鏈系統(tǒng),每個商品入庫的時(shí)候都需要按照后臺系統(tǒng)規(guī)則重新貼條形碼。
我的問題是應(yīng)該買什么樣的機(jī)器才能按照系統(tǒng)規(guī)則生成對應(yīng)的條形碼?
這個機(jī)器怎么連接到后臺系統(tǒng),在入庫時(shí)按照采購單以及sku信息實(shí)時(shí)去生成條形碼?
對于ERP的商品入庫這一塊沒有做過深入了解,所以提幾條建議僅供參考:
1,條形碼與商品是一一對應(yīng)的,這個應(yīng)該是由廠家去報(bào)備申請,所以你們肯定不是后臺按照一定的規(guī)則去生成條形碼
2,市場上有對應(yīng)的掃條槍,按照我的理解:每個掃碼槍都會有一個獨(dú)特的設(shè)備ID號,而你們的erp需要先有一個條形碼庫,條形碼庫應(yīng)該至少包括商品ID和條形碼兩個字段,那么在使用機(jī)器進(jìn)行掃碼并輸入對應(yīng)的數(shù)量的時(shí)候,掃碼槍可以對商品上的條形碼進(jìn)行解析,erp就可以獲取到哪個商品進(jìn)貨了多少數(shù)量;但是需要注意的是進(jìn)貨的信息還包括商品的生成日期,有效期,這些信息應(yīng)該是不包含在條形碼內(nèi)的
條形碼是和商品對應(yīng)的,但是存在的問題是有些商品廠家存在一個條形碼對應(yīng)多個SKU的情況,所以就沒有辦法按照商品條碼掃碼入庫。
這么看來應(yīng)該是廠家有問題呢,條形碼和SKU必須是一一對應(yīng)的,否則很難開展后續(xù)的入庫工作呀