Files
junhong_cmp_fiber/openspec/changes/fix-realname-activation-logic/tasks.md
huang 4aab0bcbf2
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m39s
提案以及归档
2026-04-18 09:10:29 +08:00

2.7 KiB
Raw Blame History

1. 修复购买时实名状态检查order/service.go

  • 1.1 在 activateMainPackage 的 REALNAME-02 决策块中,扩展卡信息查询:将 tx.Select("card_category") 改为 tx.Select("card_category", "real_name_status"),并从结果读取 currentlyRealnamed 标志
  • 1.2 在 REALNAME-02 决策块中,新增 device 载体的实名状态检查:当 carrierType == "device" 时,通过 tb_device_sim_bindingbind_status=1, deleted_at IS NULL)子查询统计绑定卡中 real_name_status=1 的数量,count > 0currentlyRealnamed=true
  • 1.3 修改 expiry_base != "from_purchase" 分支的决策逻辑:若 currentlyRealnamed=true 则保持 status=Active(不切换为 pending记录 Info 日志"购买时载体已实名,直接激活套餐";若 currentlyRealnamed=false 则保持原有 pending_realname_activation=true 逻辑
  • 1.4 运行 lsp_diagnostics 确认 internal/service/order/service.go 无编译错误

2. 扩展 PollingRealnameHandlerpolling_realname_handler.go

  • 2.1 在 PollingRealnameHandler 结构体中新增字段 deviceSimBindingStore *postgres.DeviceSimBindingStore
  • 2.2 更新 NewPollingRealnameHandler 构造函数签名,在参数列表末尾新增 deviceSimBindingStore *postgres.DeviceSimBindingStore,并在函数体中赋值到结构体字段
  • 2.3 新增 triggerDeviceRealnameActivation(ctx context.Context, cardID uint) 函数:调用 h.deviceSimBindingStore.GetActiveBindingByCardID 获取设备绑定;若无绑定(ErrRecordNotFound)静默返回;若有绑定则提交 carrier_type="device", carrier_id=binding.DeviceIDTaskTypePackageFirstActivation Asynq 任务(与卡级任务相同的 MaxRetry/Timeout/Queue 配置);失败记录 Warn 日志,不中断流程
  • 2.4 在 isFirstRealname 分支中,在调用 triggerFirstRealnameActivation 之后追加调用 triggerDeviceRealnameActivation(ctx, cardID)
  • 2.5 运行 lsp_diagnostics 确认 internal/task/polling_realname_handler.go 无编译错误

3. 更新 Worker 构造调用pkg/queue/handler.go

  • 3.1 在 registerPollingHandlers 中,将 task.NewPollingRealnameHandler(...) 调用末尾追加参数 h.workerResult.Stores.DeviceSimBinding
  • 3.2 运行 lsp_diagnostics 确认 pkg/queue/handler.go 无编译错误

4. 整体编译验证

  • 4.1 执行 go build ./... 确认整个项目编译通过,零错误零警告
  • 4.2 使用 PostgreSQL MCP 执行存量修复 SQLtb_package_usage.id=1 的套餐手动激活(status=1, pending_realname_activation=false, activated_at=NOW(), expires_at 按套餐配置计算),并验证更新结果