## ADDED Requirements

### Requirement: 充值订单创建
系统 SHALL 在强充发起时创建 `tb_recharge_order` 记录，记录充值金额、关联资产、关联套餐 IDs，初始状态为待支付（status=1）。同时创建对应的 `tb_payment` 记录（payment_method=wechat，status=1）。

#### Scenario: 强充发起成功
- **WHEN** 用户发起强充（余额不足场景），系统成功调用微信支付 API
- **THEN** `tb_recharge_order` 创建一条记录（status=1，linked_package_ids 已设置）
- **THEN** `tb_payment` 创建一条关联记录（order_type=recharge_order，payment_method=wechat，status=1）
- **THEN** 接口返回充值订单信息 + 微信支付参数

#### Scenario: 微信支付 API 调用失败
- **WHEN** 系统在调用微信支付 API 时发生错误
- **THEN** `tb_recharge_order` 记录被回滚（或标记为已关闭 status=3）
- **THEN** `tb_payment` 记录被回滚
- **THEN** Redis 幂等键被清除，允许用户重新发起

### Requirement: 充值订单状态流转
系统 SHALL 通过支付回调更新充值订单状态：待支付（1）→ 已支付（2），关闭（3），退款（4）。状态更新使用乐观锁确保幂等性。

#### Scenario: 微信支付回调成功
- **WHEN** 微信支付成功回调到达，payment_no 存在于 `tb_payment`
- **THEN** `tb_payment.status` 更新为 2，记录 third_party_trade_no 和 paid_at
- **THEN** 关联的 `tb_recharge_order.status` 更新为 2
- **THEN** 钱包余额增加，创建钱包流水记录
- **THEN** 若 linked_package_ids 非空，触发 auto_purchase 异步任务

#### Scenario: 重复回调幂等处理
- **WHEN** 同一 payment_no 的支付成功回调重复到达
- **THEN** 系统检测到 `tb_payment.status` 已为 2，直接返回成功
- **THEN** 不重复更新钱包余额，不重复触发 auto_purchase

### Requirement: 自动购包状态追踪
系统 SHALL 在 `tb_recharge_order` 上记录 auto_purchase_status，由 Asynq Worker 更新，支持 pending / success / failed 三种状态。

#### Scenario: 自动购包成功
- **WHEN** auto_purchase 任务成功创建套餐订单并激活套餐
- **THEN** `tb_recharge_order.auto_purchase_status` 更新为 success

#### Scenario: 自动购包失败
- **WHEN** auto_purchase 任务在最大重试次数后仍失败
- **THEN** `tb_recharge_order.auto_purchase_status` 更新为 failed
- **THEN** 记录错误日志，告警通知运营

### Requirement: 充值订单列表查询
系统 SHALL 支持按 iot_card_id 或 device_id + generation 查询充值订单列表，支持按 status 过滤。

#### Scenario: 按资产查询充值订单
- **WHEN** 系统查询某张卡的充值订单列表
- **THEN** 返回该卡（iot_card_id 匹配）且 generation 匹配的所有充值订单，按 created_at 降序
