關于訂單管理中的拆單一直以來都想寫一下,但每次計劃寫的時候卻感覺拆單更多的是在其程序處理邏輯上,想描述清楚或者說其具體的實現還是挺難的,要不就是畫個程序處理流程圖,與我想表述的又不太一樣。
但總是止步不前,永遠也弄不出來,利用兩天時間整出來這一篇,希望您看過能夠清楚拆單是什麼,在拆單的流程中系統都做了哪些工作,它的一些規則有哪些等等!
什麼是拆單?
在網上購買商品下單成功後,過一段時間再次浏覽時,有時會發現你的訂單會變成兩個或多個,這就是系統做了拆單而導緻的。
拆單,就是将一個大的訂單依據某些規則的集合,将其分解成兩個或多個子訂單的過程,原來的訂單稱之為父訂單。
拆單的重要性通常我們所說的拆單一般情況下是指用戶的銷售訂單,但在實際業務中,拆單情況随處可見,如采購訂單的拆分、調撥單的拆分等等。本篇後續都是以銷售訂單的拆單講述的,請知悉!
在互聯網電商系統中銷售訂單是與C端用戶關聯最緊密的,單據量是最大的,是影響用戶體驗的,且拆單的規則相對來說是比較複雜的。
折單要求數據準确、及時,因為拆單後的子訂單是需要流入到倉儲進行生産作業的,它會進行揀貨、出庫、配送等一系統的流程,它也是後續财務系統對賬或結算、數據分析的重要數據來源。
拆單的場景用戶在APP等平台下單後,由于商品的庫存數量不滿足,可能在前端進行拆單,即用戶自己選擇是否需要拆單,可以按最快送達或最小拆單的規則進行。
看到這裡您可能會有點疑惑,庫存不足時還能下單嗎?現在很多網站上當商品不足時用戶需要自行修改數量,然後才能下單。
确實如此,現在這種場景少了,但是有的商家為了提升客戶體驗,對于商品可以多倉發貨時。因為單倉缺貨而需要拆單時,由用戶來選擇決定是否購買,這應該也是為了提高轉化率的一種方式。
還有一種場景,訂單涉及多商家,需要單獨付款的情況下,前端會直接進行拆單,但現在基本上都是合單支付了,這種拆單會使用戶體驗降低。
此外,有的商家既賣國内商品,也賣海淘商品,如果都混在一塊,那麼在支付前是需要進行拆單的,因為海淘商品要求用戶的身份認證等信息的檢驗。
在多數情況下,都是用戶下單完成後,由系統進行在後台進行拆單,拆單是要結合公司業務場景去考慮的。
用戶購買涉及幾種拆單拆單除了以上幾種場景,對于用戶下單時系統上還會有什麼操作嗎?
有一種情況即用戶下單時系統要根據用戶選擇的收貨地址、商品等信息,判斷是否有庫存,訂單應該歸屬哪個倉庫,是否可以購買等,這個服務嚴格來講應該歸屬于商品庫存服務,但是也可以将其稱為預拆單。
預拆單一般是調用倉儲服務進行庫存的判斷,同時還要根據促銷活動進行一些優惠計算,所有的這些都需要前端系統在處理時對訂單商品進行一些标識,以便當用戶支付成功後,訂單流轉到OMS系統進行物理拆單。
前端用戶下單成功後,訂單經過OMS的拉單服務快速流轉到訂單中心,便開始訂單的再生成過程,訂單拆分後的子訂單會展示給用戶,原訂單一般不需要再展示,便于用戶跟蹤和查看。
所以在從用戶角度來看,一種是可以直接看到結果的拆單和一種無感知的預拆單過程。
拆單的時點與地點預拆單是伴随着購物流程進行的,這裡不多讨論,因為這個究竟是否屬于拆單也是要看我們如何定義。正常情況下用戶選購商品完成後,系統不會拆單,因為用戶有可能取消訂單或未支付成功。
拆單的時點是要在 “訂單支付成功”後進行,且需要前端訂單已經流轉到後端生産庫,在訂單中心進行處理。
在前面有一種場景,如果購物中心不能合并支付時,在購物車中便拆分為幾個訂單,這時的拆單可以定義為一次拆單,也可以歸屬于購物流程,因為用戶不提交就不會生成訂單号,不會保存各個訂單的數據。
在用戶支付成功後,各個訂單同樣是要向後台流轉,經過拆單服務的處理才可以繼續進行下面的生産。
在前面讨論拆單場景時提到一種缺貨拆單,這種場景的拆單是在用戶下單支付成功後,訂單有可能已經拆分為不同的子訂單,但因某種原因倉庫無貨而導緻的拆單。
這時拆單的時點是靈活的,一般是在客服系統中,根據用戶的反饋确定是否拆單的。
缺貨是影響用戶體驗的,但是缺貨是始終客觀存在的。
拆單分幾級
從上圖看,拆單應該為三級,即用戶創建的訂單為父訂單,然後經過拆單服務正常的分為多個子訂單為第二級,後續因為缺貨等原因子訂單再次拆分為子(孫)訂單。
在數據設計上,一般情況子訂單與父訂單的關聯都通過ParentID來進行關聯,但三級以上時,涉及原始訂單的查詢較麻煩。
具體看數據結構如何設計了,可以再增加一個原始訂單号來記錄最初的訂單号,方便統計查詢等,負責拆單服務的同學可以詳細讨論下。
為了避免訂單的複雜度及系統的查詢、統計、分析等數據處理的難度,訂單最好最多到三級,不宜過多。
拆單狀态以前專門梳理過訂單狀态的文章,詳見《訂單信息與狀态流轉看這個應該足夠了!》,在拆單過程中也涉及訂單狀态的變換。
- 當父訂單拆分為子訂單後,子訂單生效,父訂單應該置為無效。
- 子訂單或父訂單經過缺貨拆單後,原訂單狀态是無效還是其它?
- 訂單拆單後狀态應該置為“待下發”即需要通過下發服務,将訂單推送給倉庫發貨。
- 如果訂單已經下發到倉庫後需要缺貨拆單,單據狀态應保留原狀态。
這些都屬于細節,但不得不考慮,因為訂單的狀态涉及到其他業務系統的計算和統計。
如:财務系統在應付報表時是根據支付訂單進行統計和對賬的,如果訂單狀态是無效的,那麼系統如何獲取此部分數據。
BI有些統計分析是按狀态和訂單數量等進行統計的,如客單價、有效訂單數等等。
所以針對拆單而導緻的訂單狀态是否應該區分原有的訂單狀态分别标識,是需要綜合考慮的。
拆單原則拆單的原因我們已經清楚,拆單的目的是為了保證履單,拆單的原則是什麼?
- 首先是最小拆單原則,即能拆兩單,不能拆成三單,因為多拆一單不僅是單據數量的增加,它會增加系統的複雜度,降低用戶體驗,加大倉庫作業量,增加運費費用等。
- 最快送達原則,拆出的子訂單要快速生産,快速送達,這個是增加用戶體驗的最好辦法。但是快速送達,依賴于倉儲物流的布局,這個在多倉可以發送到一個城市時尤為重要。
一般情況下,拆單要遵循這兩條原則,同時我們也看到拆單服務,是依賴于基礎信息配置的,電商系統最複雜的是很多地方都有關聯。
拆單規則拆單的規則因每個公司的業務不同而不同,這裡羅列一些常見的規則供參考。
(1)不同商家的訂單需要進行拆分
這個主要應用于平台型的電商,一般情況用戶購買商品都進入不同的店鋪,創建的訂單也是歸屬這個商家的。但有的平台采用合單支付,即用戶選購不同商家的商品,但支付是一次的。
這個和淘寶有些不同,淘寶上每個商家的收款賬号是不同的,所以不能一次支付,但平台商家是平台代收款的,所以可以一次支付後再拆單分攤金額。
(2)不同倉或不同供應商的商品需要進行拆單
倉庫不同訂單需要分開,對于不同的供應商訂單主要是指由供應商直接發貨的訂單即商品不存儲在倉庫,由供應商直送到用戶,這個和平台商家類似。但是區别是簽署的合同不同,一個是購銷合同,一個是傭金扣點合同,細節不展開了,有興趣可以留言交流。
(3)商品類型不同需要拆單
一般區分奢侈品或有特殊要求的商品,這個需要業務根據商品要求進行設置。因為商品要求不同,後續在物流環節采用的物流産品類型也不同,物流費用也不同。這部分也可以根據商品信息,在倉儲進行處理,但最後在上位能夠提前區分。
(4)商品溫控屬性不同要進行拆單
此部分一般是指生鮮電商而言,同一個倉庫有常溫倉、冷藏倉、冷凍倉,存儲着不同的商品,商品的揀貨、包裝等都有不同的要求,所以需要進行拆單。
(5)大件商品拆單
大件商品與普通商品不同,它在倉庫的存儲位置、揀貨方式、包裝、運輸都有所區别,所以大件商品需要每一件都拆單,大件商品一般遵循最快送達,不需要最少拆單原因的限制。
(6)根據庫存拆單
這個是針對缺貨商品進行的拆單,即有庫存的一單,無庫存的一單,如果是二級訂單,則父訂單相同,子訂單衍生出子訂單,子訂單1的過程。
(7)線下門店商品不拆單
如果是線下門店購買商品,則不需要拆單。
(8)組合商品不能拆單
在促銷活動中,有時會有一些大禮包等商品的組合銷售,即A,B,C等商品經過倉庫的組合包裝後出庫,所以針對此類商品不能拆單。
在拆單服務中需要調用物料單信息,進行判斷,具體的要看系統如何設計了。
拆單的規則很多,在系統處理時,要依賴于規則設置的優先級來進行。
拆單算法(1)稀缺商品算法
找所有商品在所有庫房最稀缺的商品,獲取該商品的階數。
(2)降階
找稀缺商品的都需要倉庫組合,這些倉庫是必須發貨的,把這些倉庫計入發貨列表,這樣就降階了,剩餘倉庫再計算組合,減少運算數量。
(3)抽屜原理算法
找第一階的倉庫列表(發貨量最大的倉庫),這個庫房的庫存是必須要發的,然後再找次發貨量最大的倉庫,以此類推,用于後面的組合計算。
(4)找組合
按照倉庫順序逐漸增加倉庫個數找組合。
算法也隻是拆單過程中的一個路徑參考,且算法依賴于拆單的規則而制定,無論如何要保證拆單的結果準确,拆單的速度要快。
拆單服務兩步重要工作以上一直在讨論拆單是由1變2,由2變4的一些内容,在具體的拆單服務系統中要考慮哪些内容,又有哪些工作?
- 前面所說的都應該在設計時考慮,而且最重要的是要依賴規則進行設計,數據的流轉,時序等等。
- 金額分攤是拆單中最重要的一部分工作,也是最複雜的。
父訂單的拆分,商品的重新組合,生成新的訂單是第一步,第二步就是要将父訂單的金額合理的,正确的分攤到各個子訂單上。
訂單一般分為訂單主表和訂單商品表、訂單支付明細表和訂單活動表。
訂單金額有幾個主要的部分:訂單商品金額、折扣金額、禮品卡支付金額、積分支付金額、優惠券支付金額、訂單支付金額等幾個部分。
運費是訂單表中一個特殊字段,運費如何分攤是要特殊考慮的,一般情況是按金額占比進行。所以生成的子訂單中各部分金額,也要保證與父訂單金額一緻。
訂單商品表、支付明細表、活動表屬于明細信息,要根據原始訂單明細表的數據和标識進行計算分攤。
子訂單的金額要保證橫向、縱向都正确才行,橫向是指子單的合與父單金額一緻,縱向是指子單訂單主表與明細表金額一緻。
此外,在金額分攤計算過程有一項重要規則不可避免,即開票金額的考慮。
這部分金額的分攤與公司繳稅息息相關,單據與發票要一緻,要考慮商品信息、活動規則等等,非常複雜。
有的拆單服務将金額分攤獨立出來,以降低對拆單的影響,提高訂單流轉速度。
拆單的速度要求由于拆單後訂單才會下發到倉儲或商家進行生産,所以對于速度要求就是快。
在系統設計時可以依據規則等綜合考慮,多線程是最常用的方法,但多線程需要考慮資源競争和安全性。一般情況,如果下單後已經确定了倉庫,那麼可以按倉庫啟動多個服務,這樣可以避免程序的難度。
對于拆單和下發在系統上也要有數據監控,不能出現積壓的情況。如果拆單有異常時,在定時任務中,很多情況都是依賴一個信息字段的狀态來進行循環處理,在服務中要有容錯處理,不能一直停滞不前。
拆單的影響什麼是拆單?為什麼拆單?如何拆單?前面說了很多,但對于拆單有什麼影響呢?
先說一個場景,公司搞促銷活動,買A贈B,但A與B商品的溫控屬性不同,所以用戶下單後一定會拆單。
拆單後倉儲揀貨、發貨是根據子訂單進行的,很有可能贈品B先發貨了,A後發貨。用戶先收到B簽收了,然後A進行拒收或取消。此時,如果在拒收或取消A時不判斷關聯子訂單,那麼公司就會損失B。
如果判斷關聯子訂單的狀态,那麼系統的複雜度将會非常之大,因為實際場景中一個父單拆為多單時是很常見的。
拆單後,子訂單數量增加,對于客單價、統計分析等報表需要考慮其影響,維度和統計口徑不同,數據結果必然不同,從而會影響到經營分析及決策。
影響,對于不同的業務有不同的理解,作為産品研發應該在拆單設計時還是需要要将利害與業務說清楚,尤其是運營人員(活動方面重點考慮),雖然這屬于一個後台服務。
總結拆單是複雜的,合理的拆單會加快訂單的流轉,友好的用戶體驗,過度拆單則會産生冗餘的數據,增加訂單的複雜關系,統計、計算、售後等各個環節。
以上是我對拆單的一次梳理與總結,感謝您的閱讀!
作者:倔強的大蘿蔔;公衆号:倔強的大蘿蔔
本文由 @倔強的大蘿蔔 原創發布于人人都是産品經理,未經作者許可,禁止轉載。
題圖來自Unsplash,基于CC0協議
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!