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
2026-09-23 14:08:53 +08:00
2026-07-08 17:57:11 +08:00
2026-07-08 17:57:11 +08:00
2026-07-08 17:57:11 +08:00
2026-09-23 14:49:19 +08:00
2026-09-08 10:58:21 +08:00
2026-07-08 17:57:11 +08:00
2026-07-16 11:36:57 +08:00
2026-07-28 23:14:18 +08:00
2026-07-08 17:57:11 +08:00
2026-07-08 17:57:11 +08:00
2026-09-18 21:12:01 +08:00
2026-07-08 17:57:11 +08:00

版权声明

  • BladeX是一个商业化软件,系列产品知识产权归上海布雷德科技有限公司独立所有
  • 您一旦开始复制、下载、安装或者使用本产品,即被视为完全理解并接受本协议的各项条款
  • 更多详情请看:BladeX商业授权许可协议

答疑流程

  1. 遇到问题或Bug
  2. 业务型问题打断点调试尝试找出问题所在
  3. 系统型问题通过百度、谷歌、社区查找解决方案
  4. 未解决问题则进入技术社区进行发帖提问:https://sns.bladex.cn
  5. 将帖子地址发至商业群,特别简单三言两语就能描述清楚的也可在答疑时间内发至商业群提问
  6. 发帖的时候一定要描述清楚,详细描述遇到问题的重现步骤、报错详细信息、相关代码与逻辑、使用软件版本以及操作系统版本,否则随意发帖提问将会提高我们的答疑难度。

答疑时间

  • 工作日:9:00 ~ 17:00 提供答疑,周末、节假日休息,暂停答疑
  • 请勿私聊提问,以免被其他用户的消息覆盖从而无法获得答疑
  • 答疑时间外遇到问题可以将问题发帖至技术社区,我们后续会逐个回复

授权范围

  • 专业版:只可用于个人学习及个人私活项目,不可用于公司或团队,不可泄露给任何第三方
  • 企业版:可用于企业名下的任何项目,企业版员工在未购买专业版授权前,只授权开发所在授权企业名下的项目,不得将BladeX用于个人私活
  • 共同遵守:若甲方需要您提供项目源码,则需代为甲方购买BladeX企业授权,甲方购买后续的所有项目都无需再次购买授权

商用权益

  • ✔️ 遵守商业协议的前提下,将BladeX系列产品用于授权范围内的商用项目,并上线运营
  • ✔️ 遵守商业协议的前提下,不限制项目数,不限制服务器数
  • ✔️ 遵守商业协议的前提下,将自行编写的业务代码申请软件著作权

何为侵权

  • ❌ 不遵守商业协议,私自销售商业源码
  • ❌ 以任何理由将BladeX源码用于申请软件著作权
  • ❌ 将商业源码以任何途径任何理由泄露给未授权的单位或个人
  • ❌ 开发完毕项目,没有为甲方购买企业授权,向甲方提供了BladeX代码
  • ❌ 基于BladeX拓展研发与BladeX有竞争关系的衍生框架,并将其开源或销售

侵权后果

  • 情节较轻:第一次发现警告处理
  • 情节较重:封禁账号,踢出商业群,并保留追究法律责任的权利
  • 情节严重:与本地律师事务所合作,以公司名义起诉侵犯计算机软件著作权

举报有奖

  • 向官方提供有用线索并成功捣毁盗版个人或窝点,将会看成果给予 500~10000 不等的现金奖励
  • 官方唯一指定QQ:1272154962
S
Description
No description provided
Readme 38 MiB
Languages
Java 99.8%