From e4608134808602d54d433c8f98a9fd8323e08159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 28 Jul 2026 12:52:02 +0800 Subject: [PATCH] =?UTF-8?q?docs(cargo-type):=20=E8=A1=A5=E5=85=85=E5=9B=BD?= =?UTF-8?q?=E6=A0=87=E6=95=B0=E6=8D=AE=E5=AF=BC=E5=85=A5=E5=88=86=E6=9E=90?= =?UTF-8?q?=E4=B8=8E=E8=BD=AC=E6=8D=A2=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 详细描述源文件结构与表头位置 - 说明关键规则:二级编码不使用序号列,唯一一级及名称限制 - 介绍字段映射关系至系统导入模板列 - 提供已生成的预览及导入文件路径 - 说明导入操作由用户在系统中完成,分两阶段导入一级和二级数据 --- .workbuddy/memory/2026-07-28.md | 8 ++++++++ import-cargo-type/货物类型导入_一级.xlsx | Bin 0 -> 5887 bytes import-cargo-type/货物类型导入_二级.xlsx | Bin 0 -> 9425 bytes 3 files changed, 8 insertions(+) create mode 100644 import-cargo-type/货物类型导入_一级.xlsx create mode 100644 import-cargo-type/货物类型导入_二级.xlsx diff --git a/.workbuddy/memory/2026-07-28.md b/.workbuddy/memory/2026-07-28.md index f95a560..9d0184e 100644 --- a/.workbuddy/memory/2026-07-28.md +++ b/.workbuddy/memory/2026-07-28.md @@ -15,3 +15,11 @@ - **最终确认(样式)**:decorator 仅操作 G 列「导入失败原因」——黑色字体(argb `FF000000`)、无背景填充(fill→none);其余列单元格样式/内容不修改。 - **列宽修复(关键 bug)**:失败明细列宽之前全部失效,根因是 `CARGO_TYPE_FAIL_COL_WIDTH` 的 key 用了「类型/上级货物类型」等简写,而后端 `CargoTypeImportFailureExcel` 表头带 `*` 与括号说明(如 `*类型`、`上级货物类型(如为一级则不需填写)`),key 对不上导致走默认 18。已把 key 改为与后端表头完全一致,并恢复「给所有列设宽」逻辑。最终宽度:`*类型`16 / `上级货物类型(…)`22 / `上级货物类型编码(…)`26 / `*货物类型`18 / `*货物类型编码`18 / `备注`24 / `导入失败原因`70。Node 验证通过。 - **事务性导入(后端改动)**:`CargoTypeServiceImpl.importCargoType` 加 `@Transactional(rollbackFor=Exception.class)`,逐条 validate+save 后若有任一失败则 `TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()` 回滚整批,实现"全部正确才入库,任一错误则一条都不存"。需重新编译部署 tms-erp-api-ws 后端生效。 + +## 国标 GB-T 42820-2023 数据 → cargo-type 导入(分析+转换) +- 源文件:`/Users/gxwebsoft/Downloads/副本货物类型导入模板_模拟数据(1).xlsx`,单 Sheet,A1 是标题,真实表头在第 2 行。 +- 源列:一级编码(A,2位)、一级类型(B)、二级编码(C,仅序号)、二级类型(D)、完整国标编码(E,4位)、一级类型/编码(F)、(G空)、(H标注不可靠)。 +- 关键规则:二级真实编码 = E 列后 2 位,必须**忽略 C 列序号**;E 前 2 位 = A。116 行全为二级明细,唯一一级 19 个(01-99)。无重码、名称≤14字、无备注。 +- 映射:系统 6 列模板(`*类型`/`上级货物类型(…)`/`上级货物类型编码(…)`/`*货物类型`/`*货物类型编码`/`备注`)。一级行=类型一级、上级空、名称=B、编码=A;二级行=类型二级、上级名称=B、上级编码=A、名称=D、编码=E。 +- 已生成预览/导入文件(按系统模板表头,编码列设文本格式):`/Users/gxwebsoft/VUE/tms-erp-web-ws/import-cargo-type/货物类型导入_一级.xlsx`(19 条)、`货物类型导入_二级.xlsx`(116 条)。 +- 用户确认:一级+二级都导、手动页面上传、测试/空环境直接导。导入动作由用户在系统"货物类型-批量导入"完成(两阶段:先一级后二级)。 diff --git a/import-cargo-type/货物类型导入_一级.xlsx b/import-cargo-type/货物类型导入_一级.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..79eb3cba686170bec4d7d8d73572dd7db1e85d4f GIT binary patch literal 5887 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 O_+JW6@j(oaZ~qTci%h}* literal 0 HcmV?d00001