Commit Graph

107 Commits

Author SHA1 Message Date
刘泉佳 94acfc2174 Merge branch 'master' into feature/payment-apply-bfi-sync 2026-10-14 15:34:45 +08:00
b2894lxlx b791401620 🐛 扩容用户手机号字段并规范化 OA 多号码同步
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 15:15:53 +08:00
b2894lxlx dee392eb48 🐛 修复 IAM 同步 dept_id 超长与手机号明文解密失败
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 15:13:19 +08:00
刘泉佳 865e3a0498 Merge branch 'master' into feature/payment-apply-bfi-sync
# Conflicts:
#	blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java
2026-10-14 14:24:27 +08:00
b2894lxlx 5bd7c8d755 ✨ 机构OA同步支持双顶级与GWWL分段编码规则
固定集团锚点 id=135/GWWL 与独立外部组织顶级并存;公司/部门编码按上级直拼三位数字生成,并修正类型与孤儿清理逻辑。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 10:44:38 +08:00
b2894lxlx 17ede93a04 ✨ 新增小程序用户后台管理接口与菜单
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 13:49:08 +08:00
b2894lxlx e19c3b100a ✨ 小程序用户独立为 blade_mp_user,并兼容司机/车辆 OCR 宽松日期
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 13:02:08 +08:00
b2894lxlx 68fede2caf 🐛 完善港口码头/铁路导入失败原因与软删除恢复,并修复运单导入列表筛选
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 16:20:21 +08:00
b2894lxlx 4e7193893f ✨ 组织与人员支持OA增量同步,并完善用户启停与性别空值
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 13:56:29 +08:00
b2894lxlx e20afc0d55 ✨ 合同结算币种贯通应收应付与结算,并完善合同编号与字段
合同结算币种写入应收应付与预结算;总单运费默认币种统一为 RMB;同步合同申请日期、主要内容、部门合同编号前缀及用印材料字典等能力。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 00:53:17 +08:00
b2894lxlx ef9eab737f ✨ 优化主数据校验与运单导入空值处理
电报略码改为选填且填写时唯一;用户支持账号姓名手机模糊查询;合同名称允许重复;项目情况说明扩至1000字;导入运单未填里程费用不再落库-1。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-09 17:07:56 +08:00
b2894lxlx 683351d764 ✨ 放开组织类型层级约束,并修复调度数量单位回填
组织树不再按类型约束上下级;计量维度扩展整车/里程/吨·公里;运单从货物明细补齐数量单位,用户查询支持模糊匹配。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-04 20:26:16 +08:00
刘泉佳 4b3edf977c Merge remote-tracking branch 'refs/remotes/origin/master' into feature/payment-apply-bfi-sync
# Conflicts:
#	blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java
2026-10-01 13:47:00 +08:00
b2894lxlx a5e89aa6dc ✨ 各业务模块列表与导出补齐创建人及创建时间
统一 VO/Wrapper/ExportExcel 返回并填充 createUserName,导出同步展示创建人、创建时间。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-30 14:22:39 +08:00
b2894lxlx 0e75780908 🐛 超管默认不限组织范围,并修复司机同步初始密码不合规
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 21:41:52 +08:00
b2894lxlx 087f361a8b ✨ 组织类型改业务字典,并完善金蝶部门代码与MK再提交
组织类型翻译切换为 organization_type;新增金蝶部门代码字段;流程已结束或已通过时强制新建MK表单实例。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 03:15:26 +08:00
b2894lxlx 32cff235e0 🐛 修复审核通过后再提交未新建MK流程实例的问题
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 02:44:48 +08:00
b2894lxlx beb0850644 ✨ 解耦MK表单实例与业务ID,公开页按formInstanceId反查业务数据
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 02:23:19 +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 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 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 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 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 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
刘泉佳 6d0dc9a24a feat: 系统服务新增计量单位档案查询 Feign 接口 2026-09-24 19:41:21 +08:00
刘泉佳 cae284483e Merge remote-tracking branch 'origin/master' into feature/payment-apply-bfi-sync
# Conflicts:
#	blade-common/src/main/java/org/springblade/common/config/BladeCommonConfiguration.java
#	blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
#	blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
#	blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
#	blade-service/blade-transport/pom.xml
#	blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/CustomerArchiveMapper.xml
#	blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java
#	blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/PaymentApplicationWrapper.java
#	blade-service/blade-transport/src/main/resources/application-dev.yml
#	blade-third-party-api/pom.xml
#	doc/nacos/blade-dev.yaml
#	doc/nacos/blade-prod.yaml
#	doc/nacos/third-party-api.yaml
#	pom.xml
2026-09-24 03:15:30 +08:00
b2894lxlx 809790e737 🐛 修复本地无法运行的问题 2026-09-23 14:08:53 +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
刘泉佳 72a1cfa9ec ✨ 开票项目主数据新增跨服务Feign查询(ISysClient.getInvoiceItems,启用档案按分类简称排序) 2026-09-21 21:19:18 +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 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 4c96583701 🐛 修复码头导入父港口取列不一致导致的静默丢数据
importTerminals 中 setParentCode 取「港口编码」列,而抑制连带报错时
却用「上级港口编码」判断父行是否已声明。用户若把完整编码填入
「码头编码」并让「港口编码」留空,父港口解析失败的异常会被误判为
「父行已声明」而吞掉,码头被静默丢弃且接口返回成功。

- splitByCategory 增加码头行「港口编码」非空校验,明确报错
- 抑制逻辑改为与 setParentCode 取同一列
2026-09-21 05:34:59 +08:00
b2894lxlx 780cd56ffe 调试mk 2026-09-20 18:34:40 +08:00
b2894lxlx 8cf9140f56 调试mk 2026-09-20 18:12:45 +08:00
weicw-dshsa 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
b2894lxlx 2f56ca07cb 调试mk 2026-09-20 17:35:59 +08:00
b2894lxlx 6987a0e790 调试mk 2026-09-20 17:11:08 +08:00
b2894lxlx a138f3b916 调试mk 2026-09-20 13:16:44 +08:00
weicw-dshsa 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