All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m5s
- 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>
1.9 KiB
1.9 KiB
1. DTO 扩展
- 1.1 在
internal/model/dto/asset_dto.go的AssetResolveResponse中新增RealNameAt *time.Time字段(json tag:real_name_at,description: 最近一次完成实名的时间,未实名时为 null) - 1.2 在
internal/model/dto/asset_dto.go的BoundCardInfo中新增RealNameAt *time.Time字段(json tag:real_name_at,description: 该卡最近一次完成实名的时间,未实名时为 null)
2. Service 填充逻辑
- 2.1 在
internal/service/asset/service.go的buildCardResolveResponse中填充resp.RealNameAt = card.FirstRealnameAt - 2.2 在
internal/service/asset/service.go的buildDeviceResolveResponse构建绑定卡列表时,为每个BoundCardInfo填充RealNameAt: c.FirstRealnameAt - 2.3 在
internal/service/asset/service.go的buildDeviceResolveResponse中,遍历绑定卡列表聚合设备级RealNameAt:取所有卡FirstRealnameAt中的最小值(跳过 nil),赋值给resp.RealNameAt
3. Bug 修复:手动刷新路径补写实名时间
- 3.1 在
internal/service/iot_card/service.go的RefreshCardDataFromGateway中,在更新real_name_status后,检测0→1变化:若旧状态非已实名且新状态为已实名,则在updatesmap 中同步写入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