Commit Graph

192 Commits

Author SHA1 Message Date
weicw1996 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
weicw1996 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
weicw1996 ddfa52a2ac 收窄运输方式枚举为公路/铁路/水路/航空四种
运输计划导入校验白名单去掉「公路整车、公路配载/零担、跨境海运」

运单批量导入字典兜底值去掉多余枚举,仅保留四种运输方式
2026-09-21 06:24:31 +08:00
weicw1996 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
weicw1996 993f802111 精简运单导入车牌号校验的失败原因
一次车牌号错误原来最多会叠出「长度不能少于7位」「首位必须是省份简称、
第二位必须是英文字母」「格式不正确」三条原因,导出的失败明细里这一格很长。
现将公路运输下的必填、长度与格式统一为一条「车牌号校验不通过」。

- 校验强度不变:长度 7/8 位本就由 VEHICLE_NO_PATTERN 蕴含,省份简称白名单照旧
- 保留「车牌号」字样,失败明细仍能按列名拆词匹配并标红车牌号列;车牌为空时
  走空单元格红底纹分支,比原来只有文字更容易定位
- 未改动「同一配载标识号下,车牌号不一致」,该原因由 tests/fixtures/waybill-import
  用例 04 断言
2026-09-21 05:45:49 +08:00
weicw1996 4c96583701 🐛 修复码头导入父港口取列不一致导致的静默丢数据
importTerminals 中 setParentCode 取「港口编码」列,而抑制连带报错时
却用「上级港口编码」判断父行是否已声明。用户若把完整编码填入
「码头编码」并让「港口编码」留空,父港口解析失败的异常会被误判为
「父行已声明」而吞掉,码头被静默丢弃且接口返回成功。

- splitByCategory 增加码头行「港口编码」非空校验,明确报错
- 抑制逻辑改为与 setParentCode 取同一列
2026-09-21 05:34:59 +08:00
weicw1996 8485efe00d 🐛 修复导入失败明细无法按列标红的问题
4e1a162 移除了按列名匹配逻辑后只剩失败原因列标红。
现恢复并修正误标红:命中片段被更长片段覆盖时只保留更长的列
(避免原因含「车船类型」时把子串「类型」列一起标红)。
2026-09-21 05:21:27 +08:00
weicw1996 b02aff8ff6 运单导入支持多货物合并与配载路线串联
- 同一运单标识号的多行货物合并为一条运单,各行转为货物明细写入 goodsJson,数量与其他费用合计按行累加

- 新增组内一致性校验:发货地址、到货地址、数量单位、配载标识号不一致时报错,避免无法合并的数据静默落库

- 配载单路线按导入顺序串联,上一票到货地与下一票发货地重合时去重写入途经地,到货地取末票
2026-09-21 04:19:55 +08:00
weicw1996 37309b24f9 🐛 维修记录导出移除多余的“导出失败原因”列
- MaintenanceRecordExportExcel 仅为把父类 @ExcelIgnore 的 errorMessage 重新暴露成
  第 18 列“导出失败原因”而存在,正式导出该列恒为空白,属遗留冗余
- 删除该字段与对应 import,导出回归 17 列,与导入模板字段顺序一致
- 导入失败明细导出不依赖本类:ImportFailureExcelUtil 自行按字段构建列并过滤
  errorMessage,再反射读取失败原因追加“导入失败原因”列,逻辑不受影响
2026-09-20 20:34:56 +08:00
weicw1996 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
weicw1996 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
weicw1996 304061774e 🔀 合并 dev 分支到 master
解决 9 个文件的冲突,取舍如下:

- 导出模型:采用 dev 的 *ExportExcel 命名与拆分,并保留 master 的
  @DateTimeFormat(dev 改名时漏加,会导致时间列显示为 Date.toString)。
- PortTerminal 导入:保留 master 的两阶段导入 + ImportFailureException
  全量回滚(ImportFailureException 仅 master 有,合并后的 controller 依赖它),
  导出失败明细改用 dev 的 exportFailureReasonOnly(仅标红失败原因列)。
- PortTerminal 导入模板:采用 dev 的"港口编码/码头编码"两列结构,
  相应补上 resolveImportCode 归并规则,并在构建实体时显式赋 code/parentCode。
- PortTerminal 导出:采用 dev 的 PortTerminalExportExcel(接口已如此声明),
  并保留 updateUserName 审计人翻译。
- 违章记录导入:保留 dev 的多错误收集 + 导入失败明细导出流水线,
  删除已被拆列取代的 violationTypeOrItem 映射,补上 clearIrrelevantField,
  并为导入校验补齐"对侧字段应留空"规则以与表单校验一致。

