文睿 张
|
0ddda5363e
|
fix(material-import): 完善批量导入异常提示,仅保存成功历史,补齐审计日志名称、编码、详情及物料快照。上传解析前限制请求大小,逐行读取提前拦截超限数据,保留空行和真实行号规则。补充回归测试,同步计划、接口说明及八条人工用例。
|
2026-10-12 11:37:37 +08:00 |
|
文睿 张
|
3c75537f54
|
fix: 物料导入分类名归一化空白,兼容全角空格与 NBSP
界面上的分类显示名由前端拼成「编码 + 半角空格 + 名称」(U+0020),用户照抄进模板
时,中文输入法全角模式敲出的空格是 U+3000、从网页复制偶尔带 U+00A0。几串肉眼
一模一样、码点不同,精确匹配落空,于是出现「浏览器复制的能导入、自己手写的报
不存在」——分类名一个字没差,差的是那个看不见的空格。
- 匹配前用 normalizeWhitespace 把各种空白(半角、全角、NBSP、制表符)压成单个
半角空格并去首尾;索引键与查询值同口径归一化,两边一致
- 只填空白的单元格现在报「大类/小类不能为空」,而不是「不存在或已停用」——它本来
就是空的
验证:新增表驱动用例覆盖 3 种变体(全角空格、不换行空格、连续半角空格),修复前
3 个全部失败、修复后全部通过;go build ./...、go vet ./internal/...、
go test ./... 全部通过。
|
2026-10-10 17:44:29 +08:00 |
|
文睿 张
|
f634e7cf07
|
fix: 物料导入分类匹配兼容界面上的「编码 名称」写法
界面上的分类一律显示成「编码 名称」(如 A 机械结构类),用户照此填进导入模板,
却报「大类「A 机械结构类」不存在或已停用」。分类其实存在且已启用,是后端只按
分类名称精确匹配,对不上带编码前缀的写法。单位早有名称/编码双匹配,分类漏了。
- 分类索引同时登记名称、编码、「编码 名称」三种写法。名称优先、键已占用时不覆盖,
结果不随分类遍历顺序变化;停用分类仍在登记前被过滤,放宽的只是写法
- 报错文案补「请核对分类名称或编码」:原文案说「不存在或已停用」,而分类明明在,
把排查方向带偏了
- 模板「填写说明」与 api.md 同步口径(原文写的是「分类按名称填写」)
验证:2 条新用例先跑成失败再转绿(「A 机械结构类」+「A01 标准件」、纯编码);
另加 1 条停用分类的边界用例,并做变异验证——临时关掉 status 过滤后它如期失败。
go build ./...、go vet ./internal/...、go test ./... 全部通过。
|
2026-10-10 17:32:15 +08:00 |
|
文睿 张
|
e853846070
|
feat: 物料导入校验与事务入库编排
- 新增 MaterialImportService.Import:解析 → 逐行校验 → 事务入库 → 写导入记录
- 校验覆盖名称/规格长度、大类小类归属、单位名称或编码匹配、小类编码规则存在性
- 同一小类的规则只查一次,避免批量行数放大成逐行往返
- 校验失败整批不入库并返回逐行明细;入库失败整体回滚
- 导入记录成功失败都写,失败原因只存前 5 行行号摘要,明细不落库
|
2026-10-10 15:33:13 +08:00 |
|