訂單退款邏輯總結(jié)(含訂單拆分)
1. 退款訂單表結(jié)構(gòu)
從數(shù)據(jù)庫(kù)表 eb_store_order_refund 可以看到退款訂單的核心字段:
- store_order_id : 關(guān)聯(lián)原訂單ID
- refund_type : 退款類(lèi)型(0僅退款,1退貨退款)
- refund_num : 退款件數(shù)
- refund_price : 申請(qǐng)退款金額
- refunded_price : 已退款金額
- cart_info : 退款商品信息(JSON格式存儲(chǔ)購(gòu)物車(chē)數(shù)據(jù))
2. 訂單拆分退款核心流程 2.1 觸發(fā)條件
當(dāng)用戶(hù)申請(qǐng)部分商品退款時(shí),系統(tǒng)會(huì)觸發(fā)訂單拆分邏輯,主要發(fā)生在:
- 僅退款部分商品
- 退貨退款部分商品
2.2 拆分處理流程
步驟1:調(diào)用訂單拆分服務(wù)
// StoreOrderRefundServices.php 中的 agreeRefund 方法
$splitOrder = $this->storeOrderSplitServices->equalSplit($order, $refund);
步驟2:equalSplit方法處理邏輯 (StoreOrderSplitServices.php)
- 購(gòu)物車(chē)數(shù)據(jù)拆分 :從原訂單的購(gòu)物車(chē)數(shù)據(jù)中分離出要退款的商品
- 創(chuàng)建新訂單 :為剩余商品創(chuàng)建新的子訂單
- 金額重新計(jì)算 :
- 按比例分?jǐn)們?yōu)惠券金額
- 按比例分?jǐn)偡e分抵扣
- 重新計(jì)算運(yùn)費(fèi)
- 重新計(jì)算傭金
步驟3:退款金額計(jì)算
// 計(jì)算拆分后的退款金額
$refundPrice = $refund['refund_price']; // 用戶(hù)申請(qǐng)的退款金額
$refundedPrice = $refund['refunded_price']; // 已退款金額
$splitPrice = $order['pay_price'] - $refundPrice; // 剩余訂單金額
2.3 數(shù)據(jù)一致性處理
庫(kù)存回退 :
- 退款商品庫(kù)存自動(dòng)回退
- 新訂單商品庫(kù)存保持不變
優(yōu)惠券處理 :
- 如果優(yōu)惠券被部分使用,按比例退回剩余價(jià)值
- 新訂單重新計(jì)算優(yōu)惠券抵扣
積分處理 :
- 退回退款商品對(duì)應(yīng)的積分
- 新訂單積分重新計(jì)算
傭金處理 :
- 取消退款商品的傭金
- 新訂單傭金重新計(jì)算
3. 關(guān)鍵代碼邏輯
3.1 訂單拆分核心方法
3.2 退款處理完整流程