修复订单金额落库不对的问题
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m17s

This commit is contained in:
Break
2026-06-01 11:21:29 +08:00
parent 6c8352491c
commit 944526d9ef
16 changed files with 454 additions and 37 deletions

View File

@@ -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`