電商系統前后臺設計全面解析——訂單管理

11 評論 39063 瀏覽 333 收藏 22 分鐘

訂單管理系統是電商系統中最為復雜的系統,其作為中樞決定著整個商城的運轉,我們設計商城的目的就是讓用戶下單,然后發貨,然后訂單完成。訂單系統是電商系統最重要的模塊,沒有之一。

訂單系統設計的好壞,決定了商城的可用性,與使用價值;訂單系統貫穿于整個商城系統,其他各個系統的設計也是為訂單系統提供數據支撐。訂單的核心是流程問題,涉及資金流、物流、信息流,從用戶提交訂單的那一刻到訂單完成,到售后,都需要訂單管理系統來管理。

講解訂單管理系統就必須從它的流程來說,訂單訂單從無到有、流程分為這樣幾個流程:

  1. 階段一、訂單數據流程:用戶選擇商品信息,優惠信息等,生成訂單價格,點擊提交訂單,這一非常小的一步,需要后臺處理很多的數據,將最終的訂單金額計算出來。這屬于訂單的第一個階段;
  2. 階段二、訂單物流流程:用戶支付成功,到發貨,收貨,訂單完成;這屬于訂單的第二個階段,如果沒有異常流程,訂單到這里已經完成,正常的訂單分為這兩個大的流程;
  3. 異常階段、售后流程:用戶在以上兩個階段中發生取消支付、退款、退貨、換貨等售后服務,這時訂單就會走異常流程;異常流程要比正常流程還要復雜。

不管訂單系統系統如何復雜,如何拓展,我將訂單流程分為以上三個部分,而這三部分之間相互獨立而又相互聯系。第一階段用戶提交訂單,系統處理訂單數據;第二階段付款成功,訂單走物流系統,直到訂單完成;第三階段是從一或者二階段中產生的異常流程

一、訂單數據流程

這個階段線上的操作并不是很多,主要是體現在系統對數據的處理上,我們在商城選擇想要的商品,選擇商品規格、數量、優惠券、然后系統會為我們生成最終的訂單價格。這個流程屬于系統內部的數據處理流程,需要調取系統各個模塊的數據,流程如下:

首先,是用戶在商城內選購商品,這個階段可以叫做前置用戶行為。

然后,是系統調取各個系統的數據,計算訂單的最終價格,這個階段可以叫做后置數據處理。

最后,是將訂單價格在用戶端顯示,這個階段叫做表現層顯示。

1.1 前置用后行為

這個過程比較簡單,是屬于訂單流程的前置條件,只有觸發此行為,才會生成訂單,系統才會記錄訂單數據;

需要流程如下:

用戶進入商城,瀏覽商品,進入商品詳情頁面,點擊購買商品,選擇商品規格、數量,點擊提交訂單,然后進入訂單詳情頁面。

1.2 后置數據處理

在訂單詳情頁面系統會做大量的數據處理來計算訂單的最終價格,而訂單的最終價格也是可以隨之變動的。比如:當用戶選擇是否使用優惠券,修改商品數量,訂單的價格都會發生變化。

后置數據處理的流程如下:

1.2.1 從商品管理系統獲取商品的SKU信息

首先,第一步會先獲取用戶所選擇商品的SKU信息,用戶選擇不同的規格對應不同的SKU信息,而不同的SKU對應不同的商品價格,根據用戶選擇的規格和商品數量生成商品總價。

訂單詳情頁面展示商品數量、規格信息、商品總價格。

1.2.3 從會員中心獲取會員權益信息

第一步、根據當前用戶的信息:獲取用戶的成長體系——也就是用戶的會員權益,會員等級是多少折扣,會員等級折扣金額的計算金額是在商品總價的基礎之上的。

1.2.4 從物流中心獲取運費信息

第二步、獲取用戶的運費信息:因為添加商品時肯定是要選擇運費模板,根據運費模板和用戶的收貨地址計算運費,若是商品統一包郵,或者促銷活動條件滿足包郵,則不計算運費。

1.2.2 從促銷中心獲取商品的優惠信息

第三步是從促銷中心篩選當前商品是否在已有的促銷活動之下(創建促銷活動需要指定商品):若有所屬的促銷活動則在用戶端顯示所有的促銷活動、若沒有所屬的促銷活動則獲取商品所有可用的優惠券,并展示所有可用的優惠券。

