All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m28s
- 重写 parseCardRows:移除列名识别,固定跳过第1行表头,按 col0=ICCID、 col1=MSISDN、col2=VirtualNo 取值,VirtualNo 升级为必填字段 - 重写 ParseDeviceExcel:移除 buildDeviceColumnIndex,IMEI 调整至第5列 新增 MaxSimSlots 范围校验 [1,4],整行为空时不计入 total - 删除 findCardColumns 和 buildDeviceColumnIndex 两个冗余函数 - ImportIotCardRequest 新增 card_category 字段(normal/industry,默认 normal) - IotCardImportTask model 新增 card_category 字段 - 迁移 000111:tb_iot_card_import_task 新增 card_category 列 - CreateImportTask 将 req.CardCategory 写入任务,空串兜底 normal - processBatch 改用 task.CardCategory 替代写死的 CardCategoryNormal - ImportTaskResponse 新增 card_category 字段返回 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.2 KiB
2.2 KiB
Why
业务侧要求 Excel 导入模板使用中文表头,但现有实现依赖英文列名匹配,导致中文表头的文件无法正确导入。同时,IoT 卡导入时卡业务类型(行业卡/普通卡)写死为普通卡,无法在导入批次中指定行业卡。
What Changes
- Excel 按列位置读取:移除基于列名识别的逻辑,改为按固定列索引取值,第一行固定作为表头跳过,表头内容不再影响解析结果
- 删除冗余函数:删除
findCardColumns()和buildDeviceColumnIndex()两个函数 - 设备列顺序调整:设备导入列顺序从原来的排列调整为业务确认的顺序(IMEI 提前至第5列)
- IoT 卡导入支持卡业务类型:
ImportIotCardRequest新增card_category字段(批次级别),导入时按请求参数设置,默认为normal
Capabilities
New Capabilities
(无新能力)
Modified Capabilities
iot-card-import-task:导入请求新增card_category字段,任务模型同步新增该字段,导入时按批次统一设置卡业务类型device-import:移除列名识别逻辑,改为按固定列位置读取,列顺序调整为业务确认顺序
Impact
pkg/utils/excel.go:核心解析逻辑重写(按列位置取值),删除findCardColumns/buildDeviceColumnIndex两个函数internal/model/dto/iot_card_dto.go:ImportIotCardRequest新增CardCategory字段(带oneof=normal industry校验),ImportTaskResponse新增card_category返回internal/model/iot_card_import_task.go:IotCardImportTask新增CardCategory字段migrations/:新增迁移为tb_iot_card_import_task增加card_category列(注:卡主表tb_iot_card早已有该字段,本次只补"批次级载体列")internal/service/iot_card_import/service.go:CreateImportTask将req.CardCategory写入 task,空串兜底为normalinternal/task/iot_card_import.go:使用task.CardCategory替代写死的CardCategoryNormal- 模板文件:需同步更新 IoT 卡、设备导入模板
.xlsx,确保列顺序与代码一致(高风险:列顺序不匹配会导致数据静默错位)