b2894lxlx
|
1185c9792c
|
🐛 修复车务非必填-1占位落库,并完善总单分段调度与运单导入
上一段运单完成到达后才可调度且不超过到达量;车务多模块保存/列表/导出将-1归一为null;同步网关大报文限制与导入校验能力。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-27 21:26:54 +08:00 |
|
b2894lxlx
|
0c52797c31
|
Merge remote-tracking branch 'websoft/fix/issue-2-10-import-batch-rollback'
|
2026-09-27 13:03:12 +08:00 |
|
weicw-dshsa
|
4ccc28e991
|
🐛 修复三处导入校验缺陷与失败明细行号错位
对全仓 31 处导入入口做了一次「导入校验 vs 新增/编辑校验」的一致性审计,
以下三处是审计中严重度最高的、且业务口径无歧义的缺陷:
1) 常用货物:型号必填只在新增/编辑生效,导入侧被放过
submit(CommonCargo) 走 validate(cargo, requireModel=true),而导入调
submit(cargo, false) —— 页面上存不进去的数据(型号为空)却能通过导入写进库。
CommonCargoExcel 的「型号」列也没标 *,用户按模板填根本不知道它必填。
改法:去掉 requireModel 开关(该参数已成死参数,留着只会让两边再次分叉),
导入与新增/编辑共用同一个 validate;模板表头改 *型号。
2) 运输对账:动态费用列填非数字被静默改成 0.00
VehicleReconciliationFeeReader / CargoReconciliationFeeReader 的 decimal()
在 catch (NumberFormatException) 后直接返回 ZERO —— 「一百元」变成 0.00 存进
feeItemsJson,参与结算金额与自动匹配,属静默写脏数据。
改法:抛新增的 ImportCellReadException(blade-common),带上行号/列名/原值,
由既有读取阶段兜底导出原表全量明细。
3) 运输计划:文案「数量/里程必须为正数」与规则不符
条件只判 < 0(0 是合法值),新增/编辑侧的文案是「不能小于0」。统一为「不能小于0」。
顺带修掉一个更基础的错位:
ImportFailureExcelUtil.readFailureRowIndex 直接拿
ExcelDataConvertException.getRowIndex() 当失败明细的行下标,但前者是
【绝对 0 基行号】(表头=0),后者只对数据行计数。错误恰好落在最后一行时
靠 clamping 侥幸正确,落在首行就会把原因标到下一行 —— 实测首行出错时原因
被标到了第 3 行(应为第 2 行)。现统一换算(-1)并把两类异常收口到
readFailureExcelRowIndex。
验证:
- mvn clean install -DskipTests 通过。
- 全套 16 个导入回归脚本 469 项断言全绿,其中:
- 运单核对新增用例 04(首行读取失败须标在第 2 行)、05(动态费用列填中文
必须报错),运单核对套件 28 项全绿;
- 常用货物新增用例 08(型号为空须整批回滚),套件 29 项全绿;
- 读取失败套件 4 项全绿,证明行号修正未破坏既有断言。
|
2026-09-26 12:45:17 +08:00 |
|
weicw-dshsa
|
9bf7fdfe99
|
⚡ 空表导入提示改为「未读取到数据行,请确认表头下方已填写内容」
原提示「导入数据不能为空」在用户上传「只有表头、未填数据行」的文件时容易误解
(文件并非空文件,只是没填内容)。全项目 27 个模块、30 处统一替换该文案。
验证:mvn install -DskipTests 通过;空表上传返回新文案;
13 个导入回归脚本 383 项断言全绿。
|
2026-09-26 11:50:57 +08:00 |
|
weicw-dshsa
|
2d185f0de6
|
🐛 导入单元格无法转换时改为返回可读失败明细,兜底 26 个导入接口
问题(用户实测反馈):金额列填「一万二千元」这类无法转换的内容时,EasyExcel 在
ExcelUtil.read(...) 阶段就抛 ExcelDataConvertException,根本走不到行级校验;
控制器只 catch ImportFailureException,异常穿透到全局处理器,用户看到的是
HTTP 500 + 「Convert data ... to class java.math.BigDecimal error」这类技术文案,
且完全拿不到失败明细。
影响面:全部 27 个导入接口(读阶段的 ExcelUtil.read 都在 try 内、只 catch
ImportFailureException),非维修记录独有。
改动:
- ImportFailureExcelUtil 新增三个能力(blade-common,公共层一次覆盖各模块):
1) describeReadFailure:把 ExcelDataConvertException 转成
「第N行「列名」格式不正确:<原值>」,列名按列序号反查 @ExcelProperty;
2) readRawRows:以原始文本(Map)方式重读文件,不做类型转换因此绝不抛异常,
用于拿回「原表全部行」;
3) exportReadFailure:一站式兜底(重读 → 导出全量行 + 仅出错行带原因 +
按列标红),返回 false 表示非转换类异常,调用方继续抛出保持原行为。
- 26 个导入控制器在现有 catch 之后追加 catch(Exception) 兜底,未改动原有
行级校验与整批回滚逻辑。
验证:
- 实测维修记录/费用项/币种汇率三个模块:HTTP 500→200,返回全量明细,
文案如「第5行「费用」格式不正确:一万二千元」(行号经单行/四行文件双向校准)。
- 既有回归无退化:记录类 80/80、台账 32/32、港口码头 45/45、货物类型 24/24、
费用项 20/20、币种汇率 25/25。
- 新增 scripts/api-read-failure-test.sh(4 断言)固化该场景。
|
2026-09-26 11:37:07 +08:00 |
|
weicw-dshsa
|
be02a5e942
|
🐛 修复运输对账导入无回滚与运输计划明细不全(批次4)
本批是 16 个模块收尾,两个特殊模块:
1) 运输对账(importVehicles / importCargoes)——最严重的一例:
既无 setRollbackOnly 也不抛异常。方法开头 resetExternal(id) 清空既有外部账单,
循环末尾无条件插入本批正确行,然后 return failures。一旦有失败行:
旧外部账单已被清空、新账单只插入了部分——数据损坏且不可恢复。
改法:任一行失败时抛 ImportFailureException(rows),让 resetExternal 清空
与本批插入在同一事务内一起回滚。另把失败原因写回原行(异常携带原表 rows,
只写 Vehicle/CargoReconciliationFailureExcel 副本会丢原因)。
控制器改 catch 异常导出原表全量(用 export 保留按列标红)。
2) 运输计划(importTransportPlan)——失败明细只返回 errorMap.values()(仅错误行)。
改为抛 ImportFailureException(data) 携带原表全量;控制器 catch 后导出。
验证:mvn install -DskipTests 通过;全项目 12 个导入回归脚本 379 项断言全绿。
全项目已无 TransactionAspectSupport...setRollbackOnly() 调用残留。
注:运输对账需先建对账草稿(多张前置表)才能端到端回归,
本批仅完成代码改造与编译验证,回归用例待补(见后续说明)。
|
2026-09-26 11:10:37 +08:00 |
|
weicw-dshsa
|
962bcc7879
|
🐛 台账/主数据类导入(4 个模块)失败明细返回全量原表
覆盖:设备台账 / 保养计划(blade-transport)、铁路站点 / 机场主数据(blade-system)。
问题同前两批:收集 errorList 后 setRollbackOnly 并 return,控制器据此导出
「仅错误行」——失败明细不是原表全量,用户无法对照原表修正。
改动(同构):
- 服务层:抛 ImportFailureException(data),明细携带原表全部行;
回滚由异常触发(替代 setRollbackOnly)。注意 blade-system 的两个模块
用的是静态导入 TransactionAspectSupport,模式略有差异。
- 控制器:catch 异常取 getFailureList() 导出(用 export 保留按列标红),
补上传文件校验。
验证:mvn install -DskipTests 通过;台账回归 32/32,记录类回归 80/80。
|
2026-09-26 10:58:15 +08:00 |
|
weicw-dshsa
|
96010cf542
|
🐛 记录类导入(第二批 4 个模块)失败明细返回全量原表
覆盖:里程记录 / 油电记录 / 其他费用记录 / 运输变更记录。
问题同第一批:收集 errorList 后 setRollbackOnly 并 return,控制器据此导出
「仅错误行」——失败明细不是原表全量,用户无法对照原表修正。
改动(同构):
- 服务层:抛 ImportFailureException(data),明细携带原表全部行;
回滚由异常触发(替代 setRollbackOnly)。
- 控制器:catch 异常取 getFailureList() 导出(用 export 保留按列标红),
补上传文件校验。
验证:mvn install -DskipTests 通过;记录类回归 80/80
(10 模块 × 2 用例,含第一批 6 个模块的回归确认)。
|
2026-09-26 10:52:02 +08:00 |
|
weicw-dshsa
|
f24209fa8e
|
🐛 记录类导入(6 个模块)失败明细返回全量原表
问题:这 6 个模块(事故记录/年检记录/ETC记录/保险记录/维修记录/换胎记录)
在收集 errorList 后 setRollbackOnly 并 return,控制器据此导出「仅错误行」——
失败明细不是原表全量,用户看不到哪几行是对的、不便对照原表修正。
改动(6 个模块同构处理):
- 服务层:改为抛 ImportFailureException(data),明细携带**原表全部行**;
整批回滚由异常触发(替代 setRollbackOnly,语义不变)。
- 控制器:catch 异常后取 getFailureList() 导出,并补上传文件校验。
用 export(...) 保留按列标红(exportFailureReasonOnly 会丢失该能力)。
验证:mvn install -DskipTests 通过;记录类回归 48/48
(scripts/api-records-import-test.sh,6 模块 × 2 用例)。
标志性断言:3 行正确 + 第 4 行错 → 明细返回全部 4 行、仅第 4 行带原因、
库中零写入;全部正确 → 正常入库。
|
2026-09-26 10:46:39 +08:00 |
|
weicw-dshsa
|
81824b5062
|
🐛 违章记录导入失败明细返回全量原表
问题:importViolationRecord 收集 errorList 后 setRollbackOnly 并 return,
控制器据此导出「仅错误行」——失败明细不是原表全量,用户看不到哪几行是对的、
也不便对照原表修正(用户反馈:违章记录没有返回全量表格)。
改动:
- 服务层:改为抛 ImportFailureException(data),明细携带**原表全部行**;
整批回滚由异常触发(替代 setRollbackOnly,语义不变)。
- 控制器:catch 异常后取 getFailureList() 导出,并补上传文件校验。
用 export(...) 而非 exportFailureReasonOnly(...):后者会把 markErrorColumns
置 false、只标红失败原因列,导致「按列标红」能力丢失(实测 5 个既有用例
标红列变空);export(...) 同时保留全量行与按列标红。
验证:mvn install -DskipTests 通过;违章记录回归 40/40
(既有 9 用例,标红列断言全绿:03 类型 / 04 事项 / 05 事项 / 06 类型 / 08 车牌号/船号);
用户实际上传文件实测:失败明细返回全量 5 行、仅错误行带原因、标红[车船类型,状态]、
库中零写入。其余 8 个导入模块回归 187 项全绿,无连带影响。
|
2026-09-26 10:30:39 +08:00 |
|
b2894lxlx
|
e09380e902
|
🐛 MK流程结束直接同步客商审核通过并完善异常日志
流程状态30时不再校验复评,避免卡在审核中;同步失败补充明确错误日志。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-25 17:45:14 +08:00 |
|
b2894lxlx
|
feb0ce8ee2
|
mk调试
|
2026-09-25 15:21:22 +08:00 |
|
weicw-dshsa
|
f2b6ca2834
|
🐛 行政区划导入补事务实现整批回滚,缓存清理移到成功路径
问题:RegionServiceImpl.importRegion 是唯一没有 @Transactional 的导入板块,
循环内吞掉异常后正常 return,已落库行直接提交。且 cacheChanged 标志导致
「先清缓存、再提交事务」:循环内已有行 submit 成功 → 后面行失败 → 方法
正常返回 → 惰性树缓存被清/重算成失败批次的中间状态,库回滚后缓存脏掉。
改动:
- 服务层:补 @Transactional(rollbackFor = Exception.class);错误收集完后
抛 ImportFailureException(org.springblade.common.excel)触发整批回滚。
- 缓存语义重构:submit 拆出 clearCache 参数(公开 submit(region) 行为不变,
手工新增仍即时清缓存);导入路径传 false 不逐行清缓存,
统一移到方法末尾成功路径上——异常抛出后不可达,失败批次缓存保持原状。
- 控制器:改 catch 异常导出(exportFailureReasonOnly)+ 补上传文件校验。
验证:mvn install -DskipTests 通过;行政区划回归 25/25
(tests/fixtures/region/),Redis 断言覆盖:成功路径缓存被清、
失败路径缓存键原样保留、基线行不被失败批次污染。
|
2026-09-25 08:20:06 +08:00 |
|
weicw-dshsa
|
c5e5433dc8
|
🐛 修复运单管理导入未整批回滚
问题:WaybillServiceImpl.importWaybill 虽有 @Transactional,但循环内吞掉
异常后正常 return,Spring 照常提交——失败行之前的正确行已落库。
本票回滚边界比其它板块宽:submit 虽只写运单主表,但 carrierJson 构造、
多个宽容日期解析都在循环内,失败原因需覆盖;关联表写入在 import-batch
链路,不在本票范围。
改动:
- 服务层:错误收集完后抛 ImportFailureException(org.springblade.common.excel)
触发整批回滚。catch 里原本就把原因写在原行对象上,无需额外处理。
- 控制器:改 catch 异常导出(exportFailureReasonOnly)+ 补上传文件校验。
验证:mvn install -DskipTests 通过;运单管理回归 19/19
(tests/fixtures/waybill-import/manage-excel/,含 02_一行错误多行正确_应零写入)。
既有 import-batch 链路的 *.json 与 excel/ 用例未改动。
|
2026-09-25 08:20:06 +08:00 |
|
weicw-dshsa
|
a8808942a3
|
🐛 修复评分量化表导入未整批回滚(按评定表分组粒度)
问题:CreditScoreQuantificationServiceImpl.importCreditScoreQuantification
循环单位是「评定表名称」分组(每分组一次 submit,写主表+项目+选项等多表),
异常被 catch 吞掉后正常 return,Spring 照常提交——失败分组之前的
正确分组已经落库。
改动:
- 服务层:任一分组失败、errorList 非空时抛 ImportFailureException
(org.springblade.common.excel)触发整批回滚,失败分组之前已 submit
的正确分组一起退掉。失败明细粒度保留既有行为:覆盖失败分组的全部行。
「评定表名称」为空的行不走 submit、保持早退标错路径。
- 控制器:改 catch 异常导出(exportFailureReasonOnly)+ 补上传文件校验。
验证:mvn install -DskipTests 通过;评分量化表回归 15/15
(tests/fixtures/credit-score/,含 02_后组失败前组正确_应零写入)。
另确认既有语义:与库中重名的分组走覆盖式更新(saveOrUpdate),非错误。
|
2026-09-25 08:20:06 +08:00 |
|
weicw-dshsa
|
82d823e68d
|
🐛 修复费用项导入未整批回滚,失败原因写回原行
问题:FeeItemServiceImpl.importFeeItem 虽有 @Transactional,但循环内吞掉
异常后正常 return,Spring 照常提交——失败行之前的正确行已落库。
改动:
- 服务层:错误收集完后抛 ImportFailureException(org.springblade.common.excel)
触发整批回滚;同时把失败原因写回原行对象 excel.setErrorMessage——
抛出异常时携带的是原表 data,导出工具从行对象的 errorMessage 字段取原因,
只写在 FeeItemImportFailureExcel 副本上会导致失败明细原因为空。
- 控制器:改 catch 异常导出(exportFailureReasonOnly)+ 补上传文件校验,
对齐 PortTerminalController 写法。
验证:mvn install -DskipTests 通过;费用项回归 20/20
(tests/fixtures/fee-item/,含 02_一行错误多行正确_应零写入)。
|
2026-09-25 08:20:06 +08:00 |
|
weicw-dshsa
|
30e1ada0cc
|
🐛 修复币种汇率导入未整批回滚,派生写随事务一起退
问题:CurrencyServiceImpl.importCurrency 无 @Transactional,循环内吞掉异常
后正常 return,失败行之前的正确行已落库。且循环内除 save 外还有
rebuildEnabledValidity 派生写(按 code 重算启用记录有效期区间),
若只回滚主表遗漏派生写,会留下「主表回滚了、有效期却按失败批次算过」的脏数据。
改动:
- 服务层:补 @Transactional(rollbackFor = Exception.class),错误收集完后
抛 ImportFailureException(org.springblade.common.excel),
主表 save 与派生写 rebuildEnabledValidity 在同一事务内一起回滚。
- CurrencyExcel.errorMessage 由 @ExcelProperty 改为 @ExcelIgnore:
原先导出模板会多出 errorMessage 空列(与 issue #12 运单模板同款问题)。
- 控制器:改 catch 异常导出 + 补上传文件校验,对齐 PortTerminal 写法。
验证:mvn install -DskipTests 通过;币种回归 25/25(含派生区间
正确性断言与零写入断言);同批修复顺带覆盖 issue #12 同类问题。
|
2026-09-25 08:20:06 +08:00 |
|
weicw-dshsa
|
cd2052e5d0
|
🐛 修复常用线路导入未整批回滚
问题:CommonRouteServiceImpl.importCommonRoute 循环内吞掉异常后正常 return,
方法正常返回导致 Spring 照常提交事务。方法虽有 @Transactional(rollbackFor =
Exception.class),但异常被吞后注解救不了——失败行之前的正确行已经落库。
改动:
- 服务层:错误收集完毕后若 failureList 非空,抛 ImportFailureException
(org.springblade.common.excel)触发整批回滚。catch 里原本就把原因
写在原行对象上,失败明细原因不丢,无需额外处理。
- 控制器:改为 catch 异常 → 取 failureList 导出(exportFailureReasonOnly)
→ return null,并补上传文件校验,对齐 PortTerminalController 写法。
验证:
- mvn install -DskipTests 全量编译通过。
- 常用线路回归 29/29 通过(新增 tests/fixtures/common-route/,
scripts/api-common-route-import-test.sh),含 02_一行错误多行正确_应零写入、
07_与库中线路重名(基线行不受回滚影响)。
- 港口码头 45/45、常用货物 25/25 基线回归通过,确认无连带影响。
|
2026-09-25 08:20:06 +08:00 |
|
weicw-dshsa
|
07b2f2766e
|
🐛 修复常用货物导入未整批回滚,失败明细原因写回原行
问题:CommonCargoServiceImpl.importCommonCargo 循环内吞掉异常后正常 return,
方法正常返回导致 Spring 照常提交事务。方法虽有 @Transactional(rollbackFor =
Exception.class),但异常被吞后注解救不了——失败行之前的正确行已经落库。
改动:
- 服务层:错误收集完毕后若 failureList 非空,抛 ImportFailureException
(org.springblade.common.excel,#2 已迁入 blade-common)触发整批回滚。
- 修复失败明细原因为空的问题:catch 里除写入 failureExcel 副本外,
还必须把原因写回原行对象 excel.setErrorMessage(...)——抛出异常时携带的是
原表 data,导出工具从行对象的 errorMessage 字段取原因,只写副本会丢。
- 控制器:改为 catch 异常 → 取 failureList 导出 → return null,并补上传
文件校验,对齐 PortTerminalController 写法。
验证:
- mvn install -DskipTests 全量编译通过。
- 常用货物回归 25/25 通过(新增 tests/fixtures/common-cargo/,
scripts/api-common-cargo-import-test.sh),含 02_一行错误多行正确_应零写入。
- 港口码头基线回归 45/45 通过,确认无连带影响。
|
2026-09-25 08:20:06 +08:00 |
|
weicw-dshsa
|
99c4bf4f7d
|
🐛 修复货物类型导入未整批回滚,并把导入回滚异常迁到公共模块
问题:CargoTypeServiceImpl.importCargoType 循环内吞掉异常后正常 return,
方法正常返回导致 Spring 照常提交事务,@Transactional 起不到回滚作用。
含 1 行错误的文件会写入前面若干行正确数据,与「任一行失败即整批零写入」口径不符。
改动:
- ImportFailureException 由 org.springblade.system.excel 迁至
org.springblade.common.excel(与 ImportFailureExcelUtil 同包)。
blade-transport 只依赖 blade-system-api,原先拿不到该异常,
迁到 blade-common 后 blade-system 与 blade-transport 均可引用。
- CargoTypeServiceImpl.importCargoType 补 @Transactional(rollbackFor = Exception.class),
错误收集完毕后抛 ImportFailureException 触发回滚,不再 return failureList。
- CargoTypeController.importCargoType 由「拿返回值导出」改为
「catch 异常 → 取 failureList 导出 → return null」,并补上传文件校验,
对齐 PortTerminalController 的写法。
- PortTerminalController / PortTerminalServiceImpl 仅调整 import 指向新包,行为不变。
验证:
- mvn install -DskipTests 全量编译通过。
- 港口码头回归 45/45 通过,确认「异常搬家」未破坏既有基线。
- 货物类型回归 24/24 通过,含 02_一行错误多行正确_应零写入(库中零写入)。
|
2026-09-25 08:20:05 +08:00 |
|
b2894lxlx
|
5f036ebe6a
|
mk调试
|
2026-09-24 23:29:43 +08:00 |
|
b2894lxlx
|
f0732765cf
|
✨ 完善配载草稿确认与运单数量/里程落库
配载暂存免校验且确认生成待执行正式单,草稿仅预占运单不改其状态;里程 -1 对外置空;多货物运单按 goodsJson 合计回写数量并用于应收应付。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-23 18:35:28 +08:00 |
|
b2894lxlx
|
29b846017b
|
⚡ 固定金额与里程类计费跳过数量单位匹配
按车辆、固定金额、按公里/吨公里等计费要素不再要求货物数量单位一致。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-23 14:49:19 +08:00 |
|
b2894lxlx
|
9ec28e2c30
|
🐛 本地开发强制 resource 注册本机 IP
避免 Nacos 误选 169.254.* 导致上传附件 Host is down。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-23 14:49:19 +08:00 |
|
b2894lxlx
|
6eb5362d5f
|
🐛 修复车辆调度列表排序规则冲突
JOIN 车牌号/租户时统一 utf8mb4_general_ci,并补充车辆表排序规则对齐脚本。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-23 14:49:19 +08:00 |
|
b2894lxlx
|
809790e737
|
🐛 修复本地无法运行的问题
|
2026-09-23 14:08:53 +08:00 |
|
b2894lxlx
|
f09879d1dc
|
🐛 修复客商类型无法保存的问题
|
2026-09-23 11:29:52 +08:00 |
|
b2894lxlx
|
f91fc19745
|
⚡ 计费方案运输方式精确匹配,并完善付款与运单费用生成
修复公路/铁路子串误匹配导致错生成应收应付;尾款付款支持关联预结算单;运单新建/复制为已完成时按合同计费生成应收应付。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-23 00:17:13 +08:00 |
|
b2894lxlx
|
3e23507b3a
|
✨ 客商评分提交校验、复评状态与空评分持久化
提交审批前必须完成且仅保留一条自评,审核通过前必须完成复评。
列表返回最新复评状态;删除最后一条评分会落库;评分为 0 时不再被当成空值覆盖。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-22 20:21:43 +08:00 |
|
b2894lxlx
|
14c1d9dff0
|
✨ 认证退出与操作日志、密码规则,以及运输业务多项修正
|
2026-09-22 12:03:59 +08:00 |
|
b2894lxlx
|
5254a46de8
|
Merge remote-tracking branch 'websoft/master'
|
2026-09-21 22:33:12 +08:00 |
|
b2894lxlx
|
12ef1210bc
|
组织同步逻辑修改
|
2026-09-21 17:01:10 +08:00 |
|
b2894lxlx
|
d1821bbfcf
|
组织同步逻辑修改
|
2026-09-21 16:37:24 +08:00 |
|
b2894lxlx
|
2fbbf9b0bb
|
组织同步逻辑修改
|
2026-09-21 16:21:15 +08:00 |
|
b2894lxlx
|
427e4b0c84
|
组织同步逻辑修改
|
2026-09-21 16:03:28 +08:00 |
|
b2894lxlx
|
2404281bff
|
项目、合同、运单、预结算、正式结算、付款对接mk
|
2026-09-21 13:52:34 +08:00 |
|
b2894lxlx
|
2dafd44c26
|
项目、合同、运单、预结算、正式结算、付款对接mk
|
2026-09-21 12:54:13 +08:00 |
|
b2894lxlx
|
cfe36dfc8b
|
项目、合同、运单、预结算、正式结算、付款对接mk
|
2026-09-21 11:38:44 +08:00 |
|
weicw-dshsa
|
6b97685165
|
🐛 修复网关经 blade-common 传递依赖启动失败
fd6563f 为 LenientDateParser 引入的 blade-starter-log(compile scope)
把 blade-core-tool 等整棵依赖树传递给所有依赖 common 的模块。网关
(WebFlux) 的 pom 排除了 spring-boot-starter-web(无 spring-webmvc),
而 blade-core-tool 的自动配置 BladeConverterConfiguration implements
WebMvcConfigurer 且无 @ConditionalOnClass 守卫,Spring 解析该配置类时
抛 FileNotFoundException 导致网关启动即崩。
修复:starter-log 改为 provided —— 编译期 ServiceException 可见,
不再向下游传递。业务服务运行时的 ServiceException 由 blade-core-boot
传递提供,行为不变。
验证:网关以原 classpath 启动成功(Started GateWayApplication in
16.4s);blade-common 与全仓 BUILD SUCCESS。
|
2026-09-21 10:44:30 +08:00 |
|
b2894lxlx
|
0797785176
|
项目、合同、运单、预结算、正式结算、付款对接mk
|
2026-09-21 10:36:00 +08:00 |
|
weicw-dshsa
|
fd6563f53b
|
✨ 批量导入日期宽容解析:兼容 2026-08-02 与 2026-8-2 等书写变体
- blade-common 新增 LenientDateParser(宽容解析:- / . 分隔符、补零与否、
时间可省略秒/分;拒绝两位年份、日在前、无分隔符)
- 新增 LenientDateStringConverter / LenientDateTimeStringConverter:
Excel 数值日期转文本透传,文本解析留待服务层以进入失败明细流程
- 8 个裸走 fastexcel 内置转换的导入 DTO(保险/年检/事故/其他费用/运单/
币种/用户生日/设备台账)日期字段改为 String 承载,服务层统一经
LenientDateParser 解析,失败报「<列名> 日期格式无法识别:<原值>」
- MaintenancePlanDateTimeConverter / TireReplacementDateStringConverter
内部委托公共解析器,6 个 DTO 注解零改动
- 运输计划、运单批量、运输对账、换胎 4 处手动解析点收敛至同一工具类
- UserMapper 导出 SQL 的生日改 DATE_FORMAT 输出,保持导出格式不变
口径见根工作区 docs/import-spec.md(weicw/tms-erp#1)。
回归:port-terminal 45 断言、violation-record 40 断言(含新增不补零
用例 09)、waybill-import 48 断言、insurance-record 新增用例 6 断言,
全部通过。
|
2026-09-21 09:47:50 +08:00 |
|
weicw-dshsa
|
ddfa52a2ac
|
⚡ 收窄运输方式枚举为公路/铁路/水路/航空四种
运输计划导入校验白名单去掉「公路整车、公路配载/零担、跨境海运」
运单批量导入字典兜底值去掉多余枚举,仅保留四种运输方式
|
2026-09-21 06:24:31 +08:00 |
|
weicw-dshsa
|
37d0ebc21e
|
⚡ 导入失败明细去掉空单元格底纹
标红统一只改红色字体,不再对空单元格加浅红底纹(IndexedColors.ROSE)。
底纹原本是为「必填项为空时红字在屏幕上看不见」而加,但它超出
AGENTS.md §6.11「仅出错字段/列使用红色文字」的口径,视觉上也偏重。
- markRed(Cell, boolean) 简化为 markRed(Cell),删除 redFillStyleCache 与 isBlankValue
- 空单元格的红色字体样式照旧写入 styles.xml,api-violation-xlsx-cols.js
按字体色判定,回归用例 03/04 不受影响
- 影响所有使用 ImportFailureExcelUtil 的导入模块(20+ 个)
|
2026-09-21 05:52:31 +08:00 |
|
weicw-dshsa
|
993f802111
|
⚡ 精简运单导入车牌号校验的失败原因
一次车牌号错误原来最多会叠出「长度不能少于7位」「首位必须是省份简称、
第二位必须是英文字母」「格式不正确」三条原因,导出的失败明细里这一格很长。
现将公路运输下的必填、长度与格式统一为一条「车牌号校验不通过」。
- 校验强度不变:长度 7/8 位本就由 VEHICLE_NO_PATTERN 蕴含,省份简称白名单照旧
- 保留「车牌号」字样,失败明细仍能按列名拆词匹配并标红车牌号列;车牌为空时
走空单元格红底纹分支,比原来只有文字更容易定位
- 未改动「同一配载标识号下,车牌号不一致」,该原因由 tests/fixtures/waybill-import
用例 04 断言
|
2026-09-21 05:45:49 +08:00 |
|
weicw-dshsa
|
4c96583701
|
🐛 修复码头导入父港口取列不一致导致的静默丢数据
importTerminals 中 setParentCode 取「港口编码」列,而抑制连带报错时
却用「上级港口编码」判断父行是否已声明。用户若把完整编码填入
「码头编码」并让「港口编码」留空,父港口解析失败的异常会被误判为
「父行已声明」而吞掉,码头被静默丢弃且接口返回成功。
- splitByCategory 增加码头行「港口编码」非空校验,明确报错
- 抑制逻辑改为与 setParentCode 取同一列
|
2026-09-21 05:34:59 +08:00 |
|
weicw-dshsa
|
8485efe00d
|
🐛 修复导入失败明细无法按列标红的问题
4e1a162 移除了按列名匹配逻辑后只剩失败原因列标红。
现恢复并修正误标红:命中片段被更长片段覆盖时只保留更长的列
(避免原因含「车船类型」时把子串「类型」列一起标红)。
|
2026-09-21 05:21:27 +08:00 |
|
weicw-dshsa
|
b02aff8ff6
|
✨ 运单导入支持多货物合并与配载路线串联
- 同一运单标识号的多行货物合并为一条运单,各行转为货物明细写入 goodsJson,数量与其他费用合计按行累加
- 新增组内一致性校验:发货地址、到货地址、数量单位、配载标识号不一致时报错,避免无法合并的数据静默落库
- 配载单路线按导入顺序串联,上一票到货地与下一票发货地重合时去重写入途经地,到货地取末票
|
2026-09-21 04:19:55 +08:00 |
|
weicw-dshsa
|
37309b24f9
|
🐛 维修记录导出移除多余的“导出失败原因”列
- MaintenanceRecordExportExcel 仅为把父类 @ExcelIgnore 的 errorMessage 重新暴露成
第 18 列“导出失败原因”而存在,正式导出该列恒为空白,属遗留冗余
- 删除该字段与对应 import,导出回归 17 列,与导入模板字段顺序一致
- 导入失败明细导出不依赖本类:ImportFailureExcelUtil 自行按字段构建列并过滤
errorMessage,再反射读取失败原因追加“导入失败原因”列,逻辑不受影响
|
2026-09-20 20:34:56 +08:00 |
|
weicw-dshsa
|
56c7bc020a
|
🐛 修复维修记录批量导出文件空白的问题
- MaintenanceRecordExcel 的 createTime/updateTime 字段类型为 java.util.Date,
但仍绑定了 MaintenancePlanDateTimeConverter(Converter<LocalDateTime>),
导出写单元格时 Date 强转 LocalDateTime 抛 ClassCastException,
写流中断导致下载到损坏的 xlsx,打开后一片空白
- 移除这两个 Date 审计字段上的 converter,仅保留 @DateTimeFormat("yyyy-MM-dd HH:mm:ss"),
与 AccidentRecordExportExcel 等同模块导出模型写法保持一致
- 维修时间、出厂时间仍为 LocalDateTime,转换器保留不变,导入解析不受影响
|
2026-09-20 20:31:02 +08:00 |
|
weicw-dshsa
|
af1430eaee
|
🐛 修复未配置 MinIO 时 transport 服务无法启动的问题
凭证图片 MinIO 客户端此前为无条件装配,缺少 file.storage.minio.endpoint
配置时会在启动阶段直接抛 IllegalArgumentException,导致整个
blade-transport 服务起不来,并在关闭失败上下文时连带抛出
nacosGracefulShutdownDelegate 的 BeanCreationNotAllowedException,
掩盖了真正的失败原因。
- VoucherMinioConfig 增加 @ConditionalOnProperty,未配置 endpoint 时不注册客户端
- ProcessConfigController、VoucherManageServiceImpl 改用 ObjectProvider
可选注入,避免构造器注入因 bean 缺失而启动失败
- 新增 minioClient() 访问器,在真正调用时给出"未配置"的明确提示,
与已有 validateMinioConfig() 的提示风格保持一致
未配置 MinIO 时服务可正常启动,凭证相关接口仅在使用时提示配置缺失;
已配置 MinIO 时行为不变。
|
2026-09-20 19:31:58 +08:00 |
|