(促銷活動與優惠券不可以同時使用,首選判斷商品是否有促銷活動,若有促銷活動并且當前狀態滿足促銷活動規則,則優惠券不可用;若有促銷活動,但是當前狀態不滿足促銷條件,則優惠券可用;若選擇了優惠券,即便訂單由于變動滿足促銷活動條件,促銷活動優惠不生效。)

訂單詳情頁面顯示商品當前的促銷活動,可使用的優惠券信息,同時顯示已經獲取的優惠信息:什么優惠券優惠多少金額?或者,什么活動優惠多少金額?

優惠金額的計算是在商品總價的基礎之上的。

說明:到此為止,訂單金額已經計算出來了,我們可能知道哪些地方需要計算優惠金額,但是關鍵的問題在于最終的優惠金額如何計算。

訂單金額的計算有兩種方式,不過一般來說使用第一種方式,第二種方式僅做了解。

(1)統一以訂單金額為基礎:就是所會員權益、優惠券金額、促銷活動金額的計算、都是在訂單金額的基礎之上的。

例如:商品SKU價格45元、數量2、運費10、會員優惠8折、促銷活動優惠5折、會員權益優惠15元,那么最終的訂單價格為?

我們首先要定義“訂單金額”,訂單金額=商品SKU價格*購買數量+運費=100元;

以訂單金額為基礎,計算其他費用,那么應支付就會這樣:

應支付金額=訂單金額-優惠券優惠金額-促銷活動優惠金額-會員權益優惠金額

現在的問題關鍵在于優惠金額的計算,如果是滿減就好說了,優惠金額一定,打折都是以訂單金額為基礎的。

應支付金額=100-(100*(1-0.8))-(100*(1-0.5))-(15)

也就是說,每項的優惠金額計算都是以訂單金額為基礎進行計算。

一般來說用這種方式比較好,能夠很好的體現每種金額優惠的價值,并且拓展性強,計算的順序不會影響最終的優惠效果,因為都是在訂單總價的基礎之上的,并且易于理解和計算。

(2)以順序計算訂單總金額

——就是每一筆的計算都是在上一步金額的基礎之上的,具體算法如下:單價45元、數量2、運費5、會員9折、優惠8折。

首先,加上運費((20*2)+5)=45元

然后,在上一步基礎上減去會員折扣45-45*0.1=40.5

最后,在上一步的基礎上減去會員權益的優惠金額40.5-40.5*0.2

這種方式不建議使用,計算順序會影響最終的優惠金額,比如:先計算促銷活動的優惠,和先計算會員權益最后導致的訂單價格是有很大差別的

1.3 表現層顯示

當系統計算出訂單金額,就需要在頁面上顯示,訂單詳情頁面要顯示最終的訂單金額、同時還要顯示:

  • 物流方式,運費
  • 優惠券信息,優惠金額
  • 促銷活動信息,優惠金額
  • 會員權益,優惠金額

二、訂單物流流程

從用戶提交訂單就進入了物流流程,這個階段主要體現在商品的物流流轉以及物流信息的變更和記錄,訂單狀態的管理。

訂單物流流程如下:

2.1 用戶提交訂單,生成待付款訂單

當用戶提交訂單之后,雖然沒有支付,但是系統就會生成待付款訂單,對于生成訂單這個地方主要涉及這么一個問題,就是訂單拆分的問題。

2.1.1 訂單拆分

可能大家也都知道訂單拆分,而怎么拆分,為什么拆分,大家可能都不清楚,但這也是我們需要知道的。

講一個小故事:首先我們先來說說訂單這個東西,現在有這么個情況,小張在商家小紅的店鋪購買了一雙運動鞋,那么商家小紅肯定是要為小張發貨的,所以他就需要聯系物流公司。

比如申通小李,為了跟蹤這雙運動鞋在系統中的物流情況,在發貨的時候需要為鞋子匹配唯一的訂單號和運單編號(訂單號電商系統生成,運單號快遞公司生成),為什么有訂單號了還要運單號呢,訂單號是電商系統用于記錄當前小張提交的這一筆訂單信息,而運單號是為了跟蹤鞋子的物流信息。

過了一段時間,小張又在小紅這里買了一雙運動鞋,不過同時買了一個皮球,方便玩耍,所以將一雙鞋、一個球加入購物車,統一購買。然后提交訂單,生成一個訂單號。

