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

21 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 1. DTO 扩展
- [x] 1.1 在 `internal/model/dto/asset_dto.go``AssetResolveResponse` 中新增 `RealNameAt *time.Time` 字段json tag: `real_name_at`description: 最近一次完成实名的时间,未实名时为 null
- [x] 1.2 在 `internal/model/dto/asset_dto.go``BoundCardInfo` 中新增 `RealNameAt *time.Time` 字段json tag: `real_name_at`description: 该卡最近一次完成实名的时间,未实名时为 null
## 2. Service 填充逻辑
- [x] 2.1 在 `internal/service/asset/service.go``buildCardResolveResponse` 中填充 `resp.RealNameAt = card.FirstRealnameAt`
- [x] 2.2 在 `internal/service/asset/service.go``buildDeviceResolveResponse` 构建绑定卡列表时,为每个 `BoundCardInfo` 填充 `RealNameAt: c.FirstRealnameAt`
- [x] 2.3 在 `internal/service/asset/service.go``buildDeviceResolveResponse` 中,遍历绑定卡列表聚合设备级 `RealNameAt`:取所有卡 `FirstRealnameAt` 中的最小值(跳过 nil赋值给 `resp.RealNameAt`
## 3. Bug 修复:手动刷新路径补写实名时间
- [x] 3.1 在 `internal/service/iot_card/service.go``RefreshCardDataFromGateway` 中,在更新 `real_name_status` 后,检测 `0→1` 变化:若旧状态非已实名且新状态为已实名,则在 `updates` map 中同步写入 `first_realname_at = time.Now()`
## 4. 验证
- [x] 4.1 通过 PostgreSQL MCP 查询一张已知已实名的卡,确认 `first_realname_at` 不为 null调用 `/api/admin/assets/resolve/:identifier` 确认响应中 `real_name_at` 有值
- [x] 4.2 通过 PostgreSQL MCP 查询一台绑定了已实名卡的设备,调用 `/api/admin/assets/resolve/:identifier` 确认设备响应中 `real_name_at` = 最早绑定卡的实名时间,且 `cards` 列表中各卡 `real_name_at` 正确
- [x] 4.3 查询一张未实名的卡和一台所有卡均未实名的设备,确认 `real_name_at` 均为 null