修复订单金额落库不对的问题
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m17s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m17s
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: 后台订单 TotalAmount 语义修正
|
||||
|
||||
系统 SHALL 在后台创建订单时,`Order.TotalAmount` MUST 始终存储零售价(客户面值),不得被成本价覆盖。`Order.ActualPaidAmount` MUST 存储实际支付的成本价。
|
||||
|
||||
**字段语义规范**:
|
||||
- `total_amount`:零售价,所有场景均为套餐零售单价之和,C 端和后台均可安全展示
|
||||
- `actual_paid_amount`:实付成本价,代购/钱包支付场景为买家实际支付的成本金额
|
||||
|
||||
**各场景赋值规则**:
|
||||
|
||||
| 场景 | total_amount | actual_paid_amount |
|
||||
|------|-------------|-------------------|
|
||||
| 平台自营 offline | 零售价 | 零售价(无差价) |
|
||||
| 平台代购 offline | 零售价 | 成本价(买家成本) |
|
||||
| 代理自购 wallet | 零售价 | 成本价(自己的成本价) |
|
||||
| 代理代购 wallet | 零售价 | 操作方成本价 |
|
||||
| 赠送套餐 offline | 零售价 | 0 |
|
||||
|
||||
**钱包扣款**:`createOrderWithWalletPayment` MUST 使用 `order.ActualPaidAmount` 作为扣款金额,不得使用 `order.TotalAmount`。
|
||||
|
||||
#### Scenario: 平台代购时 TotalAmount 为零售价
|
||||
|
||||
- **WHEN** 平台为代理商下属资产创建 offline 订单,套餐零售价 9900 分,代理成本价 7000 分
|
||||
- **THEN** `order.total_amount = 9900`,`order.actual_paid_amount = 7000`
|
||||
|
||||
#### Scenario: 代理自购时 TotalAmount 为零售价
|
||||
|
||||
- **WHEN** 代理商以 wallet 支付为自己的资产购买套餐,套餐零售价 9900 分,代理成本价 7000 分
|
||||
- **THEN** `order.total_amount = 9900`,`order.actual_paid_amount = 7000`,钱包扣款 7000 分
|
||||
|
||||
#### Scenario: 代理代购时 TotalAmount 为零售价
|
||||
|
||||
- **WHEN** 上级代理以 wallet 支付为下级代理资产购买套餐,零售价 9900 分,操作方成本价 8000 分,买家成本价 7000 分
|
||||
- **THEN** `order.total_amount = 9900`,`order.actual_paid_amount = 8000`(操作方实付),钱包扣款 8000 分
|
||||
|
||||
#### Scenario: 赠送套餐时 TotalAmount 为零售价
|
||||
|
||||
- **WHEN** 平台以 offline 方式赠送套餐(含赠送标记),套餐零售价 9900 分
|
||||
- **THEN** `order.total_amount = 9900`,`order.actual_paid_amount = 0`
|
||||
|
||||
---
|
||||
|
||||
### Requirement: OrderItem 新增 CostPrice 字段
|
||||
|
||||
系统 SHALL 在 `tb_order_item` 中新增 `cost_price BIGINT NOT NULL DEFAULT 0` 字段,存储套餐成本单价快照。`unit_price` 字段 MUST 改为存储零售单价。
|
||||
|
||||
**字段规范**:
|
||||
- `unit_price`:零售单价(分),所有场景均为套餐对外售价
|
||||
- `cost_price`:成本单价(分),代购/钱包支付场景为买家实际成本;平台自营或赠送时为 0
|
||||
|
||||
**赋值来源**:`cost_price` 从 `itemUnitPriceMap`(成本价 map)中取值;`unit_price` 从零售价 map 中取值。
|
||||
|
||||
#### Scenario: 代理自购时 OrderItem 同时记录两种价格
|
||||
|
||||
- **WHEN** 代理商购买套餐,零售价 9900 分,成本价 7000 分
|
||||
- **THEN** `order_item.unit_price = 9900`,`order_item.cost_price = 7000`
|
||||
|
||||
#### Scenario: 平台自营时 CostPrice 为 0
|
||||
|
||||
- **WHEN** 平台以 offline 方式为平台自营资产购买套餐,零售价 9900 分
|
||||
- **THEN** `order_item.unit_price = 9900`,`order_item.cost_price = 0`
|
||||
|
||||
#### Scenario: 赠送套餐时 CostPrice 为 0
|
||||
|
||||
- **WHEN** 平台赠送套餐,零售价 9900 分
|
||||
- **THEN** `order_item.unit_price = 9900`,`order_item.cost_price = 0`
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 后台订单 API 响应格式更新
|
||||
|
||||
系统 SHALL 在后台订单创建响应中,`total_amount` 字段返回零售价,`actual_paid_amount` 字段返回成本价。
|
||||
|
||||
#### Scenario: wallet 订单响应 total_amount 为零售价
|
||||
|
||||
- **WHEN** 代理在后台创建 wallet 订单成功,零售价 9900 分,成本价 7000 分
|
||||
- **THEN** 响应中 `total_amount = 9900`,`actual_paid_amount = 7000`
|
||||
Reference in New Issue
Block a user