Files
junhong_cmp_fiber/openspec/changes/archive/2026-01-23-iot-card-standalone-management/proposal.md
huang a924e63e68
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m42s
feat: 实现物联网卡独立管理和批量导入功能
新增物联网卡独立管理模块,支持单卡查询、批量导入和状态管理。主要变更包括:

功能特性:
- 新增物联网卡 CRUD 接口(查询、分页列表、删除)
- 支持 CSV/Excel 批量导入物联网卡
- 实现异步导入任务处理和进度跟踪
- 新增 ICCID 号码格式校验器(支持 Luhn 算法)
- 新增 CSV 文件解析工具(支持编码检测和错误处理)

数据库变更:
- 移除 iot_card 和 device 表的 owner_id/owner_type 字段
- 新增 iot_card_import_task 导入任务表
- 为导入任务添加运营商类型字段

测试覆盖:
- 新增 IoT 卡 Store 层单元测试
- 新增 IoT 卡导入任务单元测试
- 新增 IoT 卡集成测试(包含导入流程测试)
- 新增 CSV 工具和 ICCID 校验器测试

文档更新:
- 更新 OpenAPI 文档(新增 7 个 IoT 卡接口)
- 归档 OpenSpec 变更提案
- 更新 API 文档规范和生成器指南

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-24 11:03:43 +08:00

57 lines
2.5 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.
# Change: IoT 卡单卡管理与所有权模型重构
## Why
当前 IoT 卡和设备模型中使用 `owner_type` + `owner_id` 表示所有权,与数据权限使用的 `shop_id` 字段存在冗余,且语义不清晰:
- 代理分销给下级时所有权实际是转移到下级店铺shop_id 变化)
- 企业用户没有"所有权"是通过授权表EnterpriseCardAuthorization管理
- 个人客户完全没有所有权概念,是基于 ICCID/设备号操作
同时,业务需要"单卡管理"功能:查看和导入未绑定设备的 IoT 卡,支持大批量 CSV 导入(几万条)并跟踪导入任务状态。
## What Changes
### 模型重构(**BREAKING**
- **移除 IotCard 的 owner_type/owner_id 字段**:改用 shop_id 表示所有权NULL=平台所有,有值=店铺所有)
- **移除 Device 的 owner_type/owner_id 字段**:同上
- 保留 AssetAllocationRecord 和 CardReplacementRecord 中的 Owner 字段(历史记录追溯用)
### 新增功能
- **单卡列表 API**:查询未绑定设备的 IoT 卡,支持多维度筛选
- **批量导入 ICCID API**:支持 CSV 文件上传,异步处理,支持几万条数据
- **导入任务记录表**:跟踪导入进度、成功/跳过/失败统计及详情
### ICCID 校验规则调整
- 电信:严格 19 位
- 联通/移动/广电:严格 20 位
- 支持字母数字混合(移动 ICCID 有字母)
## Capabilities
### New Capabilities
- `iot-card-import-task`: IoT 卡导入任务管理,包含导入任务模型、进度跟踪、结果详情记录
### Modified Capabilities
- `iot-card`: 移除 owner_type/owner_id 字段,改用 shop_id新增单卡列表查询调整 ICCID 校验规则
- `iot-device`: 移除 owner_type/owner_id 字段,改用 shop_id
## Impact
### 数据库变更
- `tb_iot_card` 表:删除 owner_type、owner_id 列
- `tb_device` 表:删除 owner_type、owner_id 列
- 新增 `tb_iot_card_import_task`
### 代码影响
- `internal/model/iot_card.go`:移除 OwnerType、OwnerID 字段
- `internal/model/device.go`:移除 OwnerType、OwnerID 字段
- `internal/model/iot_card_import_task.go`:新增
- `openspec/specs/iot-card/spec.md`:修改所有权相关描述
- `openspec/specs/iot-device/spec.md`:修改所有权相关描述
### API 影响
- 新增:`GET /api/admin/iot-cards/standalone` - 单卡列表
- 新增:`POST /api/admin/iot-cards/import` - 发起导入任务
- 新增:`GET /api/admin/iot-cards/import-tasks` - 导入任务列表
- 新增:`GET /api/admin/iot-cards/import-tasks/:id` - 导入任务详情