Files
junhong_cmp_fiber/openspec/changes/archive/2026-04-09-add-asset-realname-time/tasks.md
huang 6dfc5c0301
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m5s
feat: 资产解析接口新增实名时间字段
- AssetResolveResponse 新增 real_name_at 字段:card 类型取 first_realname_at,device 类型取绑定卡中最小的实名时间
- BoundCardInfo 新增 real_name_at 字段:各卡自己的 first_realname_at
- RefreshCardDataFromGateway 手动刷新路径补写实名时间:检测到 0→1 变化时同步写入 first_realname_at
- 同步更新 asset-resolve 规格文档

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:12:28 +08:00

1.9 KiB
Raw Blame History

1. DTO 扩展

  • 1.1 在 internal/model/dto/asset_dto.goAssetResolveResponse 中新增 RealNameAt *time.Time 字段json tag: real_name_atdescription: 最近一次完成实名的时间,未实名时为 null
  • 1.2 在 internal/model/dto/asset_dto.goBoundCardInfo 中新增 RealNameAt *time.Time 字段json tag: real_name_atdescription: 该卡最近一次完成实名的时间,未实名时为 null

2. Service 填充逻辑

  • 2.1 在 internal/service/asset/service.gobuildCardResolveResponse 中填充 resp.RealNameAt = card.FirstRealnameAt
  • 2.2 在 internal/service/asset/service.gobuildDeviceResolveResponse 构建绑定卡列表时,为每个 BoundCardInfo 填充 RealNameAt: c.FirstRealnameAt
  • 2.3 在 internal/service/asset/service.gobuildDeviceResolveResponse 中,遍历绑定卡列表聚合设备级 RealNameAt:取所有卡 FirstRealnameAt 中的最小值(跳过 nil赋值给 resp.RealNameAt

3. Bug 修复:手动刷新路径补写实名时间

  • 3.1 在 internal/service/iot_card/service.goRefreshCardDataFromGateway 中,在更新 real_name_status 后,检测 0→1 变化:若旧状态非已实名且新状态为已实名,则在 updates map 中同步写入 first_realname_at = time.Now()

4. 验证

  • 4.1 通过 PostgreSQL MCP 查询一张已知已实名的卡,确认 first_realname_at 不为 null调用 /api/admin/assets/resolve/:identifier 确认响应中 real_name_at 有值
  • 4.2 通过 PostgreSQL MCP 查询一台绑定了已实名卡的设备,调用 /api/admin/assets/resolve/:identifier 确认设备响应中 real_name_at = 最早绑定卡的实名时间,且 cards 列表中各卡 real_name_at 正确
  • 4.3 查询一张未实名的卡和一台所有卡均未实名的设备,确认 real_name_at 均为 null