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