功能目标
- 订单支持部分商品的退款
- 订单支持多次退款
- 存在优惠的退款 优惠分摊后退款
- 逆向流程 与 正向流程分离
ER模型

Order主表
字段 | 说明 |
---|
PayAmount | 订单付款金额 |
OrderStatus | 订单正向状态 |
RefundMark | 退款标识 无退款、存在退款、完全退款 |
RemainderAmount | 退款后该笔订单剩余用户支付金额 PayAmount - RemainderAmount = 退款金额 |
订单商品表 OrderSku
字段 | 说明 |
---|
SkuOriginalPrice | 单个商品原价 |
SkuPrice | 单个商品实际价格 |
TotalAmount | 商品实际总付款金额 在部分退款时 将 (TotalAmount / Quantity) * 退款数量 = 退该商品产生的退款金额 |
RemainderAmount | 该订单商品记录剩余用户支付金额 PayAmount - RemainderAmount = 退款金额 |
RemainderQuantity | 剩余数量 Quantity - RemainderQuantity = 退款了的数量 |
订单退款主表 OrderRefund
字段 | 说明 |
---|
RefundStatus | 退款状态 |
RefundAmount | 该笔退款单的退款金额 |
订单商品退款 OrderSkuRefund
字段 | 说明 |
---|
OrderSkuID | 关联的订单商品记录 |
RefundQuantity | 退该订单商品数量 |
RefundAmount | 退该商品数量后退款金额 |
一笔部分退款步骤
一笔订单 存在订单商品 A 2件共:100元 B 1件:40元 C 1件:60元,在创建订单时除去全单满额优惠满100减20,分摊优惠后得到 A:实际支付90 B:实际支付36 C:实际支付54元,现在对订单中 A 2件中退一件。
退款成功后存在OrderSkuRefund记录:
字段 | 说明 |
---|
OrderSkuID | A1 |
RefundQuantity | 1 |
RefundAmount | 90 * (1/2) = 45 |
OrderRefund记录:
字段 | 说明 |
---|
RefundStatus | 退款成功 |
RefundAmount | 45 |
OrderSku记录:
字段 | 说明 |
---|
SkuPrice | 50 |
TotalAmount | 90 分摊到该商品 扣除优惠 10 |
RemainderAmount | 扣除退款该商品的金额 等于剩余价值45 |
RemainderQuantity | 退一项 剩余一项 剩余数量 2.0 - 1.0 = 1.0 |
order 记录:
字段 | 说明 |
---|
PayAmount | 实际支付金额 180 |
OrderStatus | 订单正向状态 不影响 |
RefundMark | 存在退款 |
RemainderAmount | 退款后该笔订单剩余用户支付金额 180 - 45 = 135 |