電商技術解密之取消訂單
一個簡單的取消訂單操作背后的業務邏輯是多么的復雜。
在網購的流程中,大家一般接觸的比較多的都是正向流程,即下單的流程:瀏覽商詳、加入購物車、提交訂單、確認收貨等。但是系統設計的時候往往會發現逆向流程比較正向流程更加的復雜,大家經常接觸的逆向流程一般主要兩類:取消訂單和售后退貨。
今天先跟大家聊下取消訂單背后的邏輯,對用戶來說只是一個簡單的申請取消的按鈕,但是后臺確實做了比較復雜的邏輯。例如要判斷訂單能不能取消?關聯訂單需不需要一起被取消?應該退多少錢給用戶?等等一系列的問題。
下面先看下取消訂單一個比較典型的業務流程,我拿京東作為舉例。
當在京東上下過一單之后,在我的訂單里面可以看到這個訂單的詳情,這時候會看到“申請退款”這個選擇。這里叫法不一樣,有的平臺這里叫做“取消訂單”,這個時候你可以進行申請。
然后你可以看到取消的狀態,剛剛取消后查看狀態為“取消處理中”,下面的進度里面可以看到是正在進行倉庫的攔截。因為訂單已經產生了,系統會將訂單推送到倉庫系統進行生產,庫內作業是有一段時間的,要揀貨、打包等。如果此時訂單還沒出庫,你發起取消訂單的申請,這時候會到倉庫進行攔截,找到這單告訴倉庫的人不要發了。如果訂單已經出庫,這時候你再發起取消訂單的申請,那么你的申請可能會失敗,一般主流的做法是可以收貨的時候進行拒收或者申請售后退貨。但是要付出代價的,有的會扣你的運費,有的會扣經驗值;也有免費的,但是有次數限制。
當取消成功后,取消狀態會變成已經完成,訂單狀態會變成已經取消。
上面只是取消訂單一個比較簡單的場景:一單只有一個商品。
如果一張訂單中有多個商品,并且被拆成多個包裹后事情就變得復雜了。
首先一個問題是,多個包裹支不支持按照包裹維度進行取消?不支持的話只能整單取消,用戶體驗不是很友好,所以主流電商平臺都是支持按照包裹維度進行取消的。
那么問題就來了
先看下運費的問題
原來你因為買了多個商品,達到了免郵的標準,這時候你取消其中一個包裹,那么可能達不到免郵的條件了,這個時候怎么辦?
如果不收運費這其實是一個業務的漏洞,有的電商平臺為了用戶體驗更好些,或者是避免后臺邏輯過于復雜是真的沒有收運費的,主要是靠風控體系來控制風險,如果一個人經常采用這種方式套運費的話是會被拉黑的。但是大部分的電商平臺還是需要收運費的,當發現取消一個子單后,剩下的訂單無法滿足包郵的條件,那么需要用戶支付運費,或者是從取消訂單的退款金額里面把運費扣掉,或者是從你的虛擬賬號里面把運費扣掉(比如扣你的積分)。
促銷的相關問題
另外跟運費類似的是各種促銷,滿減、滿贈、滿返等也存在類似問題。
我們這里以滿減作為例子,如果買了多個商品達到了滿減的條件,享受了滿減的優惠。當取消一個包裹單后如果滿減的條件還滿足,那么就可以正常取消。如果由于取消了這個包裹單滿減條件達不到了,這個時候是需要把關聯訂單也一起取消的,不然也會存在業務漏洞。
資源回退問題
上面的條件都達到了可以正常取消訂單,但是還需要考慮把生成訂單時所占用的資源回退掉,這里主要是庫存、券、積分等。
庫存:生成訂單的時候會先鎖定庫存,保證倉庫可以正常生產,如果取消訂單后,需要把這個庫存釋放,增加前臺銷售庫存的可用量。具體庫存的邏輯可以參考之前的文章電商技術解密—管好庫存沒那么容易
積分:生成訂單后也會給用戶發放一些虛擬資源,例如積分、經驗值。訂單取消后也需要把之前發放的資源進行回收。
優惠券:如果之前下單的時候使用了優惠券,那么訂單取消后也需要把原來用掉的優惠券返還到用戶的賬號中,方便用戶后面繼續使用。
具體流程可以看下面的業務序列圖
可以看到一個簡單的取消訂單操作背后的業務邏輯是多么的復雜。上面的流程是用戶自己發起取消訂單,還有一種情況也會觸發取消訂單這個流程。當你下單后沒有在規定的時間內進行付款,那么系統會自動把你的訂單進行取消。因為要釋放資源,主要是庫存的資源。
取消訂單后臺的業務邏輯就先介紹到這里,可能有些遺漏或者錯誤,歡迎大家拍磚、討論!
相關閱讀:
本文由 @DearNicole 原創發布于人人都是產品經理。未經許可,禁止轉載。
很棒的文章,退貨環節要細分場景會更好,比如收到貨退貨,沒發貨退貨等等會更好
很棒的一篇文章
bug點擊流程圖再點擊會消失
很干貨的文章。
但是現在的滿減大部分都是取消后依然享受優惠啊,
湊單后最后把湊單產品退掉,優惠依然有,淘寶跟京東都是
只有前臺的邏輯,沒有物流生產的取消流程
不滿足促銷條件,需要整單進行取消???應該依然子訂單取消,退款時考慮有無促銷情況下的差價,算好退款價格就行了啊。
有一次我就是取消訂單后不滿足促銷條件,但依然享受了促銷的優惠。。。。不知道會不會被記錄,哈哈。寫的很好,特別是泳道圖畫的很好,上下都有角色名稱,用戶體驗很好,點贊。
作者對于促銷商品如滿減等活動的描述 我不敢茍同 如果對于滿減的商品取消訂單 就簡單得把所有參與滿減的商品訂單都取消取消 是不是會流失很多單子啊 如果采取部分商品退款 且退款金額按照退款商品金額占總訂單商品優惠金額比例進行退款比較合理呢? 而且貌似淘寶 京東都是這么設計的把!
你說的這個也是一種解決方案,但是也會存在一個漏洞,比如淘寶出一個滿300減100的活動,我實際就想買一雙200的鞋,這時候我就需要再買100的背心,這樣就可以滿減了,之后再把100的背心退掉,就相當于鉆空子了,其實這種思想,作者的文章中有所體現,這個例子和他提到的免郵是一個道理的。如果實行部分退款,從程序邏輯上可能會變復雜,而且也不好衡量推多少合適,而淘寶推出這個活動的本意就帶有點捆綁銷售。
如果滿300減100,最后把100的背心退了,不可能完全退100的啊,應該也要減去相應的優惠吧
那如果鞋子250,背心50,這種情況收回優惠的話,平臺還會虧50
鞋子200,背心100,滿300減100實際支付200,折算鞋子133.33,背心66.67。
如果退掉背心會退66.67元,用戶以133.33買到價值200的鞋子。淘寶現在也是這樣處理的,讓鉆空子。
厲害厲害,前京東既是產品經理又是研發經理
如果身居兩個角色 耦合性太強
我之前做的淘寶天貓售后的,沒毛病的 取消訂單 后臺會經常很多操作
泳道圖里有個小問題,訂單取消不會存在修改積分的問題,因為積分這玩意都是在確認收貨時才會增加,若下單就添加,就會出現之前有位也提過的一樣,若下單就加了積分,積分被使用了,那還如何扣減,那就再加個未收貨積分鎖定?那就變的復雜了
哈哈哈 有道理 你的分析把我給整笑了。哈哈哈 簡單粗暴
感謝分享!
感謝分享~
有一部分商品比如易碎品,損壞確實不需要退貨的,是不是審核的時候有一項“是否要退貨”選項?
管理商品的時候就應該定義好這個商品是否能退
在返還用戶積分那一項,如果積分已被用戶消耗了呢?
根據自己平臺積分的定位和使用場景與結果,設定積分對應的收回規則。
請教下,我理解的取消訂單和申請退款是兩種狀態,取消是指已下單未付款,只涉及退回優惠信息,而申請退款是已經付了款,還要涉及款項處理
嗯,我也這么認為!
不錯。這些邏輯上的東西,如何更好的處理的更好,泳道圖不錯。
還有一個問題,申請退款旁邊的修改訂單是做什么用的?我在京東購物,沒有發現這個按鈕哦
請教一下,申請退款為什么是包裹維度而非SKU維度?是因為只有包裹能查詢到出庫狀態,sku查詢不到嗎?還是因為一個包裹中雖然可以知道部分sku未出庫,但包裹紙箱之類的已經產生成本,所以不能再取消了?
無形之中和京東的取消訂單流程完全一致,絕對沒有抄襲,因為后臺一般是抄襲不了。當時我堅持要在訂單中加一個狀態“取消處理中”,為這個狀態和團隊爭論了好久。但是我們優惠券限于技術的障礙,沒有返還。公司的財務需求都是我處理,填了一堆坑啊! ??
退積分的邏輯還有點問題,比如這在退貨之前把積分用了。那么積分就退不會來了 ??
如果他歷史積分還有余額就扣歷史余額,如果沒有就扣到0為止,這里是有點空子可以鉆。。。。
沒有就扣到負數。JD這樣干過。只是用戶體驗不好。所以還是要設置規則,對于頻繁搞事的用戶就要拉黑,就要扣到負數,退貨運費自理等方式。
1.積分在于什么時間節點發放;2.積分是及時可使用還是分凍結、可用等其它類型;
積分應該不是在這個時候到你賬戶上吧,積分一般是確認收貨之后的事吧
現在公司在做商城系統,涉及到退款的時候,已經想了很多,但限于網上找到的資料有限,還是挖了一些坑。
這方面資料確實很少
后悔沒早點看到這一系列文章……走了好多彎路。。。
現在也不晚,希望可以讓你后面少走點。