Files
邹进 2ead341f2f fix: 换货迁移按套餐是否已开始与新资产占位决定主套餐状态
- 未开始的主套餐(无生效、到期时间且无用量)迁移为待生效,新资产不满足实名条件(行业卡/已实名/无需实名)时标记等实名激活
- 已开始的主套餐在新资产无当前主套餐时原样迁移;新资产已有当前主套餐时改为待生效排队、清空周期与用量
- 迁移后重排新资产主套餐优先级,保证同一载体只有一个当前主套餐
- 换货审计记录套餐状态、优先级、用量的前后值

OpenSpec: fix-exchange-migration-package-state

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 23:14:19 +09:00

2.5 KiB
Raw Permalink Blame History

1. 迁移规则实现

  • 1.1 internal/service/exchange/ 新增换货侧实名条件判断:卡为行业卡、已实名,或适用实名策略(已绑定设备取设备策略,否则取卡策略)为无需实名;设备为无需实名策略,或任一已绑定卡为行业卡或已实名。注释注明口径同 StopResumeService.isRealnameOK。
  • 1.2 新增"套餐是否已开始"判断:activated_at 非空、expires_at 非空、data_usage_mb > 0、存在日流量记录、状态为已用完任一满足。
  • 1.3 改造 migratePackageUsageWithTx:事务内锁定新、旧资产主套餐记录;按 FindCurrentMainPackageForQueue 同一口径(生效中或已用完且未到期)在已锁定记录上判断新资产迁移前是否有当前主套餐;加油包与旧资产已到期主套餐原样改载体。
  • 1.4 按 spec 规则 1–3 逐条处理旧资产主套餐:未开始 → 待生效、清空时间、按实名条件设置等实名激活标记;首条已开始的当前主套餐在新资产无当前主套餐时原样迁移;其余已开始 → 待生效、清空时间、用量清零、不标记等实名激活。
  • 1.5 迁移后按"当前主套餐 → 新资产原有待生效 → 迁入待生效"把新资产未结束主套餐优先级重排为 1..n。
  • 1.6 对状态、优先级或用量变化的记录通过换货 auditWriter 写审计(前后值、换货单号)。
  • 1.7 返回的迁移套餐记录标识列表保持不变;日流量记录只保留,不删除。

2. 构建与文档

  • 2.1 gofmt、go build ./cmd/api ./cmd/worker。
  • 2.2 openspec validate --all、./scripts/context-health.sh。

3. 测试环境验证(AGENTS.md 规定自动化测试 N/A,不写单元测试)

  • 3.1 按 ENG-TEST-001 在维护者指定测试环境造数,逐一验证 spec 全部场景:新资产无套餐;新资产已有生效;新资产已用完未到期;新资产已过期未处理;未开始迁到未实名普通卡;老系统固定到期日套餐原样迁移;未开始迁到行业卡(孤儿扫描后激活);新资产只有待生效;旧资产多条主套餐。
  • 3.2 每个场景换货后查询新资产预计到期时间不为数据异常,审计记录前后值正确。

4. 存量数据

  • 4.1 核对 2026-11-04 换货单 1095–1104、1108 共 11 条主套餐:均有固定到期日,按 D1 属于已开始、新卡无当前主套餐,现状与本规则一致,不修正。