## ADDED Requirements ### Requirement: 全量迁移事务边界 系统 MUST 在 H5 确认完成且 `migrate_data=true` 时,使用**单一数据库事务**执行全量迁移。 该事务 SHALL 覆盖资产钱包、套餐、标签、客户绑定及资产状态更新等所有步骤;任一步骤失败 MUST 回滚。 #### Scenario: 迁移中途失败回滚 - **WHEN** 迁移第 N 步发生数据库错误 - **THEN** 系统 MUST 回滚整个事务,换货单状态保持未完成 --- ### Requirement: 11 张表迁移规则 系统 SHALL 按以下规则处理 11 张表: 1. `tb_asset_wallet`:将旧资产钱包余额转移到新资产钱包。 2. `tb_asset_wallet_transaction`:生成一条迁移流水记录(明确来源钱包、目标钱包、金额、业务类型)。 3. `tb_asset_recharge_record`:历史充值记录保留,不做更新。 4. `tb_package_usage`:将生效套餐关联到新资产(更新 `iot_card_id` 或 `device_id`)。 5. `tb_package_usage_daily_record`:随 `tb_package_usage` 关系迁移(保持套餐日明细连续性)。 6. `tb_order`:历史订单保留,不做更新。 7. `tb_commission`:历史分佣记录保留,不做更新。 8. `tb_data_usage_record`:历史流量记录保留,不做更新。 9. `tb_resource_tag`:复制旧资产标签到新资产。 10. `tb_personal_customer_device`:将绑定记录中的 `virtual_no` 更新为新资产虚拟号。 11. `tb_iot_card`/`tb_device`:迁移累计充值与首充状态到新资产,并将旧资产 `asset_status -> 3`。 #### Scenario: 钱包余额转移并记录流水 - **WHEN** 旧资产钱包余额为 5000 分 - **THEN** 新资产钱包余额增加 5000 分,旧钱包余额按迁移策略清零,并写入迁移流水 --- ### Requirement: 设备换设备特殊规则 设备换设备流程 MUST NOT 迁移 `DeviceSimBinding`。 系统 SHALL 视新设备为新硬件交付,新设备卡绑定由其自身体系决定,旧设备绑定关系保留历史。 #### Scenario: 设备换设备不复制绑定卡 - **WHEN** 执行设备换设备全量迁移 - **THEN** 系统 MUST 不创建或复制任何 `DeviceSimBinding` 记录到新设备 --- ### Requirement: 转新规则 系统 SHALL 在 H7 转新时执行代际隔离策略: - 资产 `generation + 1` - 创建新空钱包(新 `wallet_id`) - 清除累计充值状态与首充触发状态 - 清除 `PersonalCustomerDevice` 绑定 - 不删除历史业务数据 #### Scenario: 转新后历史数据保留 - **WHEN** 资产转新完成 - **THEN** 历史订单、充值、分佣、流量数据 MUST 仍可在旧代际查询链路中追溯