## ADDED Requirements ### Requirement: 购买套餐支付成功后自动复机 系统 SHALL 在支付回调成功激活套餐(`PackageUsage.status` 变为 1)后,对因流量耗尽而停机的卡自动触发复机操作。 #### Scenario: C 端购买套餐支付成功后停机卡自动复机 - **GIVEN** 卡 C1 因流量耗尽停机(`network_status=0`,`stop_reason=traffic_exhausted`),已完成实名认证(`real_name_status=1`) - **WHEN** C 端用户为 C1 购买新套餐并完成微信/支付宝支付,`HandlePaymentCallback` 事务提交成功 - **THEN** 系统异步调用 `ResumeCardIfStopped(ctx, "iot_card", cardID)` - **AND** 系统调用 `gateway.StartCard`,更新 `network_status=1`,清空 `stop_reason` #### Scenario: 后台购买套餐(钱包支付)后停机卡自动复机 - **GIVEN** 卡 C2 因流量耗尽停机,已实名 - **WHEN** 后台管理员通过钱包支付为 C2 购买套餐,`HandlePaymentCallback` 事务提交成功,套餐状态为 `status=1` - **THEN** 系统调用复机逻辑,C2 自动复机 #### Scenario: 购买排队套餐(新套餐为 Pending 状态)时不触发复机 - **GIVEN** 卡 C3 已有生效中套餐,用户购买第二个套餐(新套餐创建为 `status=0` Pending) - **WHEN** 支付成功,`HandlePaymentCallback` 完成 - **THEN** 系统 SHALL NOT 触发复机调用(仅在套餐变为 `status=1` 时才复机) #### Scenario: 未实名卡购买套餐不触发复机 - **GIVEN** 卡 C4 停机(`stop_reason=traffic_exhausted`),但 `real_name_status=0`(未实名) - **WHEN** 为 C4 购买新套餐且套餐激活为 `status=1` - **THEN** `ResumeCardIfStopped` 内部检测到未实名,静默跳过,C4 保持停机状态 #### Scenario: 停机原因非流量耗尽时不触发复机 - **GIVEN** 卡 C5 因手动停机(`stop_reason=manual`) - **WHEN** 为 C5 购买新套餐并激活 - **THEN** `ResumeCardIfStopped` 检测到 `stop_reason` 不为 `traffic_exhausted`,静默跳过 #### Scenario: 设备类型载体购买套餐后自动复机 - **GIVEN** 设备 D1 绑定了 3 张卡,其中 2 张已实名且因流量耗尽停机,1 张未实名 - **WHEN** 为 D1 购买设备级套餐并激活 - **THEN** 已实名的 2 张卡自动复机,未实名的 1 张卡保持停机状态