## 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** 订单取��涉及钱包解冻
- **THEN** 订单状态更新（`payment_status = 3`、`expires_at = NULL`）和钱包余额解冻在同一事务中完成，任一失败则全部回滚

#### Scenario: 钱包解冻失败回滚

- **WHEN** 订单取消时，钱包解冻失败（如钱包不存在、冻结余额不足）
- **THEN** 事务回滚，订单状态不变，返回错误信息"订单取消失败"
