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

43 lines
2.1 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.
## 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-snapshot`IoT 卡列表展示绑定设备虚拟号的能力——包括 `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.go`BindCard / UnbindCard 时更新卡字段
- `internal/task/device_import.go`:导入时批量写入 `device_virtual_no`