Files
junhong_cmp_fiber/.planning/phases/03.1-sync-info-phase-3-dto/03.1-DISCUSSION-LOG.md

4.9 KiB
Raw Blame History

Phase 03.1: 设备 sync-info 读取链路修复 - Discussion Log

仅供审计参考。 不用于规划、研究或执行 Agent 的输入。 决策结论见 CONTEXT.md — 本日志保留了讨论过程中的备选项。

Date: 2026-03-28 Phase: 03.1-sync-info-phase-3-dto Areas discussed: Plan 分组策略、IsCurrent 实现细节、作用域完整性确认C 端 stub + 实时数据架构)


Plan 分组策略

选项 说明 选中
1 Plan 合并 3 修复点同属 DTO 映射缺口,统一处理
2 Plans 分离 device/service 系 + asset/service 系拆分

用户选择: 1 Plan 合并 备注: 修复性质单一DTO 映射缺落),无依赖分拆理由


IsCurrent 实现方式

选项 说明 选中
isCurrentMap 标准扩展 与 slotMap 同构,在 bindings 遍历时同时构建
直接引用 binding.IsCurrent 无 map在 BoundCardInfo 构建时直接访问外层 binding

用户选择: isCurrentMap 标准扩展 备注: 与 asset/service.go 的 slotMap 保持风格一致


作用域完整性C 端 stub

选项 说明 选中
一并修复 C 端 stub 替换 buildMockDeviceRealtime() 为真实 Gateway 数据
仅修复管理端 C 端 stub 留待后续 Phase

用户选择: 一并修复


C 端 DeviceRealtimeInfo 修复粒度

选项 说明 选中
只补 DB 存储字段 (3 个) OnlineStatus/SwitchMode/SoftwareVersion其余 nil
完整替换:调用 Gateway 实时调用 sync-info返回所有可用字段
推迟到独立 Phase C 端 stub 修复是独立需求

用户选择: 完整替换,调用 Gateway


设备实时数据架构(新增议题)

用户补充说明(原文):

"不管是C端还是后台管理或者哪里,查询设备资产的时候其实都是需要实时数据的,这部分实时数据是很关键的...设备不一样,设备他具有离线,在线实时的特性,所以我们直接存没有什么意义,必然只能实时查询"

架构原则确认:

  • 单卡资产上游属性 → 轮询系统同步到 DB → 查询 DB
  • 设备资产上游属性 → 实时从 Gateway 查询(不缓存)
  • 设备管理列表 → DB 缓存字段(不需要实时)
  • 设备资产详情B 端 + C 端)→ 实时 Gateway

关键实时字段优先级

用户原文:

"实时状态要的东西也不多,主要是在线状态,连接设备数,网络信号强度,设备电量" "哦还有Wi-Fi密码跟Wi-Fi名称"

关键字段列表:

  1. 在线状态 (OnlineStatus)
  2. 网络信号强度 (Rsrp/Rsrq/Rssi/Sinr)
  3. 连接设备数 (MaxClients)
  4. 设备电量 (BatteryLevel)
  5. WiFi 名称 (SSID)
  6. WiFi 密码 (WifiPassword)
  7. 当前使用卡 ICCID (CurrentIccid)

Gateway 失败处理

选项 说明 选中
返回部分数据 DeviceRealtime = null其他资产信息正常返回
返回错误 设备离线/Gateway 超时直接报错

用户选择: 返回部分数据 备注: 与现有卡资产处理逻辑一致


查询范围(设备列表 vs 详情)

用户原文:

"除了列表,因为列表要实时状态没有什么意义,但是像详情跟C端我就很需要实时数据了"

决策:

  • 设备管理列表 → DB 缓存字段toDeviceResponse 补全 5 字段即可)
  • 设备资产详情GetRealtimeStatus→ 实时 Gateway

统一资产视图架构

用户原文(核心说明):

"我们有设备资产跟单卡资产两种,按照之前的做法其实是大家各有各的详情,我嫌弃麻烦而且不符合业务的要求,所以我们做成统一的口子,这个口子可以看到任意资产的完整生态信息"

影响:

  • 统一口子 = asset/service.GetRealtimeStatus()(管理端)+ assetService.Resolve()C 端)
  • 设备详情不走 device/service.Get(),走资产视图

B 端 vs C 端 DTO 结构

选项 说明 选中
共享同一结构体 B/C 端复用 DeviceRealtimeInfo
独立结构体 B 端 DeviceGatewayInfo + C 端 DeviceRealtimeInfo

用户原文:

"不能是同一个结构体,要考虑到未来后台管理可能展示的信息在C端不展示的情况"

决策: 独立结构体

  • B 端:DeviceGatewayInfoasset_dto.go
  • C 端:DeviceRealtimeInfoclient_asset_dto.go已存在

Agent's Discretion

  • DeviceGatewayInfo B 端字段集合的最终范围(包含全量还是仅关键字段)
  • 防高频调用冷却 Key 策略C 端每次进详情页都调 Gateway

Deferred Ideas

  • 设备 Refresh 接口语义重评("刷新接口对设备意义不大")→ Phase 4+ 评估
  • 防高频调用优化 → Phase 4 运营阶段评估