這個時候雖然是兩件商品,但是小紅為了圖方便,就將皮球和運動鞋放在一起發貨了,那么申通小李看到的其實還是一個包裹。

但是他不知道的是,包裹里面有兩個物品,所以就會創建一個運單編號,這也是為什么我們在網上購物的時候明明買了兩件商品,但是收貨信息只有一條,因為放在一起了。這種情況是一個訂單編號,一個運單編號,兩件商品。但是在運輸的過程中由于鞋和球放在一起了,車輛過于顛簸,鞋子就把皮球炸爆了,當小張收到貨后非常生氣,小紅也感覺非常的慚愧并為小張做售后。

又過了一段時間,小張還是在小紅這里買了一雙鞋和一個皮球,但是為了防止拿到貨時皮球又被鞋子炸爆,所以小張要求小紅將這兩件商品分別發貨。

小張同時又在店鋪小王的店鋪里買了兩個籃球,那么這一次買的有點多——一雙鞋、一個皮球、兩個籃球,并且還是在兩個店鋪里面,因為電商平臺需要為每個商家進行資金結算,所有需要通過訂單號記錄每個商家的訂單信息。但是,顯然如果這次所有的東西都用一個訂單號那就亂了,因為結算是通過訂單查詢商家信息每筆訂單對應一次結算,兩個商家這筆訂單的錢應該結給誰呢,所以這個時候就會出現第一次拆單。

如果用戶一次提交訂單,但是訂單包含多個商家,或者商家和平臺自營同時出現,那么就需要拆單。

小張提交的5件商品分為2個訂單,每個訂單號對應一個商家,同時如果小張另外在平臺自營買了一件商品,道理也是一樣,也需要拆單。

因為平臺自營的商品是不需要結算的,如果把平臺的訂單放到商家一起,那么給商家結算的時候,豈不是平臺賣得東西算到商家頭上了。

回到上面,剛說拆分成了兩個訂單:第一個訂單我們叫他訂單號001,這個訂單下面是商家小紅的商品,一雙鞋,一個皮球;第二個訂單號002,這個訂單下面兩個籃球;小紅將這兩件商品分別發貨,于是申通小王發鞋子,另外喊來小王的同事申通小明發皮球。

顯然我們就知道了,鞋子會對應一個運單號,皮球也會對應一個運單號(也就是二次拆單),這兩件物品的物流信息分別記錄。但是,這兩個物品對應的是一個物流單號001,也就是說一個訂單,一個訂單編號下可能對應多個運單編號。

同時也就可以解釋這么一個現象,利用訂單編號是查詢不到物流信息的,只能靠運單編號(叫法問題,運單編號也叫物流單號),想一下我們在購物時看自己的未收貨商品時,我們可能就會想到,每一條信息的展示是對應一條運單號的,而上下排列的兩件商品列表,很有可能訂單編號是相同的。

也就是說,我們在購物車購買多個商品提交訂單時,可能會有多個訂單號(一次拆單,拆業務訂單,原因上不同商家、平臺所導致的),同時一個訂單號可能會有多個運單編號(二次拆單,拆發貨單,用戶端拆開顯示)

以上步驟是生成訂單:

2.2 用戶付款完成,待付款訂單流轉為待發貨訂單

提交訂單系統就會生成訂單,此時訂單是待付款訂單,用戶付款完成之后,流轉成待發貨訂單。而當用戶提交訂單長時間沒有支付的話,訂單就會自動取消,生成已取消訂單。同時用戶對于待付款訂單也可以主動取消,生成已取消訂單。

用戶可以對待付款訂單進行付款操作。

2.3 后臺選擇物流進行發貨,待發貨訂單流轉成待收貨訂單

用戶付款完成之后,后臺就會顯示買家已付款,這個時候就需要進行發貨,發貨需要填寫運單編號、物流公司,運單編號物流公司提供。

發貨完成之后系統就會跟蹤物流信息,同時訂單狀態變為待收貨狀態。

用戶可以對待收貨訂單進行收貨/申請退貨操作。

只要商品發貨完成,用戶以后都可以查看物流信息。

如果用戶付款之后但是還沒有進行發貨,用戶可以執行退款操作。