验证:mvn compile -DskipTests 全模块 BUILD SUCCESS。
2026-09-20 18:04:43 +08:00
weicw1996 98697af6df 🐛 修复违章记录导入的类型与事项字段混淆问题
- 导入模型将合并的"类型/事项"列拆分为"*类型"与"*事项"两列,与导出模型保持一致
- 校验与清空逻辑改为按车船类型严格匹配:车辆只允许填类型,船舶只允许填事项,误填对侧字段直接报错而非静默丢弃
- 将清空对侧字段的时机从 prepare 移到 validate 之后,避免用户误填内容被静默丢弃
- 提取 CAR/SHIP 常量,替换散落的"车辆"/"船舶"字面量
2026-09-20 17:51:29 +08:00
b2894lxlx 6987a0e790 调试mk 2026-09-20 17:11:08 +08:00
b2894lxlx 0bfc9cbc86 调试mk 2026-09-20 16:36:31 +08:00
weicw1996 9668f6059a 🐛 修复导出文件创建时间与更新时间列为空的问题
- 导出模型的 createTime/updateTime 由 LocalDateTime 改为 java.util.Date,与 BaseEntity 审计字段类型保持一致,避免 BeanUtil.copyProperties 因类型不兼容而静默跳过
- 覆盖车/船务管理 12 个页面导出模型及基础数据等 11 个导出模型,并为新增 Date 字段补齐 @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
- 运单导入显式清空审计时间,避免把导入文件中的创建/更新时间带入实体
2026-09-20 16:32:31 +08:00
b2894lxlx d5e7787e89 调试mk 2026-09-20 16:05:25 +08:00
b2894lxlx aa2084090a 调试mk 2026-09-20 14:14:39 +08:00
b2894lxlx a138f3b916 调试mk 2026-09-20 13:16:44 +08:00
weicw1996 cc33bc5ef2 🐛 修复港口码头批量导入的一二级顺序与全量回滚问题
对应 BUG.xlsx 序号 1 与序号 2。

序号 1(同表混装一二级数据):
- 改为两阶段导入,先落库港口(一级)再落库码头(二级),
  消除对 Excel 行序的依赖;码头优先引用本批次新增的港口

序号 2(全失败即整批回滚):
- 逐行收集错误,只要有一行失败就抛异常触发整批回滚,不再部分成功
- 失败明细按【原表全部行】返回,未出错的行不标注,用户只需改错行

附带修复:
- 父港口找不到时改抛专用 ParentPortNotFoundException:
  上级港口声明在本文件里、但那一行自身校验失败时,不再连带给码头行报错,
  避免用户看到"两行都错"的假象;父港口确实漏填时仍照常报错
- 批内重复编码在落库前预检并定位到行,两行都标注原因
- 父港口区域信息为空(历史数据)时保留码头自身填写的值,
  此前会被覆盖成空值导致码头无法导入
2026-09-20 06:27:33 +08:00
b2894lxlx 380fd117c5 调整定位 2026-09-18 22:12:43 +08:00
b2894lxlx a2e23ea264 1、修改同步组织
2、新增北斗定位
2026-09-18 21:12:01 +08:00
b2894lxlx 3b26591f9d 新增同步公司、组织 2026-09-18 20:25:33 +08:00
b2894lxlx 8d13978e84 1、修复小程序手机号登录问题
2、调整OA
2026-09-18 19:48:16 +08:00
b2894lxlx a2d9cfec02 1、修复小程序手机号登录问题
2、调整OA
2026-09-18 19:13:45 +08:00
b2894lxlx 01993779a7 1、新增小程序相关接口
2、调整OA
2026-09-18 16:31:37 +08:00
b2894lxlx 0fa0eae43c 调整 运力 2026-09-16 23:42:01 +08:00
b2894lxlx 8207afe04f 调整 IAM 2026-09-16 08:50:24 +08:00
b2894lxlx cbc7e16453 调整 IAM 2026-09-16 08:08:09 +08:00
b2894lxlx ad496fdf28 调整 IAM 2026-09-16 07:32:06 +08:00
b2894lxlx b182b700b3 调整 IAM 2026-09-16 06:52:35 +08:00
b2894lxlx 8a79f4d428 调整 IAM 2026-09-16 06:36:36 +08:00
b2894lxlx d1b4f286b2 调整 IAM 2026-09-16 06:29:26 +08:00
b2894lxlx 4d412e90ee 调整 IAM 2026-09-16 04:51:16 +08:00
b2894lxlx af3b6982fd 调整 业务 2026-09-15 17:52:34 +08:00
b2894lxlx 0d1f14f703 调整 合同、运力、客商、项目 2026-09-15 11:59:42 +08:00
b2894lxlx 087d89b31a 调整 合同、运力、基础配置、客商 2026-09-14 23:43:00 +08:00
b2894lxlx 70e44da789 调整 合同 2026-09-14 15:00:40 +08:00
b2894lxlx 940f0b9b9f 调整 基础数据、运力、车船务 2026-09-14 01:49:02 +08:00
b2894lxlx 2262c39f60 调整项目 2026-09-13 01:01:09 +08:00
b2894lxlx 2da4d824fd 小程序对接 2026-09-11 15:30:22 +08:00
b2894lxlx aa8b7ade99 小程序对接 2026-09-11 14:39:10 +08:00
b2894lxlx 93c7e6f8f5 1、调整导入运单
2、调整对账
2026-09-10 22:50:00 +08:00
b2894lxlx e7d7e61846 1、调整导入运单
2、调整对账
2026-09-10 02:01:51 +08:00
b2894lxlx 049a46227d 1、调整导入运单
2、调整对账
2026-09-09 15:39:21 +08:00
b2894lxlx 63af35a333 1、调整导入运单
2、调整对账
2026-09-09 14:43:26 +08:00
b2894lxlx 0ce701ab90 1、调整凭证
2、调整对账
3、解决正式结算冲突bug
2026-09-09 10:20:52 +08:00
b2894lxlx bdafb83583 1、调整凭证
2、调整运单
2026-09-08 22:41:40 +08:00
b2894lxlx f370f56a92 1、调整凭证
2、调整运单
2026-09-08 17:50:20 +08:00
b2894lxlx b4a9e30287 修复解压问题 2026-09-08 11:54:46 +08:00