## MODIFIED Requirements

### Requirement: 更新累计充值金额

订单支付成功后系统 SHALL 更新卡/设备的累计充值金额。

**关键修复**：每次支付成功都必须写回累计充值金额，确保累计值能正确用于一次性佣金的累计触发判断。

#### Scenario: 单卡订单更新累计充值

- **WHEN** 单卡订单支付成功，金额 100 元
- **THEN** 系统读取 IotCard.accumulated_recharge 当前值
- **AND** 增加 10000 分（100 元 = 10000 分）
- **AND** 将新值写回 IotCard.accumulated_recharge
- **AND** 使用更新后的累计值判断是否触发一次性佣金

#### Scenario: 设备订单更新累计充值

- **WHEN** 设备订单支付成功，金额 300 元
- **THEN** 系统读取 Device.accumulated_recharge 当前值
- **AND** 增加 30000 分（300 元 = 30000 分）
- **AND** 将新值写回 Device.accumulated_recharge
- **AND** 使用更新后的累计值判断是否触发一次性佣金

#### Scenario: 累计充值更新使用原子操作

- **WHEN** 更新累计充值金额
- **THEN** 系统使用 SQL 原子操作（如 `accumulated_recharge = accumulated_recharge + ?`）
- **OR** 使用 GORM 乐观锁（version 字段）
- **AND** 确保并发场景下累计值不会丢失

#### Scenario: 更新失败不影响佣金计算

- **WHEN** 累计充值金额更新失败（数据库错误、并发冲突等）
- **THEN** 系统记录错误日志
- **AND** 继续执行后续的佣金计算流程（成本价差、一次性佣金等）
- **AND** 不因累计值更新失败而导致整个佣金计算失败

---

### Requirement: 一次性佣金触发检查

系统 SHALL 在更新累计充值金额后立即检查是否触发一次性佣金。

#### Scenario: 累计达到阈值触发佣金

- **WHEN** 更新累计充值后，累计值 ≥ 配置阈值
- **AND** 卡/设备的 first_commission_paid = false
- **THEN** 系统发放一次性佣金
- **AND** 标记 first_commission_paid = true

#### Scenario: 累计未达到阈值不触发

- **WHEN** 更新累计充值后，累计值 < 配置阈值
- **THEN** 系统不发放一次性佣金
- **AND** first_commission_paid 保持不变

#### Scenario: 已发放过不重复触发

- **WHEN** 更新累计充值后，累计值 ≥ 配置阈值
- **AND** 卡/设备的 first_commission_paid = true
- **THEN** 系统不重复发放一次性佣金

---

## ADDED Requirements

### Requirement: 累计充值更新日志记录

系统 SHOULD 记录累计充值金额的更新操作，便于问题排查。

#### Scenario: 记录更新前后的累计值

- **WHEN** 更新累计充值金额
- **THEN** 系统在日志中记录：订单 ID、资源类型（卡/设备）、资源 ID、更新前累计值、本次充值金额、更新后累计值

#### Scenario: 记录更新失败原因

- **WHEN** 累计充值金额更新失败
- **THEN** 系统在日志中记录：订单 ID、资源 ID、失败原因（错误信息）、重试次数（如适用）
