feat: 资产标识符标准化、资产历史订单查询及导入虚拟号强制验证
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m21s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m21s
主要变更: - 新增 AssetIdentifier 模型及 Store,统一管理资产标识符(ICCID/IMEI/SN 等) - 新增迁移:asset_identifier 表、order 表新增 asset_identifier 字段、iot_card.virtual_no NOT NULL 约束 - 资产 Handler/Service/Route 全面重构,支持标识符路由查询与解析 - 新增资产历史订单查询接口,支持跨设备/卡/钱包维度的订单聚合 - 设备与物联卡导入任务强制校验虚拟号,缺失时直接拒绝 - Excel 工具函数优化,前端导入指引文档同步更新 - 归档三个 OpenSpec 提案:asset-identifier-standardization、asset-historical-orders、import-mandatory-virtual-no - 更新 OpenAPI 文档及相关 DTO Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
## Why
|
||||
|
||||
虚拟号(VirtualNo)是系统中资产的核心业务标识符,也是提案一确立的接口参数规范的基础。然而当前导入流程将其作为可选字段:IoT 卡导入时 VirtualNo 可为空(数据库层 nullable),设备导入时 VirtualNo 为空的行会被静默跳过而非报错。这导致可能存在没有虚拟号的资产进入系统,无法通过统一标识符接口操作,与资产标识符规范化目标冲突。
|
||||
|
||||
## What Changes
|
||||
|
||||
- **[BREAKING]** IoT 卡导入:VirtualNo 改为必填,Excel 中 VirtualNo 列为空的行报错拒绝
|
||||
- **[BREAKING]** 设备导入:VirtualNo 为空的行从原有的"静默跳过"改为"记录为失败行"并报告原因
|
||||
- **[NEW]** 数据库迁移:`tb_iot_card.virtual_no` 添加 NOT NULL 约束和去除条件唯一索引改为无条件唯一索引(配合清库执行)
|
||||
- 更新 Excel 导入错误提示,明确 VirtualNo 为必填项
|
||||
- 更新接口文档,标注 VirtualNo 为必填列
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
(无新能力——本提案为约束强化,不新增业务功能)
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `iot-card-import-task`:VirtualNo 校验规则从"可选"改为"必填",空值触发失败行记录
|
||||
- `device-import`:VirtualNo 校验规则从"跳过空值行"改为"空值行计入失败并报告原因"
|
||||
|
||||
## Impact
|
||||
|
||||
**受影响的代码**:
|
||||
- `pkg/utils/excel.go`:`parseCardRows()` 和设备行解析逻辑,增加 VirtualNo 空值校验
|
||||
- `internal/task/iot_card_import.go`:移除"空 VirtualNo 跳过"逻辑,改为记录失败行
|
||||
- `internal/task/device_import.go`:将"空 VirtualNo 跳过"改为"记录失败行"
|
||||
- `internal/model/iot_card.go`:`VirtualNo` 字段 GORM tag 更新,去掉 nullable,更新注释
|
||||
- `migrations/`:新增迁移文件,为 `tb_iot_card.virtual_no` 加 NOT NULL 约束
|
||||
|
||||
**前置条件**:
|
||||
- 测试数据库中现有 `virtual_no IS NULL` 的 IoT 卡记录需先清除(测试阶段直接清库)
|
||||
- 设备的 `virtual_no` 在数据库层已经是 NOT NULL,无需迁移,仅修改导入行为
|
||||
|
||||
**破坏性影响**:
|
||||
- 现有 IoT 卡导入 Excel 模板如果没有 VirtualNo 列,导入将全部失败;需通知使用方更新模板
|
||||
Reference in New Issue
Block a user