大廠交易系統從0到1(01)-一筆交易到底涉及多少張表?

退款邏輯,1個業務單號--關聯多個支付單號--也關聯多個退款單號?退款單號,關聯優惠券返還的,也可在退款單列表關聯嗎?返還比例多少,是在優惠券系統設置?

整個交易、支付、清結算、賬務體系雜糅,會產生很多單據、單號。再考慮正向、逆向,他們的關係更復雜。

本文就來搞定訂單、賬單、支付記錄、支付單、支付請求、卡消費記錄、券覈銷記錄等單據,他們在交易正、逆向中是如何聯繫的,又有怎麼樣的數據關係。

0 場景

在某平臺購買一次家政阿姨上門保潔服務,總價120元,分2次支付,“先預付80元,再後付40元”,預付時用一張20元優惠券,微信支付60元。

1 3個核心,6大單據及關係

以上場景發生並非依賴一個系統實現,而是通過3個核心實現:交易核心、支付核心、卡券營銷核心,每個核心內會產生相應的單據。

1.1 交易核心

交易核心安排交易流程,包含:

  • 訂單子系統
  • 賬單子系統

① 訂單

訂單子系統內會生成訂單,訂單記錄了平臺跟用戶的本次交易信息:

  • 買了啥
  • 總價多少
  • 用戶用啥支付的
  • ...
訂單號 商品 金額 優惠金額 預付 後付 訂單狀態
666 家政阿姨 ¥120.00 ¥20.00 ¥80.00 ¥40.00 支付成功

② 賬單

賬單子系統產生賬單,賬單記錄訂單要如何結算的信息,爲後續的支付、卡券覈銷做準備,該 case產生2筆賬單:

  • 預付賬單
  • 後付賬單
訂單號 賬單ID 金額 優惠金額 應付 支付狀態 賬單類型
666 666-1 ¥80.00 ¥20.00 ¥60.00 成功 預付
666 666-2 ¥40.00 ¥0.00 ¥40.00 成功 後付

③ 賬單支付記錄

一筆賬單需要被用戶支付(結算),賬單中的支付方式是廣義支付方式,包括卡、券、滿減、積分及渠道支付,如case的預付賬單優惠20元,渠道支付60,假設用戶選擇微信支付:

賬單ID 支付方式 金額 支付狀態 外部流水號
666-1 優惠券 ¥20.00 成功
666-2 微信支付 ¥60.00 成功 3435566

交易核心的3類單據,一對多對多關係。

1.2 卡券營銷核心

① 券覈銷記錄

券系統內記錄的用戶的券綁定信息、凍結及覈銷記錄;卡系統記錄了用戶卡餘額的消耗記錄、卡餘額退回記錄。

卡券的變動記錄依賴交易核心的推動,交易核心如何推動卡券建立聯繫?靠賬單支付記錄單據。案例中因爲用了一張20元的券,所以券系統覈銷了該券,假設有一筆覈銷記錄:

券編號 券類型 金額 券狀態 訂單號 賬單流水號
Q001 代金券 ¥20.00 已使用 666 666-1-1

這條記錄與賬單支付記錄之間建立了關聯:

圖片

1.3 支付核心

60元走微信支付,即請求外部支付渠道完成支付,這部分支付走的就是支付核心。

① 支付單

支付核心是處理走外部支付通道的支付處理業務。支付核心會產生2類單據:

  • 正向支付的支付單和支付請求明細
  • 退款單和退款請求明細
賬單ID 支付單號 支付方式 金額 支付狀態 外部流水號
666-1 pay001 微信支付 ¥60.00 成功 324345

② 支付請求

一筆支付可能請求渠道多次,因此還要建立一個支付請求的明細:

支付單號 支付請求號 支付方式 金額 支付狀態 外部流水號
pay001 pay001-1 微信支付 ¥60.00 失敗
pay001 pay001-2 微信支付 ¥60.00 成功

支付單和支付請求是1對多:

該case支付在3個核心內產生的全部單據形成的關係:

至此,正向形成的單據及單據之間的關係講解完畢。

2 逆向單據的產生和關係

這時再看逆向訂單退款就容易。逆向只是正向的反向,依然3個核心和單據維度,只是單據變成逆向單:

  • 訂單變成退單
  • 賬單變成退款賬單
  • 賬單支付記錄變成賬單退款記錄
  • 支付單變成退款單
  • ...

2.1 逆向都是基於正向

沒有正向單據,就沒逆向單據,如用戶沒下單,就不會取消訂單、也不會操作訂單退回,支付也是如此,沒有原支付成功,就不會有退款。

2.2 支付退款基於原支付單

支付核心的退款,是支付單,不能脫離原支付單,退款可:

  • 全退
  • 部分退
  • 多次退

但絕不會超過原支付金額。

2.3 逆向由訂單發起

訂單是逆向的起點,就是隻有業務產生逆向處理,如退了部分商品或訂單差評產生部分退回等,纔會產生支付的逆向。

因此,退款不一定有訂單逆向,也可能是訂單產生的差評罰款或其他原因,但都是基於訂單,即退款基於訂單發起。

2.4 交易需控制逆向的順序

訂單產生了逆向,因爲訂單用了卡、券、積分、微信支付等多種支付方式。逆向發生後,先處理誰,先退券還是先退積分,還是先退微信支付的金額?

若是全額退還好說,畢竟最終都會逆向處理,但部分退呢?

支付了80,用了20元券,微信支付60,現在要退40,咋退?是退20的券微信退20,還是微信退40?因此需要一個逆向順序的控制,case中設置這樣的順序及設置了券不返還的策略:

這樣的規則下,若預付單隻退50元,那麼看預付單的情況:

按“券>卡>渠道”的退款順序逆向:

  • 先處理20元券,因爲券不返還,所以就只是將券變成已取消,這樣就會從營銷中臺的成本中核銷掉
  • 而30元從微信支付退
  • 所以,用戶部分退50元,在這樣的逆向策略下,只能拿回30元

關注我,緊跟本系列專欄文章,咱們下篇再續!

作者簡介:魔都國企技術專家兼架構,多家大廠後臺研發和架構經驗,負責複雜度極高業務系統的模塊化、服務化、平臺化研發工作。具有豐富帶團隊經驗,深厚人才識別和培養的積累。

參考:

本文由博客一文多發平臺 OpenWrite 發佈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章