# Proposal: 替换CSV为Excel格式导入 ## Why 运营团队在使用Excel编辑CSV文件时,超过15位的长数字(ICCID、设备号等)会被Excel自动转换为科学记数法,导致数据损坏无法使用。这种数据损坏问题每次导入都可能发生,给运营团队带来困扰。由于运营团队日常工作习惯使用Excel,直接支持Excel格式(.xlsx)可以从根本上解决这个问题,同时提升用户体验。 ## What Changes **核心变更**: - **移除**: 删除所有CSV解析相关代码 (`pkg/utils/csv.go`, `csv_test.go`) - **新增**: 添加Excel解析支持 (`pkg/utils/excel.go`, `excel_test.go`),使用 `excelize` 库 - **修改**: 更新IoT卡导入和设备导入的任务处理器,使用Excel解析器替代CSV解析器 - **更新**: API文档描述从"上传CSV文件"改为"上传Excel文件" - **约束**: 只支持 `.xlsx` 格式(Excel 2007+),不支持旧版 `.xls` 格式 **不变部分**: - 数据结构(`CardItem`, `DeviceRow`)保持不变 - 业务逻辑(验证、批量处理、错误处理)保持不变 - 对象存储集成保持不变 - 历史导入任务记录保持不变(仅新任务使用Excel) ## Capabilities ### New Capabilities 无新增功能 ### Modified Capabilities - `device-import`: 设备导入功能的文件格式要求从CSV改为Excel(.xlsx) - `iot-card-import-task`: IoT卡导入功能的文件格式要求从CSV改为Excel(.xlsx) ## Impact **代码影响**: - `pkg/utils/`: 删除CSV解析器,新增Excel解析器 - `internal/task/iot_card_import.go`: 修改文件解析逻辑 - `internal/task/device_import.go`: 修改文件解析逻辑 - `internal/routes/iot_card.go`: 更新API文档描述 - `internal/routes/device.go`: 更新API文档描述 - 测试文件: 更新相关单元测试和集成测试 **依赖影响**: - 新增依赖: `github.com/xuri/excelize/v2` (成熟的Go Excel库,18k+ stars) **前端影响**: - 上传组件的 `accept` 属性从 `*` 改为 `.xlsx` - 文件验证逻辑需更新(检查扩展名为.xlsx) - 需提供Excel模板文件下载(前端准备静态文件) - 用户提示文案更新 **运营影响**: - **正面**: 无需担心数据损坏,直接用Excel编辑即可 - **培训**: 需通知运营团队格式变更(但更简单了) - **模板**: 需提供标准Excel模板文件 **兼容性**: - **历史数据**: 历史CSV导入任务记录保持可查询,但不支持重新导入 - **迁移策略**: 开发环境直接切换,无需灰度(无生产数据) - **回滚**: 如需回滚,恢复CSV代码即可(Git revert) **风险评估**: - **文件大小**: Excel文件比CSV大3-5倍,但对象存储成本影响很小(1万行约3-5MB) - **解析性能**: excelize性能良好,1万行Excel解析 < 1秒,不影响现有批量处理 - **格式兼容**: 只支持.xlsx,如用户上传.xls会返回友好错误提示