fix: 修复代理钱包订单创建逻辑,拆分后台/H5端下单方法并归档变更
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m54s

- 拆分订单创建为 CreateAdminOrder(后台一步支付)和 CreateH5Order(H5 两步支付)
- 新增 CreateAdminOrderRequest DTO,后台仅允许 wallet/offline 支付方式
- 同步 delta specs 到主规格(order-payment 更新 + admin-order-creation 新增)
- 归档 fix-agent-wallet-order-creation 变更
- 新增 implement-order-expiration 变更提案
This commit is contained in:
2026-02-28 16:31:31 +08:00
parent 8ed3d9da93
commit 5bb0ff0ddf
23 changed files with 2922 additions and 1138 deletions

View File

@@ -0,0 +1,67 @@
## MODIFIED Requirements
### Requirement: 订单支付处理
系统 SHALL 根据支付方式正确处理订单支付,包括钱包扣款、在线支付、混合支付等。**新增订单取消(手动或自动)时的钱包余额解冻逻辑。**
**钱包支付流程**
1. 检查钱包可用余额是否充足
2. 冻结钱包余额(`frozen_balance` 增加)
3. 创建订单,状态为"待支付"
4. 订单完成后,扣减钱包余额(`balance` 减少,`frozen_balance` 减少),创建钱包明细记录
5. 订单取消时(手动或自动),解冻钱包余额(`frozen_balance` 减少)
**在线支付流程**
1. 创建订单,状态为"待支付"
2. 调用第三方支付接口
3. 用户完成支付后,订单状态变更为"已支付"
4. 订单完成后,订单状态变更为"已完成"
**混合支付流程**
1. 检查钱包可用余额是否充足(钱包支付部分)
2. 冻结钱包余额
3. 创建订单,状态为"待支付"
4. 调用第三方支付接口(在线支付部分)
5. 用户完成在线支付后,扣减钱包余额,订单状态变更为"已支付"
6. 订单完成后,订单状态变更为"已完成"
7. 订单取消时(手动或自动),解冻钱包余额
#### Scenario: 钱包支付订单完成
- **WHEN** 用户使用钱包支付购买套餐,订单金额为 3000 分
- **THEN** 系统:
1. 创建订单,状态为"待支付",冻结钱包余额 3000 分
2. 订单处理完成后,扣减钱包余额 3000 分,解冻 3000 分,创建钱包明细记录(类型为"扣款"),订单状态变更为"已完成"
#### Scenario: 混合支付订单完成
- **WHEN** 用户使用混合支付购买套餐,钱包支付 2000 分 + 在线支付 3000 分
- **THEN** 系统:
1. 创建订单,状态为"待支付",冻结钱包余额 2000 分
2. 用户完成在线支付 3000 分后,扣减钱包余额 2000 分,解冻 2000 分,创建钱包明细记录,订单状态变更为"已支付"
3. 订单处理完成后,订单状态变更为"已完成"
#### Scenario: 订单手动取消,解冻钱包余额
- **WHEN** 用户使用钱包支付创建订单,订单金额为 3000 分,然后手动取消订单
- **THEN** 系统解冻钱包余额 3000 分(`frozen_balance` 减少 3000订单状态变更为"已取消"
#### Scenario: 订单超时自动取消,解冻钱包余额
- **WHEN** 用户使用混合支付创建订单,钱包预扣 2000 分30 分钟后订单超时
- **THEN** 系统自动取消订单,解冻钱包余额 2000 分(`frozen_balance` 减少 2000订单状态变更为"已取消"
#### Scenario: 订单取消(纯在线支付),无需解冻
- **WHEN** 用户使用纯在线支付创建订单30 分钟后订单超时
- **THEN** 系统自动取消订单,不执行钱包解冻操作(因为没有钱包预扣)
#### Scenario: 钱包解冻事务保证
- **WHEN** 订单取<E58D95><E58F96>涉及钱包解冻
- **THEN** 订单状态更新(`payment_status = 3``expires_at = NULL`)和钱包余额解冻在同一事务中完成,任一失败则全部回滚
#### Scenario: 钱包解冻失败回滚
- **WHEN** 订单取消时,钱包解冻失败(如钱包不存在、冻结余额不足)
- **THEN** 事务回滚,订单状态不变,返回错误信息"订单取消失败"