Admin:档口入库码单表迁移与 Excel 幂等导入 #231

Open
opened 2026-08-15 08:40:45 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#224
  • 阶段:数据导入

要解决什么

已确认的“档口入库码”原型需要把线下 Excel 从一次性载体转换为可追踪的业务记录。当前 Admin 没有对应表、导入解析器和仓储接口,无法进入后续匹配与回写。

做什么 / 不做什么

  • 做:追加 MySQL schema v23,一张 syb_inner_code_records 表保存导入字段、匹配结果和回写状态;解析“标签入库码映射”工作表;按业务日期、订单号、档口及货号、标准化颜色尺码幂等 upsert;限制 .xlsx、文件大小、行数和字段长度;导入完成删除临时文件。
  • 做:保留 Excel 行号和原始规格用于定位错误;重复业务键和同日重复入库码给出明确统计或错误。
  • 不做:不保存 Excel 原文件、文件哈希或完整请求;不拆批次表/尝试表;不支持旧 SQLite 生产运行时;不连接顺运宝、不执行匹配或回写。

怎么做

  • 在 admin/repository/mysql_db.go 追加可重放且带自检的 v23 迁移。
  • 新增 admin/model/inner_code.go、admin/repository/inner_code.go,所有 SQL 只放 repository。
  • 新增 admin/service/inner_code_import.go 及测试,复用 excelize v2.9.1,以流式行读取处理脱敏测试样本。
  • 业务键使用日期 + 订单号 + 档口及货号 + spec_key;同一业务日期的 inner_code 唯一。重复导入更新原字段并把尚未完成的记录重置为待匹配,不覆盖已回写审计结论。

验收标准

  • v23 首次执行、重复执行和 v22 升级均通过结构自检,版本只在自检成功后记录。
  • 合法 Excel 能导入;重复业务键幂等更新且不产生第二行。
  • 已回写记录重复导入时不会被重置为待匹配或丢失远端结果。
  • 缺表头、缺必填字段、非 xlsx、超限文件/行数/字段都返回可读错误且不留下临时文件。
  • 自动化测试覆盖规格标准化、重复键、同日入库码冲突和事务回滚。

怎么验证

在 admin/ 执行 go test ./service ./repository -run InnerCode -count=1 和 go test ./... -count=1;另用独立 MySQL 8.4 _test 数据库验证首次建库、重复迁移和 v22 升级。

风险和回退

  • 风险:业务键或唯一约束错误会覆盖不同标签;通过导入前整表校验和数据库唯一约束双重保护。
  • 回退:代码可回退,v23 新表保留审计数据,不删除、不降版;生产运行时不新增 SQLite 表。
## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#224 - 阶段:数据导入 ## 要解决什么 已确认的“档口入库码”原型需要把线下 Excel 从一次性载体转换为可追踪的业务记录。当前 Admin 没有对应表、导入解析器和仓储接口,无法进入后续匹配与回写。 ## 做什么 / 不做什么 - 做:追加 MySQL schema v23,一张 `syb_inner_code_records` 表保存导入字段、匹配结果和回写状态;解析“标签入库码映射”工作表;按业务日期、订单号、档口及货号、标准化颜色尺码幂等 upsert;限制 `.xlsx`、文件大小、行数和字段长度;导入完成删除临时文件。 - 做:保留 Excel 行号和原始规格用于定位错误;重复业务键和同日重复入库码给出明确统计或错误。 - 不做:不保存 Excel 原文件、文件哈希或完整请求;不拆批次表/尝试表;不支持旧 SQLite 生产运行时;不连接顺运宝、不执行匹配或回写。 ## 怎么做 - 在 `admin/repository/mysql_db.go` 追加可重放且带自检的 v23 迁移。 - 新增 `admin/model/inner_code.go`、`admin/repository/inner_code.go`,所有 SQL 只放 repository。 - 新增 `admin/service/inner_code_import.go` 及测试,复用 excelize v2.9.1,以流式行读取处理脱敏测试样本。 - 业务键使用日期 + 订单号 + 档口及货号 + `spec_key`;同一业务日期的 `inner_code` 唯一。重复导入更新原字段并把尚未完成的记录重置为待匹配,不覆盖已回写审计结论。 ## 验收标准 - [ ] v23 首次执行、重复执行和 v22 升级均通过结构自检,版本只在自检成功后记录。 - [ ] 合法 Excel 能导入;重复业务键幂等更新且不产生第二行。 - [ ] 已回写记录重复导入时不会被重置为待匹配或丢失远端结果。 - [ ] 缺表头、缺必填字段、非 xlsx、超限文件/行数/字段都返回可读错误且不留下临时文件。 - [ ] 自动化测试覆盖规格标准化、重复键、同日入库码冲突和事务回滚。 ## 怎么验证 在 `admin/` 执行 `go test ./service ./repository -run InnerCode -count=1` 和 `go test ./... -count=1`;另用独立 MySQL 8.4 `_test` 数据库验证首次建库、重复迁移和 v22 升级。 ## 风险和回退 - 风险:业务键或唯一约束错误会覆盖不同标签;通过导入前整表校验和数据库唯一约束双重保护。 - 回退:代码可回退,v23 新表保留审计数据,不删除、不降版;生产运行时不新增 SQLite 表。
Author
Owner

状态:进行中。已开始 v23 单表迁移、Excel 解析与仓储实现。

状态:进行中。已开始 v23 单表迁移、Excel 解析与仓储实现。
Author
Owner

状态:已实现,待用户验收。
实现提交:5a9c0f0、c0eb957
归档提交:a4ffa27、05b5997;归档:docs/task/231-档口入库码单表导入.md
验证:固定 Go 1.23.0 全量 build/test/vet 通过。未验证:真实 MySQL 8.4 _test 的 v22→v23 升级、商业 Excel。

状态:已实现,待用户验收。 实现提交:5a9c0f0、c0eb957 归档提交:a4ffa27、05b5997;归档:docs/task/231-档口入库码单表导入.md 验证:固定 Go 1.23.0 全量 build/test/vet 通过。未验证:真实 MySQL 8.4 _test 的 v22→v23 升级、商业 Excel。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#231