Files
junhong_cmp_fiber/openspec/changes/archive/2026-04-09-feat-iot-card-device-virtual-no/proposal.md
huang e9df1e7ded
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m28s
feat: IoT卡新增绑定设备虚拟号快照字段
- tb_iot_card 新增 device_virtual_no 字段,存储绑定设备的虚拟号快照
- 列表/详情接口响应新增 device_virtual_no 字段
- 列表接口 is_standalone 改为可选参数(不传返回全部卡)
- 移除列表接口 virtual_no 查询参数
- 绑卡/解绑时同步更新 device_virtual_no 快照
- 设备导入时批量写入 device_virtual_no 快照
- 归档 feat-iot-card-device-virtual-no 变更提案

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

2.1 KiB
Raw Blame History

Why

/api/admin/iot-cards/standalone 当前使用硬编码 WHERE is_standalone = true 过滤,导致已绑定设备的 IoT 卡完全不可见。运营人员无法在卡管列表中看到这些卡,也无法通过列表查询某张卡目前归属于哪台设备,造成管理盲区。

What Changes

  • 移除硬编码 is_standalone = true 过滤is_standalone 改为可选查询参数,不传时返回全部卡(含绑定设备的卡)
  • 移除 virtual_no 列表过滤参数:不再支持按卡虚拟号模糊搜索
  • 新增 device_virtual_no 冗余快照字段:在 tb_iot_card 表新增 device_virtual_no 列,记录当前绑定设备的虚拟号(无绑定时为空字符串)
  • 响应新增 device_virtual_no 字段:列表和详情接口均返回对应的设备虚拟号
  • 写入时机快照BindCard / UnbindCard / 设备导入device_import时同步写入或清空该字段

Capabilities

New Capabilities

  • iot-card-device-snapshotIoT 卡列表展示绑定设备虚拟号的能力——包括 device_virtual_no 快照字段的数据库维护、列表/详情响应扩展、以及 is_standalone 可选过滤。

Modified Capabilities

(无现有 spec 级别的行为变更,仅实现层调整)

Impact

数据库

  • tb_iot_card 新增列 device_virtual_no VARCHAR(100) NOT NULL DEFAULT ''
  • 迁移时回填现有绑定数据

API

  • GET /api/admin/iot-cards/standalone
    • 查询参数:移除 virtual_no,新增 is_standalone(可选布尔)
    • 响应:新增 device_virtual_no 字段
  • GET /api/admin/iot-cards/standalone/:iccid(详情)
    • 响应:新增 device_virtual_no 字段

代码

  • internal/model/iot_card.go:新增字段
  • internal/model/dto/iot_card_dto.go:修改 Request / Response DTO
  • internal/store/postgres/iot_card_store.go:移除硬编码过滤,支持可选 is_standalone 条件
  • internal/service/iot_card/service.go:传递新过滤参数,填充响应字段
  • internal/service/device/binding.goBindCard / UnbindCard 时更新卡字段
  • internal/task/device_import.go:导入时批量写入 device_virtual_no