2.4 用戶進行收貨,或者時間段內自動收貨,待收貨訂單流轉為已完成訂單

用戶通過查看物流信息,進行線下取貨,確定商品完好之后可以進行確認收貨操作,確認收貨之后,訂單變已完成狀態。

用戶在確認收貨操作之前可以進行申請退貨操作,卻已經確認收貨則不可以申請售后。

三、異常階段、售后流程

在整個購物流程當中除了正常的流程,有時候還會后異常的流程,這些流程會改變訂單應該有的流轉狀態。

3.1 取消支付

當用戶提交訂單但是取消支付:

當用戶提交訂單的時候系統就會同時生成待付款訂單,這個時候拉起支付頁面,如果用戶支付成功,訂單流轉為待發貨狀態,如果用戶支付失敗或者退出支付,那么訂單就會保持待付款狀態。

對于待付款的訂單,用戶可以繼續進行支付,一般來說待付款是有支付剩余時間的,就是在一定時間內如果用戶沒有支付成功,那么訂單就會關閉,流轉為已關閉訂單,對于已經關閉的訂單用戶僅可執行刪除操作。

對待支付訂單用戶可以主動取消訂單,生成已關閉訂單。

3.2 退款

用戶付款完成在沒有發貨之前申請退款:

當用戶付款完成,訂單就會流轉為待發貨狀態,這個時候后臺是要準備發貨的。那么在用戶付款之后,商家發貨之前,這個時候用戶可以申請退款。

申請退款需要填寫退款理由,然后提交商家審核,如果是多商戶,所有的售后流程都由商家來進行審核,平臺無需干涉。后臺會看到用戶的審核狀態為申請退款中,這個時候商家要確定是否已經發貨了,沒有發貨的話同意退款,資金按原路返還給客戶。拒絕申請需要給客戶說明拒絕理由,比如訂單已經發貨,無法退款。

3.3 退貨

發貨之后,用戶在未確認收貨之前申請退貨:

當商品發貨,但是用戶未確認收貨前可以申請退貨,申請退貨一般是在用戶已經收到貨了,但是對商品不太滿意。

比如:衣服不太合身,這個時候就需要申請退貨,首先提交退貨申請,填寫退貨原因,后臺初步審核通過后,訂單狀態變為待退款,退貨訂單;用戶聯系快遞公式發貨,填寫發貨信息,主要是快遞單號,當商家收到貨后會查看商品是否完好,確認后,在后臺執行確認退貨退款操作,資金自動返還給用戶。

3.4 換貨

發貨之后,用戶在未確認收貨之前申請退貨:

換貨的流程與退貨相似,用戶申請換貨,審核通過后,用戶進行發貨,商家收到貨后訂單完成;在從新為用戶進行新的發貨。

四、線下服務訂單

線下服務訂單就很簡單了,用戶付款完成系統會生成唯一的核銷碼,比如:6為數字,然后用戶線下到店消費,出示核銷碼,商家進行核銷,訂單完成。

 

本文由 @謝謝張先生 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 顯然我們就知道了,鞋子會對應一個運單號,皮球也會對應一個運單號(也就是二次拆單),這兩件物品的物流信息分別記錄。但是,這兩個物品對應的是一個???♀?“物流”???♀?單號001,也就是說一個訂單,一個訂單編號下可能對應多個運單編號。
    這個地方輸入有誤,應該是訂單號。

    回復
  2. 你這折扣計算怎么還能算上運費呢

    回復
  3. 描述總體上沒什么問題,但是各個模塊細節流程存在一些問題哦

    來自福建 回復
  4. 確認收貨不是也可以申請售后嗎?不能嗎?

    回復
  5. 學習中……

    回復
  6. 寫的很好,兄弟,你忒牛了

    回復
  7. 請問樓主,如果一個用戶購買了多個商品(sku),然后也享受了優惠。這種訂單在退款的時候,如果選擇退其中1個商品,你們一般是怎么計算他應該退多少錢的?感謝。

    來自四川 回復
    1. 我覺得這個可以參照一下訂單拆分吧

      回復
    2. 按比例進行結算

      回復
  8. 寫得非常詳細,很棒!我之前也寫過一篇關于訂單管理的,對比之下顯得羞澀了,學習了 ??

    來自廣東 回復
    1. 兄弟說笑了,都是為用戶服務

      來自山東 回復