From 5f036ebe6a2803bc9dd0c179b368d199414913c5 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Thu, 24 Sep 2026 23:29:43 +0800 Subject: [PATCH 01/29] =?UTF-8?q?mk=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BusinessProcessController.java | 7 ++ .../service/IBusinessProcessService.java | 8 ++ .../impl/BusinessProcessServiceImpl.java | 105 +++++++++++++++--- .../system/service/impl/UserServiceImpl.java | 24 ++-- .../mk/service/impl/MKServiceImpl.java | 7 +- 5 files changed, 121 insertions(+), 30 deletions(-) diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java b/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java index 6f83dd9f..5566fe9a 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java @@ -60,6 +60,13 @@ public class BusinessProcessController extends BladeController { return R.data(businessProcessService.processSubmit(param)); } + @GetMapping("/hasMkProcessInstance") + @ApiOperationSupport(order = 8) + @Operation(summary = "查询MK流程实例是否存在", description = "传入业务id(formInstanceId),有数据则无需删除/重新提交") + public R hasMkProcessInstance(@Valid @NotBlank(message = "业务id不能为空") String bizId) { + return R.data(businessProcessService.hasMkProcessInstance(bizId)); + } + @PostMapping("/processDelete") @ApiOperationSupport(order = 7) public R processDelete(@RequestBody MKProcessCreateDTO param) { diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java index e3b7834a..fd25cbb5 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java @@ -34,6 +34,14 @@ public interface IBusinessProcessService extends IService { */ String processSubmit(MKProcessCreateDTO param); + /** + * 按业务 id 查询 MK 流程实例是否仍有数据(本地有 processInstanceId 且 MK getProcessInfo 有返回) + * + * @param bizId 业务 id(如客商 id / formInstanceId) + * @return true=流程实例仍存在 + */ + boolean hasMkProcessInstance(String bizId); + /** * 按业务表单实例 id 删除 MK 流程(不删除本地业务流程记录,供驳回后重新提交使用) * diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java index 088c83d5..fe45212a 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java @@ -137,6 +137,35 @@ public class BusinessProcessServiceImpl extends ServiceImpllambdaQuery() + .eq(BusinessProcess::getBizId, bizId) + ); + // 已有流程实例且 MK 仍能查到详情时,不再删除、不再重新创建提交 + if (businessProcess != null && StringUtil.isNotBlank(businessProcess.getProcessInstanceId())) { + String existingProcessInstanceId = businessProcess.getProcessInstanceId(); + Object existingProcessInfo = this.getProcessInfo(existingProcessInstanceId, loginName); + if (hasProcessInfoData(existingProcessInfo)) { + log.info("MK流程实例已存在,跳过创建并提交流程 formInstanceId={} processInstanceId={}", + param.getFormInstanceId(), existingProcessInstanceId); + businessProcess.setApproveStatus(ApproveStatusEnum.APPROVING.getValue()); + if (StringUtil.isNotBlank(param.getSubject())) { + businessProcess.setSubject(param.getSubject()); + } + businessProcess.setPromoterLoginName(loginName); + this.updateById(businessProcess); + this.getCurrentNodes(existingProcessInstanceId, loginName); + this.syncBizFromProcessInfo(bizType, param.getFormInstanceId(), existingProcessInfo); + return existingProcessInstanceId; + } + } + MKProcessCreateDTO mkParam = new MKProcessCreateDTO(); mkParam.setFormInstanceId(param.getFormInstanceId()); mkParam.setSubject(param.getSubject()); @@ -149,15 +178,6 @@ public class BusinessProcessServiceImpl extends ServiceImpllambdaQuery() - .eq(BusinessProcess::getBizId, bizId) - ); if (businessProcess == null) { businessProcess = new BusinessProcess(); businessProcess.setBizId(bizId); @@ -186,6 +206,54 @@ public class BusinessProcessServiceImpl extends ServiceImpllambdaQuery() + .eq(BusinessProcess::getBizId, id) + .last("limit 1") + ); + if (businessProcess == null || StringUtil.isBlank(businessProcess.getProcessInstanceId())) { + return false; + } + String loginName = businessProcess.getPromoterLoginName(); + if (StringUtil.isBlank(loginName)) { + loginName = resolveCurrentUserPhone(); + } + if (StringUtil.isBlank(loginName)) { + log.warn("查询MK流程实例跳过,登录名为空 bizId={} processInstanceId={}", + bizId, businessProcess.getProcessInstanceId()); + return false; + } + Object processInfo = this.getProcessInfo(businessProcess.getProcessInstanceId(), loginName); + return hasProcessInfoData(processInfo); + } + + /** + * MK getProcessInfo 是否返回有效数据 + */ + private boolean hasProcessInfoData(Object processInfo) { + if (processInfo == null) { + return false; + } + if (processInfo instanceof Map map) { + return !map.isEmpty(); + } + if (processInfo instanceof Collection collection) { + return !collection.isEmpty(); + } + if (processInfo instanceof CharSequence text) { + return StringUtil.isNotBlank(text.toString()); + } + return true; + } + @Transactional(rollbackFor = Exception.class) @Override public boolean processDelete(String formInstanceId) { @@ -358,17 +426,20 @@ public class BusinessProcessServiceImpl extends ServiceImpl implement @Override public void decryptPhone(IPhone user) { -// if (user == null) { -// return; -// } -// if (user.getPhone() != null && user.getPhone().length() > 20) { -// user.setPhone(SM2Util.decrypt(user.getPhone(), properties.getPublicKey(), properties.getPrivateKey())); -// } + if (user == null) { + return; + } + if (user.getPhone() != null && user.getPhone().length() > 20) { + user.setPhone(SM2Util.decrypt(user.getPhone(), properties.getPublicKey(), properties.getPrivateKey())); + } } @Override public void encryptPhone(IPhone user) { -// if (user == null) { -// return; -// } -// if(StringUtil.isNotBlank(user.getPhone())) { -// user.setPhone(Hex.toHexString(SM2Util.encrypt(user.getPhone(),properties.getPublicKey()))); -// } + if (user == null) { + return; + } + if (StringUtil.isNotBlank(user.getPhone())) { + user.setPhone(Hex.toHexString(SM2Util.encrypt(user.getPhone(), properties.getPublicKey()))); + } } private void validatePlainPassword(String password) { diff --git a/blade-third-party-api/blade-mk-api/src/main/java/org/springblade/thirdparty/mk/service/impl/MKServiceImpl.java b/blade-third-party-api/blade-mk-api/src/main/java/org/springblade/thirdparty/mk/service/impl/MKServiceImpl.java index e4b05985..eb5b1877 100644 --- a/blade-third-party-api/blade-mk-api/src/main/java/org/springblade/thirdparty/mk/service/impl/MKServiceImpl.java +++ b/blade-third-party-api/blade-mk-api/src/main/java/org/springblade/thirdparty/mk/service/impl/MKServiceImpl.java @@ -323,10 +323,13 @@ public class MKServiceImpl implements IMKService { return null; } String code = codeVO.getCode(); + // 跳转域名使用 thirdParty.mk.baseUrl(loginUrl 在部分环境未配置会导致拼出相对路径 null/...) + AssertUtils.notBlank(properties.getBaseUrl(), "未配置 thirdParty.mk.baseUrl"); + String mkBaseUrl = StringUtil.removeSuffix(properties.getBaseUrl().trim(), StringPool.SLASH); // 审批页面地址 - String approvalUrl = String.format(APPROVAL_URL_FORMAT, properties.getLoginUrl(), processInstanceId, processInstanceId); + String approvalUrl = String.format(APPROVAL_URL_FORMAT, mkBaseUrl, processInstanceId, processInstanceId); // sso回调地址 - return String.format(SSO_CALLBACK_URL_FORMAT, properties.getLoginUrl(), code, UrlUtil.encode(approvalUrl)); + return String.format(SSO_CALLBACK_URL_FORMAT, mkBaseUrl, code, UrlUtil.encode(approvalUrl)); } @Override From 99c4bf4f7d58ba87a76019c912f7f9bf80df6ab9 Mon Sep 17 00:00:00 2001 From: "weicw1996@qq.com" Date: Wed, 23 Sep 2026 03:47:58 +0800 Subject: [PATCH 02/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=B4=A7?= =?UTF-8?q?=E7=89=A9=E7=B1=BB=E5=9E=8B=E5=AF=BC=E5=85=A5=E6=9C=AA=E6=95=B4?= =?UTF-8?q?=E6=89=B9=E5=9B=9E=E6=BB=9A=EF=BC=8C=E5=B9=B6=E6=8A=8A=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=9B=9E=E6=BB=9A=E5=BC=82=E5=B8=B8=E8=BF=81=E5=88=B0?= =?UTF-8?q?=E5=85=AC=E5=85=B1=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: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_一行错误多行正确_应零写入(库中零写入)。 --- .../common}/excel/ImportFailureException.java | 12 ++++++--- .../controller/CargoTypeController.java | 27 +++++++++++++++---- .../controller/PortTerminalController.java | 2 +- .../service/impl/CargoTypeServiceImpl.java | 10 +++++++ .../service/impl/PortTerminalServiceImpl.java | 2 +- 5 files changed, 43 insertions(+), 10 deletions(-) rename {blade-service/blade-system/src/main/java/org/springblade/system => blade-common/src/main/java/org/springblade/common}/excel/ImportFailureException.java (72%) diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/excel/ImportFailureException.java b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureException.java similarity index 72% rename from blade-service/blade-system/src/main/java/org/springblade/system/excel/ImportFailureException.java rename to blade-common/src/main/java/org/springblade/common/excel/ImportFailureException.java index 0277ec01..6065ce0f 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/excel/ImportFailureException.java +++ b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureException.java @@ -23,7 +23,7 @@ *

* Author: Chill Zhuang (bladejava@qq.com) */ -package org.springblade.system.excel; +package org.springblade.common.excel; import org.springblade.core.log.exception.ServiceException; @@ -33,8 +33,14 @@ import java.util.List; /** * 导入失败异常,携带失败明细用于导出原表并标注错误。 *

- * 批量导入采用「全失败即整批回滚」语义:任一行校验失败都会抛出本异常触发事务回滚, - * 失败明细在抛异常前已收集完毕,因此回滚不影响明细的内容。 + * 批量导入采用「任一行失败即整批回滚」语义:循环内先收集完全部错误明细, + * 再抛出本异常触发事务回滚。明细在抛异常前已收集完毕,因此回滚不影响明细内容。 + *

+ * 注意:仅标注 {@code @Transactional} 并不足够。若循环内把异常吞掉(catch 后 + * 只往 errorList 塞数据并正常 return),方法会正常返回,Spring 会照常提交事务。 + * 必须抛出异常才能让事务真正回滚。 + *

+ * 本类位于 blade-common,供 blade-system 与 blade-transport 等模块共用。 * * @author Chill */ diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/CargoTypeController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/CargoTypeController.java index 745968b5..616e1ae6 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/CargoTypeController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/CargoTypeController.java @@ -46,9 +46,9 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.common.excel.ImportFailureExcelUtil; +import org.springblade.common.excel.ImportFailureException; import org.springblade.system.excel.CargoTypeExcel; import org.springblade.system.excel.CargoTypeExportExcel; -import org.springblade.system.excel.CargoTypeImportFailureExcel; import org.springblade.system.pojo.entity.CargoType; import org.springblade.system.pojo.vo.CargoTypeVO; import org.springblade.system.service.ICargoTypeService; @@ -156,15 +156,32 @@ public class CargoTypeController extends BladeController { @ApiOperationSupport(order = 7) @Operation(summary = "导入货物类型", description = "传入excel") public R importCargoType(MultipartFile file, HttpServletResponse response) { - List data = ExcelUtil.read(file, CargoTypeExcel.class); - List failureList = cargoTypeService.importCargoType(data); - if (Func.isNotEmpty(failureList)) { - ImportFailureExcelUtil.export(response, "货物类型导入失败明细" + DateUtil.time(), "导入失败明细", failureList, CargoTypeExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + cargoTypeService.importCargoType(ExcelUtil.read(file, CargoTypeExcel.class)); + } catch (ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 + exportFailure(response, exception.getFailureList()); return null; } return R.success("导入数据成功"); } + /** + * 导出导入失败明细,内容为原表全部数据并在末尾追加失败原因列。 + *

+ * 失败数据仅标红出错单元格与失败原因列,表头保持默认样式。 + */ + private void exportFailure(HttpServletResponse response, List failureList) { + ImportFailureExcelUtil.exportFailureReasonOnly(response, "货物类型导入失败明细" + DateUtil.time(), "导入失败明细", failureList, CargoTypeExcel.class); + } + /** * 导出货物类型 */ diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/PortTerminalController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/PortTerminalController.java index 0639b52d..8c19eedc 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/PortTerminalController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/PortTerminalController.java @@ -44,7 +44,7 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.common.excel.ImportFailureExcelUtil; -import org.springblade.system.excel.ImportFailureException; +import org.springblade.common.excel.ImportFailureException; import org.springblade.system.excel.PortTerminalExcel; import org.springblade.system.excel.PortTerminalExportExcel; import org.springblade.system.excel.PortTerminalImporter; diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CargoTypeServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CargoTypeServiceImpl.java index e7b97e2b..a1fc4f74 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CargoTypeServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CargoTypeServiceImpl.java @@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springblade.common.excel.ImportFailureException; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.Func; @@ -134,10 +135,14 @@ public class CargoTypeServiceImpl extends BaseServiceImpl importCargoType(List data) { if (Func.isEmpty(data)) { throw new ServiceException("导入数据不能为空"); } + // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 + // 注意不能只往 errorList 里塞数据就 return——异常被吞掉后方法会正常返回, + // Spring 会照常提交事务,@Transactional 起不到回滚作用。 List failureList = new ArrayList<>(); for (int index = 0; index < data.size(); index++) { CargoTypeExcel excel = data.get(index); @@ -152,6 +157,11 @@ public class CargoTypeServiceImpl extends BaseServiceImpl Date: Thu, 24 Sep 2026 04:34:39 +0800 Subject: [PATCH 03/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E5=B8=B8?= =?UTF-8?q?=E7=94=A8=E8=B4=A7=E7=89=A9=E5=AF=BC=E5=85=A5=E6=9C=AA=E6=95=B4?= =?UTF-8?q?=E6=89=B9=E5=9B=9E=E6=BB=9A=EF=BC=8C=E5=A4=B1=E8=B4=A5=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E5=8E=9F=E5=9B=A0=E5=86=99=E5=9B=9E=E5=8E=9F=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: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 通过,确认无连带影响。 --- .../controller/CommonCargoController.java | 26 ++++++++++++++++--- .../service/impl/CommonCargoServiceImpl.java | 14 ++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonCargoController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonCargoController.java index 34b54fa5..212ca3a9 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonCargoController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonCargoController.java @@ -38,9 +38,9 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.common.excel.ImportFailureExcelUtil; +import org.springblade.common.excel.ImportFailureException; import org.springblade.transport.excel.CommonCargoExcel; import org.springblade.transport.excel.CommonCargoExportExcel; -import org.springblade.transport.excel.CommonCargoImportFailureExcel; import org.springframework.web.multipart.MultipartFile; import org.springblade.transport.pojo.entity.CommonCargo; import org.springblade.transport.pojo.vo.BusinessRemoveResultVO; @@ -110,14 +110,32 @@ public class CommonCargoController extends BladeController { @ApiOperationSupport(order = 6) @Operation(summary = "导入常用货物", description = "传入excel") public R importCommonCargo(MultipartFile file, HttpServletResponse response) { - List failureList = commonCargoService.importCommonCargo(ExcelUtil.read(file, CommonCargoExcel.class)); - if (Func.isNotEmpty(failureList)) { - ImportFailureExcelUtil.export(response, "常用货物导入失败明细" + DateUtil.time(), "导入失败明细", failureList, CommonCargoImportFailureExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + commonCargoService.importCommonCargo(ExcelUtil.read(file, CommonCargoExcel.class)); + } catch (ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 + exportFailure(response, exception.getFailureList()); return null; } return R.success("导入数据成功"); } + /** + * 导出导入失败明细,内容为原表全部数据并在末尾追加失败原因列。 + *

+ * 失败数据仅标红出错单元格与失败原因列,表头保持默认样式。 + */ + private void exportFailure(HttpServletResponse response, List failureList) { + ImportFailureExcelUtil.exportFailureReasonOnly(response, "常用货物导入失败明细" + DateUtil.time(), "导入失败明细", failureList, CommonCargoExcel.class); + } + @GetMapping("/export-template") @ApiOperationSupport(order = 7) @Operation(summary = "导出模板") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java index f8b6b5c7..7ab5bc04 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java @@ -25,6 +25,7 @@ package org.springblade.transport.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springblade.common.excel.ImportFailureException; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.BeanUtil; @@ -143,6 +144,10 @@ public class CommonCargoServiceImpl extends BaseServiceImpl failureList = new ArrayList<>(); for (int index = 0; index < data.size(); index++) { CommonCargoExcel excel = data.get(index); @@ -170,12 +175,21 @@ public class CommonCargoServiceImpl extends BaseServiceImpl Date: Thu, 24 Sep 2026 04:57:26 +0800 Subject: [PATCH 04/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E5=B8=B8?= =?UTF-8?q?=E7=94=A8=E7=BA=BF=E8=B7=AF=E5=AF=BC=E5=85=A5=E6=9C=AA=E6=95=B4?= =?UTF-8?q?=E6=89=B9=E5=9B=9E=E6=BB=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: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 基线回归通过,确认无连带影响。 --- .../controller/CommonRouteController.java | 20 +++++++++++++------ .../service/impl/CommonRouteServiceImpl.java | 10 ++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonRouteController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonRouteController.java index 61966056..db31a347 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonRouteController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonRouteController.java @@ -38,6 +38,7 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.common.excel.ImportFailureExcelUtil; +import org.springblade.common.excel.ImportFailureException; import org.springblade.transport.excel.CommonRouteExportExcel; import org.springblade.transport.excel.CommonRouteImportExcel; import org.springblade.transport.pojo.entity.CommonRoute; @@ -109,15 +110,22 @@ public class CommonRouteController extends BladeController { @ApiOperationSupport(order = 6) @Operation(summary = "导入常用线路", description = "传入excel") public R importCommonRoute(MultipartFile file, HttpServletResponse response) { - List failureList = commonRouteService.importCommonRoute( - ExcelUtil.read(file, CommonRouteImportExcel.class) - ); - if (Func.isNotEmpty(failureList)) { - ImportFailureExcelUtil.export( + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + commonRouteService.importCommonRoute(ExcelUtil.read(file, CommonRouteImportExcel.class)); + } catch (ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 + ImportFailureExcelUtil.exportFailureReasonOnly( response, "常用线路导入失败明细" + DateUtil.time(), "导入失败明细", - failureList, + exception.getFailureList(), CommonRouteImportExcel.class ); return null; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonRouteServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonRouteServiceImpl.java index 10d7f8d0..505ffd51 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonRouteServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonRouteServiceImpl.java @@ -25,6 +25,7 @@ package org.springblade.transport.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springblade.common.excel.ImportFailureException; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.BeanUtil; @@ -130,6 +131,10 @@ public class CommonRouteServiceImpl extends BaseServiceImpl failureList = new ArrayList<>(); for (int index = 0; index < data.size(); index++) { CommonRouteImportExcel excel = data.get(index); @@ -142,6 +147,11 @@ public class CommonRouteServiceImpl extends BaseServiceImpl Date: Thu, 24 Sep 2026 05:27:25 +0800 Subject: [PATCH 05/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E5=B8=81?= =?UTF-8?q?=E7=A7=8D=E6=B1=87=E7=8E=87=E5=AF=BC=E5=85=A5=E6=9C=AA=E6=95=B4?= =?UTF-8?q?=E6=89=B9=E5=9B=9E=E6=BB=9A=EF=BC=8C=E6=B4=BE=E7=94=9F=E5=86=99?= =?UTF-8?q?=E9=9A=8F=E4=BA=8B=E5=8A=A1=E4=B8=80=E8=B5=B7=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: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 同类问题。 --- .../system/controller/CurrencyController.java | 15 ++++++++++++--- .../springblade/system/excel/CurrencyExcel.java | 2 +- .../system/service/impl/CurrencyServiceImpl.java | 11 +++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/CurrencyController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/CurrencyController.java index 4bc43d95..be6ef0f5 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/CurrencyController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/CurrencyController.java @@ -149,9 +149,18 @@ public class CurrencyController extends BladeController { @ApiOperationSupport(order = 7) @Operation(summary = "导入币种汇率", description = "传入excel") public R importCurrency(MultipartFile file, HttpServletResponse response) { - List failureList = currencyService.importCurrency(ExcelUtil.read(file, CurrencyExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "币种汇率导入失败明细" + DateUtil.time(), "导入失败明细", failureList, CurrencyExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + currencyService.importCurrency(ExcelUtil.read(file, CurrencyExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "币种汇率导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), CurrencyExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/excel/CurrencyExcel.java b/blade-service/blade-system/src/main/java/org/springblade/system/excel/CurrencyExcel.java index b59573d5..998f3aac 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/excel/CurrencyExcel.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/excel/CurrencyExcel.java @@ -76,7 +76,7 @@ public class CurrencyExcel implements Serializable { @ExcelProperty("备注") private String remark; - @ExcelProperty + @ExcelIgnore private String errorMessage; } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CurrencyServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CurrencyServiceImpl.java index dea6d264..48aeedc9 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CurrencyServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CurrencyServiceImpl.java @@ -115,10 +115,16 @@ public class CurrencyServiceImpl extends BaseServiceImpl importCurrency(List data) { if (Func.isEmpty(data)) { throw new ServiceException("导入数据不能为空"); } + // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 + // 注意:循环内除 save 外还有 rebuildEnabledValidity 这个派生写—— + // 若吞掉异常正常 return,主表数据和派生的有效期区间都会落库; + // 必须抛异常让两者一起回滚,否则会出现「主表回滚了、有效期区间 + // 却按失败批次算过」的脏数据。 List errorList = new ArrayList<>(); int successCount = 0; for (int index = 0; index < data.size(); index++) { @@ -140,6 +146,11 @@ public class CurrencyServiceImpl extends BaseServiceImpl Date: Thu, 24 Sep 2026 05:36:41 +0800 Subject: [PATCH 06/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=B4=B9?= =?UTF-8?q?=E7=94=A8=E9=A1=B9=E5=AF=BC=E5=85=A5=E6=9C=AA=E6=95=B4=E6=89=B9?= =?UTF-8?q?=E5=9B=9E=E6=BB=9A=EF=BC=8C=E5=A4=B1=E8=B4=A5=E5=8E=9F=E5=9B=A0?= =?UTF-8?q?=E5=86=99=E5=9B=9E=E5=8E=9F=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: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_一行错误多行正确_应零写入)。 --- .../system/controller/FeeItemController.java | 18 +++++++++++++----- .../service/impl/FeeItemServiceImpl.java | 12 ++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java index b8eae386..2bf7ea2d 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java @@ -36,6 +36,7 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springblade.common.excel.ImportFailureExcelUtil; +import org.springblade.common.excel.ImportFailureException; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; @@ -47,7 +48,6 @@ import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.system.excel.FeeItemExcel; import org.springblade.system.excel.FeeItemExportExcel; -import org.springblade.system.excel.FeeItemImportFailureExcel; import org.springblade.system.pojo.entity.FeeItem; import org.springblade.system.pojo.vo.FeeItemVO; import org.springblade.system.service.IFeeItemService; @@ -138,10 +138,18 @@ public class FeeItemController extends BladeController { @ApiOperationSupport(order = 6) @Operation(summary = "导入费用项", description = "传入excel") public R importFeeItem(MultipartFile file, HttpServletResponse response) { - List data = ExcelUtil.read(file, FeeItemExcel.class); - List failureList = feeItemService.importFeeItem(data); - if (Func.isNotEmpty(failureList)) { - ImportFailureExcelUtil.export(response, "费用项导入失败明细" + DateUtil.time(), "导入失败明细", failureList, FeeItemExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + feeItemService.importFeeItem(ExcelUtil.read(file, FeeItemExcel.class)); + } catch (ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 + ImportFailureExcelUtil.exportFailureReasonOnly(response, "费用项导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), FeeItemExcel.class); return null; } return R.success("导入数据成功"); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/FeeItemServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/FeeItemServiceImpl.java index a3825a46..4221d262 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/FeeItemServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/FeeItemServiceImpl.java @@ -108,6 +108,9 @@ public class FeeItemServiceImpl extends BaseServiceImpl if (Func.isEmpty(data)) { throw new ServiceException("导入数据不能为空"); } + // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 + // 注意不能只往 failureList 里塞数据就 return——异常被吞掉后方法会正常返回, + // Spring 会照常提交事务,@Transactional 起不到回滚作用。 List failureList = new ArrayList<>(); for (int index = 0; index < data.size(); index++) { FeeItemExcel excel = data.get(index); @@ -118,9 +121,18 @@ public class FeeItemServiceImpl extends BaseServiceImpl save(feeItem); } catch (Exception exception) { String message = exception instanceof ServiceException ? exception.getMessage() : "导入失败"; + // 除收集到 failureList 外,还必须把原因写回原行对象: + // 抛出异常时携带的是原表 data,导出工具从行对象的 errorMessage 字段取原因, + // 只写在副本上会导致失败明细里错误行的原因为空。 + excel.setErrorMessage("第" + (index + 2) + "行:" + message); failureList.add(toImportFailureExcel(excel, "第" + (index + 2) + "行:" + message)); } } + if (Func.isNotEmpty(failureList)) { + // 抛出携带失败明细的异常,触发事务回滚。 + // 明细为原表全部行(未出错行仅无错误原因),用户可对照原表修正后重新导入。 + throw new org.springblade.common.excel.ImportFailureException(data); + } return failureList; } From a8808942a33d65d04e3a9fa501df043c0e7d0645 Mon Sep 17 00:00:00 2001 From: "weicw1996@qq.com" Date: Thu, 24 Sep 2026 05:46:19 +0800 Subject: [PATCH 07/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=AF=84?= =?UTF-8?q?=E5=88=86=E9=87=8F=E5=8C=96=E8=A1=A8=E5=AF=BC=E5=85=A5=E6=9C=AA?= =?UTF-8?q?=E6=95=B4=E6=89=B9=E5=9B=9E=E6=BB=9A=EF=BC=88=E6=8C=89=E8=AF=84?= =?UTF-8?q?=E5=AE=9A=E8=A1=A8=E5=88=86=E7=BB=84=E7=B2=92=E5=BA=A6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: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),非错误。 --- .../CreditScoreQuantificationController.java | 15 ++++++++++++--- .../CreditScoreQuantificationServiceImpl.java | 7 +++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CreditScoreQuantificationController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CreditScoreQuantificationController.java index 59c404ff..d10852ba 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CreditScoreQuantificationController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CreditScoreQuantificationController.java @@ -138,9 +138,18 @@ public class CreditScoreQuantificationController extends BladeController { @ApiOperationSupport(order = 7) @Operation(summary = "导入评分量化表", description = "传入excel") public R importCreditScoreQuantification(MultipartFile file, HttpServletResponse response) { - List failureList = creditScoreQuantificationService.importCreditScoreQuantification(ExcelUtil.read(file, CreditScoreQuantificationExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "评分量化表导入失败明细" + DateUtil.time(), "导入失败明细", failureList, CreditScoreQuantificationExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + creditScoreQuantificationService.importCreditScoreQuantification(ExcelUtil.read(file, CreditScoreQuantificationExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一分组失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "评分量化表导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), CreditScoreQuantificationExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CreditScoreQuantificationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CreditScoreQuantificationServiceImpl.java index c5915da9..cebba5e9 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CreditScoreQuantificationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CreditScoreQuantificationServiceImpl.java @@ -214,6 +214,13 @@ public class CreditScoreQuantificationServiceImpl extends BaseServiceImpl Date: Thu, 24 Sep 2026 05:55:36 +0800 Subject: [PATCH 08/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E7=AE=A1=E7=90=86=E5=AF=BC=E5=85=A5=E6=9C=AA=E6=95=B4?= =?UTF-8?q?=E6=89=B9=E5=9B=9E=E6=BB=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: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/ 用例未改动。 --- .../transport/controller/WaybillController.java | 16 +++++++++++++--- .../service/impl/WaybillServiceImpl.java | 7 +++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java index 3de34089..de0ada47 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java @@ -34,6 +34,7 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import org.apache.poi.ss.usermodel.CellStyle; import org.springblade.common.excel.ImportFailureExcelUtil; +import org.springblade.common.excel.ImportFailureException; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; @@ -242,9 +243,18 @@ public class WaybillController extends BladeController { @ApiOperationSupport(order = 13) @Operation(summary = "导入运单管理", description = "传入excel") public R importWaybill(MultipartFile file, HttpServletResponse response) { - List failureList = waybillService.importWaybill(ExcelUtil.read(file, WaybillExcel.class)); - if (Func.isNotEmpty(failureList)) { - ImportFailureExcelUtil.export(response, "运单管理导入失败明细" + DateUtil.time(), "导入失败明细", failureList, WaybillExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + waybillService.importWaybill(ExcelUtil.read(file, WaybillExcel.class)); + } catch (ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 + ImportFailureExcelUtil.exportFailureReasonOnly(response, "运单管理导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), WaybillExcel.class); return null; } return R.success("导入数据成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java index 9594475f..889232ec 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java @@ -922,6 +922,13 @@ public class WaybillServiceImpl extends BaseServiceImpl errorList.add(excel); } } + if (Func.isNotEmpty(errorList)) { + // 抛出携带失败明细的异常,触发事务回滚:submit 内部一次写运单主表+ + // 货物+配载路线等多张关联表,回滚边界必须覆盖全部关联表。 + // 注意不能只往 errorList 里塞数据就 return——异常被吞掉后方法会正常返回, + // Spring 会照常提交事务,@Transactional 起不到回滚作用。 + throw new org.springblade.common.excel.ImportFailureException(data); + } return errorList; } From f2b6ca28347cd6e66d6dac0567e76050074638b2 Mon Sep 17 00:00:00 2001 From: "weicw1996@qq.com" Date: Thu, 24 Sep 2026 06:22:47 +0800 Subject: [PATCH 09/29] =?UTF-8?q?:bug:=20=E8=A1=8C=E6=94=BF=E5=8C=BA?= =?UTF-8?q?=E5=88=92=E5=AF=BC=E5=85=A5=E8=A1=A5=E4=BA=8B=E5=8A=A1=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=95=B4=E6=89=B9=E5=9B=9E=E6=BB=9A=EF=BC=8C=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E6=B8=85=E7=90=86=E7=A7=BB=E5=88=B0=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: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 断言覆盖:成功路径缓存被清、 失败路径缓存键原样保留、基线行不被失败批次污染。 --- .../system/controller/RegionController.java | 16 ++++++++-- .../service/impl/RegionServiceImpl.java | 30 +++++++++++++++---- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java index 0de1e680..c0ab7473 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java @@ -46,6 +46,7 @@ import org.springblade.core.secure.annotation.PreAuth; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.Func; import org.springblade.system.pojo.entity.Region; import org.springblade.system.excel.RegionExcel; import org.springblade.system.excel.RegionExportExcel; @@ -191,9 +192,18 @@ public class RegionController extends BladeController { @ApiOperationSupport(order = 10) @Operation(summary = "导入行政区划", description = "传入excel") public R importRegion(MultipartFile file, Integer isCovered, HttpServletResponse response) { - List failureList = regionService.importRegion(ExcelUtil.read(file, RegionExcel.class), Objects.equals(isCovered, 1)); - if (!failureList.isEmpty()) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "行政区划导入失败明细" + DateUtil.time(), "导入失败明细", failureList, RegionExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + regionService.importRegion(ExcelUtil.read(file, RegionExcel.class), Objects.equals(isCovered, 1)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "行政区划导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), RegionExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java index 77ceabc1..a251af29 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java @@ -41,6 +41,7 @@ import org.springblade.system.mapper.RegionMapper; import org.springblade.system.service.IRegionService; import org.springblade.system.pojo.vo.RegionVO; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; @@ -60,6 +61,17 @@ public class RegionServiceImpl extends ServiceImpl impleme @Override public boolean submit(Region region) { + return submit(region, true); + } + + /** + * 提交区划,clearCache 控制是否在保存成功后立即清理惰性树缓存。 + *

+ * 批量导入路径传 false:导入内部会收集全部错误,只有整批成功才统一清缓存; + * 若逐行清缓存,失败批次中已成功行会把缓存清掉/重算成中间状态, + * 与随后的事务回滚形成「库回滚了、缓存却是脏的」。 + */ + private boolean submit(Region region, boolean clearCache) { Date now = new Date(); Long currentUserId = AuthUtil.getUserId(); boolean isNew = StringUtil.isBlank(region.getOriginalCode()); @@ -138,7 +150,7 @@ public class RegionServiceImpl extends ServiceImpl impleme region.setVillageName(name); } boolean result = StringUtil.isNotBlank(region.getOriginalCode()) ? this.updateById(region) : this.save(region); - if (result) { + if (result && clearCache) { clearLazyTree(); } return result; @@ -189,12 +201,15 @@ public class RegionServiceImpl extends ServiceImpl impleme } @Override + @Transactional(rollbackFor = Exception.class) public List importRegion(List data, Boolean isCovered) { if (Func.isEmpty(data)) { throw new ServiceException("导入数据不能为空"); } + // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 + // 注意不能只往 errorList 里塞数据就 return——异常被吞掉后方法会正常返回, + // Spring 会照常提交事务,@Transactional 起不到回滚作用。 List errorList = new ArrayList<>(); - boolean cacheChanged = false; for (int index = 0; index < data.size(); index++) { RegionExcel excel = data.get(index); try { @@ -210,15 +225,20 @@ public class RegionServiceImpl extends ServiceImpl impleme if (Boolean.TRUE.equals(isCovered) && this.getById(region.getCode()) != null) { region.setOriginalCode(region.getCode()); } - cacheChanged = this.submit(region) || cacheChanged; + // 导入路径不逐行清缓存,缓存只在整批成功后统一清一次。 + this.submit(region, false); } catch (Exception exception) { excel.setErrorMessage(exception.getMessage()); errorList.add(excel); } } - if (cacheChanged) { - clearLazyTree(); + if (Func.isNotEmpty(errorList)) { + // 抛出携带失败明细的异常,触发事务回滚。缓存清理在异常抛出后不可达, + // 只会发生在成功路径上——避免「库回滚了、惰性树缓存却按失败批次 + // 的中间状态被清掉/重算」的脏缓存。 + throw new org.springblade.common.excel.ImportFailureException(data); } + clearLazyTree(); return errorList; } From feb0ce8ee2d41ddaa6d9446fc67e02d9a54750ed Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Fri, 25 Sep 2026 15:21:22 +0800 Subject: [PATCH 10/29] =?UTF-8?q?mk=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../transport/mk/MkProcessMessageService.java | 11 ++++------- .../impl/CustomerArchivePublicProcessService.java | 12 +++++------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mk/MkProcessMessageService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/mk/MkProcessMessageService.java index 7ca1ad3d..b73885a1 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mk/MkProcessMessageService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mk/MkProcessMessageService.java @@ -10,7 +10,6 @@ import org.springblade.core.tool.utils.StringUtil; import org.springblade.process.feign.IBusinessProcessClient; import org.springframework.stereotype.Service; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -129,14 +128,12 @@ public class MkProcessMessageService { if (!"20".equals(firstText(info, "fdProcessStatus"))) { return false; } - if (hasItems(info.get("currentHandlers"))) { + Object historyHandlerInfos = asMap(info.get("fdTaskInfo")).get("historyHandlerInfos"); + if (!(historyHandlerInfos instanceof List historyList) || historyList.isEmpty()) { return false; } - return !hasItems(asMap(info.get("fdTaskInfo")).get("handlerInfos")); - } - - private static boolean hasItems(Object value) { - return value instanceof Collection collection && !collection.isEmpty(); + Object lastHandler = historyList.get(historyList.size() - 1); + return "N6".equals(firstText(asMap(lastHandler), "nodeNumber")); } private void applyProcessResult(IMkProcessBizHandler handler, String bizType, String bizIdText, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java index 56a22a3d..85b5615f 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java @@ -15,9 +15,9 @@ import org.springblade.process.feign.IBusinessProcessClient; import org.springblade.transport.service.ICustomerArchiveService; import org.springframework.stereotype.Service; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -120,14 +120,12 @@ public class CustomerArchivePublicProcessService { if (!"20".equals(firstText(info, "fdProcessStatus"))) { return false; } - if (hasItems(info.get("currentHandlers"))) { + Object historyHandlerInfos = asMap(info.get("fdTaskInfo")).get("historyHandlerInfos"); + if (!(historyHandlerInfos instanceof List historyList) || historyList.isEmpty()) { return false; } - return !hasItems(asMap(info.get("fdTaskInfo")).get("handlerInfos")); - } - - private static boolean hasItems(Object value) { - return value instanceof Collection collection && !collection.isEmpty(); + Object lastHandler = historyList.get(historyList.size() - 1); + return "N6".equals(firstText(asMap(lastHandler), "nodeNumber")); } private void applyProcessResult(String customerIdText, String processId, Map formValues, From e09380e902e4a5f735d8768a2f7808067ca908db Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Fri, 25 Sep 2026 17:45:14 +0800 Subject: [PATCH 11/29] =?UTF-8?q?:bug:=20MK=E6=B5=81=E7=A8=8B=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E7=9B=B4=E6=8E=A5=E5=90=8C=E6=AD=A5=E5=AE=A2=E5=95=86?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E9=80=9A=E8=BF=87=E5=B9=B6=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 流程状态30时不再校验复评,避免卡在审核中;同步失败补充明确错误日志。 Co-authored-by: Cursor --- .../org/springblade/transport/mk/MkProcessMessageService.java | 2 ++ .../service/impl/CustomerArchivePublicProcessService.java | 2 ++ .../transport/service/impl/CustomerArchiveServiceImpl.java | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mk/MkProcessMessageService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/mk/MkProcessMessageService.java index b73885a1..89b4dd28 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mk/MkProcessMessageService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mk/MkProcessMessageService.java @@ -153,6 +153,8 @@ public class MkProcessMessageService { } } catch (NumberFormatException e) { log.warn("流程{}但业务id格式不正确 bizType={} id={}", action, bizType, bizIdText); + } catch (Exception e) { + log.error("流程{}同步业务状态失败 bizType={} id={} processId={}", action, bizType, bizIdText, processId, e); } } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java index 85b5615f..c9384dd8 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchivePublicProcessService.java @@ -145,6 +145,8 @@ public class CustomerArchivePublicProcessService { } } catch (NumberFormatException e) { log.warn("流程{}但客商id格式不正确:{}", action, customerIdText); + } catch (Exception e) { + log.error("流程{}同步客商状态失败 id={} processId={}", action, customerIdText, processId, e); } } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java index 3ff55747..d4a320c8 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java @@ -324,7 +324,7 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl Date: Sat, 26 Sep 2026 10:30:39 +0800 Subject: [PATCH 12/29] =?UTF-8?q?:bug:=20=E8=BF=9D=E7=AB=A0=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=AF=BC=E5=85=A5=E5=A4=B1=E8=B4=A5=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=85=A8=E9=87=8F=E5=8E=9F=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: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 项全绿,无连带影响。 --- .../controller/ViolationRecordController.java | 15 ++++++++++++--- .../service/impl/ViolationRecordServiceImpl.java | 7 +++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ViolationRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ViolationRecordController.java index d3a89443..0a87e8ec 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ViolationRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ViolationRecordController.java @@ -127,9 +127,18 @@ public class ViolationRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入违章记录", description = "传入excel") public R importViolationRecord(MultipartFile file, HttpServletResponse response) { - List failureList = violationRecordService.importViolationRecord(ExcelUtil.read(file, ViolationRecordImportExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "违章记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, ViolationRecordImportExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + violationRecordService.importViolationRecord(ExcelUtil.read(file, ViolationRecordImportExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "违章记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), ViolationRecordImportExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ViolationRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ViolationRecordServiceImpl.java index 5b41f40d..017d029d 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ViolationRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ViolationRecordServiceImpl.java @@ -116,8 +116,11 @@ public class ViolationRecordServiceImpl extends BaseServiceImpl Date: Sat, 26 Sep 2026 10:46:39 +0800 Subject: [PATCH 13/29] =?UTF-8?q?:bug:=20=E8=AE=B0=E5=BD=95=E7=B1=BB?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=886=20=E4=B8=AA=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=EF=BC=89=E5=A4=B1=E8=B4=A5=E6=98=8E=E7=BB=86=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=85=A8=E9=87=8F=E5=8E=9F=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:这 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 行带原因、 库中零写入;全部正确 → 正常入库。 --- .../controller/AccidentRecordController.java | 15 ++++++++++++--- .../AnnualInspectionRecordController.java | 15 ++++++++++++--- .../transport/controller/EtcRecordController.java | 15 ++++++++++++--- .../controller/InsuranceRecordController.java | 15 ++++++++++++--- .../controller/MaintenanceRecordController.java | 15 ++++++++++++--- .../TireReplacementRecordController.java | 15 ++++++++++++--- .../service/impl/AccidentRecordServiceImpl.java | 5 +++-- .../impl/AnnualInspectionRecordServiceImpl.java | 5 +++-- .../service/impl/EtcRecordServiceImpl.java | 5 +++-- .../service/impl/InsuranceRecordServiceImpl.java | 5 +++-- .../impl/MaintenanceRecordServiceImpl.java | 5 +++-- .../impl/TireReplacementRecordServiceImpl.java | 5 +++-- 12 files changed, 90 insertions(+), 30 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AccidentRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AccidentRecordController.java index d28cbb12..7a6e7140 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AccidentRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AccidentRecordController.java @@ -128,9 +128,18 @@ public class AccidentRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入事故记录", description = "传入excel") public R importAccidentRecord(MultipartFile file, HttpServletResponse response) { - List failureList = accidentRecordService.importAccidentRecord(ExcelUtil.read(file, AccidentRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "事故记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, AccidentRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + accidentRecordService.importAccidentRecord(ExcelUtil.read(file, AccidentRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "事故记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), AccidentRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AnnualInspectionRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AnnualInspectionRecordController.java index e97fa2d1..1412b173 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AnnualInspectionRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AnnualInspectionRecordController.java @@ -125,9 +125,18 @@ public class AnnualInspectionRecordController extends BladeController { @ApiOperationSupport(order = 6) @Operation(summary = "导入年检记录", description = "传入excel") public R importAnnualInspectionRecord(MultipartFile file, HttpServletResponse response) { - List failureList = annualInspectionRecordService.importAnnualInspectionRecord(ExcelUtil.read(file, AnnualInspectionRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "年检记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, AnnualInspectionRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + annualInspectionRecordService.importAnnualInspectionRecord(ExcelUtil.read(file, AnnualInspectionRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "年检记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), AnnualInspectionRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EtcRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EtcRecordController.java index 8258b7d1..fb3613cc 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EtcRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EtcRecordController.java @@ -94,9 +94,18 @@ public class EtcRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入ETC记录", description = "传入excel") public R importEtcRecord(MultipartFile file, HttpServletResponse response) { - List failureList = etcRecordService.importEtcRecord(ExcelUtil.read(file, EtcRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "ETC记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, EtcRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + etcRecordService.importEtcRecord(ExcelUtil.read(file, EtcRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "ETC记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), EtcRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InsuranceRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InsuranceRecordController.java index 4dc31536..4bf40c00 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InsuranceRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InsuranceRecordController.java @@ -129,9 +129,18 @@ public class InsuranceRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入保险记录", description = "传入excel") public R importInsuranceRecord(MultipartFile file, HttpServletResponse response) { - List failureList = insuranceRecordService.importInsuranceRecord(ExcelUtil.read(file, InsuranceRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "保险记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, InsuranceRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + insuranceRecordService.importInsuranceRecord(ExcelUtil.read(file, InsuranceRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "保险记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), InsuranceRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenanceRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenanceRecordController.java index e24f851f..51db7236 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenanceRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenanceRecordController.java @@ -128,9 +128,18 @@ public class MaintenanceRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入维修记录", description = "传入excel") public R importMaintenanceRecord(MultipartFile file, HttpServletResponse response) { - List failureList = maintenanceRecordService.importMaintenanceRecord(ExcelUtil.read(file, MaintenanceRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "维修记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, MaintenanceRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + maintenanceRecordService.importMaintenanceRecord(ExcelUtil.read(file, MaintenanceRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "维修记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), MaintenanceRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TireReplacementRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TireReplacementRecordController.java index d3d5741e..608d30ec 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TireReplacementRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TireReplacementRecordController.java @@ -128,9 +128,18 @@ public class TireReplacementRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入换胎记录", description = "传入excel") public R importTireReplacementRecord(MultipartFile file, HttpServletResponse response) { - List failureList = tireReplacementRecordService.importTireReplacementRecord(ExcelUtil.read(file, TireReplacementRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "换胎记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, TireReplacementRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + tireReplacementRecordService.importTireReplacementRecord(ExcelUtil.read(file, TireReplacementRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "换胎记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), TireReplacementRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java index 70b04017..b06948bb 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java @@ -111,8 +111,9 @@ public class AccidentRecordServiceImpl extends BaseServiceImpl Date: Sat, 26 Sep 2026 10:52:02 +0800 Subject: [PATCH 14/29] =?UTF-8?q?:bug:=20=E8=AE=B0=E5=BD=95=E7=B1=BB?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=88=E7=AC=AC=E4=BA=8C=E6=89=B9=204=20?= =?UTF-8?q?=E4=B8=AA=E6=A8=A1=E5=9D=97=EF=BC=89=E5=A4=B1=E8=B4=A5=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E8=BF=94=E5=9B=9E=E5=85=A8=E9=87=8F=E5=8E=9F=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 覆盖:里程记录 / 油电记录 / 其他费用记录 / 运输变更记录。 问题同第一批:收集 errorList 后 setRollbackOnly 并 return,控制器据此导出 「仅错误行」——失败明细不是原表全量,用户无法对照原表修正。 改动(同构): - 服务层:抛 ImportFailureException(data),明细携带原表全部行; 回滚由异常触发(替代 setRollbackOnly)。 - 控制器:catch 异常取 getFailureList() 导出(用 export 保留按列标红), 补上传文件校验。 验证:mvn install -DskipTests 通过;记录类回归 80/80 (10 模块 × 2 用例,含第一批 6 个模块的回归确认)。 --- .../controller/MileageRecordController.java | 15 ++++++++++++--- .../controller/OilElectricRecordController.java | 15 ++++++++++++--- .../controller/OtherExpenseRecordController.java | 15 ++++++++++++--- .../TransportChangeRecordController.java | 15 ++++++++++++--- .../service/impl/MileageRecordServiceImpl.java | 5 +++-- .../impl/OilElectricRecordServiceImpl.java | 5 +++-- .../impl/OtherExpenseRecordServiceImpl.java | 5 +++-- .../impl/TransportChangeRecordServiceImpl.java | 5 +++-- 8 files changed, 60 insertions(+), 20 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MileageRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MileageRecordController.java index d46141cc..884e5314 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MileageRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MileageRecordController.java @@ -116,9 +116,18 @@ public class MileageRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入里程记录", description = "传入excel") public R importMileageRecord(MultipartFile file, HttpServletResponse response) { - List failureList = mileageRecordService.importMileageRecord(ExcelUtil.read(file, MileageRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "里程记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, MileageRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + mileageRecordService.importMileageRecord(ExcelUtil.read(file, MileageRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "里程记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), MileageRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OilElectricRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OilElectricRecordController.java index ee3caae1..8254949b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OilElectricRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OilElectricRecordController.java @@ -94,9 +94,18 @@ public class OilElectricRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入油电记录", description = "传入excel") public R importOilElectricRecord(MultipartFile file, HttpServletResponse response) { - List failureList = oilElectricRecordService.importOilElectricRecord(ExcelUtil.read(file, OilElectricRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "油电记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, OilElectricRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + oilElectricRecordService.importOilElectricRecord(ExcelUtil.read(file, OilElectricRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "油电记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), OilElectricRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OtherExpenseRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OtherExpenseRecordController.java index 3ea8fb5a..9e48fdd6 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OtherExpenseRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OtherExpenseRecordController.java @@ -94,9 +94,18 @@ public class OtherExpenseRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入其他费用记录", description = "传入excel") public R importOtherExpenseRecord(MultipartFile file, HttpServletResponse response) { - List failureList = otherExpenseRecordService.importOtherExpenseRecord(ExcelUtil.read(file, OtherExpenseRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "其他费用记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, OtherExpenseRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + otherExpenseRecordService.importOtherExpenseRecord(ExcelUtil.read(file, OtherExpenseRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "其他费用记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), OtherExpenseRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportChangeRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportChangeRecordController.java index 10848fa9..93e10a83 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportChangeRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportChangeRecordController.java @@ -113,9 +113,18 @@ public class TransportChangeRecordController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入变更记录", description = "传入excel") public R importTransportChangeRecord(MultipartFile file, HttpServletResponse response) { - List failureList = transportChangeRecordService.importTransportChangeRecord(ExcelUtil.read(file, TransportChangeRecordExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "变更记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, TransportChangeRecordExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + transportChangeRecordService.importTransportChangeRecord(ExcelUtil.read(file, TransportChangeRecordExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "运输变更记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), TransportChangeRecordExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java index 0e72973a..701d7030 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java @@ -105,8 +105,9 @@ public class MileageRecordServiceImpl extends BaseServiceImpl Date: Sat, 26 Sep 2026 10:58:15 +0800 Subject: [PATCH 15/29] =?UTF-8?q?:bug:=20=E5=8F=B0=E8=B4=A6/=E4=B8=BB?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=AF=BC=E5=85=A5=EF=BC=884=20?= =?UTF-8?q?=E4=B8=AA=E6=A8=A1=E5=9D=97=EF=BC=89=E5=A4=B1=E8=B4=A5=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E8=BF=94=E5=9B=9E=E5=85=A8=E9=87=8F=E5=8E=9F=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 覆盖:设备台账 / 保养计划(blade-transport)、铁路站点 / 机场主数据(blade-system)。 问题同前两批:收集 errorList 后 setRollbackOnly 并 return,控制器据此导出 「仅错误行」——失败明细不是原表全量,用户无法对照原表修正。 改动(同构): - 服务层:抛 ImportFailureException(data),明细携带原表全部行; 回滚由异常触发(替代 setRollbackOnly)。注意 blade-system 的两个模块 用的是静态导入 TransactionAspectSupport,模式略有差异。 - 控制器:catch 异常取 getFailureList() 导出(用 export 保留按列标红), 补上传文件校验。 验证:mvn install -DskipTests 通过;台账回归 32/32,记录类回归 80/80。 --- .../controller/AirportMasterController.java | 8 +++++--- .../controller/RailwayStationController.java | 8 +++++--- .../service/impl/AirportMasterServiceImpl.java | 5 +++-- .../service/impl/RailwayStationServiceImpl.java | 5 +++-- .../controller/EquipmentLedgerController.java | 15 ++++++++++++--- .../controller/MaintenancePlanController.java | 15 ++++++++++++--- .../service/impl/EquipmentLedgerServiceImpl.java | 5 +++-- .../service/impl/MaintenancePlanServiceImpl.java | 5 +++-- 8 files changed, 46 insertions(+), 20 deletions(-) diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java index 59950862..42374fa2 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java @@ -157,9 +157,11 @@ public class AirportMasterController extends BladeController { if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { return R.fail("请上传 .xls,.xlsx 标准格式文件"); } - List failureList = airportMasterService.importAirportMaster(ExcelUtil.read(file, AirportMasterExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "空港机场主数据导入失败明细" + DateUtil.time(), "导入失败明细", failureList, AirportMasterExcel.class); + try { + airportMasterService.importAirportMaster(ExcelUtil.read(file, AirportMasterExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "机场主数据导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), AirportMasterExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java index 7bc1f8c2..2e643118 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java @@ -160,9 +160,11 @@ public class RailwayStationController extends BladeController { if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { return R.fail("请上传 .xls,.xlsx 标准格式文件"); } - List failureList = railwayStationService.importRailwayStation(ExcelUtil.read(file, RailwayStationExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "铁路车站主数据导入失败明细" + DateUtil.time(), "导入失败明细", failureList, RailwayStationExcel.class); + try { + railwayStationService.importRailwayStation(ExcelUtil.read(file, RailwayStationExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "铁路站点导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), RailwayStationExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java index 55bdeb12..815ca194 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java @@ -160,8 +160,9 @@ public class AirportMasterServiceImpl extends BaseServiceImpl failureList = equipmentLedgerService.importEquipmentLedger(ExcelUtil.read(file, EquipmentLedgerExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "设备台账导入失败明细" + DateUtil.time(), "导入失败明细", failureList, EquipmentLedgerExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + equipmentLedgerService.importEquipmentLedger(ExcelUtil.read(file, EquipmentLedgerExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "设备台账导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), EquipmentLedgerExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenancePlanController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenancePlanController.java index b279ccf4..44970f18 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenancePlanController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenancePlanController.java @@ -128,9 +128,18 @@ public class MaintenancePlanController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "导入保养记录", description = "传入excel") public R importMaintenancePlan(MultipartFile file, HttpServletResponse response) { - List failureList = maintenancePlanService.importMaintenancePlan(ExcelUtil.read(file, MaintenancePlanExcel.class)); - if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "保养记录导入失败明细" + DateUtil.time(), "导入失败明细", failureList, MaintenancePlanExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + maintenancePlanService.importMaintenancePlan(ExcelUtil.read(file, MaintenancePlanExcel.class)); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + org.springblade.common.excel.ImportFailureExcelUtil.export(response, "保养计划导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), MaintenancePlanExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EquipmentLedgerServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EquipmentLedgerServiceImpl.java index cd1eccb5..f1051332 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EquipmentLedgerServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EquipmentLedgerServiceImpl.java @@ -114,8 +114,9 @@ public class EquipmentLedgerServiceImpl extends BaseServiceImpl Date: Sat, 26 Sep 2026 11:10:37 +0800 Subject: [PATCH 16/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=BF=90?= =?UTF-8?q?=E8=BE=93=E5=AF=B9=E8=B4=A6=E5=AF=BC=E5=85=A5=E6=97=A0=E5=9B=9E?= =?UTF-8?q?=E6=BB=9A=E4=B8=8E=E8=BF=90=E8=BE=93=E8=AE=A1=E5=88=92=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E4=B8=8D=E5=85=A8=EF=BC=88=E6=89=B9=E6=AC=A14?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本批是 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() 调用残留。 注:运输对账需先建对账草稿(多张前置表)才能端到端回归, 本批仅完成代码改造与编译验证,回归用例待补(见后续说明)。 --- .../controller/TransportPlanController.java | 17 ++++++-- .../TransportReconciliationController.java | 43 +++++++++++++------ .../impl/TransportPlanServiceImpl.java | 5 ++- .../TransportReconciliationServiceImpl.java | 34 ++++++++++++--- 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportPlanController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportPlanController.java index ae64bb22..39c3580b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportPlanController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportPlanController.java @@ -147,10 +147,19 @@ public class TransportPlanController extends BladeController { public R importTransportPlan(MultipartFile file, @RequestParam Long projectId, @RequestParam String projectName, @RequestParam Long contractId, @RequestParam String contractName, @RequestParam String customerName, HttpServletResponse response) { - List failureList = transportPlanService.importTransportPlan( - ExcelUtil.read(file, TransportPlanImportExcel.class), projectId, projectName, contractId, contractName, customerName); - if (Func.isNotEmpty(failureList)) { - ImportFailureExcelUtil.export(response, "运输计划导入失败明细" + DateUtil.time(), "导入失败明细", failureList, TransportPlanImportExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + transportPlanService.importTransportPlan( + ExcelUtil.read(file, TransportPlanImportExcel.class), projectId, projectName, contractId, contractName, customerName); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + ImportFailureExcelUtil.export(response, "运输计划导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), TransportPlanImportExcel.class); return null; } return R.success("导入数据成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java index 2b5d7772..2baf5686 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java @@ -19,6 +19,7 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.secure.annotation.PreAuth; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.Func; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.transport.excel.CargoReconciliationExcel; import org.springblade.transport.excel.CargoReconciliationFeeReader; @@ -126,12 +127,21 @@ public class TransportReconciliationController extends BladeController { @ApiOperationSupport(order = 6) @Operation(summary = "导入整车总额外部账单") public R importVehicle(@RequestParam Long id, MultipartFile file, HttpServletResponse response) { - List rows = ExcelUtil.read(file, VehicleReconciliationExcel.class); - List> feeItems = VehicleReconciliationFeeReader.read(file); - for (int index = 0; index < rows.size() && index < feeItems.size(); index++) rows.get(index).setFeeItems(feeItems.get(index)); - List failures = reconciliationService.importVehicles(id, rows); - if (!failures.isEmpty()) { - ImportFailureExcelUtil.export(response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", failures, VehicleReconciliationFailureExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + List rows = ExcelUtil.read(file, VehicleReconciliationExcel.class); + List> feeItems = VehicleReconciliationFeeReader.read(file); + for (int index = 0; index < rows.size() && index < feeItems.size(); index++) rows.get(index).setFeeItems(feeItems.get(index)); + reconciliationService.importVehicles(id, rows); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + ImportFailureExcelUtil.export(response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), VehicleReconciliationExcel.class); return null; } return R.success("导入数据成功"); @@ -141,12 +151,21 @@ public class TransportReconciliationController extends BladeController { @ApiOperationSupport(order = 7) @Operation(summary = "导入货物明细外部账单") public R importCargo(@RequestParam Long id, MultipartFile file, HttpServletResponse response) { - List rows = ExcelUtil.read(file, CargoReconciliationExcel.class); - List> feeItems = CargoReconciliationFeeReader.read(file); - for (int index = 0; index < rows.size() && index < feeItems.size(); index++) rows.get(index).setFeeItems(feeItems.get(index)); - List failures = reconciliationService.importCargoes(id, rows); - if (!failures.isEmpty()) { - ImportFailureExcelUtil.export(response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", failures, CargoReconciliationFailureExcel.class); + if (file == null || file.isEmpty()) { + return R.fail("上传文件不能为空"); + } + String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase(); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + return R.fail("请上传 .xls,.xlsx 标准格式文件"); + } + try { + List rows = ExcelUtil.read(file, CargoReconciliationExcel.class); + List> feeItems = CargoReconciliationFeeReader.read(file); + for (int index = 0; index < rows.size() && index < feeItems.size(); index++) rows.get(index).setFeeItems(feeItems.get(index)); + reconciliationService.importCargoes(id, rows); + } catch (org.springblade.common.excel.ImportFailureException exception) { + // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 + ImportFailureExcelUtil.export(response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), CargoReconciliationExcel.class); return null; } return R.success("导入数据成功"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportPlanServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportPlanServiceImpl.java index 9c5620c6..d466d882 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportPlanServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportPlanServiceImpl.java @@ -294,8 +294,9 @@ public class TransportPlanServiceImpl extends BaseServiceImpl(errorMap.values()); + // 任一行失败即整批回滚:抛异常触发事务回滚(替代旧的 setRollbackOnly), + // 明细为原表全部行(未出错行仅无错误原因),用户可对照原表修正后重新导入。 + throw new org.springblade.common.excel.ImportFailureException(data); } // 第二阶段:批量导入 diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportReconciliationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportReconciliationServiceImpl.java index 05e01c29..2039b426 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportReconciliationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportReconciliationServiceImpl.java @@ -300,22 +300,33 @@ public class TransportReconciliationServiceImpl VehicleReconciliationExcel row = rows.get(index); List validationErrors = validateImportVehicle(row); if (Func.isNotEmpty(validationErrors)) { + // 原因同时写回原行:异常携带的是原表 rows, + // 导出工具从行对象的 errorMessage 字段取原因,只写副本会丢原因。 + row.setErrorMessage(org.springblade.common.excel.ImportFailureExcelUtil.formatErrorMessage(validationErrors)); VehicleReconciliationFailureExcel failure = new VehicleReconciliationFailureExcel(); BeanUtil.copyProperties(row, failure); - failure.setErrorMessage(org.springblade.common.excel.ImportFailureExcelUtil.formatErrorMessage(validationErrors)); + failure.setErrorMessage(row.getErrorMessage()); failures.add(failure); continue; } try { validExternals.add(buildVehicleExternal(id, index, row)); } catch (Exception exception) { + String message = org.springblade.common.excel.ImportFailureExcelUtil.formatErrorMessage(List.of( + exception instanceof ServiceException ? exception.getMessage() : "导入失败")); + row.setErrorMessage(message); VehicleReconciliationFailureExcel failure = new VehicleReconciliationFailureExcel(); BeanUtil.copyProperties(row, failure); - failure.setErrorMessage(org.springblade.common.excel.ImportFailureExcelUtil.formatErrorMessage(List.of( - exception instanceof ServiceException ? exception.getMessage() : "导入失败"))); + failure.setErrorMessage(message); failures.add(failure); } } + if (Func.isNotEmpty(failures)) { + // 任一行失败即整批回滚:抛异常触发事务回滚,使前置的 resetExternal + // 清空与本批正确行的插入一并退掉;否则会出现「旧外部账单被清空、 + // 正确行却已入库」的数据损坏。 + throw new org.springblade.common.excel.ImportFailureException(rows); + } for (TransportReconciliationExternal external : validExternals) { if (externalMapper.insert(external) <= 0) throw new ServiceException("外部账单保存失败"); } @@ -418,22 +429,33 @@ public class TransportReconciliationServiceImpl CargoReconciliationExcel row = rows.get(index); List validationErrors = validateImportCargo(row); if (Func.isNotEmpty(validationErrors)) { + // 原因同时写回原行:异常携带的是原表 rows, + // 导出工具从行对象的 errorMessage 字段取原因,只写副本会丢原因。 + row.setErrorMessage(org.springblade.common.excel.ImportFailureExcelUtil.formatErrorMessage(validationErrors)); CargoReconciliationFailureExcel failure = new CargoReconciliationFailureExcel(); BeanUtil.copyProperties(row, failure); - failure.setErrorMessage(org.springblade.common.excel.ImportFailureExcelUtil.formatErrorMessage(validationErrors)); + failure.setErrorMessage(row.getErrorMessage()); failures.add(failure); continue; } try { validExternals.add(buildCargoExternal(id, index, row)); } catch (Exception exception) { + String message = org.springblade.common.excel.ImportFailureExcelUtil.formatErrorMessage(List.of( + exception instanceof ServiceException ? exception.getMessage() : "导入失败")); + row.setErrorMessage(message); CargoReconciliationFailureExcel failure = new CargoReconciliationFailureExcel(); BeanUtil.copyProperties(row, failure); - failure.setErrorMessage(org.springblade.common.excel.ImportFailureExcelUtil.formatErrorMessage(List.of( - exception instanceof ServiceException ? exception.getMessage() : "导入失败"))); + failure.setErrorMessage(message); failures.add(failure); } } + if (Func.isNotEmpty(failures)) { + // 任一行失败即整批回滚:抛异常触发事务回滚,使前置的 resetExternal + // 清空与本批正确行的插入一并退掉;否则会出现「旧外部账单被清空、 + // 正确行却已入库」的数据损坏。 + throw new org.springblade.common.excel.ImportFailureException(rows); + } for (TransportReconciliationExternal external : validExternals) { if (externalMapper.insert(external) <= 0) throw new ServiceException("外部账单保存失败"); } From 2d185f0de64a514382c1e86fce541cb0bf5fda41 Mon Sep 17 00:00:00 2001 From: "weicw1996@qq.com" Date: Sat, 26 Sep 2026 11:37:07 +0800 Subject: [PATCH 17/29] =?UTF-8?q?:bug:=20=E5=AF=BC=E5=85=A5=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=A0=BC=E6=97=A0=E6=B3=95=E8=BD=AC=E6=8D=A2=E6=97=B6?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E8=BF=94=E5=9B=9E=E5=8F=AF=E8=AF=BB=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=98=8E=E7=BB=86=EF=BC=8C=E5=85=9C=E5=BA=95=2026=20?= =?UTF-8?q?=E4=B8=AA=E5=AF=BC=E5=85=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题(用户实测反馈):金额列填「一万二千元」这类无法转换的内容时,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 断言)固化该场景。 --- .../common/excel/ImportFailureExcelUtil.java | 342 ++++++++++++++++++ .../controller/AirportMasterController.java | 9 + .../controller/CargoTypeController.java | 9 + .../system/controller/CurrencyController.java | 9 + .../system/controller/FeeItemController.java | 9 + .../controller/RailwayStationController.java | 9 + .../system/controller/RegionController.java | 9 + .../controller/AccidentRecordController.java | 9 + .../AnnualInspectionRecordController.java | 9 + .../controller/CommonCargoController.java | 9 + .../controller/CommonRouteController.java | 9 + .../CreditScoreQuantificationController.java | 9 + .../controller/EquipmentLedgerController.java | 9 + .../controller/EtcRecordController.java | 9 + .../controller/InsuranceRecordController.java | 9 + .../controller/MaintenancePlanController.java | 9 + .../MaintenanceRecordController.java | 9 + .../controller/MileageRecordController.java | 9 + .../OilElectricRecordController.java | 9 + .../OtherExpenseRecordController.java | 9 + .../TireReplacementRecordController.java | 9 + .../TransportChangeRecordController.java | 9 + .../controller/TransportPlanController.java | 9 + .../TransportReconciliationController.java | 18 + .../controller/ViolationRecordController.java | 9 + .../controller/WaybillController.java | 9 + 26 files changed, 576 insertions(+) diff --git a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java index 6b0ad40d..d4330eed 100644 --- a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java +++ b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java @@ -80,6 +80,348 @@ public class ImportFailureExcelUtil { addValidationError(validationErrors, value != null && value.length() > maxLength, message); } + /** + * 把「读取 Excel 阶段」的转换异常转成可读的失败原因。 + *

+ * 背景:单元格里填了无法转换的内容(如金额列填「一万二千元」)时,EasyExcel 会在 + * {@code ExcelUtil.read(...)} 阶段就抛 {@link cn.idev.excel.exception.ExcelDataConvertException}, + * 根本走不到行级校验;若不兜底,用户看到的是 + * 「Convert data ... to class java.math.BigDecimal error」这类技术文案。 + *

+ * 本方法据异常里的行列位置与目标类型,生成「第N行「列名」格式不正确:<原值>」这样 + * 用户能看懂、能定位的文案;列名靠表头反射拿 {@code @ExcelProperty},拿不到则退回列序号。 + * + * @param exception 读取阶段抛出的异常 + * @param excelClass 导入模型类(用于按列序号反查表头名) + * @return 可读的失败原因;非转换类异常返回 null(交由上层按原样处理) + */ + public static String describeReadFailure(Throwable exception, Class excelClass) { + cn.idev.excel.exception.ExcelDataConvertException convertException = findCause(exception, + cn.idev.excel.exception.ExcelDataConvertException.class); + if (convertException == null) { + return null; + } + Integer rowIndex = convertException.getRowIndex(); + Integer columnIndex = convertException.getColumnIndex(); + String columnName = columnName(excelClass, columnIndex); + // Excel 行号:EasyExcel 的 rowIndex 为 1 基数据行号(表头占第 1 行),故 Excel 行号 = rowIndex + 1 + String rowText = rowIndex == null ? "第?行" : "第" + (rowIndex + 1) + "行"; + String columnText = columnName == null ? ("第" + (columnIndex == null ? "?" : columnIndex + 1) + "列") : "「" + columnName + "」"; + String value = cellValue(convertException); + StringBuilder message = new StringBuilder(rowText).append(columnText).append("格式不正确"); + if (value != null && !value.isBlank()) { + message.append(":").append(value); + } + return message.toString(); + } + + /** + * 在异常链里查找指定类型的 cause + */ + private static T findCause(Throwable throwable, Class type) { + for (Throwable current = throwable; current != null; current = current.getCause()) { + if (type.isInstance(current)) { + return type.cast(current); + } + if (current.getCause() == current) { + break; + } + } + return null; + } + + /** + * 按列序号反查表头名(@ExcelProperty 的 value,取不到则用字段名) + */ + private static String columnName(Class excelClass, Integer columnIndex) { + if (excelClass == null || columnIndex == null) { + return null; + } + List fields = excelFields(excelClass); + if (columnIndex < 0 || columnIndex >= fields.size()) { + return null; + } + Field field = fields.get(columnIndex); + ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class); + if (excelProperty == null) { + return field.getName(); + } + String[] value = excelProperty.value(); + String columnName = value.length == 0 ? field.getName() : value[0]; + return columnName.replace("*", ""); + } + + /** + * 取触发转换失败的单元格原值 + */ + private static String cellValue(cn.idev.excel.exception.ExcelDataConvertException exception) { + try { + cn.idev.excel.metadata.data.CellData cellData = exception.getCellData(); + if (cellData == null) { + return null; + } + Object data = cellData.getData(); + if (data == null) { + data = cellData.getStringValue(); + } + return data == null ? null : String.valueOf(data).trim(); + } catch (Exception ignored) { + return null; + } + } + + /** + * 以「原始单元格文本」方式重读导入文件,得到的行用于构造读取阶段的失败明细。 + *

+ * 用途:当 {@code ExcelUtil.read(file, XxxExcel.class)} 因单元格无法转换而失败时, + * 已解析的实体列表是不完整的(异常中断了整批读取)。此时用本方法重读一次: + * 不做类型转换(直接读成 Map),因此绝不会再抛转换异常,可拿到**原表全部行**, + * 供导出「原表全量 + 仅出错行带原因」的失败明细。 + * + * @param file 上传的 Excel 文件 + * @param excelClass 导入模型类(按列序号反查表头名,用于把列序号映射成列名) + * @return 按行组织的明细数据:每行是「表头名 → 单元格文本」的有序 Map; + * 读不出内容时返回空列表(调用方按空明细处理) + */ + public static List> readRawRows(java.io.InputStream file, Class excelClass) { + List> rawRows = new ArrayList<>(); + try { + cn.idev.excel.read.builder.ExcelReaderBuilder builder = cn.idev.excel.FastExcel + .read(file, new cn.idev.excel.event.AnalysisEventListener>() { + @Override + public void invoke(Map data, cn.idev.excel.context.AnalysisContext context) { + rawRows.add(new java.util.LinkedHashMap<>(data)); + } + + @Override + public void doAfterAllAnalysed(cn.idev.excel.context.AnalysisContext context) { + // 无需处理 + } + }); + builder.headRowNumber(1).sheet().doRead(); + } catch (Exception ignored) { + // 重读本身失败时退回空明细,由调用方按「无法读取」提示 + return new ArrayList<>(); + } + List fields = excelClass == null ? List.of() : excelFields(excelClass); + List> rows = new ArrayList<>(); + for (Map rawRow : rawRows) { + Map row = new java.util.LinkedHashMap<>(); + for (Map.Entry entry : rawRow.entrySet()) { + Integer columnIndex = entry.getKey(); + String columnName = columnIndex != null && columnIndex < fields.size() + ? columnName(excelClass, columnIndex) + : null; + if (columnName == null) { + columnName = "第" + (columnIndex == null ? "?" : columnIndex + 1) + "列"; + } + row.put(columnName, entry.getValue()); + } + rows.add(row); + } + return rows; + } + + /** + * 导出「读取阶段失败」明细:原表全量行 + 末尾「导入失败原因」列。 + *

+ * 与 {@link #export} 的区别:本方法直接按重读得到的「表头名 → 单元格文本」写出, + * 不依赖导入模型的字段反射,因此适用于「单元格无法转换为实体字段」的场景 + * (此时实体列表不完整,无法走常规导出)。 + * + * @param response 响应 + * @param fileName 文件名 + * @param sheetName 工作表名 + * @param rawRows {@link #readRawRows} 得到的原表全部行 + * @param failureMessageByRow 行号(0 基,对应 rawRows 下标)→ 该行失败原因;为 null 表示该行无错 + */ + public static void exportRawFailure(HttpServletResponse response, String fileName, String sheetName, + List> rawRows, Map failureMessageByRow) { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding(StandardCharsets.UTF_8.name()); + String encodeFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8); + response.setHeader("Content-disposition", "attachment;filename=" + encodeFileName + ".xlsx"); + List headers = new ArrayList<>(); + for (Map row : rawRows) { + for (String key : row.keySet()) { + if (!headers.contains(key)) { + headers.add(key); + } + } + } + headers.add(FAILURE_REASON); + List> head = new ArrayList<>(); + for (String header : headers) { + head.add(List.of(header)); + } + List> rows = new ArrayList<>(); + Map> redColumnsByRow = new HashMap<>(); + for (int rowIndex = 0; rowIndex < rawRows.size(); rowIndex++) { + Map rawRow = rawRows.get(rowIndex); + List row = new ArrayList<>(); + Set redColumns = new LinkedHashSet<>(); + // 失败原因列恒标红 + redColumns.add(headers.size() - 1); + String failureMessage = failureMessageByRow == null ? null : failureMessageByRow.get(rowIndex); + for (int columnIndex = 0; columnIndex < headers.size() - 1; columnIndex++) { + String header = headers.get(columnIndex); + row.add(rawRow.get(header)); + // 失败原因里出现该列名时,标红该列单元格 + if (failureMessage != null && !failureMessage.isBlank() && failureMessage.contains("「" + header + "」")) { + redColumns.add(columnIndex); + } + } + row.add(failureMessage == null ? "" : failureMessage); + rows.add(row); + redColumnsByRow.put(rowIndex, redColumns); + } + try { + FastExcel.write(response.getOutputStream()) + .registerWriteHandler(new RawFailureCellStyleHandler(rows, redColumnsByRow)) + .head(head) + .sheet(sheetName) + .doWrite(rows); + } catch (IOException exception) { + throw new IllegalStateException("导出导入失败明细失败", exception); + } + } + + /** + * 读取阶段失败明细的单元格样式处理器:统一列宽 + 标红失败原因列与出错列 + */ + private static class RawFailureCellStyleHandler implements CellWriteHandler { + + private final int failureReasonColumnIndex; + private final Map> redColumnsByRow; + private final Map redStyleCache = new HashMap<>(); + private final Map noWrapStyleCache = new HashMap<>(); + private final Map columnWidthCache = new HashMap<>(); + + private RawFailureCellStyleHandler(List> rows, Map> redColumnsByRow) { + this.failureReasonColumnIndex = rows.isEmpty() ? 0 : rows.get(0).size() - 1; + this.redColumnsByRow = redColumnsByRow; + } + + @Override + public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, + List> cellDataList, Cell cell, cn.idev.excel.metadata.Head head, + Integer relativeRowIndex, Boolean isHead) { + if (Boolean.TRUE.equals(isHead)) { + adjustColumnWidth(cell); + markNoWrap(cell); + return; + } + adjustColumnWidth(cell); + if (relativeRowIndex == null || relativeRowIndex < 0) { + return; + } + Set redColumns = redColumnsByRow.get(relativeRowIndex); + if (redColumns != null && redColumns.contains(cell.getColumnIndex())) { + markRed(cell); + } + } + + private void markRed(Cell cell) { + CellStyle currentStyle = cell.getCellStyle(); + CellStyle redStyle = redStyleCache.computeIfAbsent(currentStyle.getIndex(), styleIndex -> { + Workbook workbook = cell.getSheet().getWorkbook(); + CellStyle newStyle = workbook.createCellStyle(); + newStyle.cloneStyleFrom(currentStyle); + Font font = workbook.createFont(); + font.setColor(IndexedColors.RED.getIndex()); + newStyle.setFont(font); + newStyle.setWrapText(true); + return newStyle; + }); + cell.setCellStyle(redStyle); + } + + private void markNoWrap(Cell cell) { + CellStyle currentStyle = cell.getCellStyle(); + CellStyle noWrapStyle = noWrapStyleCache.computeIfAbsent(currentStyle.getIndex(), styleIndex -> { + CellStyle newStyle = cell.getSheet().getWorkbook().createCellStyle(); + newStyle.cloneStyleFrom(currentStyle); + newStyle.setWrapText(false); + return newStyle; + }); + cell.setCellStyle(noWrapStyle); + } + + private void adjustColumnWidth(Cell cell) { + int columnIndex = cell.getColumnIndex(); + int columnWidth = Math.min(Math.max(displayWidth(cell.toString()) + 4, 12), 80) * 256; + Integer currentWidth = columnWidthCache.get(columnIndex); + if (currentWidth == null || columnWidth > currentWidth) { + columnWidthCache.put(columnIndex, columnWidth); + cell.getSheet().setColumnWidth(columnIndex, columnWidth); + } + } + + private int displayWidth(String value) { + int width = 0; + for (int index = 0; index < value.length(); index++) { + width += value.charAt(index) > 255 ? 2 : 1; + } + return width; + } + } + + /** + * 读取阶段异常的一站式兜底:重读原表 → 导出「全量行 + 出错行原因」失败明细。 + *

+ * 控制器用法:在导入的 try 块末尾追加 + *

+	 * } catch (Exception exception) {
+	 *     if (ImportFailureExcelUtil.exportReadFailure(response, fileName, sheetName, file, XxxExcel.class, exception)) {
+	 *         return null;
+	 *     }
+	 *     throw exception;
+	 * }
+	 * 
+ * + * @return true 表示已识别为「单元格转换失败」并已写出明细(调用方直接 return null); + * false 表示不是转换类异常(调用方应继续抛出,保持原有处理) + */ + public static boolean exportReadFailure(HttpServletResponse response, String fileName, String sheetName, + org.springframework.web.multipart.MultipartFile file, + Class excelClass, Throwable exception) { + String failureMessage = describeReadFailure(exception, excelClass); + if (failureMessage == null) { + return false; + } + List> rawRows; + try (java.io.InputStream inputStream = file.getInputStream()) { + rawRows = readRawRows(inputStream, excelClass); + } catch (IOException ioException) { + rawRows = new ArrayList<>(); + } + Map failureMessageByRow = new HashMap<>(); + if (rawRows.isEmpty()) { + // 重读也拿不到内容时,退化为「仅失败原因」一行,至少让用户看到可读原因 + Map single = new java.util.LinkedHashMap<>(); + single.put(FAILURE_REASON, failureMessage); + rawRows.add(single); + failureMessageByRow.put(0, failureMessage); + exportRawFailure(response, fileName, sheetName, rawRows, failureMessageByRow); + return true; + } + // 异常里的数据行下标(0 基)用于把原因挂到对应行 + Integer rowIndex = readFailureRowIndex(exception); + int targetRow = rowIndex == null ? 0 : Math.max(0, Math.min(rowIndex, rawRows.size() - 1)); + failureMessageByRow.put(targetRow, failureMessage); + exportRawFailure(response, fileName, sheetName, rawRows, failureMessageByRow); + return true; + } + + /** + * 取转换异常中的数据行下标(0 基) + */ + private static Integer readFailureRowIndex(Throwable exception) { + cn.idev.excel.exception.ExcelDataConvertException convertException = findCause(exception, + cn.idev.excel.exception.ExcelDataConvertException.class); + return convertException == null ? null : convertException.getRowIndex(); + } + private static final String FAILURE_REASON = "导入失败原因"; private static final String ERROR_MESSAGE_FIELD = "errorMessage"; private static final String FAILURE_REASON_FIELD = "failureReason"; diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java index 42374fa2..355aaee9 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java @@ -163,6 +163,15 @@ public class AirportMasterController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "机场主数据导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), AirportMasterExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "机场主数据导入失败明细" + DateUtil.time(), "导入失败明细", file, AirportMasterExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/CargoTypeController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/CargoTypeController.java index 616e1ae6..cf73d38c 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/CargoTypeController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/CargoTypeController.java @@ -169,6 +169,15 @@ public class CargoTypeController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 exportFailure(response, exception.getFailureList()); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "货物类型导入失败明细" + DateUtil.time(), "导入失败明细", file, CargoTypeExcel.class, readException)) { + return null; + } + throw readException; } return R.success("导入数据成功"); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/CurrencyController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/CurrencyController.java index be6ef0f5..8b6b6c44 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/CurrencyController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/CurrencyController.java @@ -162,6 +162,15 @@ public class CurrencyController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "币种汇率导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), CurrencyExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "币种汇率导入失败明细" + DateUtil.time(), "导入失败明细", file, CurrencyExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java index 2bf7ea2d..d70330bd 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java @@ -151,6 +151,15 @@ public class FeeItemController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 ImportFailureExcelUtil.exportFailureReasonOnly(response, "费用项导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), FeeItemExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "费用项导入失败明细" + DateUtil.time(), "导入失败明细", file, FeeItemExcel.class, readException)) { + return null; + } + throw readException; } return R.success("导入数据成功"); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java index 2e643118..34149e9d 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java @@ -166,6 +166,15 @@ public class RailwayStationController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "铁路站点导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), RailwayStationExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "铁路站点导入失败明细" + DateUtil.time(), "导入失败明细", file, RailwayStationExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java index c0ab7473..9f0ec270 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java @@ -205,6 +205,15 @@ public class RegionController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "行政区划导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), RegionExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "行政区划导入失败明细" + DateUtil.time(), "导入失败明细", file, RegionExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AccidentRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AccidentRecordController.java index 7a6e7140..8744be2b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AccidentRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AccidentRecordController.java @@ -141,6 +141,15 @@ public class AccidentRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "事故记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), AccidentRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "事故记录导入失败明细" + DateUtil.time(), "导入失败明细", file, AccidentRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AnnualInspectionRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AnnualInspectionRecordController.java index 1412b173..f598e3c2 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AnnualInspectionRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/AnnualInspectionRecordController.java @@ -138,6 +138,15 @@ public class AnnualInspectionRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "年检记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), AnnualInspectionRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "年检记录导入失败明细" + DateUtil.time(), "导入失败明细", file, AnnualInspectionRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonCargoController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonCargoController.java index 212ca3a9..7cc90b6e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonCargoController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonCargoController.java @@ -123,6 +123,15 @@ public class CommonCargoController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 exportFailure(response, exception.getFailureList()); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "常用货物导入失败明细" + DateUtil.time(), "导入失败明细", file, CommonCargoExcel.class, readException)) { + return null; + } + throw readException; } return R.success("导入数据成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonRouteController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonRouteController.java index db31a347..98cf2900 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonRouteController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CommonRouteController.java @@ -129,6 +129,15 @@ public class CommonRouteController extends BladeController { CommonRouteImportExcel.class ); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "常用线路导入失败明细" + DateUtil.time(), "导入失败明细", file, CommonRouteImportExcel.class, readException)) { + return null; + } + throw readException; } return R.success("导入数据成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CreditScoreQuantificationController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CreditScoreQuantificationController.java index d10852ba..86e93d7b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CreditScoreQuantificationController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CreditScoreQuantificationController.java @@ -151,6 +151,15 @@ public class CreditScoreQuantificationController extends BladeController { // 任一分组失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "评分量化表导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), CreditScoreQuantificationExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "评分量化表导入失败明细" + DateUtil.time(), "导入失败明细", file, CreditScoreQuantificationExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EquipmentLedgerController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EquipmentLedgerController.java index 17ad0f6c..c4554e4b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EquipmentLedgerController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EquipmentLedgerController.java @@ -103,6 +103,15 @@ public class EquipmentLedgerController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "设备台账导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), EquipmentLedgerExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "设备台账导入失败明细" + DateUtil.time(), "导入失败明细", file, EquipmentLedgerExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EtcRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EtcRecordController.java index fb3613cc..c67992b3 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EtcRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/EtcRecordController.java @@ -107,6 +107,15 @@ public class EtcRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "ETC记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), EtcRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "ETC记录导入失败明细" + DateUtil.time(), "导入失败明细", file, EtcRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InsuranceRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InsuranceRecordController.java index 4bf40c00..8c4f414a 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InsuranceRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InsuranceRecordController.java @@ -142,6 +142,15 @@ public class InsuranceRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "保险记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), InsuranceRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "保险记录导入失败明细" + DateUtil.time(), "导入失败明细", file, InsuranceRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenancePlanController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenancePlanController.java index 44970f18..a77493c6 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenancePlanController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenancePlanController.java @@ -141,6 +141,15 @@ public class MaintenancePlanController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "保养计划导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), MaintenancePlanExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "保养计划导入失败明细" + DateUtil.time(), "导入失败明细", file, MaintenancePlanExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenanceRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenanceRecordController.java index 51db7236..42f12239 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenanceRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MaintenanceRecordController.java @@ -141,6 +141,15 @@ public class MaintenanceRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "维修记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), MaintenanceRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "维修记录导入失败明细" + DateUtil.time(), "导入失败明细", file, MaintenanceRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MileageRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MileageRecordController.java index 884e5314..68dbf53a 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MileageRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/MileageRecordController.java @@ -129,6 +129,15 @@ public class MileageRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "里程记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), MileageRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "里程记录导入失败明细" + DateUtil.time(), "导入失败明细", file, MileageRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OilElectricRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OilElectricRecordController.java index 8254949b..f2b37b13 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OilElectricRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OilElectricRecordController.java @@ -107,6 +107,15 @@ public class OilElectricRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "油电记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), OilElectricRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "油电记录导入失败明细" + DateUtil.time(), "导入失败明细", file, OilElectricRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OtherExpenseRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OtherExpenseRecordController.java index 9e48fdd6..d6b70a5a 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OtherExpenseRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/OtherExpenseRecordController.java @@ -107,6 +107,15 @@ public class OtherExpenseRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "其他费用记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), OtherExpenseRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "其他费用记录导入失败明细" + DateUtil.time(), "导入失败明细", file, OtherExpenseRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TireReplacementRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TireReplacementRecordController.java index 608d30ec..9db40c33 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TireReplacementRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TireReplacementRecordController.java @@ -141,6 +141,15 @@ public class TireReplacementRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "换胎记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), TireReplacementRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "换胎记录导入失败明细" + DateUtil.time(), "导入失败明细", file, TireReplacementRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportChangeRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportChangeRecordController.java index 93e10a83..87200541 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportChangeRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportChangeRecordController.java @@ -126,6 +126,15 @@ public class TransportChangeRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "运输变更记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), TransportChangeRecordExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "运输变更记录导入失败明细" + DateUtil.time(), "导入失败明细", file, TransportChangeRecordExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportPlanController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportPlanController.java index 39c3580b..f8f8fe07 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportPlanController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportPlanController.java @@ -161,6 +161,15 @@ public class TransportPlanController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 ImportFailureExcelUtil.export(response, "运输计划导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), TransportPlanImportExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "运输计划导入失败明细" + DateUtil.time(), "导入失败明细", file, TransportPlanImportExcel.class, readException)) { + return null; + } + throw readException; } return R.success("导入数据成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java index 2baf5686..97242618 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java @@ -143,6 +143,15 @@ public class TransportReconciliationController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 ImportFailureExcelUtil.export(response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), VehicleReconciliationExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", file, VehicleReconciliationExcel.class, readException)) { + return null; + } + throw readException; } return R.success("导入数据成功"); } @@ -167,6 +176,15 @@ public class TransportReconciliationController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 ImportFailureExcelUtil.export(response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), CargoReconciliationExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", file, CargoReconciliationExcel.class, readException)) { + return null; + } + throw readException; } return R.success("导入数据成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ViolationRecordController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ViolationRecordController.java index 0a87e8ec..d9a3e4c4 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ViolationRecordController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ViolationRecordController.java @@ -140,6 +140,15 @@ public class ViolationRecordController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红),用户修正后重新导入。 org.springblade.common.excel.ImportFailureExcelUtil.export(response, "违章记录导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), ViolationRecordImportExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "违章记录导入失败明细" + DateUtil.time(), "导入失败明细", file, ViolationRecordImportExcel.class, readException)) { + return null; + } + throw readException; } return R.success("操作成功"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java index de0ada47..e66277bb 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java @@ -256,6 +256,15 @@ public class WaybillController extends BladeController { // 任一行失败即整批回滚,导出原表全部数据并标注错误,用户修正后重新导入。 ImportFailureExcelUtil.exportFailureReasonOnly(response, "运单管理导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), WaybillExcel.class); return null; + } catch (Exception readException) { + // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, + // EasyExcel 在 ExcelUtil.read 阶段即抛异常,走不到行级校验。 + // 此处用原始文本重读原表,导出「全量行 + 出错行原因」,避免用户看到 500 技术文案。 + if (org.springblade.common.excel.ImportFailureExcelUtil.exportReadFailure( + response, "运单管理导入失败明细" + DateUtil.time(), "导入失败明细", file, WaybillExcel.class, readException)) { + return null; + } + throw readException; } return R.success("导入数据成功"); } From 9bf7fdfe9960dfbfaf80f759986c4e9c13af0de9 Mon Sep 17 00:00:00 2001 From: "weicw1996@qq.com" Date: Sat, 26 Sep 2026 11:50:57 +0800 Subject: [PATCH 18/29] =?UTF-8?q?:zap:=20=E7=A9=BA=E8=A1=A8=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E6=8F=90=E7=A4=BA=E6=94=B9=E4=B8=BA=E3=80=8C=E6=9C=AA?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E5=88=B0=E6=95=B0=E6=8D=AE=E8=A1=8C=EF=BC=8C?= =?UTF-8?q?=E8=AF=B7=E7=A1=AE=E8=AE=A4=E8=A1=A8=E5=A4=B4=E4=B8=8B=E6=96=B9?= =?UTF-8?q?=E5=B7=B2=E5=A1=AB=E5=86=99=E5=86=85=E5=AE=B9=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原提示「导入数据不能为空」在用户上传「只有表头、未填数据行」的文件时容易误解 (文件并非空文件,只是没填内容)。全项目 27 个模块、30 处统一替换该文案。 验证:mvn install -DskipTests 通过;空表上传返回新文案; 13 个导入回归脚本 383 项断言全绿。 --- .../system/service/impl/AirportMasterServiceImpl.java | 2 +- .../system/service/impl/CargoTypeServiceImpl.java | 2 +- .../system/service/impl/CurrencyServiceImpl.java | 2 +- .../springblade/system/service/impl/FeeItemServiceImpl.java | 2 +- .../system/service/impl/PortTerminalServiceImpl.java | 2 +- .../system/service/impl/RailwayStationServiceImpl.java | 2 +- .../springblade/system/service/impl/RegionServiceImpl.java | 2 +- .../transport/service/impl/AccidentRecordServiceImpl.java | 2 +- .../service/impl/AnnualInspectionRecordServiceImpl.java | 2 +- .../transport/service/impl/CommonCargoServiceImpl.java | 2 +- .../transport/service/impl/CommonRouteServiceImpl.java | 2 +- .../service/impl/CreditScoreQuantificationServiceImpl.java | 2 +- .../transport/service/impl/EquipmentLedgerServiceImpl.java | 2 +- .../transport/service/impl/EtcRecordServiceImpl.java | 2 +- .../transport/service/impl/InsuranceRecordServiceImpl.java | 2 +- .../transport/service/impl/MaintenancePlanServiceImpl.java | 2 +- .../service/impl/MaintenanceRecordServiceImpl.java | 2 +- .../transport/service/impl/MileageRecordServiceImpl.java | 2 +- .../service/impl/OilElectricRecordServiceImpl.java | 2 +- .../service/impl/OtherExpenseRecordServiceImpl.java | 2 +- .../transport/service/impl/ShippingTemplateServiceImpl.java | 2 +- .../service/impl/TireReplacementRecordServiceImpl.java | 2 +- .../service/impl/TransportChangeRecordServiceImpl.java | 2 +- .../transport/service/impl/TransportPlanServiceImpl.java | 4 ++-- .../service/impl/TransportReconciliationServiceImpl.java | 6 +++--- .../transport/service/impl/ViolationRecordServiceImpl.java | 2 +- .../transport/service/impl/WaybillServiceImpl.java | 2 +- 27 files changed, 30 insertions(+), 30 deletions(-) diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java index 815ca194..ac098b40 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java @@ -127,7 +127,7 @@ public class AirportMasterServiceImpl extends BaseServiceImpl importAirportMaster(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List airportMasterList = new ArrayList<>(); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CargoTypeServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CargoTypeServiceImpl.java index a1fc4f74..6bb8c133 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CargoTypeServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CargoTypeServiceImpl.java @@ -138,7 +138,7 @@ public class CargoTypeServiceImpl extends BaseServiceImpl importCargoType(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 // 注意不能只往 errorList 里塞数据就 return——异常被吞掉后方法会正常返回, diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CurrencyServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CurrencyServiceImpl.java index 48aeedc9..c9763d91 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CurrencyServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/CurrencyServiceImpl.java @@ -118,7 +118,7 @@ public class CurrencyServiceImpl extends BaseServiceImpl importCurrency(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 // 注意:循环内除 save 外还有 rebuildEnabledValidity 这个派生写—— diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/FeeItemServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/FeeItemServiceImpl.java index 4221d262..0e04fd17 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/FeeItemServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/FeeItemServiceImpl.java @@ -106,7 +106,7 @@ public class FeeItemServiceImpl extends BaseServiceImpl @Transactional(rollbackFor = Exception.class) public List importFeeItem(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 // 注意不能只往 failureList 里塞数据就 return——异常被吞掉后方法会正常返回, diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PortTerminalServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PortTerminalServiceImpl.java index c7a08632..740890dc 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PortTerminalServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PortTerminalServiceImpl.java @@ -140,7 +140,7 @@ public class PortTerminalServiceImpl extends BaseServiceImpl importPortTerminal(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 List failureList = new ArrayList<>(); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RailwayStationServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RailwayStationServiceImpl.java index f9a30a06..d2a99f45 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RailwayStationServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RailwayStationServiceImpl.java @@ -129,7 +129,7 @@ public class RailwayStationServiceImpl extends BaseServiceImpl importRailwayStation(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List railwayStationList = new ArrayList<>(); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java index a251af29..64d51c1a 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java @@ -204,7 +204,7 @@ public class RegionServiceImpl extends ServiceImpl impleme @Transactional(rollbackFor = Exception.class) public List importRegion(List data, Boolean isCovered) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 // 注意不能只往 errorList 里塞数据就 return——异常被吞掉后方法会正常返回, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java index b06948bb..2ad50d99 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java @@ -86,7 +86,7 @@ public class AccidentRecordServiceImpl extends BaseServiceImpl importAccidentRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List accidentRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AnnualInspectionRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AnnualInspectionRecordServiceImpl.java index b44450cb..c85e8423 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AnnualInspectionRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AnnualInspectionRecordServiceImpl.java @@ -105,7 +105,7 @@ public class AnnualInspectionRecordServiceImpl extends BaseServiceImpl importAnnualInspectionRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List annualInspectionRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java index 7ab5bc04..9ba8a1c1 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java @@ -142,7 +142,7 @@ public class CommonCargoServiceImpl extends BaseServiceImpl importCommonCargo(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 // 注意:本方法虽已标注 @Transactional,但循环内把异常吞掉后正常 return, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonRouteServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonRouteServiceImpl.java index 505ffd51..52191bba 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonRouteServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonRouteServiceImpl.java @@ -129,7 +129,7 @@ public class CommonRouteServiceImpl extends BaseServiceImpl importCommonRoute(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } // 全量校验:任何一行失败都整批回滚,因此先收集所有错误再统一抛出。 // 注意:本方法虽已标注 @Transactional,但循环内把异常吞掉后正常 return, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CreditScoreQuantificationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CreditScoreQuantificationServiceImpl.java index cebba5e9..b767a50d 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CreditScoreQuantificationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CreditScoreQuantificationServiceImpl.java @@ -196,7 +196,7 @@ public class CreditScoreQuantificationServiceImpl extends BaseServiceImpl importCreditScoreQuantification(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } Map> dataMap = data.stream() .filter(row -> Func.isNotEmpty(trimToNull(row.getTableName()))) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EquipmentLedgerServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EquipmentLedgerServiceImpl.java index f1051332..5fdb8559 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EquipmentLedgerServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EquipmentLedgerServiceImpl.java @@ -79,7 +79,7 @@ public class EquipmentLedgerServiceImpl extends BaseServiceImpl importEquipmentLedger(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List equipmentLedgerList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EtcRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EtcRecordServiceImpl.java index e3966bf0..3e804f85 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EtcRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/EtcRecordServiceImpl.java @@ -61,7 +61,7 @@ public class EtcRecordServiceImpl extends BaseServiceImpl importEtcRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List etcRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InsuranceRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InsuranceRecordServiceImpl.java index 110abe75..6b81bb71 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InsuranceRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InsuranceRecordServiceImpl.java @@ -110,7 +110,7 @@ public class InsuranceRecordServiceImpl extends BaseServiceImpl importInsuranceRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List insuranceRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenancePlanServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenancePlanServiceImpl.java index e543a048..b2b80d6f 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenancePlanServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenancePlanServiceImpl.java @@ -80,7 +80,7 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl importMaintenancePlan(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List maintenancePlanList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenanceRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenanceRecordServiceImpl.java index d9835665..8e931e2f 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenanceRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenanceRecordServiceImpl.java @@ -82,7 +82,7 @@ public class MaintenanceRecordServiceImpl extends BaseServiceImpl importMaintenanceRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List maintenanceRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java index 701d7030..c81ab0e5 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java @@ -81,7 +81,7 @@ public class MileageRecordServiceImpl extends BaseServiceImpl importMileageRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List mileageRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/OilElectricRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/OilElectricRecordServiceImpl.java index f0d56ce1..1402c0ca 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/OilElectricRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/OilElectricRecordServiceImpl.java @@ -70,7 +70,7 @@ public class OilElectricRecordServiceImpl extends BaseServiceImpl importOilElectricRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List oilElectricRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/OtherExpenseRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/OtherExpenseRecordServiceImpl.java index 1ea355c4..5c74cf93 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/OtherExpenseRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/OtherExpenseRecordServiceImpl.java @@ -67,7 +67,7 @@ public class OtherExpenseRecordServiceImpl extends BaseServiceImpl importOtherExpenseRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List otherExpenseRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ShippingTemplateServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ShippingTemplateServiceImpl.java index d695b0b6..109024c8 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ShippingTemplateServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ShippingTemplateServiceImpl.java @@ -173,7 +173,7 @@ public class ShippingTemplateServiceImpl extends BaseServiceImpl importGoods(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List failures = new ArrayList<>(); for (int index = 0; index < data.size(); index++) { diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TireReplacementRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TireReplacementRecordServiceImpl.java index 0739a129..ca459523 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TireReplacementRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TireReplacementRecordServiceImpl.java @@ -82,7 +82,7 @@ public class TireReplacementRecordServiceImpl extends BaseServiceImpl importTireReplacementRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List tireReplacementRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportChangeRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportChangeRecordServiceImpl.java index 4a5b0f98..9da15784 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportChangeRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportChangeRecordServiceImpl.java @@ -81,7 +81,7 @@ public class TransportChangeRecordServiceImpl extends BaseServiceImpl importTransportChangeRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List transportChangeRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportPlanServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportPlanServiceImpl.java index d466d882..e0397027 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportPlanServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportPlanServiceImpl.java @@ -198,7 +198,7 @@ public class TransportPlanServiceImpl extends BaseServiceImpl validateTransportPlan(List data, Long projectId, String projectName, Long contractId, String contractName, String customerName) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } if (Func.isEmpty(projectId)) { throw new ServiceException("项目不能为空"); @@ -250,7 +250,7 @@ public class TransportPlanServiceImpl extends BaseServiceImpl importTransportPlan(List data, Long projectId, String projectName, Long contractId, String contractName, String customerName) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } if (Func.isEmpty(projectId)) { throw new ServiceException("项目不能为空"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportReconciliationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportReconciliationServiceImpl.java index 2039b426..c22902cc 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportReconciliationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/TransportReconciliationServiceImpl.java @@ -290,7 +290,7 @@ public class TransportReconciliationServiceImpl @Override @Transactional(rollbackFor = Exception.class) public List importVehicles(Long id, List rows) { - if (Func.isEmpty(rows)) throw new ServiceException("导入数据不能为空"); + if (Func.isEmpty(rows)) throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); TransportReconciliation bill = editable(id); if (!VEHICLE.equals(bill.getReconciliationMode())) throw new ServiceException("当前对账模式不是整车总额对账"); resetExternal(id); @@ -419,7 +419,7 @@ public class TransportReconciliationServiceImpl @Override @Transactional(rollbackFor = Exception.class) public List importCargoes(Long id, List rows) { - if (Func.isEmpty(rows)) throw new ServiceException("导入数据不能为空"); + if (Func.isEmpty(rows)) throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); TransportReconciliation bill = editable(id); if (!CARGO.equals(bill.getReconciliationMode())) throw new ServiceException("当前对账模式不是货物明细对账"); resetExternal(id); @@ -487,7 +487,7 @@ public class TransportReconciliationServiceImpl private List validateImportCargo(CargoReconciliationExcel row) { List validationErrors = new ArrayList<>(); if (row == null) { - validationErrors.add("导入数据不能为空"); + validationErrors.add("未读取到数据行,请确认表头下方已填写内容"); return validationErrors; } org.springblade.common.excel.ImportFailureExcelUtil.addValidationError(validationErrors, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ViolationRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ViolationRecordServiceImpl.java index 017d029d..b8454eed 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ViolationRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ViolationRecordServiceImpl.java @@ -91,7 +91,7 @@ public class ViolationRecordServiceImpl extends BaseServiceImpl importViolationRecord(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); List violationRecordList = new ArrayList<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java index 889232ec..629c296e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java @@ -901,7 +901,7 @@ public class WaybillServiceImpl extends BaseServiceImpl @Transactional(rollbackFor = Exception.class) public List importWaybill(List data) { if (Func.isEmpty(data)) { - throw new ServiceException("导入数据不能为空"); + throw new ServiceException("未读取到数据行,请确认表头下方已填写内容"); } List errorList = new ArrayList<>(); for (int index = 0; index < data.size(); index++) { From 4ccc28e9913fea9aacb3ac61cf51428f58bb2ed4 Mon Sep 17 00:00:00 2001 From: "weicw1996@qq.com" Date: Sat, 26 Sep 2026 12:45:17 +0800 Subject: [PATCH 19/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E4=B8=89?= =?UTF-8?q?=E5=A4=84=E5=AF=BC=E5=85=A5=E6=A0=A1=E9=AA=8C=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E4=B8=8E=E5=A4=B1=E8=B4=A5=E6=98=8E=E7=BB=86=E8=A1=8C=E5=8F=B7?= =?UTF-8?q?=E9=94=99=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对全仓 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 项全绿,证明行号修正未破坏既有断言。 --- .../common/excel/ImportCellReadException.java | 93 +++++++++++++++++++ .../common/excel/ImportFailureExcelUtil.java | 31 ++++++- .../excel/CargoReconciliationFeeReader.java | 11 ++- .../transport/excel/CommonCargoExcel.java | 2 +- .../excel/VehicleReconciliationFeeReader.java | 11 ++- .../service/impl/CommonCargoServiceImpl.java | 17 ++-- .../impl/TransportPlanServiceImpl.java | 8 +- 7 files changed, 149 insertions(+), 24 deletions(-) create mode 100644 blade-common/src/main/java/org/springblade/common/excel/ImportCellReadException.java diff --git a/blade-common/src/main/java/org/springblade/common/excel/ImportCellReadException.java b/blade-common/src/main/java/org/springblade/common/excel/ImportCellReadException.java new file mode 100644 index 00000000..7b038ad0 --- /dev/null +++ b/blade-common/src/main/java/org/springblade/common/excel/ImportCellReadException.java @@ -0,0 +1,93 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.common.excel; + +import org.springblade.core.log.exception.ServiceException; + +import java.io.Serial; + +/** + * 单元格读取失败异常 —— 用于「异常不是 fastexcel 抛出、但同样发生在读取阶段」的场景。 + *

+ * fastexcel 自身解析失败时抛 {@code ExcelDataConvertException},位置信息齐全, + * {@link ImportFailureExcelUtil#exportReadFailure} 可以直接定位到行与列。但有些模块 + * 在读取阶段有自己的解析逻辑(例如运输对账的动态费用列:模板列不固定,由 + * {@code VehicleReconciliationFeeReader} 自行按表头解析),这些代码如果只是 + * {@code catch (NumberFormatException)} 后返回 {@code BigDecimal.ZERO}, + * 脏数据就会静默入库(费用 0.00 还会参与结算金额与自动匹配)。 + *

+ * 正确做法是改抛本异常,把位置信息补齐,让导出工具能把原因挂到正确的行、标红正确的列。 + *

+ * 本类位于 blade-common,供 blade-system 与 blade-transport 等模块共用。 + * + * @author Chill + */ +public class ImportCellReadException extends ServiceException { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 出错的单元格所在的 Excel 行号,绝对 0 基(表头占 0,第一个数据行为 1)。 + * 与 {@code ExcelDataConvertException.getRowIndex()} 保持同一口径, + * 便于导出工具统一换算。 + */ + private final transient Integer rowIndex; + + /** + * 出错的列名(导入模板表头原文),会写进原因文案里,导出工具靠它标红对应列。 + */ + private final transient String columnName; + + public ImportCellReadException(Integer rowIndex, String columnName, String cellValue) { + super(buildMessage(rowIndex, columnName, cellValue)); + this.rowIndex = rowIndex; + this.columnName = columnName; + } + + /** + * 文案格式与 {@link ImportFailureExcelUtil#describeReadFailure} 保持一致: + * 「第N行「列名」格式不正确:<原值>」。列名必须包在「」里,导出工具才能标红该列。 + */ + private static String buildMessage(Integer rowIndex, String columnName, String cellValue) { + String rowText = rowIndex == null ? "第?行" : "第" + (rowIndex + 1) + "行"; + String columnText = columnName == null || columnName.isBlank() ? "该列" : "「" + columnName + "」"; + StringBuilder message = new StringBuilder(rowText).append(columnText).append("格式不正确"); + if (cellValue != null && !cellValue.isBlank()) { + message.append(":").append(cellValue); + } + return message.toString(); + } + + public Integer getRowIndex() { + return rowIndex; + } + + public String getColumnName() { + return columnName; + } + +} diff --git a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java index d4330eed..955cc989 100644 --- a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java +++ b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java @@ -99,12 +99,15 @@ public class ImportFailureExcelUtil { cn.idev.excel.exception.ExcelDataConvertException convertException = findCause(exception, cn.idev.excel.exception.ExcelDataConvertException.class); if (convertException == null) { - return null; + // 不是 fastexcel 抛的转换异常:模块自带的读取期解析逻辑(如运输对账的动态费用列) + // 用 ImportCellReadException 补齐了位置信息,直接透传它已经拼好的原因文案。 + ImportCellReadException cellReadException = findCause(exception, ImportCellReadException.class); + return cellReadException == null ? null : cellReadException.getMessage(); } Integer rowIndex = convertException.getRowIndex(); Integer columnIndex = convertException.getColumnIndex(); String columnName = columnName(excelClass, columnIndex); - // Excel 行号:EasyExcel 的 rowIndex 为 1 基数据行号(表头占第 1 行),故 Excel 行号 = rowIndex + 1 + // Excel 行号:getRowIndex() 是绝对 0 基行号(表头占 0),故 Excel 行号 = rowIndex + 1 String rowText = rowIndex == null ? "第?行" : "第" + (rowIndex + 1) + "行"; String columnText = columnName == null ? ("第" + (columnIndex == null ? "?" : columnIndex + 1) + "列") : "「" + columnName + "」"; String value = cellValue(convertException); @@ -414,12 +417,32 @@ public class ImportFailureExcelUtil { } /** - * 取转换异常中的数据行下标(0 基) + * 取读取阶段异常中「失败数据行」的下标(0 基,只对数据行计数),供挂失败原因使用。 + *

+ * 无论哪种异常,源信息都是绝对 0 基行号(表头占 0,第一个数据行为 1), + * 而这里要的下标是相对数据行的,故统一减 1。 + * 不减的话原因会整体下移一行:错误恰好落在最后一行时会因调用处的 clamping + * 侥幸正确,落在首行/中间行就会标到不该标的行上,误导用户去改正确的那一行。 */ private static Integer readFailureRowIndex(Throwable exception) { + Integer excelRowIndex = readFailureExcelRowIndex(exception); + return excelRowIndex == null ? null : Math.max(0, excelRowIndex - 1); + } + + /** + * 取读取阶段异常的绝对 0 基行号(表头 = 0)。 + *

+ * 两条来源统一到这里:fastexcel 自带的 {@code ExcelDataConvertException}, + * 以及模块自行解析时抛出的 {@link ImportCellReadException}。 + */ + private static Integer readFailureExcelRowIndex(Throwable exception) { cn.idev.excel.exception.ExcelDataConvertException convertException = findCause(exception, cn.idev.excel.exception.ExcelDataConvertException.class); - return convertException == null ? null : convertException.getRowIndex(); + if (convertException != null) { + return convertException.getRowIndex(); + } + ImportCellReadException cellReadException = findCause(exception, ImportCellReadException.class); + return cellReadException == null ? null : cellReadException.getRowIndex(); } private static final String FAILURE_REASON = "导入失败原因"; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CargoReconciliationFeeReader.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CargoReconciliationFeeReader.java index e2802105..ee7af2f8 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CargoReconciliationFeeReader.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CargoReconciliationFeeReader.java @@ -13,6 +13,7 @@ import cn.idev.excel.FastExcel; import cn.idev.excel.context.AnalysisContext; import cn.idev.excel.event.AnalysisEventListener; import cn.idev.excel.metadata.data.ReadCellData; +import org.springblade.common.excel.ImportCellReadException; import org.springblade.core.log.exception.ServiceException; import org.springframework.web.multipart.MultipartFile; @@ -60,10 +61,11 @@ public final class CargoReconciliationFeeReader { @Override public void invoke(Map> row, AnalysisContext context) { Map values = new LinkedHashMap<>(); + Integer excelRowIndex = context.readRowHolder() == null ? null : context.readRowHolder().getRowIndex(); if (freightColumn >= 0 && settlementColumn > freightColumn) { for (int column = freightColumn + 1; column < settlementColumn; column++) { String name = headers.get(column); - if (name != null && !name.isBlank()) values.put(name.trim(), decimal(row.get(column))); + if (name != null && !name.isBlank()) values.put(name.trim(), decimal(row.get(column), name.trim(), excelRowIndex)); } } feeItems.add(values); @@ -80,7 +82,7 @@ public final class CargoReconciliationFeeReader { .findFirst().orElse(-1); } - private BigDecimal decimal(ReadCellData cellData) { + private BigDecimal decimal(ReadCellData cellData, String columnName, Integer excelRowIndex) { if (cellData == null) return BigDecimal.ZERO.setScale(2); Object value = cellData.getData(); if (value == null) { @@ -95,7 +97,10 @@ public final class CargoReconciliationFeeReader { try { return new BigDecimal(String.valueOf(value).trim()).setScale(2); } catch (NumberFormatException exception) { - return BigDecimal.ZERO.setScale(2); + // 这里绝不能静默返回 0:费用列会进 feeItemsJson 参与结算金额与自动匹配, + // 把「一百元」这类写法悄悄变成 0.00 等于往库里写脏数据。 + // 改为抛带位置信息的异常,由 Controller 的读取阶段兜底导出原表全量明细。 + throw new ImportCellReadException(excelRowIndex, columnName, String.valueOf(value).trim()); } } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CommonCargoExcel.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CommonCargoExcel.java index 4440dc7f..e5c26caa 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CommonCargoExcel.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/CommonCargoExcel.java @@ -73,7 +73,7 @@ public class CommonCargoExcel implements Serializable { @ExcelProperty("规格") private String specification; - @ExcelProperty("型号") + @ExcelProperty("*型号") private String model; @ExcelProperty("单价") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/VehicleReconciliationFeeReader.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/VehicleReconciliationFeeReader.java index e6d889a6..990e8973 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/VehicleReconciliationFeeReader.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/VehicleReconciliationFeeReader.java @@ -13,6 +13,7 @@ import cn.idev.excel.FastExcel; import cn.idev.excel.context.AnalysisContext; import cn.idev.excel.event.AnalysisEventListener; import cn.idev.excel.metadata.data.ReadCellData; +import org.springblade.common.excel.ImportCellReadException; import org.springblade.core.log.exception.ServiceException; import org.springframework.web.multipart.MultipartFile; @@ -60,10 +61,11 @@ public final class VehicleReconciliationFeeReader { @Override public void invoke(Map> row, AnalysisContext context) { Map values = new LinkedHashMap<>(); + Integer excelRowIndex = context.readRowHolder() == null ? null : context.readRowHolder().getRowIndex(); if (freightColumn >= 0 && settlementColumn > freightColumn) { for (int column = freightColumn + 1; column < settlementColumn; column++) { String name = headers.get(column); - if (name != null && !name.isBlank()) values.put(name.trim(), decimal(row.get(column))); + if (name != null && !name.isBlank()) values.put(name.trim(), decimal(row.get(column), name.trim(), excelRowIndex)); } } feeItems.add(values); @@ -80,7 +82,7 @@ public final class VehicleReconciliationFeeReader { .findFirst().orElse(-1); } - private BigDecimal decimal(ReadCellData cellData) { + private BigDecimal decimal(ReadCellData cellData, String columnName, Integer excelRowIndex) { if (cellData == null) return BigDecimal.ZERO.setScale(2); Object value = cellData.getData(); if (value == null) { @@ -95,7 +97,10 @@ public final class VehicleReconciliationFeeReader { try { return new BigDecimal(String.valueOf(value).trim()).setScale(2); } catch (NumberFormatException exception) { - return BigDecimal.ZERO.setScale(2); + // 这里绝不能静默返回 0:费用列会进 feeItemsJson 参与结算金额与自动匹配, + // 把「一百元」这类写法悄悄变成 0.00 等于往库里写脏数据。 + // 改为抛带位置信息的异常,由 Controller 的读取阶段兜底导出原表全量明细。 + throw new ImportCellReadException(excelRowIndex, columnName, String.valueOf(value).trim()); } } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java index 9ba8a1c1..e7a5e11b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CommonCargoServiceImpl.java @@ -71,10 +71,6 @@ public class CommonCargoServiceImpl extends BaseServiceImpl Date: Sun, 27 Sep 2026 21:26:54 +0800 Subject: [PATCH 20/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=BD=A6?= =?UTF-8?q?=E5=8A=A1=E9=9D=9E=E5=BF=85=E5=A1=AB-1=E5=8D=A0=E4=BD=8D?= =?UTF-8?q?=E8=90=BD=E5=BA=93=EF=BC=8C=E5=B9=B6=E5=AE=8C=E5=96=84=E6=80=BB?= =?UTF-8?q?=E5=8D=95=E5=88=86=E6=AE=B5=E8=B0=83=E5=BA=A6=E4=B8=8E=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上一段运单完成到达后才可调度且不超过到达量;车务多模块保存/列表/导出将-1归一为null;同步网关大报文限制与导入校验能力。 Co-authored-by: Cursor --- .../src/main/resources/bootstrap.yml | 3 + .../pojo/dto/WaybillImportBatchRequest.java | 2 + .../transport/pojo/vo/MasterOrderVO.java | 5 + .../pojo/vo/WaybillImportRowErrorVO.java | 26 + .../vo/WaybillImportValidateResultVO.java | 28 + .../controller/WaybillController.java | 16 +- .../excel/MasterOrderWaybillExcel.java | 2 + .../transport/mapper/AccidentRecordMapper.xml | 4 +- .../mapper/AnnualInspectionRecordMapper.xml | 2 +- .../mapper/InsuranceRecordMapper.xml | 4 +- .../mapper/MaintenancePlanMapper.xml | 4 +- .../transport/mapper/MileageRecordMapper.xml | 8 +- .../mapper/OilElectricRecordMapper.xml | 8 +- .../mapper/TireReplacementRecordMapper.xml | 4 +- .../mapper/ViolationRecordMapper.xml | 4 +- .../service/IWaybillImportBatchService.java | 6 +- .../impl/AccidentRecordServiceImpl.java | 24 +- .../AnnualInspectionRecordServiceImpl.java | 20 +- .../impl/InsuranceRecordServiceImpl.java | 21 +- .../impl/MaintenancePlanServiceImpl.java | 24 +- .../service/impl/MasterOrderServiceImpl.java | 140 +- .../impl/MileageRecordServiceImpl.java | 32 +- .../impl/OilElectricRecordServiceImpl.java | 32 +- .../TireReplacementRecordServiceImpl.java | 32 +- .../TransportChangeRecordServiceImpl.java | 2 +- .../impl/ViolationRecordServiceImpl.java | 23 +- .../impl/WaybillImportBatchServiceImpl.java | 114 +- .../service/impl/WaybillServiceImpl.java | 15 +- .../wrapper/AccidentRecordWrapper.java | 10 + .../AnnualInspectionRecordWrapper.java | 9 + .../wrapper/InsuranceRecordWrapper.java | 10 + .../wrapper/MaintenancePlanWrapper.java | 10 + .../wrapper/MileageRecordWrapper.java | 12 + .../wrapper/OilElectricRecordWrapper.java | 12 + .../wrapper/TireReplacementRecordWrapper.java | 15 + .../wrapper/ViolationRecordWrapper.java | 15 + .../transport/wrapper/WaybillWrapper.java | 3 +- doc/nacos/blade.yaml | 3 + hs_err_pid22077.log | 1379 ----------------- hs_err_pid22822.log | 157 -- hs_err_pid25098.log | 1375 ---------------- hs_err_pid40988.log | 1368 ---------------- 42 files changed, 536 insertions(+), 4447 deletions(-) create mode 100644 blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillImportRowErrorVO.java create mode 100644 blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillImportValidateResultVO.java delete mode 100644 hs_err_pid22077.log delete mode 100644 hs_err_pid22822.log delete mode 100644 hs_err_pid25098.log delete mode 100644 hs_err_pid40988.log diff --git a/blade-gateway/src/main/resources/bootstrap.yml b/blade-gateway/src/main/resources/bootstrap.yml index 0f5092a9..e4fa3a81 100644 --- a/blade-gateway/src/main/resources/bootstrap.yml +++ b/blade-gateway/src/main/resources/bootstrap.yml @@ -2,6 +2,9 @@ server: port: 80 spring: + codec: + # 运单批量导入等大 JSON / 失败明细导出场景,默认 256KB 会触发网关 500 + max-in-memory-size: 20MB cloud: gateway: server: diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/dto/WaybillImportBatchRequest.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/dto/WaybillImportBatchRequest.java index c346165c..e445395e 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/dto/WaybillImportBatchRequest.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/dto/WaybillImportBatchRequest.java @@ -33,4 +33,6 @@ public class WaybillImportBatchRequest { private String planName; private String remark; private List> rows; + /** 分批确认导入时,是否追加到已有批次(首批为 false,后续批为 true)。 */ + private Boolean append; } diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/MasterOrderVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/MasterOrderVO.java index 490607ab..8ef58199 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/MasterOrderVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/MasterOrderVO.java @@ -41,6 +41,11 @@ public class MasterOrderVO extends MasterOrder { private List boundWaybills; @TableField(exist = false) private BigDecimal totalQuantity; + /** + * 各品类已调度量(按货物名称+类型聚合,取各分段已调度量的最大值) + */ + @TableField(exist = false) + private Map dispatchedGoods; @TableField(exist = false) private String createUserName; @TableField(exist = false) diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillImportRowErrorVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillImportRowErrorVO.java new file mode 100644 index 00000000..2fa95b19 --- /dev/null +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillImportRowErrorVO.java @@ -0,0 +1,26 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + */ +package org.springblade.transport.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** 运单批量导入单行校验错误。 */ +@Data +@Schema(description = "运单批量导入单行校验错误") +public class WaybillImportRowErrorVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "行号(从0开始,相对当前批次)") + private Integer rowIndex; + + @Schema(description = "错误信息") + private String errorMessage; +} diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillImportValidateResultVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillImportValidateResultVO.java new file mode 100644 index 00000000..193c5ee7 --- /dev/null +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillImportValidateResultVO.java @@ -0,0 +1,28 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + */ +package org.springblade.transport.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** 运单批量导入校验结果。 */ +@Data +@Schema(description = "运单批量导入校验结果") +public class WaybillImportValidateResultVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "是否全部通过") + private Boolean success; + + @Schema(description = "校验错误列表") + private List errors = new ArrayList<>(); +} diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java index e66277bb..e7bc1194 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java @@ -54,6 +54,7 @@ import org.springblade.transport.pojo.dto.WaybillImportBatchRequest; import org.springblade.transport.pojo.vo.BusinessRemoveResultVO; import org.springblade.transport.pojo.vo.LoadingManageVO; import org.springblade.transport.pojo.vo.WaybillImportBatchVO; +import org.springblade.transport.pojo.vo.WaybillImportValidateResultVO; import org.springblade.transport.pojo.vo.WaybillLocateVO; import org.springblade.transport.pojo.vo.WaybillTrackVO; import org.springblade.transport.pojo.vo.WaybillPunchRecordsVO; @@ -192,15 +193,22 @@ public class WaybillController extends BladeController { @PostMapping("/import-batch/validate") @ApiOperationSupport(order = 6) @Operation(summary = "校验运单批量导入数据") - public void validateImportBatch(@RequestBody WaybillImportBatchRequest request, HttpServletResponse response) { - waybillImportBatchService.validate(request, response); + public R validateImportBatch(@RequestBody WaybillImportBatchRequest request) { + return R.data(waybillImportBatchService.validate(request)); + } + + @PostMapping("/import-batch/export-failures") + @ApiOperationSupport(order = 6) + @Operation(summary = "导出运单批量导入失败明细") + public void exportImportFailures(@RequestBody WaybillImportBatchRequest request, HttpServletResponse response) { + waybillImportBatchService.exportFailures(request, response); } @PostMapping("/import-batch/confirm") @ApiOperationSupport(order = 7) @Operation(summary = "确认运单批量导入") - public void confirmImportBatch(@RequestBody WaybillImportBatchRequest request, HttpServletResponse response) { - waybillImportBatchService.confirm(request, response); + public R confirmImportBatch(@RequestBody WaybillImportBatchRequest request) { + return R.data(waybillImportBatchService.confirm(request)); } @PostMapping("/import-batch/remove") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/MasterOrderWaybillExcel.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/MasterOrderWaybillExcel.java index 5f8f1ae0..82246841 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/MasterOrderWaybillExcel.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/MasterOrderWaybillExcel.java @@ -69,6 +69,8 @@ public class MasterOrderWaybillExcel { private String businessStatus; @ExcelProperty("备注") private String remark; + @ExcelProperty("更新时间") + private Date updateTime; @ExcelProperty("创建时间") private Date createTime; } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/AccidentRecordMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/AccidentRecordMapper.xml index 689037a7..99c0b886 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/AccidentRecordMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/AccidentRecordMapper.xml @@ -42,8 +42,8 @@ accident_location, accident_nature, accident_responsibility, - CASE WHEN direct_economic_loss < 0 THEN 0 ELSE direct_economic_loss END AS direct_economic_loss, - CASE WHEN insurance_claim_amount < 0 THEN 0 ELSE insurance_claim_amount END AS insurance_claim_amount, + CASE WHEN direct_economic_loss = -1 THEN NULL WHEN direct_economic_loss < 0 THEN 0 ELSE direct_economic_loss END AS direct_economic_loss, + CASE WHEN insurance_claim_amount = -1 THEN NULL WHEN insurance_claim_amount < 0 THEN 0 ELSE insurance_claim_amount END AS insurance_claim_amount, accident_reason_damage, attachments, remark diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/AnnualInspectionRecordMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/AnnualInspectionRecordMapper.xml index 30fa5f39..83f5592b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/AnnualInspectionRecordMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/AnnualInspectionRecordMapper.xml @@ -88,7 +88,7 @@ valid_until_date, passenger_type_level, inspection_unit, - CASE WHEN fee < 0 THEN 0 ELSE fee END AS fee, + CASE WHEN fee = -1 THEN NULL WHEN fee < 0 THEN 0 ELSE fee END AS fee, assessment_unit, attachments, remark diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/InsuranceRecordMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/InsuranceRecordMapper.xml index ea739687..074106e7 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/InsuranceRecordMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/InsuranceRecordMapper.xml @@ -44,8 +44,8 @@ policy_no, start_date, end_date, - CASE WHEN insured_amount < 0 THEN 0 ELSE insured_amount END AS insured_amount, - CASE WHEN premium < 0 THEN 0 ELSE premium END AS premium, + CASE WHEN insured_amount = -1 THEN NULL ELSE insured_amount END AS insured_amount, + CASE WHEN premium = -1 THEN NULL ELSE premium END AS premium, invoice_no, invoice_date, ocr_template, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/MaintenancePlanMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/MaintenancePlanMapper.xml index b67970dc..192e57bc 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/MaintenancePlanMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/MaintenancePlanMapper.xml @@ -44,7 +44,7 @@ vehicle_no, maintainer, maintenance_time, - CASE WHEN mileage < 0 THEN 0 ELSE mileage END AS mileage, + CASE WHEN mileage = -1 THEN NULL WHEN mileage < 0 THEN 0 ELSE mileage END AS mileage, mileage_unit, maintenance_item, cost, @@ -52,7 +52,7 @@ contact_phone, address, next_maintenance_time, - CASE WHEN next_maintenance_mileage < 0 THEN 0 ELSE next_maintenance_mileage END AS next_maintenance_mileage, + CASE WHEN next_maintenance_mileage = -1 THEN NULL WHEN next_maintenance_mileage < 0 THEN 0 ELSE next_maintenance_mileage END AS next_maintenance_mileage, attachments, remark FROM diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/MileageRecordMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/MileageRecordMapper.xml index 8e3cbc79..d4dc2165 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/MileageRecordMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/MileageRecordMapper.xml @@ -36,10 +36,10 @@ is_deleted, vehicle_type, vehicle_no, - CASE WHEN previous_month_mileage < 0 THEN 0 ELSE previous_month_mileage END AS previous_month_mileage, - CASE WHEN current_month_mileage < 0 THEN 0 ELSE current_month_mileage END AS current_month_mileage, - CASE WHEN monthly_mileage < 0 THEN 0 ELSE monthly_mileage END AS monthly_mileage, - CASE WHEN total_mileage < 0 THEN 0 ELSE total_mileage END AS total_mileage, + CASE WHEN previous_month_mileage = -1 THEN NULL WHEN previous_month_mileage < 0 THEN 0 ELSE previous_month_mileage END AS previous_month_mileage, + CASE WHEN current_month_mileage = -1 THEN NULL WHEN current_month_mileage < 0 THEN 0 ELSE current_month_mileage END AS current_month_mileage, + CASE WHEN monthly_mileage = -1 THEN NULL WHEN monthly_mileage < 0 THEN 0 ELSE monthly_mileage END AS monthly_mileage, + CASE WHEN total_mileage = -1 THEN NULL WHEN total_mileage < 0 THEN 0 ELSE total_mileage END AS total_mileage, mileage_unit, attachments, remark diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/OilElectricRecordMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/OilElectricRecordMapper.xml index 88612747..80f79c14 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/OilElectricRecordMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/OilElectricRecordMapper.xml @@ -48,10 +48,10 @@ vehicle_no, card_holder, data_source, - CASE WHEN quantity < 0 THEN 0 ELSE quantity END AS quantity, - CASE WHEN unit_price < 0 THEN 0 ELSE unit_price END AS unit_price, - CASE WHEN transaction_amount < 0 THEN 0 ELSE transaction_amount END AS transaction_amount, - CASE WHEN balance < 0 THEN 0 ELSE balance END AS balance, + CASE WHEN quantity = -1 THEN NULL WHEN quantity < 0 THEN 0 ELSE quantity END AS quantity, + CASE WHEN unit_price = -1 THEN NULL WHEN unit_price < 0 THEN 0 ELSE unit_price END AS unit_price, + CASE WHEN transaction_amount = -1 THEN NULL WHEN transaction_amount < 0 THEN 0 ELSE transaction_amount END AS transaction_amount, + CASE WHEN balance = -1 THEN NULL WHEN balance < 0 THEN 0 ELSE balance END AS balance, station, attachments, remark diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/TireReplacementRecordMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/TireReplacementRecordMapper.xml index 97cb9965..4d821f53 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/TireReplacementRecordMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/TireReplacementRecordMapper.xml @@ -38,8 +38,8 @@ handler, replacement_time, tire_brand, - CASE WHEN tire_quantity < 0 THEN 0 ELSE tire_quantity END AS tire_quantity, - CASE WHEN replacement_cost < 0 THEN 0 ELSE replacement_cost END AS replacement_cost, + CASE WHEN tire_quantity = -1 THEN NULL WHEN tire_quantity < 0 THEN 0 ELSE tire_quantity END AS tire_quantity, + CASE WHEN replacement_cost = -1 THEN NULL WHEN replacement_cost < 0 THEN 0 ELSE replacement_cost END AS replacement_cost, replacement_description, attachments, remark diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/ViolationRecordMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/ViolationRecordMapper.xml index 5b90c3f3..9563419c 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/ViolationRecordMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/ViolationRecordMapper.xml @@ -46,8 +46,8 @@ violation_item, violation_time, location, - CASE WHEN fine_amount < 0 THEN 0 ELSE fine_amount END AS fine_amount, - CASE WHEN deduct_points < 0 THEN 0 ELSE deduct_points END AS deduct_points, + CASE WHEN fine_amount = -1 THEN NULL WHEN fine_amount < 0 THEN 0 ELSE fine_amount END AS fine_amount, + CASE WHEN deduct_points = -1 THEN NULL WHEN deduct_points < 0 THEN 0 ELSE deduct_points END AS deduct_points, penalty_unit, process_status, process_description, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IWaybillImportBatchService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IWaybillImportBatchService.java index a06dcd40..58c60733 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IWaybillImportBatchService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IWaybillImportBatchService.java @@ -7,12 +7,14 @@ import org.springblade.transport.pojo.dto.WaybillImportBatchRequest; import org.springblade.transport.pojo.entity.WaybillImportBatch; import org.springblade.transport.pojo.vo.BusinessRemoveResultVO; import org.springblade.transport.pojo.vo.WaybillImportBatchVO; +import org.springblade.transport.pojo.vo.WaybillImportValidateResultVO; /** 运单批次服务。 */ public interface IWaybillImportBatchService extends BaseService { WaybillImportBatch saveDraft(WaybillImportBatchRequest request); - void validate(WaybillImportBatchRequest request, HttpServletResponse response); - void confirm(WaybillImportBatchRequest request, HttpServletResponse response); + WaybillImportValidateResultVO validate(WaybillImportBatchRequest request); + void exportFailures(WaybillImportBatchRequest request, HttpServletResponse response); + WaybillImportBatchVO confirm(WaybillImportBatchRequest request); IPage page(IPage page, WaybillImportBatchRequest request); BusinessRemoveResultVO removeBatches(String ids); String nextBatchNo(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java index 2ad50d99..97ed929e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/AccidentRecordServiceImpl.java @@ -61,6 +61,8 @@ public class AccidentRecordServiceImpl extends BaseServiceImpl ACCIDENT_NATURES = Set.of("重大事故", "一般事故", "轻微事故", "其他"); @@ -69,7 +71,11 @@ public class AccidentRecordServiceImpl extends BaseServiceImpl selectAccidentRecordPage(IPage page, AccidentRecordVO accidentRecord) { List records = baseMapper.selectAccidentRecordPage(page, accidentRecord); - records.forEach(record -> record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser()))); + records.forEach(record -> { + record.setDirectEconomicLoss(normalizeEmptyAmount(record.getDirectEconomicLoss())); + record.setInsuranceClaimAmount(normalizeEmptyAmount(record.getInsuranceClaimAmount())); + record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser())); + }); return page.setRecords(records); } @@ -153,8 +159,8 @@ public class AccidentRecordServiceImpl extends BaseServiceImpl exportAccidentRecord(Wrapper queryWrapper) { return list(queryWrapper).stream().map(accidentRecord -> { AccidentRecordExportExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(accidentRecord, AccidentRecordExportExcel.class)); - excel.setDirectEconomicLoss(nonNegative(accidentRecord.getDirectEconomicLoss())); - excel.setInsuranceClaimAmount(nonNegative(accidentRecord.getInsuranceClaimAmount())); + excel.setDirectEconomicLoss(normalizeEmptyAmount(accidentRecord.getDirectEconomicLoss())); + excel.setInsuranceClaimAmount(normalizeEmptyAmount(accidentRecord.getInsuranceClaimAmount())); excel.setUpdateUserName(UserCache.getUserRealName(accidentRecord.getUpdateUser())); return excel; }).toList(); @@ -169,6 +175,9 @@ public class AccidentRecordServiceImpl extends BaseServiceImpl= 0) { - return value; - } - return BigDecimal.ZERO; + private BigDecimal normalizeEmptyAmount(BigDecimal value) { + return Func.isNotEmpty(value) && value.compareTo(EMPTY_AMOUNT_SENTINEL) == 0 ? null : value; } private String normalizeVehicleType(String vehicleType) { @@ -256,7 +262,7 @@ public class AccidentRecordServiceImpl extends BaseServiceImpl PASSENGER_TYPE_LEVELS = Set.of("一级", "二级", "其他"); @@ -70,7 +72,10 @@ public class AnnualInspectionRecordServiceImpl extends BaseServiceImpl selectAnnualInspectionRecordPage(IPage page, AnnualInspectionRecordVO annualInspectionRecord) { List records = baseMapper.selectAnnualInspectionRecordPage(page, annualInspectionRecord); - records.forEach(record -> record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser()))); + records.forEach(record -> { + record.setFee(normalizeEmptyAmount(record.getFee())); + record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser())); + }); return page.setRecords(records); } @@ -176,7 +181,7 @@ public class AnnualInspectionRecordServiceImpl extends BaseServiceImpl= 0) { - return value; - } - return BigDecimal.ZERO; + private BigDecimal normalizeEmptyAmount(BigDecimal value) { + return Func.isNotEmpty(value) && value.compareTo(EMPTY_AMOUNT_SENTINEL) == 0 ? null : value; } private String normalizeVehicleType(String vehicleType) { @@ -286,7 +290,7 @@ public class AnnualInspectionRecordServiceImpl extends BaseServiceImpl INSURANCE_TYPES = Set.of("交强险", "商业险", "承运人责任险", "货运险", "船舶险"); private static final Set SUPPORT_FILE_TYPES = Set.of("jpg", "jpeg", "png", "bmp"); private static final Pattern DATE_PATTERN = Pattern.compile("(\\d{4})[-/.年](\\d{1,2})[-/.月](\\d{1,2})日?"); @@ -93,7 +94,11 @@ public class InsuranceRecordServiceImpl extends BaseServiceImpl selectInsuranceRecordPage(IPage page, InsuranceRecordVO insuranceRecord) { List records = baseMapper.selectInsuranceRecordPage(page, insuranceRecord); - records.forEach(record -> record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser()))); + records.forEach(record -> { + record.setInsuredAmount(normalizeEmptyAmount(record.getInsuredAmount())); + record.setPremium(normalizeEmptyAmount(record.getPremium())); + record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser())); + }); return page.setRecords(records); } @@ -191,8 +196,8 @@ public class InsuranceRecordServiceImpl extends BaseServiceImpl exportInsuranceRecord(Wrapper queryWrapper) { return list(queryWrapper).stream().map(insuranceRecord -> { InsuranceRecordExportExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(insuranceRecord, InsuranceRecordExportExcel.class)); - excel.setInsuredAmount(nonNegative(insuranceRecord.getInsuredAmount())); - excel.setPremium(nonNegative(insuranceRecord.getPremium())); + excel.setInsuredAmount(normalizeEmptyAmount(insuranceRecord.getInsuredAmount())); + excel.setPremium(normalizeEmptyAmount(insuranceRecord.getPremium())); excel.setUpdateUserName(UserCache.getUserRealName(insuranceRecord.getUpdateUser())); return excel; }).toList(); @@ -337,6 +342,9 @@ public class InsuranceRecordServiceImpl extends BaseServiceImpl= 0) { - return value; - } - return BigDecimal.ZERO; + private BigDecimal normalizeEmptyAmount(BigDecimal value) { + return Func.isNotEmpty(value) && value.compareTo(EMPTY_AMOUNT_SENTINEL) == 0 ? null : value; } private String normalizeVehicleType(String vehicleType) { diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenancePlanServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenancePlanServiceImpl.java index b2b80d6f..a669c50d 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenancePlanServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MaintenancePlanServiceImpl.java @@ -60,11 +60,17 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl selectMaintenancePlanPage(IPage page, MaintenancePlanVO maintenancePlan) { List records = baseMapper.selectMaintenancePlanPage(page, maintenancePlan); - records.forEach(record -> record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser()))); + records.forEach(record -> { + record.setMileage(normalizeEmptyMileage(record.getMileage())); + record.setNextMaintenanceMileage(normalizeEmptyMileage(record.getNextMaintenanceMileage())); + record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser())); + }); return page.setRecords(records); } @@ -147,8 +153,8 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl { MaintenancePlanExportExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(maintenancePlan, MaintenancePlanExportExcel.class)); excel.setUpdateUserName(UserCache.getUserRealName(maintenancePlan.getUpdateUser())); - excel.setMileage(nonNegative(maintenancePlan.getMileage())); - excel.setNextMaintenanceMileage(nonNegative(maintenancePlan.getNextMaintenanceMileage())); + excel.setMileage(normalizeEmptyMileage(maintenancePlan.getMileage())); + excel.setNextMaintenanceMileage(normalizeEmptyMileage(maintenancePlan.getNextMaintenanceMileage())); if (Func.isEmpty(excel.getMileageUnit())) { excel.setMileageUnit(defaultMileageUnit(maintenancePlan.getVehicleType())); } @@ -165,6 +171,9 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl= 0) { - return value; - } - return BigDecimal.ZERO; + private BigDecimal normalizeEmptyMileage(BigDecimal value) { + return Func.isNotEmpty(value) && value.compareTo(EMPTY_MILEAGE_SENTINEL) == 0 ? null : value; } private String defaultMileageUnit(String vehicleType) { @@ -236,7 +242,7 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl boundWaybills = waybillsByMasterNo(entity.getMasterNo()); vo.setBoundWaybills(boundWaybills); vo.setRouteProgress(buildProgress(entity, vo.getRoutes(), boundWaybills)); + vo.setDispatchedGoods(maxDispatchedGoodsByCategory(entity)); vo.setCreateUserName(UserCache.getUserRealName(entity.getCreateUser())); vo.setUpdateUserName(UserCache.getUserRealName(entity.getUpdateUser())); return vo; } @@ -343,7 +378,89 @@ public class MasterOrderServiceImpl extends BaseServiceImpl maxDispatched = maxDispatchedGoodsByCategory(oldRecord); + if (maxDispatched.isEmpty()) { + return; + } + Map newAvailable = availableGoods(target); + for (Map.Entry entry : maxDispatched.entrySet()) { + BigDecimal dispatched = entry.getValue(); + if (dispatched == null || dispatched.compareTo(BigDecimal.ZERO) <= 0) { + continue; + } + BigDecimal newQuantity = newAvailable.getOrDefault(entry.getKey(), BigDecimal.ZERO); + if (newQuantity.compareTo(dispatched) < 0) { + String cargoName = entry.getKey().contains("\u0000") + ? entry.getKey().substring(0, entry.getKey().indexOf('\u0000')) + : entry.getKey(); + throw new ServiceException("货物【" + cargoName + "】数量不能低于已调度量(" + + dispatched.stripTrailingZeros().toPlainString() + ")"); + } + } + } + + /** 各品类已调度量:同一品类取各分段已调度量的最大值 */ + private Map maxDispatchedGoodsByCategory(MasterOrder masterOrder) { + Map result = new LinkedHashMap<>(); + List> routes = parseArray(masterOrder.getRouteJson()); + if (routes.isEmpty()) { + return dispatchedGoods(masterOrder.getMasterNo(), null); + } + for (Map route : routes) { + Map dispatched = dispatchedGoods(masterOrder.getMasterNo(), string(route, "segmentNo")); + for (Map.Entry entry : dispatched.entrySet()) { + result.merge(entry.getKey(), entry.getValue(), BigDecimal::max); + } + } + return result; + } + + private String normalizeText(String value) { + return value == null ? "" : value.trim(); } private void validate(MasterOrder masterOrder, boolean draft) { @@ -403,10 +520,13 @@ public class MasterOrderServiceImpl extends BaseServiceImpl 0) { - throw new ServiceException(segmentNo + "调度总量不能大于上一段已完成数量(" + previousCompletedQuantity.stripTrailingZeros().toPlainString() + ")"); + throw new ServiceException(segmentNo + "调度总量不能大于上一段已到达数量(" + previousCompletedQuantity.stripTrailingZeros().toPlainString() + ")"); } } } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java index c81ab0e5..0824b48e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MileageRecordServiceImpl.java @@ -58,13 +58,21 @@ public class MileageRecordServiceImpl extends BaseServiceImpl selectMileageRecordPage(IPage page, MileageRecordVO mileageRecord) { List records = baseMapper.selectMileageRecordPage(page, mileageRecord); - records.forEach(record -> record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser()))); + records.forEach(record -> { + record.setPreviousMonthMileage(normalizeEmptyMileage(record.getPreviousMonthMileage())); + record.setCurrentMonthMileage(normalizeEmptyMileage(record.getCurrentMonthMileage())); + record.setMonthlyMileage(normalizeEmptyMileage(record.getMonthlyMileage())); + record.setTotalMileage(normalizeEmptyMileage(record.getTotalMileage())); + record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser())); + }); return page.setRecords(records); } @@ -145,10 +153,10 @@ public class MileageRecordServiceImpl extends BaseServiceImpl= 0) { - return value; - } - return BigDecimal.ZERO; + private BigDecimal normalizeEmptyMileage(BigDecimal value) { + return Func.isNotEmpty(value) && value.compareTo(EMPTY_MILEAGE_SENTINEL) == 0 ? null : value; } private String normalizeVehicleNo(String vehicleNo) { @@ -252,7 +262,7 @@ public class MileageRecordServiceImpl extends BaseServiceImpl selectOilElectricRecordPage(IPage page, OilElectricRecordVO oilElectricRecord) { List records = baseMapper.selectOilElectricRecordPage(page, oilElectricRecord); - records.forEach(record -> record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser()))); + records.forEach(record -> { + record.setQuantity(normalizeEmptyAmount(record.getQuantity())); + record.setUnitPrice(normalizeEmptyAmount(record.getUnitPrice())); + record.setTransactionAmount(normalizeEmptyAmount(record.getTransactionAmount())); + record.setBalance(normalizeEmptyAmount(record.getBalance())); + record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser())); + }); return page.setRecords(records); } @@ -138,10 +146,10 @@ public class OilElectricRecordServiceImpl extends BaseServiceImpl exportOilElectricRecord(Wrapper queryWrapper) { return list(queryWrapper).stream().map(oilElectricRecord -> { OilElectricRecordExportExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(oilElectricRecord, OilElectricRecordExportExcel.class)); - excel.setQuantity(nonNegative(oilElectricRecord.getQuantity())); - excel.setUnitPrice(nonNegative(oilElectricRecord.getUnitPrice())); - excel.setTransactionAmount(nonNegative(oilElectricRecord.getTransactionAmount())); - excel.setBalance(nonNegative(oilElectricRecord.getBalance())); + excel.setQuantity(normalizeEmptyAmount(oilElectricRecord.getQuantity())); + excel.setUnitPrice(normalizeEmptyAmount(oilElectricRecord.getUnitPrice())); + excel.setTransactionAmount(normalizeEmptyAmount(oilElectricRecord.getTransactionAmount())); + excel.setBalance(normalizeEmptyAmount(oilElectricRecord.getBalance())); excel.setUpdateUserName(UserCache.getUserRealName(oilElectricRecord.getUpdateUser())); return excel; }).toList(); @@ -161,6 +169,11 @@ public class OilElectricRecordServiceImpl extends BaseServiceImpl= 0) { - return value; - } - return BigDecimal.ZERO; + private BigDecimal normalizeEmptyAmount(BigDecimal value) { + return Func.isNotEmpty(value) && value.compareTo(EMPTY_AMOUNT_SENTINEL) == 0 ? null : value; } private String defaultDataSource(String dataSource) { @@ -246,7 +256,7 @@ public class OilElectricRecordServiceImpl extends BaseServiceImpl selectTireReplacementRecordPage(IPage page, TireReplacementRecordVO tireReplacementRecord) { List records = baseMapper.selectTireReplacementRecordPage(page, tireReplacementRecord); - records.forEach(record -> record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser()))); + records.forEach(record -> { + record.setTireQuantity(normalizeEmptyInteger(record.getTireQuantity())); + record.setReplacementCost(normalizeEmptyAmount(record.getReplacementCost())); + record.setUpdateUserName(UserCache.getUserRealName(record.getUpdateUser())); + }); return page.setRecords(records); } @@ -153,8 +160,8 @@ public class TireReplacementRecordServiceImpl extends BaseServiceImpl exportTireReplacementRecord(Wrapper queryWrapper) { return list(queryWrapper).stream().map(tireReplacementRecord -> { TireReplacementRecordExportExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(tireReplacementRecord, TireReplacementRecordExportExcel.class)); - excel.setTireQuantity(validQuantity(tireReplacementRecord.getTireQuantity())); - excel.setReplacementCost(nonNegative(tireReplacementRecord.getReplacementCost())); + excel.setTireQuantity(normalizeEmptyInteger(tireReplacementRecord.getTireQuantity())); + excel.setReplacementCost(normalizeEmptyAmount(tireReplacementRecord.getReplacementCost())); excel.setUpdateUserName(UserCache.getUserRealName(tireReplacementRecord.getUpdateUser())); return excel; }).toList(); @@ -167,6 +174,9 @@ public class TireReplacementRecordServiceImpl extends BaseServiceImpl= 0) { - return value; - } - return BigDecimal.ZERO; + private BigDecimal normalizeEmptyAmount(BigDecimal value) { + return Func.isNotEmpty(value) && value.compareTo(EMPTY_AMOUNT_SENTINEL) == 0 ? null : value; } - private Integer validQuantity(Integer value) { - if (Func.isEmpty(value) || value > 0) { - return value; - } - return null; + private Integer normalizeEmptyInteger(Integer value) { + return Func.isNotEmpty(value) && value.equals(EMPTY_INTEGER_SENTINEL) ? null : value; } private String trimToEmpty(String value) { @@ -234,7 +238,7 @@ public class TireReplacementRecordServiceImpl extends BaseServiceImpl selectViolationRecordPage(IPage page, ViolationRecordVO violationRecord) { @@ -168,8 +171,8 @@ public class ViolationRecordServiceImpl extends BaseServiceImpl exportViolationRecord(Wrapper queryWrapper) { return list(queryWrapper).stream().map(violationRecord -> { ViolationRecordExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(violationRecord, ViolationRecordExcel.class)); - excel.setFineAmount(nonNegative(violationRecord.getFineAmount())); - excel.setDeductPoints(validDeductPoints(violationRecord.getDeductPoints())); + excel.setFineAmount(normalizeEmptyAmount(violationRecord.getFineAmount())); + excel.setDeductPoints(validDeductPoints(normalizeEmptyInteger(violationRecord.getDeductPoints()))); excel.setUpdateUserName(UserCache.getUserRealName(violationRecord.getUpdateUser())); return excel; }).toList(); @@ -187,6 +190,9 @@ public class ViolationRecordServiceImpl extends BaseServiceImpl= 0) { - return value; - } - return BigDecimal.ZERO; + private BigDecimal normalizeEmptyAmount(BigDecimal value) { + return Func.isNotEmpty(value) && value.compareTo(EMPTY_AMOUNT_SENTINEL) == 0 ? null : value; + } + + private Integer normalizeEmptyInteger(Integer value) { + return Func.isNotEmpty(value) && value.equals(EMPTY_INTEGER_SENTINEL) ? null : value; } private Integer validDeductPoints(Integer value) { @@ -323,7 +330,7 @@ public class ViolationRecordServiceImpl extends BaseServiceImpl> rows = request.getRows(); Map validationErrors = validateImportRows(rows, importStatus); - - // 如果有校验错误,导出错误明细Excel - if (!validationErrors.isEmpty()) { - List failureList = new ArrayList<>(); - for (int i = 0; i < rows.size(); i++) { - WaybillImportBatchExcel excel = mapToExcel(rows.get(i)); - String errorMessage = validationErrors.get(i); - excel.setErrorMessage(Func.isNotEmpty(errorMessage) ? errorMessage : ""); - failureList.add(excel); - } - ImportFailureExcelUtil.export(response, "运单导入失败明细" + DateUtil.time(), "导入失败明细", failureList, WaybillImportBatchExcel.class); - return; + List errors = new ArrayList<>(); + for (Map.Entry entry : validationErrors.entrySet()) { + WaybillImportRowErrorVO error = new WaybillImportRowErrorVO(); + error.setRowIndex(entry.getKey()); + error.setErrorMessage(entry.getValue()); + errors.add(error); } + result.setErrors(errors); + result.setSuccess(errors.isEmpty()); + return result; + } - // 校验通过,返回成功响应 - WebUtil.renderJson(response, R.success("校验通过")); + @Override + public void exportFailures(WaybillImportBatchRequest request, HttpServletResponse response) { + if (Func.isEmpty(request.getRows())) throw new ServiceException("请至少提供一条失败明细"); + List failureList = new ArrayList<>(); + for (Map row : request.getRows()) { + WaybillImportBatchExcel excel = mapToExcel(row); + excel.setErrorMessage(stringValue(row, "errorMessage", "导入失败原因", "失败原因")); + failureList.add(excel); + } + ImportFailureExcelUtil.export(response, "运单导入失败明细" + DateUtil.time(), "导入失败明细", failureList, WaybillImportBatchExcel.class); } @Override @Transactional(rollbackFor = Exception.class) - public void confirm(WaybillImportBatchRequest request, HttpServletResponse response) { + public WaybillImportBatchVO confirm(WaybillImportBatchRequest request) { if (Func.isEmpty(request.getRows())) throw new ServiceException("请上传至少一条运单明细"); - // 执行校验 String importStatus = STATUS_DRAFT.equals(request.getStatus()) ? STATUS_DRAFT : STATUS_COMPLETED; boolean draft = STATUS_DRAFT.equals(importStatus); if (!draft) { - List> rows = request.getRows(); - Map validationErrors = validateImportRows(rows, importStatus); - - // 如果有校验错误,导出错误明细Excel + Map validationErrors = validateImportRows(request.getRows(), importStatus); if (!validationErrors.isEmpty()) { - List failureList = new ArrayList<>(); - for (int i = 0; i < rows.size(); i++) { - WaybillImportBatchExcel excel = mapToExcel(rows.get(i)); - String errorMessage = validationErrors.get(i); - excel.setErrorMessage(Func.isNotEmpty(errorMessage) ? errorMessage : ""); - failureList.add(excel); - } - ImportFailureExcelUtil.export(response, "运单导入失败明细" + DateUtil.time(), "导入失败明细", failureList, WaybillImportBatchExcel.class); - return; + String firstError = validationErrors.values().iterator().next(); + Integer firstIndex = validationErrors.keySet().iterator().next(); + throw new ServiceException("第" + (firstIndex + 1) + "行校验失败:" + firstError); } } - // 校验通过,执行导入 WaybillImportBatch batch = persist(request, importStatus); - - // 返回成功响应 - WebUtil.renderJson(response, R.success("操作成功")); + return toVO(batch); } /** 草稿与确认导入共用落库流程,差异仅在于运单是否走校验以及是否生成应收应付明细。 */ private WaybillImportBatch persist(WaybillImportBatchRequest request, String importStatus) { boolean draft = STATUS_DRAFT.equals(importStatus); - WaybillImportBatch batch = buildBatch(request, importStatus); - if (Func.isNotEmpty(request.getId())) { + boolean append = Boolean.TRUE.equals(request.getAppend()); + WaybillImportBatch batch; + int existingWaybillCount = 0; + + if (append) { + if (Func.isEmpty(request.getId())) { + throw new ServiceException("分批追加导入必须指定批次ID"); + } WaybillImportBatch oldBatch = getById(request.getId()); - if (oldBatch == null || Objects.equals(oldBatch.getIsDeleted(), 1)) throw new ServiceException("运单批次不存在"); - if (!STATUS_DRAFT.equals(oldBatch.getImportStatus())) throw new ServiceException("仅草稿状态的批次允许编辑"); - batch.setId(oldBatch.getId()); - batch.setBatchNo(oldBatch.getBatchNo()); + if (oldBatch == null || Objects.equals(oldBatch.getIsDeleted(), 1)) { + throw new ServiceException("运单批次不存在"); + } + batch = oldBatch; + existingWaybillCount = Func.toInt(oldBatch.getWaybillCount(), 0); + } else { + batch = buildBatch(request, importStatus); + if (Func.isNotEmpty(request.getId())) { + WaybillImportBatch oldBatch = getById(request.getId()); + if (oldBatch == null || Objects.equals(oldBatch.getIsDeleted(), 1)) throw new ServiceException("运单批次不存在"); + if (!STATUS_DRAFT.equals(oldBatch.getImportStatus())) throw new ServiceException("仅草稿状态的批次允许编辑"); + batch.setId(oldBatch.getId()); + batch.setBatchNo(oldBatch.getBatchNo()); + } + batch.setWaybillCount(0); + saveOrUpdate(batch); + // 重新落库前清理批次已生成的运单,避免草稿反复保存产生重复运单。 + clearBatchWaybills(batch.getId()); } - batch.setWaybillCount(0); - saveOrUpdate(batch); - // 重新落库前清理批次已生成的运单,避免草稿反复保存产生重复运单。 - clearBatchWaybills(batch.getId()); List> rows = Func.isEmpty(request.getRows()) ? List.of() : request.getRows(); @@ -216,7 +223,10 @@ public class WaybillImportBatchServiceImpl extends BaseServiceImpl @Transactional(rollbackFor = Exception.class) public boolean submit(Waybill waybill) { boolean created = Func.isEmpty(waybill.getId()); + // 正式提交须脱离草稿:draft 在过程校正中被视为终态不会提升,需先清空再按接单配置校正为 pending/running + if (STATUS_DRAFT.equals(waybill.getBusinessStatus())) { + waybill.setBusinessStatus(null); + } prepareForSave(waybill); validate(waybill); boolean result = saveOrUpdate(waybill); @@ -1309,7 +1313,16 @@ public class WaybillServiceImpl extends BaseServiceImpl queryWrapper.like(Waybill::getOriginalNo, waybill.getOriginalNo()); } if (Func.isNotEmpty(waybill.getBusinessStatus())) { - queryWrapper.eq(Waybill::getBusinessStatus, waybill.getBusinessStatus()); + List businessStatuses = Arrays.stream(waybill.getBusinessStatus().split("[,,]")) + .map(String::trim) + .filter(Func::isNotEmpty) + .distinct() + .toList(); + if (businessStatuses.size() == 1) { + queryWrapper.eq(Waybill::getBusinessStatus, businessStatuses.get(0)); + } else if (!businessStatuses.isEmpty()) { + queryWrapper.in(Waybill::getBusinessStatus, businessStatuses); + } } if (Func.isNotEmpty(waybill.getDataSource())) { queryWrapper.eq(Waybill::getDataSource, waybill.getDataSource()); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/AccidentRecordWrapper.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/AccidentRecordWrapper.java index 19e476f3..e5386976 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/AccidentRecordWrapper.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/AccidentRecordWrapper.java @@ -31,6 +31,7 @@ import org.springblade.system.cache.UserCache; import org.springblade.transport.pojo.entity.AccidentRecord; import org.springblade.transport.pojo.vo.AccidentRecordVO; +import java.math.BigDecimal; import java.util.Objects; /** @@ -40,6 +41,8 @@ import java.util.Objects; */ public class AccidentRecordWrapper extends BaseEntityWrapper { + private static final BigDecimal EMPTY_AMOUNT_SENTINEL = BigDecimal.valueOf(-1); + public static AccidentRecordWrapper build() { return new AccidentRecordWrapper(); } @@ -47,8 +50,15 @@ public class AccidentRecordWrapper extends BaseEntityWrapper { + private static final BigDecimal EMPTY_AMOUNT_SENTINEL = BigDecimal.valueOf(-1); + public static AnnualInspectionRecordWrapper build() { return new AnnualInspectionRecordWrapper(); } @@ -47,8 +50,14 @@ public class AnnualInspectionRecordWrapper extends BaseEntityWrapper { + private static final BigDecimal EMPTY_AMOUNT_SENTINEL = BigDecimal.valueOf(-1); + public static InsuranceRecordWrapper build() { return new InsuranceRecordWrapper(); } @@ -47,8 +50,15 @@ public class InsuranceRecordWrapper extends BaseEntityWrapper { + private static final BigDecimal EMPTY_MILEAGE_SENTINEL = BigDecimal.valueOf(-1); + public static MaintenancePlanWrapper build() { return new MaintenancePlanWrapper(); } @@ -47,8 +50,15 @@ public class MaintenancePlanWrapper extends BaseEntityWrapper { + private static final BigDecimal EMPTY_MILEAGE_SENTINEL = BigDecimal.valueOf(-1); + public static MileageRecordWrapper build() { return new MileageRecordWrapper(); } @@ -47,8 +50,17 @@ public class MileageRecordWrapper extends BaseEntityWrapper { + private static final BigDecimal EMPTY_AMOUNT_SENTINEL = BigDecimal.valueOf(-1); + public static OilElectricRecordWrapper build() { return new OilElectricRecordWrapper(); } @@ -28,8 +31,17 @@ public class OilElectricRecordWrapper extends BaseEntityWrapper { + private static final BigDecimal EMPTY_AMOUNT_SENTINEL = BigDecimal.valueOf(-1); + private static final Integer EMPTY_INTEGER_SENTINEL = -1; + public static TireReplacementRecordWrapper build() { return new TireReplacementRecordWrapper(); } @@ -47,8 +51,19 @@ public class TireReplacementRecordWrapper extends BaseEntityWrapper { + private static final BigDecimal EMPTY_AMOUNT_SENTINEL = BigDecimal.valueOf(-1); + private static final Integer EMPTY_INTEGER_SENTINEL = -1; + public static ViolationRecordWrapper build() { return new ViolationRecordWrapper(); } @@ -47,8 +51,19 @@ public class ViolationRecordWrapper extends BaseEntityWrapper { case "pending" -> "待执行"; case "waiting_dispatch" -> "待调度"; case "dispatching" -> "调度中"; - case "running" -> "进行中"; + case "running", "processing", "in_progress", "inProgress" -> "进行中"; case "completed" -> "已完成"; case "cancelled" -> "已取消"; + case "closed" -> "已关闭"; default -> "未知"; }; } diff --git a/doc/nacos/blade.yaml b/doc/nacos/blade.yaml index d73eb7db..2f80484c 100644 --- a/doc/nacos/blade.yaml +++ b/doc/nacos/blade.yaml @@ -13,6 +13,9 @@ server: #spring配置 spring: + codec: + # 运单批量导入等大 JSON / 失败明细导出场景,默认 256KB 会触发网关 500 + max-in-memory-size: 20MB servlet: multipart: max-file-size: 500MB diff --git a/hs_err_pid22077.log b/hs_err_pid22077.log deleted file mode 100644 index 8dc42817..00000000 --- a/hs_err_pid22077.log +++ /dev/null @@ -1,1379 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGBUS (0xa) at pc=0x0000000100ed64c0, pid=22077, tid=36647 -# -# JRE version: OpenJDK Runtime Environment Zulu17.44+15-CA (17.0.8+7) (build 17.0.8+7-LTS) -# Java VM: OpenJDK 64-Bit Server VM Zulu17.44+15-CA (17.0.8+7-LTS, mixed mode, emulated-client, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64) -# Problematic frame: -# C [libzip.dylib+0x64c0] newEntry+0x68 -# -# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again -# -# If you would like to submit a bug report, please visit: -# http://www.azul.com/support/ -# The crash happened outside the Java Virtual Machine in native code. -# See problematic frame for where to report the bug. -# - ---------------- S U M M A R Y ------------ - -Command Line: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50259,suspend=y,server=n -javaagent:/Users/liangxin/Library/Caches/JetBrains/IntelliJIdea2026.1/captureAgent/debugger-agent.jar=file:///var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/capture10140205674518191061.props -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Ddebugger.async.stack.trace.for.all.threads=true -Dfile.encoding=UTF-8 org.springblade.desk.DeskApplication - -Host: "Mac15,6" arm64, 12 cores, 36G, Darwin 25.6.0, macOS 26.6.2 (25G83) -Time: Fri Sep 18 14:44:41 2026 CST elapsed time: 9.129557 seconds (0d 0h 0m 9s) - ---------------- T H R E A D --------------- - -Current thread (0x000000012b49c600): JavaThread "sentinel-datafile-log-executor-thread-1" daemon [_thread_in_native, id=36647, stack(0x0000000174680000,0x0000000174883000)] - -Stack: [0x0000000174680000,0x0000000174883000], sp=0x00000001748819d0, free space=2054k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libzip.dylib+0x64c0] newEntry+0x68 -C [libzip.dylib+0x6390] ZIP_GetEntry2+0x14c -C [libzip.dylib+0x6d78] ZIP_FindEntry+0x3c -V [libjvm.dylib+0x25a408] ClassPathZipEntry::open_entry(JavaThread*, char const*, int*, bool)+0xb4 -V [libjvm.dylib+0x25a53c] ClassPathZipEntry::open_stream(JavaThread*, char const*)+0x20 -V [libjvm.dylib+0x25d918] ClassLoader::load_class(Symbol*, bool, JavaThread*)+0x150 -V [libjvm.dylib+0x981d60] SystemDictionary::load_instance_class_impl(Symbol*, Handle, JavaThread*)+0x2d0 -V [libjvm.dylib+0x98063c] SystemDictionary::load_instance_class(unsigned int, Symbol*, Handle, JavaThread*)+0x30 -V [libjvm.dylib+0x97fd48] SystemDictionary::resolve_instance_class_or_null(Symbol*, Handle, Handle, JavaThread*)+0x4dc -V [libjvm.dylib+0x97f334] SystemDictionary::resolve_or_fail(Symbol*, Handle, Handle, bool, JavaThread*)+0x80 -V [libjvm.dylib+0x2beb54] ConstantPool::klass_at_impl(constantPoolHandle const&, int, JavaThread*)+0x1e0 -V [libjvm.dylib+0x46d6f0] InterpreterRuntime::_new(JavaThread*, ConstantPool*, int)+0x94 -j com.intellij.rt.debugger.agent.CaptureStorage$DeepCapturedStack.collectStacks(Ljava/util/List;)Lcom/intellij/rt/debugger/agent/CaptureStorage$StackData;+89 -j com.intellij.rt.debugger.agent.CaptureStorage.getStackTrace(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+30 -j com.intellij.rt.debugger.agent.CaptureStorage.access$1000(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+2 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()[Ljava/lang/StackTraceElement;+31 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()Ljava/lang/Object;+1 -j com.intellij.rt.debugger.agent.CaptureStorage.withoutThrowableCapture(Lcom/intellij/rt/debugger/agent/CaptureStorage$Callable;)Ljava/lang/Object;+21 -j com.intellij.rt.debugger.agent.CaptureStorage.getAsyncStackTrace(Ljava/lang/Throwable;)[Ljava/lang/StackTraceElement;+19 -j java.lang.Throwable.printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V+32 java.base@17.0.8 -j java.lang.Throwable.printStackTrace(Ljava/io/PrintWriter;)V+9 java.base@17.0.8 -j com.alibaba.csp.sentinel.log.jul.CspFormatter.format(Ljava/util/logging/LogRecord;)Ljava/lang/String;+103 -j java.util.logging.StreamHandler.publish(Ljava/util/logging/LogRecord;)V+14 java.logging@17.0.8 -j java.util.logging.FileHandler.publish(Ljava/util/logging/LogRecord;)V+11 java.logging@17.0.8 -j com.alibaba.csp.sentinel.log.jul.DateFileLogHandler$LogTask.run()V+8 -j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+92 java.base@17.0.8 -j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5 java.base@17.0.8 -j java.lang.Thread.run()V+11 java.base@17.0.8 -v ~StubRoutines::call_stub -V [libjvm.dylib+0x4781f8] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x394 -V [libjvm.dylib+0x47720c] JavaCalls::call_virtual(JavaValue*, Klass*, Symbol*, Symbol*, JavaCallArguments*, JavaThread*)+0x11c -V [libjvm.dylib+0x4772d8] JavaCalls::call_virtual(JavaValue*, Handle, Klass*, Symbol*, Symbol*, JavaThread*)+0x64 -V [libjvm.dylib+0x52ebfc] thread_entry(JavaThread*, JavaThread*)+0xc4 -V [libjvm.dylib+0x9b22e8] JavaThread::thread_main_inner()+0x150 -V [libjvm.dylib+0x9b0990] Thread::call_run()+0xe0 -V [libjvm.dylib+0x7d0364] thread_native_entry(Thread*)+0x158 -C [libsystem_pthread.dylib+0x6c58] _pthread_start+0x88 - -Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) -j com.intellij.rt.debugger.agent.CaptureStorage$DeepCapturedStack.collectStacks(Ljava/util/List;)Lcom/intellij/rt/debugger/agent/CaptureStorage$StackData;+89 -j com.intellij.rt.debugger.agent.CaptureStorage.getStackTrace(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+30 -j com.intellij.rt.debugger.agent.CaptureStorage.access$1000(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+2 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()[Ljava/lang/StackTraceElement;+31 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()Ljava/lang/Object;+1 -j com.intellij.rt.debugger.agent.CaptureStorage.withoutThrowableCapture(Lcom/intellij/rt/debugger/agent/CaptureStorage$Callable;)Ljava/lang/Object;+21 -j com.intellij.rt.debugger.agent.CaptureStorage.getAsyncStackTrace(Ljava/lang/Throwable;)[Ljava/lang/StackTraceElement;+19 -j java.lang.Throwable.printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V+32 java.base@17.0.8 -j java.lang.Throwable.printStackTrace(Ljava/io/PrintWriter;)V+9 java.base@17.0.8 -j com.alibaba.csp.sentinel.log.jul.CspFormatter.format(Ljava/util/logging/LogRecord;)Ljava/lang/String;+103 -j java.util.logging.StreamHandler.publish(Ljava/util/logging/LogRecord;)V+14 java.logging@17.0.8 -j java.util.logging.FileHandler.publish(Ljava/util/logging/LogRecord;)V+11 java.logging@17.0.8 -j com.alibaba.csp.sentinel.log.jul.DateFileLogHandler$LogTask.run()V+8 -j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+92 java.base@17.0.8 -j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5 java.base@17.0.8 -j java.lang.Thread.run()V+11 java.base@17.0.8 -v ~StubRoutines::call_stub - -siginfo: si_signo: 10 (SIGBUS), si_code: 1 (BUS_ADRALN), si_addr: 0x0000000100dd1e7b - -Register to memory mapping: - - x0=0x00006000018b9130 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x1=0x0 is NULL - x2=0x0 is NULL - x3=0x00006000018b9140 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x4=0x00006000018b9180 points into unknown readable memory: 0x00000000bf074454 | 54 44 07 bf 00 00 00 00 - x5=0x00000000a0a4a7fb is an unknown value - x6=0x0000000020c00000 is an unknown value - x7=0x000000000000000a is an unknown value - x8=0x0000000100ef9e5f points into unknown readable memory: 00 - x9=0x0000000000128000 is an unknown value -x10=0x00006000018b8000 points into unknown readable memory: 0x4c28004120ed0001 | 01 00 ed 20 41 00 28 4c -x11=0x0000000000001130 is an unknown value -x12=0x0000000000000050 is an unknown value -x13=0x0000000000000001 is an unknown value -x14=0x00000000ffffff6b is an unknown value -x15=0x00000000000007fb is an unknown value -x16=0x0000000186e7d030: __bzero+0 in /usr/lib/system/libsystem_platform.dylib at 0x0000000186e7a000 -x17=0x00000001f4ef54a8 points into unknown readable memory: 0x0000000186e7d030 | 30 d0 e7 86 01 00 00 00 -x18=0x0 is NULL -x19=0x00006000018b9130 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 -x20=0x0 is NULL -x21=0x0000600000d1c480 points into unknown readable memory: 0x0000600001c14720 | 20 47 c1 01 00 60 00 00 -x22=0x0000000100dd1e5f points into unknown readable memory: 50 -x23=0x00000000d3a18b02 is an unknown value -x24=0x000000000000002f is an unknown value -x25=0x000000000000003d is an unknown value -x26=0x00000000000000cd is an unknown value -x27=0x00006000018b9158 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 -x28=0x000000010f116600 points into unknown readable memory: 0x65746e692f6d6f63 | 63 6f 6d 2f 69 6e 74 65 - - -Registers: - x0=0x00006000018b9130 x1=0x0000000000000000 x2=0x0000000000000000 x3=0x00006000018b9140 - x4=0x00006000018b9180 x5=0x00000000a0a4a7fb x6=0x0000000020c00000 x7=0x000000000000000a - x8=0x0000000100ef9e5f x9=0x0000000000128000 x10=0x00006000018b8000 x11=0x0000000000001130 -x12=0x0000000000000050 x13=0x0000000000000001 x14=0x00000000ffffff6b x15=0x00000000000007fb -x16=0x0000000186e7d030 x17=0x00000001f4ef54a8 x18=0x0000000000000000 x19=0x00006000018b9130 -x20=0x0000000000000000 x21=0x0000600000d1c480 x22=0x0000000100dd1e5f x23=0x00000000d3a18b02 -x24=0x000000000000002f x25=0x000000000000003d x26=0x00000000000000cd x27=0x00006000018b9158 -x28=0x000000010f116600 fp=0x0000000174881a50 lr=0x0000000100ed648c sp=0x00000001748819d0 -pc=0x0000000100ed64c0 cpsr=0x0000000060001000 -Top of Stack: (sp=0x00000001748819d0) -0x00000001748819d0: 0000000000000000 0000000000000000 -0x00000001748819e0: 0000000000000000 0000000000000000 -0x00000001748819f0: 0000000000000000 0000000000000000 -0x0000000174881a00: 000000010f116600 000000012c81cc00 -0x0000000174881a10: 00000000000000cd 000000000000003d -0x0000000174881a20: 000000000000002f 00000000d3a18b02 -0x0000000174881a30: 00006000018923a0 0000000000000000 -0x0000000174881a40: 000000010f116640 0000600000d1c480 -0x0000000174881a50: 0000000174881ab0 0000000100ed6390 -0x0000000174881a60: 000000010f116600 0000000000000037 -0x0000000174881a70: 0000000000000001 000000010f116640 -0x0000000174881a80: 000000012b49c948 000000010f116640 -0x0000000174881a90: 0000600000d1c480 000000010f116640 -0x0000000174881aa0: 0000000174881bdc 0000000174881af4 -0x0000000174881ab0: 0000000174881ae0 0000000100ed6d78 -0x0000000174881ac0: 0000000174881bdc 0000600003615c50 -0x0000000174881ad0: 0000000000000000 000000012b49c600 -0x0000000174881ae0: 0000000174881bc0 000000010225e408 -0x0000000174881af0: 0000000102abc388 0000000000000100 -0x0000000174881b00: 0000000174881b20 00000001025325dc -0x0000000174881b10: 0000000102abc388 0000000174881ba0 -0x0000000174881b20: 0000000174881b70 00000001022e496c -0x0000000174881b30: 0000000000000000 0000000000000000 -0x0000000174881b40: 0000000000000001 00000001314a0290 -0x0000000174881b50: 000000012b49c600 000000010f1169d8 -0x0000000174881b60: 0000000102ad11e2 0000000174881c68 -0x0000000174881b70: 0000000174881b90 31ade61c7bb700f3 -0x0000000174881b80: 0000000000000001 000000010f116640 -0x0000000174881b90: 0000600003615c50 00000001314a0290 -0x0000000174881ba0: 000000012b49c600 000000010f1169d8 -0x0000000174881bb0: 000000010f1165f0 0000600003615c50 -0x0000000174881bc0: 0000000174881bf0 000000010225e53c - -Instructions: (pc=0x0000000100ed64c0) -0x0000000100ed63c0: 6b0c017f 54ffff60 17ffffde d2800016 -0x0000000100ed63d0: 72001ebf 54000160 b5000156 f100073f -0x0000000100ed63e0: 54fff7cb 8b140328 385ff108 7100bd1f -0x0000000100ed63f0: 54fff741 d2800016 14000002 f9004e7f -0x0000000100ed6400: f9402a60 94000451 aa1603e0 a9457bfd -0x0000000100ed6410: a9444ff4 a94357f6 a9425ff8 a94167fa -0x0000000100ed6420: a8c66ffc d65f03c0 6b03003f 540000e1 -0x0000000100ed6430: 71000421 540000eb 38401408 38401449 -0x0000000100ed6440: 6b09011f 54ffff60 52800000 d65f03c0 -0x0000000100ed6450: 52800020 d65f03c0 d10243ff a9036ffc -0x0000000100ed6460: a90467fa a9055ff8 a90657f6 a9074ff4 -0x0000000100ed6470: a9087bfd 910203fd aa0203f4 aa0103f6 -0x0000000100ed6480: aa0003f5 52800900 94000481 aa0003f3 -0x0000000100ed6490: b4001320 f900027f aa1303fb f8028f7f -0x0000000100ed64a0: f9001a7f 3940c2a8 34000288 f9400ea8 -0x0000000100ed64b0: f94006c9 8b090108 f94016a9 cb090116 -0x0000000100ed64c0: 79403ad8 39407ada 39407edc 794042c8 -0x0000000100ed64d0: f90017e8 b9400ec8 f9000668 b9401ac8 -0x0000000100ed64e0: f9000fe8 f9000a68 794016c8 34000488 -0x0000000100ed64f0: b94016c8 14000023 f94006d7 34000d54 -0x0000000100ed6500: f9401ea8 b4000288 f94022a9 eb17013f -0x0000000100ed6510: 5400022c 5283fa4a 8b0a012a eb17015f -0x0000000100ed6520: 540001ab 9140092a 8b170108 cb090116 -0x0000000100ed6530: 79403ac8 79403ec9 794042cb 8b0802e8 -0x0000000100ed6540: 8b090108 8b0b0108 9100b908 eb0a011f -0x0000000100ed6550: 54000b4d aa1503e0 aa1703e1 52840002 -0x0000000100ed6560: 94000384 aa0003f6 b4000aa0 f9401ea0 -0x0000000100ed6570: 94000429 a903deb6 17ffffd2 d2800008 -0x0000000100ed6580: aa0803f7 f9000e68 b94012c8 b9002268 -0x0000000100ed6590: b842a2c9 f9405ea8 f9000be9 8b090108 -0x0000000100ed65a0: cb0803e8 f9001e68 794012c8 b9004268 -0x0000000100ed65b0: 91000700 94000436 aa0003f9 f9000260 - - -Stack slot to memory mapping: -stack at sp + 0 slots: 0x0 is NULL -stack at sp + 1 slots: 0x0 is NULL -stack at sp + 2 slots: 0x0 is NULL -stack at sp + 3 slots: 0x0 is NULL -stack at sp + 4 slots: 0x0 is NULL -stack at sp + 5 slots: 0x0 is NULL -stack at sp + 6 slots: 0x000000010f116600 points into unknown readable memory: 0x65746e692f6d6f63 | 63 6f 6d 2f 69 6e 74 65 -stack at sp + 7 slots: 0x000000012c81cc00 points into unknown readable memory: 0xffffffff5bbd78a2 | a2 78 bd 5b ff ff ff ff - - ---------------- P R O C E S S --------------- - -Threads class SMR info: -_java_thread_list=0x0000600003f37760, length=73, elements={ -0x000000010b808a00, 0x000000010b809600, 0x000000012c90ac00, 0x000000010b008600, -0x000000010b00ae00, 0x000000011e808200, 0x000000011e00a400, 0x000000010f80a200, -0x000000010b809c00, 0x000000010f80b200, 0x000000011e00aa00, 0x000000010f80b800, -0x000000012d039a00, 0x000000011d808200, 0x000000012c01ea00, 0x000000012d810400, -0x000000012d838200, 0x000000010f829800, 0x000000012b0ffe00, 0x00000001018b8200, -0x000000012dae5600, 0x000000012c39d000, 0x000000011db9d000, 0x000000012c3bba00, -0x000000012c3cb200, 0x000000011dbcc600, 0x000000012db42e00, 0x000000012cedde00, -0x000000012db60800, 0x000000011dc28800, 0x000000012db67000, 0x000000011dc39e00, -0x000000012b336400, 0x000000012c4a3400, 0x000000012cf7fc00, 0x000000010b190600, -0x000000011ead0200, 0x000000011dccd000, 0x000000010b17fa00, 0x000000011e1f1a00, -0x000000010b995e00, 0x000000010f8ffa00, 0x000000011f024a00, 0x000000011dcc2400, -0x000000011eb04e00, 0x000000012d1e3200, 0x000000012d1c0200, 0x000000011e257200, -0x000000010f997000, 0x000000012c55be00, 0x000000012b406400, 0x000000011eb76400, -0x000000010b9b3200, 0x000000010b985800, 0x000000011f02f400, 0x000000012d1f9a00, -0x000000011dd00400, 0x000000011dd2cc00, 0x000000012b437400, 0x000000012b45ba00, -0x000000012b49c600, 0x000000011ebea000, 0x000000011ea07e00, 0x000000011f161800, -0x000000012c5d9e00, 0x000000011f162e00, 0x000000012dd08600, 0x0000000101998600, -0x000000010b1ef200, 0x000000010ba06000, 0x000000011dda3c00, 0x000000011e3d8e00, -0x000000011f24c800 -} - -Java Threads: ( => current thread ) - 0x000000010b808a00 JavaThread "main" [_thread_in_native, id=5891, stack(0x000000016f17c000,0x000000016f37f000)] - 0x000000010b809600 JavaThread "Reference Handler" daemon [_thread_blocked, id=19971, stack(0x000000016ffd0000,0x00000001701d3000)] - 0x000000012c90ac00 JavaThread "Finalizer" daemon [_thread_blocked, id=19715, stack(0x00000001701dc000,0x00000001703df000)] - 0x000000010b008600 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=30979, stack(0x0000000170500000,0x0000000170703000)] - 0x000000010b00ae00 JavaThread "Service Thread" daemon [_thread_blocked, id=30467, stack(0x000000017070c000,0x000000017090f000)] - 0x000000011e808200 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=23299, stack(0x0000000170918000,0x0000000170b1b000)] - 0x000000011e00a400 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=23555, stack(0x0000000170b24000,0x0000000170d27000)] - 0x000000010f80a200 JavaThread "Sweeper thread" daemon [_thread_blocked, id=29699, stack(0x0000000170d30000,0x0000000170f33000)] - 0x000000010b809c00 JavaThread "C1 CompilerThread1" daemon [_thread_blocked, id=24067, stack(0x0000000170f3c000,0x000000017113f000)] - 0x000000010f80b200 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=24323, stack(0x0000000171148000,0x000000017134b000)] - 0x000000011e00aa00 JavaThread "C1 CompilerThread2" daemon [_thread_blocked, id=24835, stack(0x0000000171354000,0x0000000171557000)] - 0x000000010f80b800 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=29187, stack(0x0000000171560000,0x0000000171763000)] - 0x000000012d039a00 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=25603, stack(0x000000017176c000,0x000000017196f000)] - 0x000000011d808200 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=25859, stack(0x0000000171978000,0x0000000171b7b000)] - 0x000000012c01ea00 JavaThread "JDWP Command Reader" daemon [_thread_in_native, id=26115, stack(0x0000000171b84000,0x0000000171d87000)] - 0x000000012d810400 JavaThread "IntelliJ Suspend Helper" daemon [_thread_blocked, id=26371, stack(0x0000000171d90000,0x0000000171f93000)] - 0x000000012d838200 JavaThread "Notification Thread" daemon [_thread_blocked, id=26883, stack(0x0000000171f9c000,0x000000017219f000)] - 0x000000010f829800 JavaThread "CoarseTimer" daemon [_thread_blocked, id=27139, stack(0x00000001721a8000,0x00000001723ab000)] - 0x000000012b0ffe00 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=41219, stack(0x0000000173620000,0x0000000173823000)] - 0x00000001018b8200 JavaThread "com.alibaba.nacos.client.logging.0" daemon [_thread_blocked, id=40707, stack(0x0000000173a38000,0x0000000173c3b000)] - 0x000000012dae5600 JavaThread "Attach Listener" daemon [_thread_blocked, id=35331, stack(0x0000000173c44000,0x0000000173e47000)] - 0x000000012c39d000 JavaThread "RMI TCP Connection(2)-127.0.0.1" daemon [_thread_in_native, id=39939, stack(0x0000000173e50000,0x0000000174053000)] - 0x000000011db9d000 JavaThread "RMI Scheduler(0)" daemon [_thread_blocked, id=35587, stack(0x000000017405c000,0x000000017425f000)] - 0x000000012c3bba00 JavaThread "nacos.publisher-com.alibaba.nacos.common.notify.SlowEvent" daemon [_thread_blocked, id=43523, stack(0x00000001750bc000,0x00000001752bf000)] - 0x000000012c3cb200 JavaThread "nacos.publisher-com.alibaba.nacos.client.config.impl.ConfigFuzzyWatchNotifyEvent" daemon [_thread_blocked, id=43779, stack(0x00000001752c8000,0x00000001754cb000)] - 0x000000011dbcc600 JavaThread "nacos.publisher-com.alibaba.nacos.client.config.impl.ConfigFuzzyWatchLoadEvent" daemon [_thread_blocked, id=44291, stack(0x00000001754d4000,0x00000001756d7000)] - 0x000000012db42e00 JavaThread "com.alibaba.nacos.client.auth.ram.identify.watcher.0" daemon [_thread_blocked, id=65027, stack(0x00000001756e0000,0x00000001758e3000)] - 0x000000012cedde00 JavaThread "com.alibaba.nacos.client.login-executor.0" daemon [_thread_blocked, id=36883, stack(0x0000000174a98000,0x0000000174c9b000)] - 0x000000012db60800 JavaThread "com.alibaba.nacos.client.listen-executor.0" daemon [_thread_blocked, id=45059, stack(0x00000001758ec000,0x0000000175aef000)] - 0x000000011dc28800 JavaThread "com.alibaba.nacos.client.fuzzy-watcher-executor.0" daemon [_thread_blocked, id=64771, stack(0x0000000175af8000,0x0000000175cfb000)] - 0x000000012db67000 JavaThread "com.alibaba.nacos.client.remote.worker.0" daemon [_thread_blocked, id=64259, stack(0x0000000175d04000,0x0000000175f07000)] - 0x000000011dc39e00 JavaThread "com.alibaba.nacos.client.remote.worker.1" daemon [_thread_blocked, id=45827, stack(0x0000000175f10000,0x0000000176113000)] - 0x000000012b336400 JavaThread "grpc-nio-worker-ELG-1-1" daemon [_thread_in_native, id=64019, stack(0x000000017611c000,0x000000017631f000)] - 0x000000012c4a3400 JavaThread "grpc-default-executor-0" daemon [_thread_blocked, id=63747, stack(0x0000000176328000,0x000000017652b000)] - 0x000000012cf7fc00 JavaThread "nacos-grpc-client-executor-127.0.0.1-0" daemon [_thread_blocked, id=46595, stack(0x0000000176534000,0x0000000176737000)] - 0x000000010b190600 JavaThread "nacos-grpc-client-executor-127.0.0.1-1" daemon [_thread_blocked, id=63235, stack(0x0000000176740000,0x0000000176943000)] - 0x000000011ead0200 JavaThread "grpc-nio-worker-ELG-1-2" daemon [_thread_in_native, id=62995, stack(0x000000017694c000,0x0000000176b4f000)] - 0x000000011dccd000 JavaThread "nacos-grpc-client-executor-127.0.0.1-2" daemon [_thread_blocked, id=47363, stack(0x0000000176b58000,0x0000000176d5b000)] - 0x000000010b17fa00 JavaThread "nacos-grpc-client-executor-127.0.0.1-3" daemon [_thread_blocked, id=62211, stack(0x0000000176d64000,0x0000000176f67000)] - 0x000000011e1f1a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-4" daemon [_thread_blocked, id=47619, stack(0x0000000176f70000,0x0000000177173000)] - 0x000000010b995e00 JavaThread "nacos-grpc-client-executor-127.0.0.1-5" daemon [_thread_blocked, id=61699, stack(0x000000017717c000,0x000000017737f000)] - 0x000000010f8ffa00 JavaThread "nacos-grpc-client-executor-127.0.0.1-6" daemon [_thread_blocked, id=48387, stack(0x0000000177388000,0x000000017758b000)] - 0x000000011f024a00 JavaThread "nacos.publisher-com.alibaba.nacos.common.ability.AbstractAbilityControlManager$AbilityUpdateEvent" daemon [_thread_blocked, id=61187, stack(0x0000000177594000,0x0000000177797000)] - 0x000000011dcc2400 JavaThread "nacos-grpc-client-executor-127.0.0.1-7" daemon [_thread_blocked, id=48899, stack(0x00000001777a0000,0x00000001779a3000)] - 0x000000011eb04e00 JavaThread "nacos-grpc-client-executor-127.0.0.1-8" daemon [_thread_blocked, id=60675, stack(0x00000001779ac000,0x0000000177baf000)] - 0x000000012d1e3200 JavaThread "nacos-grpc-client-executor-127.0.0.1-9" daemon [_thread_blocked, id=49411, stack(0x0000000177bb8000,0x0000000177dbb000)] - 0x000000012d1c0200 JavaThread "nacos-grpc-client-executor-127.0.0.1-10" daemon [_thread_blocked, id=60163, stack(0x0000000177dc4000,0x0000000177fc7000)] - 0x000000011e257200 JavaThread "nacos-grpc-client-executor-127.0.0.1-11" daemon [_thread_blocked, id=59659, stack(0x0000000328004000,0x0000000328207000)] - 0x000000010f997000 JavaThread "nacos-grpc-client-executor-127.0.0.1-12" daemon [_thread_blocked, id=49923, stack(0x0000000328210000,0x0000000328413000)] - 0x000000012c55be00 JavaThread "nacos-grpc-client-executor-127.0.0.1-13" daemon [_thread_blocked, id=59395, stack(0x000000032841c000,0x000000032861f000)] - 0x000000012b406400 JavaThread "nacos-grpc-client-executor-127.0.0.1-14" daemon [_thread_blocked, id=59139, stack(0x0000000328628000,0x000000032882b000)] - 0x000000011eb76400 JavaThread "nacos-grpc-client-executor-127.0.0.1-15" daemon [_thread_blocked, id=50691, stack(0x0000000328834000,0x0000000328a37000)] - 0x000000010b9b3200 JavaThread "nacos-grpc-client-executor-127.0.0.1-16" daemon [_thread_blocked, id=51203, stack(0x0000000328a40000,0x0000000328c43000)] - 0x000000010b985800 JavaThread "nacos-grpc-client-executor-127.0.0.1-17" daemon [_thread_blocked, id=51715, stack(0x0000000328c4c000,0x0000000328e4f000)] - 0x000000011f02f400 JavaThread "nacos-grpc-client-executor-127.0.0.1-18" daemon [_thread_blocked, id=51971, stack(0x0000000328e58000,0x000000032905b000)] - 0x000000012d1f9a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-19" daemon [_thread_blocked, id=58115, stack(0x0000000329064000,0x0000000329267000)] - 0x000000011dd00400 JavaThread "nacos-grpc-client-executor-127.0.0.1-20" daemon [_thread_blocked, id=57859, stack(0x0000000329270000,0x0000000329473000)] - 0x000000011dd2cc00 JavaThread "nacos-grpc-client-executor-127.0.0.1-21" daemon [_thread_blocked, id=57347, stack(0x000000032947c000,0x000000032967f000)] - 0x000000012b437400 JavaThread "nacos-grpc-client-executor-127.0.0.1-22" daemon [_thread_blocked, id=57091, stack(0x0000000329688000,0x000000032988b000)] - 0x000000012b45ba00 JavaThread "RMI TCP Connection(3)-127.0.0.1" daemon [_thread_in_native, id=39179, stack(0x0000000174268000,0x000000017446b000)] -=>0x000000012b49c600 JavaThread "sentinel-datafile-log-executor-thread-1" daemon [_thread_in_native, id=36647, stack(0x0000000174680000,0x0000000174883000)] - 0x000000011ebea000 JavaThread "sentinel-heartbeat-send-task-thread-1" daemon [_thread_blocked, id=56595, stack(0x0000000329894000,0x0000000329a97000)] - 0x000000011ea07e00 JavaThread "sentinel-command-center-executor-thread-1" daemon [_thread_in_native, id=36139, stack(0x0000000174474000,0x0000000174677000)] - 0x000000011f161800 JavaThread "nacos-grpc-client-executor-127.0.0.1-23" daemon [_thread_blocked, id=36367, stack(0x000000017488c000,0x0000000174a8f000)] - 0x000000012c5d9e00 JavaThread "nacos-grpc-client-executor-127.0.0.1-24" daemon [_thread_blocked, id=53003, stack(0x0000000329aa0000,0x0000000329ca3000)] - 0x000000011f162e00 JavaThread "nacos-grpc-client-executor-127.0.0.1-25" daemon [_thread_blocked, id=56323, stack(0x0000000329cac000,0x0000000329eaf000)] - 0x000000012dd08600 JavaThread "nacos-grpc-client-executor-127.0.0.1-26" daemon [_thread_blocked, id=53763, stack(0x0000000329eb8000,0x000000032a0bb000)] - 0x0000000101998600 JavaThread "nacos-grpc-client-executor-127.0.0.1-27" daemon [_thread_blocked, id=55811, stack(0x000000032a0c4000,0x000000032a2c7000)] - 0x000000010b1ef200 JavaThread "nacos-grpc-client-executor-127.0.0.1-28" daemon [_thread_blocked, id=54019, stack(0x000000032a2d0000,0x000000032a4d3000)] - 0x000000010ba06000 JavaThread "nacos-grpc-client-executor-127.0.0.1-29" daemon [_thread_blocked, id=55043, stack(0x000000032a4dc000,0x000000032a6df000)] - 0x000000011dda3c00 JavaThread "nacos-grpc-client-executor-127.0.0.1-30" daemon [_thread_blocked, id=54787, stack(0x000000032a6e8000,0x000000032a8eb000)] - 0x000000011e3d8e00 JavaThread "sentinel-time-tick-thread" daemon [_thread_blocked, id=31875, stack(0x000000032a8f4000,0x000000032aaf7000)] - 0x000000011f24c800 JavaThread "sentinel-heartbeat-send-task-thread-2" daemon [_thread_blocked, id=65843, stack(0x000000032ab00000,0x000000032ad03000)] - -Other Threads: - 0x000000012b8059d0 VMThread "VM Thread" [stack: 0x000000016fdc4000,0x000000016ffc7000] [id=18435] - 0x000000010f109630 WatcherThread [stack: 0x000000017382c000,0x0000000173a2f000] [id=40963] - 0x000000012af08740 GCTaskThread "GC Thread#0" [stack: 0x000000016f388000,0x000000016f58b000] [id=12035] - 0x000000012ae08da0 GCTaskThread "GC Thread#1" [stack: 0x00000001723b4000,0x00000001725b7000] [id=27395] - 0x000000012ae09060 GCTaskThread "GC Thread#2" [stack: 0x00000001725c0000,0x00000001727c3000] [id=32771] - 0x0000000101107cb0 GCTaskThread "GC Thread#3" [stack: 0x00000001727cc000,0x00000001729cf000] [id=33027] - 0x000000010f30cd30 GCTaskThread "GC Thread#4" [stack: 0x00000001729d8000,0x0000000172bdb000] [id=33283] - 0x000000012ae094f0 GCTaskThread "GC Thread#5" [stack: 0x0000000172be4000,0x0000000172de7000] [id=42755] - 0x000000010f30cff0 GCTaskThread "GC Thread#6" [stack: 0x0000000172df0000,0x0000000172ff3000] [id=42243] - 0x000000012b909b70 GCTaskThread "GC Thread#7" [stack: 0x0000000172ffc000,0x00000001731ff000] [id=41987] - 0x000000010f209c10 GCTaskThread "GC Thread#8" [stack: 0x0000000173208000,0x000000017340b000] [id=34051] - 0x000000010f30d870 GCTaskThread "GC Thread#9" [stack: 0x0000000173414000,0x0000000173617000] [id=34307] - 0x000000012af08e00 ConcurrentGCThread "G1 Main Marker" [stack: 0x000000016f594000,0x000000016f797000] [id=13571] - 0x000000012af09690 ConcurrentGCThread "G1 Conc#0" [stack: 0x000000016f7a0000,0x000000016f9a3000] [id=12547] - 0x000000010f41fcd0 ConcurrentGCThread "G1 Conc#1" [stack: 0x0000000174ca4000,0x0000000174ea7000] [id=37891] - 0x000000010f32ed40 ConcurrentGCThread "G1 Conc#2" [stack: 0x0000000174eb0000,0x00000001750b3000] [id=37379] - 0x000000012af0bbd0 ConcurrentGCThread "G1 Refine#0" [stack: 0x000000016f9ac000,0x000000016fbaf000] [id=16643] - 0x000000010f104080 ConcurrentGCThread "G1 Service" [stack: 0x000000016fbb8000,0x000000016fdbb000] [id=21507] - -Threads with active compile tasks: - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x00000005c0000000, size: 9216 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x0000000500000000-0x0000000500c14000-0x0000000500c14000), size 12664832, SharedBaseAddress: 0x0000000500000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x0000000501000000-0x0000000541000000, reserved size: 1073741824 -Narrow klass base: 0x0000000500000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - CPUs: 12 total, 12 available - Memory: 36864M - Large Page Support: Disabled - NUMA Support: Disabled - Compressed Oops: Enabled (Zero based) - Heap Region Size: 8M - Heap Min Capacity: 8M - Heap Initial Capacity: 576M - Heap Max Capacity: 9G - Pre-touch: Disabled - Parallel Workers: 10 - Concurrent Workers: 3 - Concurrent Refinement Workers: 10 - Periodic GC: Disabled - -Heap: - garbage-first heap total 262144K, used 92456K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 3 survivors (24576K) - Metaspace used 63382K, committed 63872K, reserved 1114112K - class space used 8462K, committed 8704K, reserved 1048576K - -Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, OA=open archive, CA=closed archive, TAMS=top-at-mark-start (previous, next) -| 0|0x00000005c0000000, 0x00000005c0800000, 0x00000005c0800000|100%| O| |TAMS 0x00000005c0800000, 0x00000005c0000000| Untracked -| 1|0x00000005c0800000, 0x00000005c1000000, 0x00000005c1000000|100%| O| |TAMS 0x00000005c1000000, 0x00000005c0800000| Untracked -| 2|0x00000005c1000000, 0x00000005c1800000, 0x00000005c1800000|100%| O| |TAMS 0x00000005c1800000, 0x00000005c1000000| Untracked -| 3|0x00000005c1800000, 0x00000005c1800000, 0x00000005c2000000| 0%| F| |TAMS 0x00000005c1800000, 0x00000005c1800000| Untracked -| 4|0x00000005c2000000, 0x00000005c207c000, 0x00000005c2800000| 6%| O| |TAMS 0x00000005c207c000, 0x00000005c2000000| Untracked -| 5|0x00000005c2800000, 0x00000005c2800000, 0x00000005c3000000| 0%| F| |TAMS 0x00000005c2800000, 0x00000005c2800000| Untracked -| 6|0x00000005c3000000, 0x00000005c3000000, 0x00000005c3800000| 0%| F| |TAMS 0x00000005c3000000, 0x00000005c3000000| Untracked -| 7|0x00000005c3800000, 0x00000005c3800000, 0x00000005c4000000| 0%| F| |TAMS 0x00000005c3800000, 0x00000005c3800000| Untracked -| 8|0x00000005c4000000, 0x00000005c4000000, 0x00000005c4800000| 0%| F| |TAMS 0x00000005c4000000, 0x00000005c4000000| Untracked -| 9|0x00000005c4800000, 0x00000005c4800000, 0x00000005c5000000| 0%| F| |TAMS 0x00000005c4800000, 0x00000005c4800000| Untracked -| 10|0x00000005c5000000, 0x00000005c5000000, 0x00000005c5800000| 0%| F| |TAMS 0x00000005c5000000, 0x00000005c5000000| Untracked -| 11|0x00000005c5800000, 0x00000005c5800000, 0x00000005c6000000| 0%| F| |TAMS 0x00000005c5800000, 0x00000005c5800000| Untracked -| 12|0x00000005c6000000, 0x00000005c6000000, 0x00000005c6800000| 0%| F| |TAMS 0x00000005c6000000, 0x00000005c6000000| Untracked -| 13|0x00000005c6800000, 0x00000005c6800000, 0x00000005c7000000| 0%| F| |TAMS 0x00000005c6800000, 0x00000005c6800000| Untracked -| 14|0x00000005c7000000, 0x00000005c71d6220, 0x00000005c7800000| 22%| S|CS|TAMS 0x00000005c7000000, 0x00000005c7000000| Complete -| 15|0x00000005c7800000, 0x00000005c8000000, 0x00000005c8000000|100%| S|CS|TAMS 0x00000005c7800000, 0x00000005c7800000| Complete -| 16|0x00000005c8000000, 0x00000005c8800000, 0x00000005c8800000|100%| S|CS|TAMS 0x00000005c8000000, 0x00000005c8000000| Complete -| 17|0x00000005c8800000, 0x00000005c8800000, 0x00000005c9000000| 0%| F| |TAMS 0x00000005c8800000, 0x00000005c8800000| Untracked -| 18|0x00000005c9000000, 0x00000005c9000000, 0x00000005c9800000| 0%| F| |TAMS 0x00000005c9000000, 0x00000005c9000000| Untracked -| 19|0x00000005c9800000, 0x00000005c9800000, 0x00000005ca000000| 0%| F| |TAMS 0x00000005c9800000, 0x00000005c9800000| Untracked -| 20|0x00000005ca000000, 0x00000005ca000000, 0x00000005ca800000| 0%| F| |TAMS 0x00000005ca000000, 0x00000005ca000000| Untracked -| 21|0x00000005ca800000, 0x00000005ca800000, 0x00000005cb000000| 0%| F| |TAMS 0x00000005ca800000, 0x00000005ca800000| Untracked -| 22|0x00000005cb000000, 0x00000005cb000000, 0x00000005cb800000| 0%| F| |TAMS 0x00000005cb000000, 0x00000005cb000000| Untracked -| 23|0x00000005cb800000, 0x00000005cb800000, 0x00000005cc000000| 0%| F| |TAMS 0x00000005cb800000, 0x00000005cb800000| Untracked -| 24|0x00000005cc000000, 0x00000005cc5eec00, 0x00000005cc800000| 74%| E| |TAMS 0x00000005cc000000, 0x00000005cc000000| Complete -| 25|0x00000005cc800000, 0x00000005cd000000, 0x00000005cd000000|100%| E|CS|TAMS 0x00000005cc800000, 0x00000005cc800000| Complete -| 26|0x00000005cd000000, 0x00000005cd800000, 0x00000005cd800000|100%| E|CS|TAMS 0x00000005cd000000, 0x00000005cd000000| Complete -| 27|0x00000005cd800000, 0x00000005ce000000, 0x00000005ce000000|100%| E|CS|TAMS 0x00000005cd800000, 0x00000005cd800000| Complete -| 64|0x00000005e0000000, 0x00000005e0800000, 0x00000005e0800000|100%| E|CS|TAMS 0x00000005e0000000, 0x00000005e0000000| Complete -| 71|0x00000005e3800000, 0x00000005e4000000, 0x00000005e4000000|100%| E|CS|TAMS 0x00000005e3800000, 0x00000005e3800000| Complete -|1150|0x00000007ff000000, 0x00000007ff778000, 0x00000007ff800000| 93%|OA| |TAMS 0x00000007ff778000, 0x00000007ff000000| Untracked -|1151|0x00000007ff800000, 0x00000007ff880000, 0x0000000800000000| 6%|CA| |TAMS 0x00000007ff880000, 0x00000007ff800000| Untracked - -Card table byte_map: [0x0000000119200000,0x000000011a400000] _byte_map_base: 0x0000000116400000 - -Marking Bits (Prev, Next): (CMBitMap*) 0x000000012c82f250, (CMBitMap*) 0x000000012c82f210 - Prev Bits: [0x0000000141000000, 0x000000014a000000) - Next Bits: [0x0000000138000000, 0x0000000141000000) - -Polling page: 0x0000000100da4000 - -Metaspace: - -Usage: - Non-class: 53.63 MB used. - Class: 8.26 MB used. - Both: 61.90 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 53.88 MB ( 84%) committed, 1 nodes. - Class space: 1.00 GB reserved, 8.50 MB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 62.38 MB ( 6%) committed. - -Chunk freelists: - Non-Class: 10.08 MB - Class: 7.50 MB - Both: 17.58 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 99.06 MB -CDS: on -MetaspaceReclaimPolicy: balanced - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. - - new_chunks_are_fully_committed: 0. - - uncommit_free_chunks: 1. - - use_allocation_guard: 0. - - handle_deallocations: 1. - - -Internal statistics: - -num_allocs_failed_limit: 9. -num_arena_births: 684. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 998. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 9. -num_chunks_taken_from_freelist: 2682. -num_chunk_merges: 6. -num_chunk_splits: 2009. -num_chunks_enlarged: 1609. -num_inconsistent_stats: 0. - -CodeCache: size=49152Kb used=12939Kb max_used=12939Kb free=36212Kb - bounds [0x000000010c100000, 0x000000010cdb0000, 0x000000010f100000] - total_blobs=6555 nmethods=5927 adapters=554 - compilation: enabled - stopped_count=0, restarted_count=0 - full_count=0 - -Compilation events (20 events): -Event: 9.067 Thread 0x000000010b809c00 nmethod 6207 0x000000010cd9aa90 code [0x000000010cd9ac40, 0x000000010cd9ae18] -Event: 9.067 Thread 0x000000010b809c00 6211 1 org.springframework.beans.factory.config.BeanDefinitionVisitor::visitScope (33 bytes) -Event: 9.067 Thread 0x000000010f80b800 nmethod 6210 0x000000010cd9af90 code [0x000000010cd9b140, 0x000000010cd9b358] -Event: 9.067 Thread 0x000000011e00aa00 nmethod 6208 0x000000010cd9b510 code [0x000000010cd9b700, 0x000000010cd9ba38] -Event: 9.067 Thread 0x000000010b809c00 nmethod 6211 0x000000010cd9bc90 code [0x000000010cd9be40, 0x000000010cd9c058] -Event: 9.068 Thread 0x000000011e00a400 nmethod 6206 0x000000010cd9c210 code [0x000000010cd9c580, 0x000000010cd9d558] -Event: 9.068 Thread 0x000000010b809c00 6212 1 org.springframework.beans.AbstractNestablePropertyAccessor::getWrappedInstance (22 bytes) -Event: 9.068 Thread 0x000000010b809c00 nmethod 6212 0x000000010cd9e010 code [0x000000010cd9e1c0, 0x000000010cd9e338] -Event: 9.073 Thread 0x000000011e00a400 6213 1 java.lang.reflect.Constructor::getParameterTypes (11 bytes) -Event: 9.073 Thread 0x000000011e00a400 nmethod 6213 0x000000010cd9e410 code [0x000000010cd9e5c0, 0x000000010cd9e6f8] -Event: 9.126 Thread 0x000000011e00aa00 6216 1 java.util.regex.Pattern::qtype (39 bytes) -Event: 9.126 Thread 0x000000010b809c00 6217 1 java.util.regex.Pattern::sequence (647 bytes) -Event: 9.126 Thread 0x000000010f80b800 6218 1 java.util.regex.Pattern$BranchConn::study (5 bytes) -Event: 9.126 Thread 0x000000010f80b800 nmethod 6218 0x000000010cd9f090 code [0x000000010cd9f200, 0x000000010cd9f2d8] -Event: 9.126 Thread 0x000000011e00aa00 nmethod 6216 0x000000010cd9f390 code [0x000000010cd9f580, 0x000000010cd9f8b8] -Event: 9.127 Thread 0x000000011e00a400 6219 1 jdk.internal.misc.Unsafe::putReferenceOpaque (9 bytes) -Event: 9.127 Thread 0x000000011e00a400 nmethod 6219 0x000000010cd9fa90 code [0x000000010cd9fc00, 0x000000010cd9fd18] -Event: 9.128 Thread 0x000000010b809c00 nmethod 6217 0x000000010cd9fd90 code [0x000000010cda0180, 0x000000010cda1618] -Event: 9.128 Thread 0x000000011e00aa00 6220 1 java.util.IdentityHashMap::put (137 bytes) -Event: 9.129 Thread 0x000000011e00aa00 nmethod 6220 0x000000010cda2290 code [0x000000010cda2480, 0x000000010cda2998] - -GC Heap History (20 events): -Event: 0.442 GC heap before -{Heap before GC invocations=1 (full 0): - garbage-first heap total 606208K, used 38051K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 3 young (24576K), 1 survivors (8192K) - Metaspace used 9689K, committed 9856K, reserved 1114112K - class space used 1076K, committed 1152K, reserved 1048576K -} -Event: 0.444 GC heap after -{Heap after GC invocations=2 (full 0): - garbage-first heap total 606208K, used 23419K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 9689K, committed 9856K, reserved 1114112K - class space used 1076K, committed 1152K, reserved 1048576K -} -Event: 0.807 GC heap before -{Heap before GC invocations=2 (full 0): - garbage-first heap total 606208K, used 47995K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 5 young (40960K), 1 survivors (8192K) - Metaspace used 13722K, committed 13888K, reserved 1114112K - class space used 1603K, committed 1664K, reserved 1048576K -} -Event: 0.813 GC heap after -{Heap after GC invocations=3 (full 0): - garbage-first heap total 606208K, used 27477K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 13722K, committed 13888K, reserved 1114112K - class space used 1603K, committed 1664K, reserved 1048576K -} -Event: 1.392 GC heap before -{Heap before GC invocations=3 (full 0): - garbage-first heap total 606208K, used 68437K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 7 young (57344K), 1 survivors (8192K) - Metaspace used 21201K, committed 21504K, reserved 1114112K - class space used 2676K, committed 2816K, reserved 1048576K -} -Event: 1.395 GC heap after -{Heap after GC invocations=4 (full 0): - garbage-first heap total 606208K, used 31119K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 21201K, committed 21504K, reserved 1114112K - class space used 2676K, committed 2816K, reserved 1048576K -} -Event: 2.847 GC heap before -{Heap before GC invocations=5 (full 0): - garbage-first heap total 196608K, used 137615K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 14 young (114688K), 1 survivors (8192K) - Metaspace used 32674K, committed 33088K, reserved 1114112K - class space used 4093K, committed 4288K, reserved 1048576K -} -Event: 2.861 GC heap after -{Heap after GC invocations=6 (full 0): - garbage-first heap total 196608K, used 32785K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 32674K, committed 33088K, reserved 1114112K - class space used 4093K, committed 4288K, reserved 1048576K -} -Event: 2.927 GC heap before -{Heap before GC invocations=6 (full 0): - garbage-first heap total 196608K, used 40977K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 1 survivors (8192K) - Metaspace used 34086K, committed 34432K, reserved 1114112K - class space used 4246K, committed 4416K, reserved 1048576K -} -Event: 2.931 GC heap after -{Heap after GC invocations=7 (full 0): - garbage-first heap total 196608K, used 33192K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 34086K, committed 34432K, reserved 1114112K - class space used 4246K, committed 4416K, reserved 1048576K -} -Event: 3.207 GC heap before -{Heap before GC invocations=7 (full 0): - garbage-first heap total 196608K, used 41384K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 4 young (32768K), 1 survivors (8192K) - Metaspace used 35986K, committed 36288K, reserved 1114112K - class space used 4497K, committed 4672K, reserved 1048576K -} -Event: 3.213 GC heap after -{Heap after GC invocations=8 (full 0): - garbage-first heap total 196608K, used 33908K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 35986K, committed 36288K, reserved 1114112K - class space used 4497K, committed 4672K, reserved 1048576K -} -Event: 4.154 GC heap before -{Heap before GC invocations=9 (full 0): - garbage-first heap total 196608K, used 115828K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 12 young (98304K), 1 survivors (8192K) - Metaspace used 45522K, committed 45952K, reserved 1114112K - class space used 5884K, committed 6080K, reserved 1048576K -} -Event: 4.157 GC heap after -{Heap after GC invocations=10 (full 0): - garbage-first heap total 262144K, used 37091K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 45522K, committed 45952K, reserved 1114112K - class space used 5884K, committed 6080K, reserved 1048576K -} -Event: 4.268 GC heap before -{Heap before GC invocations=10 (full 0): - garbage-first heap total 262144K, used 45283K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 1 survivors (8192K) - Metaspace used 46797K, committed 47168K, reserved 1114112K - class space used 6085K, committed 6272K, reserved 1048576K -} -Event: 4.273 GC heap after -{Heap after GC invocations=11 (full 0): - garbage-first heap total 262144K, used 37205K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 46797K, committed 47168K, reserved 1114112K - class space used 6085K, committed 6272K, reserved 1048576K -} -Event: 6.516 GC heap before -{Heap before GC invocations=11 (full 0): - garbage-first heap total 262144K, used 176469K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 18 young (147456K), 1 survivors (8192K) - Metaspace used 55389K, committed 55808K, reserved 1114112K - class space used 7288K, committed 7488K, reserved 1048576K -} -Event: 6.521 GC heap after -{Heap after GC invocations=12 (full 0): - garbage-first heap total 262144K, used 45059K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 2 survivors (16384K) - Metaspace used 55389K, committed 55808K, reserved 1114112K - class space used 7288K, committed 7488K, reserved 1048576K -} -Event: 8.053 GC heap before -{Heap before GC invocations=12 (full 0): - garbage-first heap total 262144K, used 135171K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 15 young (122880K), 2 survivors (16384K) - Metaspace used 60370K, committed 60800K, reserved 1114112K - class space used 7985K, committed 8192K, reserved 1048576K -} -Event: 8.065 GC heap after -{Heap after GC invocations=13 (full 0): - garbage-first heap total 262144K, used 51496K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 3 young (24576K), 3 survivors (24576K) - Metaspace used 60370K, committed 60800K, reserved 1114112K - class space used 7985K, committed 8192K, reserved 1048576K -} - -Dll operation events (11 events): -Event: 0.007 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjava.dylib -Event: 0.007 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libzip.dylib -Event: 0.078 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libinstrument.dylib -Event: 0.081 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnio.dylib -Event: 0.084 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnet.dylib -Event: 0.124 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjimage.dylib -Event: 0.134 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libzip.dylib -Event: 0.211 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement.dylib -Event: 0.216 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement_ext.dylib -Event: 0.319 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libextnet.dylib -Event: 6.751 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libverify.dylib - -Deoptimization events (20 events): -Event: 9.084 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56ea28 sp=0x000000016f37db60 -Event: 9.084 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d800 mode 1 -Event: 9.084 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56dcbc sp=0x000000016f37dc30 -Event: 9.084 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d900 mode 1 -Event: 9.085 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56ea28 sp=0x000000016f37db60 -Event: 9.085 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d800 mode 1 -Event: 9.085 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56dcbc sp=0x000000016f37dc30 -Event: 9.085 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d900 mode 1 -Event: 9.104 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56ea28 sp=0x000000016f37db80 -Event: 9.104 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d820 mode 1 -Event: 9.104 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56dcbc sp=0x000000016f37dc50 -Event: 9.104 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d920 mode 1 -Event: 9.105 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56ea28 sp=0x000000016f37db60 -Event: 9.105 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d800 mode 1 -Event: 9.105 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56dcbc sp=0x000000016f37dc30 -Event: 9.105 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d900 mode 1 -Event: 9.106 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56ea28 sp=0x000000016f37db80 -Event: 9.106 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d820 mode 1 -Event: 9.106 Thread 0x000000010b808a00 DEOPT PACKING pc=0x000000010c56dcbc sp=0x000000016f37dc50 -Event: 9.106 Thread 0x000000010b808a00 DEOPT UNPACKING pc=0x000000010c14777c sp=0x000000016f37d920 mode 1 - -Classes unloaded (0 events): -No events - -Classes redefined (1 events): -Event: 0.114 Thread 0x000000012b8059d0 redefined class name=java.lang.Throwable, count=1 - -Internal exceptions (20 events): -Event: 6.369 Thread 0x000000010b808a00 Exception (0x00000005c61a56a8) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 6.370 Thread 0x000000010b808a00 Exception (0x00000005c61ac0f8) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 6.371 Thread 0x000000010b808a00 Exception (0x00000005c61b00f0) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 6.388 Thread 0x000000012b45ba00 Exception (0x00000005c7a137e0) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 6.404 Thread 0x000000010b808a00 Exception (0x00000005c6294068) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 6.891 Thread 0x000000012b45ba00 Exception (0x00000005cbfd3b50) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 7.393 Thread 0x000000012b45ba00 Exception (0x00000005cbfe0578) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 7.899 Thread 0x000000012b45ba00 Exception (0x00000005c9409f48) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 8.401 Thread 0x000000012b45ba00 Exception (0x00000005e02167a0) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 8.927 Thread 0x000000012b45ba00 Exception (0x00000005ccc28338) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 8.948 Thread 0x000000010b808a00 Exception (0x00000005ccc21b10) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 8.948 Thread 0x000000010b808a00 Exception (0x00000005ccc26808) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 8.949 Thread 0x000000010b808a00 Exception (0x00000005ccc3f340) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 8.949 Thread 0x000000010b808a00 Exception (0x00000005ccc4b0d8) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 9.084 Thread 0x000000010b808a00 Exception (0x00000005cc19f8f0) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 9.085 Thread 0x000000010b808a00 Exception (0x00000005cc1a9e48) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 9.105 Thread 0x000000010b808a00 Exception (0x00000005cc24dc60) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 9.105 Thread 0x000000010b808a00 Exception (0x00000005cc2577d0) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 9.106 Thread 0x000000010b808a00 Exception (0x00000005cc2624f8) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 9.126 Thread 0x000000011ebea000 Exception (0x00000005cc5769a0) -thrown [src/hotspot/share/prims/jni.cpp, line 516] - -VM Operations (20 events): -Event: 8.053 Executing VM operation: CollectForMetadataAllocation -Event: 8.070 Executing VM operation: CollectForMetadataAllocation done -Event: 8.080 Executing VM operation: G1PauseRemark -Event: 8.084 Executing VM operation: G1PauseRemark done -Event: 8.088 Executing VM operation: G1PauseCleanup -Event: 8.088 Executing VM operation: G1PauseCleanup done -Event: 8.450 Executing VM operation: HandshakeAllThreads -Event: 8.450 Executing VM operation: HandshakeAllThreads done -Event: 8.461 Executing VM operation: HandshakeAllThreads -Event: 8.462 Executing VM operation: HandshakeAllThreads done -Event: 8.462 Executing VM operation: HandshakeAllThreads -Event: 8.462 Executing VM operation: HandshakeAllThreads done -Event: 8.957 Executing VM operation: HandshakeAllThreads -Event: 8.957 Executing VM operation: HandshakeAllThreads done -Event: 8.964 Executing VM operation: HandshakeAllThreads -Event: 8.964 Executing VM operation: HandshakeAllThreads done -Event: 8.980 Executing VM operation: HandshakeAllThreads -Event: 8.980 Executing VM operation: HandshakeAllThreads done -Event: 9.027 Executing VM operation: ICBufferFull -Event: 9.033 Executing VM operation: ICBufferFull done - -Events (20 events): -Event: 9.126 loading class java/net/SocksSocketImpl$3 done -Event: 9.126 loading class sun/net/util/SocketExceptions -Event: 9.126 loading class sun/net/util/SocketExceptions done -Event: 9.127 Thread 0x000000011f24c800 Thread added: 0x000000011f24c800 -Event: 9.127 Protecting memory [0x000000032ab00000,0x000000032ab0c000] with protection modes 0 -Event: 9.127 loading class java/lang/Throwable$WrappedPrintWriter -Event: 9.127 loading class java/lang/Throwable$WrappedPrintWriter done -Event: 9.128 loading class com/intellij/rt/debugger/agent/CaptureStorage$9 -Event: 9.128 loading class com/intellij/rt/debugger/agent/CaptureStorage$Callable -Event: 9.128 loading class com/intellij/rt/debugger/agent/CaptureStorage$Callable done -Event: 9.128 loading class com/intellij/rt/debugger/agent/CaptureStorage$9 done -Event: 9.128 loading class jdk/internal/loader/BootLoader$PackageHelper$1 -Event: 9.128 loading class jdk/internal/loader/BootLoader$PackageHelper$1 done -Event: 9.128 loading class jdk/internal/loader/BootLoader$PackageHelper$2 -Event: 9.128 loading class jdk/internal/loader/BootLoader$PackageHelper$2 done -Event: 9.128 loading class java/util/jar/JarInputStream -Event: 9.128 loading class java/util/zip/ZipInputStream -Event: 9.129 loading class java/util/zip/ZipInputStream done -Event: 9.129 loading class java/util/jar/JarInputStream done -Event: 9.129 loading class com/intellij/rt/debugger/agent/CaptureStorage$StackData - - -Dynamic libraries: -0x0000000100d44000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjli.dylib -0x0000000196c18000 /usr/lib/libz.1.dylib -0x0000000196cce000 /usr/lib/libSystem.B.dylib -0x0000000196cc8000 /usr/lib/system/libcache.dylib -0x0000000196c83000 /usr/lib/system/libcommonCrypto.dylib -0x0000000196cae000 /usr/lib/system/libcompiler_rt.dylib -0x0000000196ca3000 /usr/lib/system/libcopyfile.dylib -0x0000000186bb6000 /usr/lib/system/libcorecrypto.dylib -0x0000000186cb6000 /usr/lib/system/libdispatch.dylib -0x0000000186a53000 /usr/lib/system/libdyld.dylib -0x0000000196cbe000 /usr/lib/system/libkeymgr.dylib -0x0000000196c66000 /usr/lib/system/libmacho.dylib -0x0000000195ef9000 /usr/lib/system/libquarantine.dylib -0x0000000196cbb000 /usr/lib/system/libremovefile.dylib -0x000000018d629000 /usr/lib/system/libsystem_asl.dylib -0x0000000186b3c000 /usr/lib/system/libsystem_blocks.dylib -0x0000000186d01000 /usr/lib/system/libsystem_c.dylib -0x0000000196cb2000 /usr/lib/system/libsystem_collections.dylib -0x0000000194899000 /usr/lib/system/libsystem_configuration.dylib -0x0000000193487000 /usr/lib/system/libsystem_containermanager.dylib -0x0000000196698000 /usr/lib/system/libsystem_coreservices.dylib -0x000000018ae50000 /usr/lib/system/libsystem_darwin.dylib -0x000000028c8a4000 /usr/lib/system/libsystem_darwindirectory.dylib -0x0000000196cbf000 /usr/lib/system/libsystem_dnssd.dylib -0x000000028c8a8000 /usr/lib/system/libsystem_eligibility.dylib -0x0000000186cfe000 /usr/lib/system/libsystem_featureflags.dylib -0x0000000186e83000 /usr/lib/system/libsystem_info.dylib -0x0000000196c27000 /usr/lib/system/libsystem_m.dylib -0x0000000186c65000 /usr/lib/system/libsystem_malloc.dylib -0x000000018d58c000 /usr/lib/system/libsystem_networkextension.dylib -0x000000018b2bb000 /usr/lib/system/libsystem_notify.dylib -0x000000019489e000 /usr/lib/system/libsystem_sandbox.dylib -0x000000028c8b3000 /usr/lib/system/libsystem_sanitizers.dylib -0x0000000196cb7000 /usr/lib/system/libsystem_secinit.dylib -0x0000000186e2f000 /usr/lib/system/libsystem_kernel.dylib -0x0000000186e7a000 /usr/lib/system/libsystem_platform.dylib -0x0000000186e6d000 /usr/lib/system/libsystem_pthread.dylib -0x000000018f1e2000 /usr/lib/system/libsystem_symptoms.dylib -0x0000000186b95000 /usr/lib/system/libsystem_trace.dylib -0x000000028c8bb000 /usr/lib/system/libsystem_trial.dylib -0x0000000196c91000 /usr/lib/system/libunwind.dylib -0x0000000186b40000 /usr/lib/system/libxpc.dylib -0x0000000186a00000 /usr/lib/libobjc.A.dylib -0x0000000186eb3000 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation -0x000000019a5c3000 /usr/lib/swift/libswiftCore.dylib -0x0000000186e14000 /usr/lib/libc++abi.dylib -0x000000028ac91000 /usr/lib/libRosetta.dylib -0x0000000186d83000 /usr/lib/libc++.1.dylib -0x0000000188722000 /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation -0x00000001a41a3000 /usr/lib/swift/libswiftObjectiveC.dylib -0x000000028c10d000 /usr/lib/libswiftPrespecialized.dylib -0x0000000188391000 /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration -0x0000000191703000 /System/Library/PrivateFrameworks/CoreAutoLayout.framework/Versions/A/CoreAutoLayout -0x0000000196cd0000 /usr/lib/libfakelink.dylib -0x0000000196f79000 /usr/lib/libcompression.dylib -0x000000018d1d6000 /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork -0x0000000190b34000 /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration -0x0000000196d23000 /usr/lib/libarchive.2.dylib -0x0000000190a39000 /usr/lib/libDiagnosticMessagesClient.dylib -0x000000018ab7a000 /usr/lib/libicucore.A.dylib -0x000000019174c000 /usr/lib/libxml2.2.dylib -0x000000019f452000 /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices -0x00000001948ac000 /usr/lib/liblangid.dylib -0x000000018b1d2000 /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit -0x000000019d0c4000 /System/Library/Frameworks/Combine.framework/Versions/A/Combine -0x000000023fff3000 /System/Library/PrivateFrameworks/CollectionsInternal.framework/Versions/A/CollectionsInternal -0x000000026c039000 /System/Library/PrivateFrameworks/ReflectionInternal.framework/Versions/A/ReflectionInternal -0x000000026cf8d000 /System/Library/PrivateFrameworks/RuntimeInternal.framework/Versions/A/RuntimeInternal -0x0000000196cd2000 /System/Library/PrivateFrameworks/SoftLinking.framework/Versions/A/SoftLinking -0x00000001b488c000 /usr/lib/swift/libswiftCoreFoundation.dylib -0x00000001b164f000 /usr/lib/swift/libswiftDarwin.dylib -0x00000001a11c9000 /usr/lib/swift/libswiftDispatch.dylib -0x00000001b48ed000 /usr/lib/swift/libswiftIOKit.dylib -0x000000028c550000 /usr/lib/swift/libswiftSystem.dylib -0x00000001b489f000 /usr/lib/swift/libswiftXPC.dylib -0x000000028c582000 /usr/lib/swift/libswift_Builtin_float.dylib -0x000000028c583000 /usr/lib/swift/libswift_Concurrency.dylib -0x000000028c60f000 /usr/lib/swift/libswift_DarwinFoundation1.dylib -0x000000028c6b3000 /usr/lib/swift/libswift_StringProcessing.dylib -0x00000001a41a7000 /usr/lib/swift/libswiftos.dylib -0x000000018b152000 /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal -0x0000000196c9b000 /usr/lib/liboah.dylib -0x000000018a75a000 /System/Library/Frameworks/Security.framework/Versions/A/Security -0x00000001a35d7000 /System/Library/PrivateFrameworks/DiskImages.framework/Versions/A/DiskImages -0x00000001b10f3000 /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS -0x00000001916c8000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents -0x000000018ae5a000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore -0x0000000190aa8000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata -0x000000019669f000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices -0x0000000196e1b000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit -0x000000018f15c000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE -0x0000000187412000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices -0x0000000198224000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices -0x00000001916d5000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList -0x0000000196eae000 /usr/lib/libapple_nghttp2.dylib -0x000000018ed78000 /usr/lib/libsqlite3.dylib -0x000000018ef61000 /System/Library/Frameworks/Accounts.framework/Versions/A/Accounts -0x00000001a3819000 /System/Library/PrivateFrameworks/AppSupport.framework/Versions/A/AppSupport -0x00000001b363e000 /System/Library/Frameworks/AVFoundation.framework/Versions/A/AVFoundation -0x0000000190a09000 /System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics -0x000000018dc1c000 /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics -0x000000019b2fe000 /System/Library/Frameworks/GSS.framework/Versions/A/GSS -0x00000001996e6000 /System/Library/PrivateFrameworks/InternationalSupport.framework/Versions/A/InternationalSupport -0x000000018f0f0000 /System/Library/PrivateFrameworks/RunningBoardServices.framework/Versions/A/RunningBoardServices -0x00000001a412b000 /System/Library/PrivateFrameworks/StreamingZip.framework/Versions/A/StreamingZip -0x000000018d5a7000 /usr/lib/libenergytrace.dylib -0x000000018f1eb000 /System/Library/Frameworks/Network.framework/Versions/A/Network -0x0000000195f21000 /usr/lib/libbsm.0.dylib -0x0000000196c6a000 /usr/lib/system/libkxld.dylib -0x000000023b5c5000 /System/Library/PrivateFrameworks/AppleKeyStore.framework/Versions/A/AppleKeyStore -0x000000028a993000 /usr/lib/libCoreEntitlements.dylib -0x0000000260705000 /System/Library/PrivateFrameworks/MessageSecurity.framework/Versions/A/MessageSecurity -0x000000018ed5c000 /System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer -0x00000001a05d8000 /System/Library/PrivateFrameworks/SymptomDiagnosticReporter.framework/Versions/A/SymptomDiagnosticReporter -0x0000000198469000 /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport -0x000000018d5a9000 /usr/lib/libMobileGestalt.dylib -0x000000019667f000 /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression -0x0000000195f09000 /usr/lib/libcoretls.dylib -0x000000019829a000 /usr/lib/libcoretls_cfhelpers.dylib -0x0000000196f73000 /usr/lib/libpam.2.dylib -0x0000000198310000 /usr/lib/libxar.1.dylib -0x000000019829c000 /System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS -0x0000000278713000 /System/Library/PrivateFrameworks/SwiftASN1Internal.framework/Versions/A/SwiftASN1Internal -0x000000019831f000 /usr/lib/libutil.dylib -0x00000001948a7000 /System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo -0x0000000195bd0000 /System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/Versions/A/IOMobileFramebuffer -0x00000001934c0000 /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface -0x00000001a2f37000 /System/Library/PrivateFrameworks/CoreWiFi.framework/Versions/A/CoreWiFi -0x00000001b474c000 /System/Library/PrivateFrameworks/LoggingSupport.framework/Versions/A/LoggingSupport -0x000000019b361000 /System/Library/PrivateFrameworks/MobileAsset.framework/Versions/A/MobileAsset -0x00000001a05e8000 /System/Library/PrivateFrameworks/PowerLog.framework/Versions/A/PowerLog -0x00000001a1aaa000 /System/Library/PrivateFrameworks/Rapport.framework/Versions/A/Rapport -0x000000023416e000 /System/Library/Frameworks/SwiftData.framework/Versions/A/SwiftData -0x000000018cc0a000 /System/Library/Frameworks/UniformTypeIdentifiers.framework/Versions/A/UniformTypeIdentifiers -0x00000001918f5000 /System/Library/PrivateFrameworks/UserManagement.framework/Versions/A/UserManagement -0x000000018d0fd000 /usr/lib/libboringssl.dylib -0x000000018f1d0000 /usr/lib/libdns_services.dylib -0x00000001b3772000 /usr/lib/libquic.dylib -0x000000019a554000 /usr/lib/libusrtcp.dylib -0x000000023c47f000 /System/Library/PrivateFrameworks/AtomicsInternal.framework/Versions/A/AtomicsInternal -0x00000001dab32000 /System/Library/PrivateFrameworks/InternalSwiftProtobuf.framework/Versions/A/InternalSwiftProtobuf -0x000000028c3d7000 /usr/lib/swift/libswiftDistributed.dylib -0x000000028c400000 /usr/lib/swift/libswiftObservation.dylib -0x000000028c53c000 /usr/lib/swift/libswiftSynchronization.dylib -0x00000001948a5000 /System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary -0x000000023ccaf000 /System/Library/PrivateFrameworks/BiomeLibrary.framework/Versions/A/BiomeLibrary -0x00000001c38d5000 /System/Library/PrivateFrameworks/BiomeStreams.framework/Versions/A/BiomeStreams -0x00000001bf924000 /System/Library/PrivateFrameworks/BiomeFoundation.framework/Versions/A/BiomeFoundation -0x00000001c9b82000 /System/Library/PrivateFrameworks/BiomePubSub.framework/Versions/A/BiomePubSub -0x000000018e96e000 /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData -0x00000001a510e000 /System/Library/PrivateFrameworks/ProactiveSupport.framework/Versions/A/ProactiveSupport -0x00000002361cc000 /System/Library/Frameworks/_LocationEssentials.framework/Versions/A/_LocationEssentials -0x000000019827b000 /usr/lib/liblzma.5.dylib -0x000000019f6d1000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate -0x0000000195e02000 /System/Library/PrivateFrameworks/MobileKeyBag.framework/Versions/A/MobileKeyBag -0x00000001a3b2d000 /System/Library/PrivateFrameworks/InternationalTextSearch.framework/Versions/A/InternationalTextSearch -0x00000001bbdf7000 /System/Library/PrivateFrameworks/SoftwareUpdateCoreSupport.framework/Versions/A/SoftwareUpdateCoreSupport -0x00000001c4374000 /System/Library/PrivateFrameworks/SoftwareUpdateCoreConnect.framework/Versions/A/SoftwareUpdateCoreConnect -0x00000001a36d1000 /System/Library/PrivateFrameworks/RemoteServiceDiscovery.framework/Versions/A/RemoteServiceDiscovery -0x00000001bb9ce000 /System/Library/PrivateFrameworks/MSUDataAccessor.framework/Versions/A/MSUDataAccessor -0x00000001b691f000 /usr/lib/libbootpolicy.dylib -0x00000001a36e8000 /System/Library/PrivateFrameworks/RemoteXPC.framework/Versions/A/RemoteXPC -0x00000001c37a9000 /usr/lib/libFDR.dylib -0x00000001c9784000 /usr/lib/libamsupport.dylib -0x000000028ac89000 /usr/lib/libReverseProxyDevice.dylib -0x000000023ae33000 /System/Library/PrivateFrameworks/AppleDeviceQuerySupport.framework/Versions/A/AppleDeviceQuerySupport -0x00000001cc94e000 /usr/lib/libpartition2_dynamic.dylib -0x0000000196e8a000 /System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce -0x000000028a83e000 /usr/lib/libAppleArchive.dylib -0x000000019668b000 /usr/lib/libbz2.1.0.dylib -0x0000000190b3e000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage -0x000000019f42d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib -0x0000000198356000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib -0x0000000187916000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib -0x00000001a3b2c000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices -0x0000000191833000 /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo -0x000000018e372000 /System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync -0x0000000189d9a000 /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText -0x0000000193fb3000 /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO -0x000000019af0e000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS -0x000000018e51a000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices -0x00000001995dc000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore -0x000000019b2c7000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD -0x000000019b2c2000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy -0x000000019aee0000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis -0x000000018d665000 /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight -0x000000019398e000 /System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib -0x000000018effe000 /System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard -0x00000001a152a000 /System/Library/PrivateFrameworks/BoardServices.framework/Versions/A/BoardServices -0x00000001a33f9000 /System/Library/PrivateFrameworks/BackBoardServices.framework/Versions/A/BackBoardServices -0x000000023cbb4000 /System/Library/PrivateFrameworks/BackBoardHIDEventFoundation.framework/Versions/A/BackBoardHIDEventFoundation -0x00000001898b6000 /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay -0x0000000198f35000 /System/Library/Frameworks/VideoToolbox.framework/Versions/A/VideoToolbox -0x0000000196f71000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders -0x000000026af43000 /System/Library/PrivateFrameworks/ProDisplayLibrary.framework/Versions/A/ProDisplayLibrary -0x00000001a722e000 /System/Library/PrivateFrameworks/IOSurfaceAccelerator.framework/Versions/A/IOSurfaceAccelerator -0x00000001934e8000 /System/Library/Frameworks/Metal.framework/Versions/A/Metal -0x00000001934dd000 /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator -0x00000001937ec000 /System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia -0x000000018d641000 /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC -0x0000000198eed000 /System/Library/PrivateFrameworks/WatchdogClient.framework/Versions/A/WatchdogClient -0x0000000190f63000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore -0x0000000198eef000 /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport -0x00000001cc730000 /usr/lib/swift/libswiftAccelerate.dylib -0x00000001b486c000 /usr/lib/swift/libswiftCoreAudio.dylib -0x00000001d08c1000 /usr/lib/swift/libswiftCoreMedia.dylib -0x00000001c2862000 /usr/lib/swift/libswiftMetal.dylib -0x00000001d2074000 /usr/lib/swift/libswiftOSLog.dylib -0x00000001c7c88000 /usr/lib/swift/libswiftQuartzCore.dylib -0x00000001cc720000 /usr/lib/swift/libswiftUniformTypeIdentifiers.dylib -0x000000028c56a000 /usr/lib/swift/libswiftVideoToolbox.dylib -0x00000001b83e6000 /usr/lib/swift/libswiftsimd.dylib -0x00000001c9be3000 /System/Library/PrivateFrameworks/BiomeStorage.framework/Versions/A/BiomeStorage -0x00000002593f4000 /System/Library/PrivateFrameworks/IntelligencePlatformLibrary.framework/Versions/A/IntelligencePlatformLibrary -0x0000000269d07000 /System/Library/PrivateFrameworks/PoirotSchematizer.framework/Versions/A/PoirotSchematizer -0x000000023d56a000 /System/Library/PrivateFrameworks/BiomeSync.framework/Versions/A/BiomeSync -0x000000023cc95000 /System/Library/PrivateFrameworks/BiomeDSL.framework/Versions/A/BiomeDSL -0x00000001e2d3d000 /System/Library/PrivateFrameworks/FeatureFlags.framework/Versions/A/FeatureFlags -0x0000000269d75000 /System/Library/PrivateFrameworks/PoirotUDFs.framework/Versions/A/PoirotUDFs -0x000000028c612000 /usr/lib/swift/libswift_DarwinFoundation2.dylib -0x000000028c613000 /usr/lib/swift/libswift_DarwinFoundation3.dylib -0x00000001a1a9f000 /System/Library/PrivateFrameworks/CoreTime.framework/Versions/A/CoreTime -0x0000000196d08000 /usr/lib/libiconv.2.dylib -0x0000000196c65000 /usr/lib/libcharset.1.dylib -0x0000000269cca000 /System/Library/PrivateFrameworks/PoirotSQLite.framework/Versions/A/PoirotSQLite -0x000000028c614000 /usr/lib/swift/libswift_RegexParser.dylib -0x000000023eba0000 /System/Library/PrivateFrameworks/CascadeSets.framework/Versions/A/CascadeSets -0x000000019b4d8000 /System/Library/PrivateFrameworks/CorePhoneNumbers.framework/Versions/A/CorePhoneNumbers -0x0000000198ce7000 /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG -0x00000001986c0000 /usr/lib/libexpat.1.dylib -0x00000001994b2000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib -0x00000001994dd000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib -0x00000001995c5000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib -0x0000000198d2c000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib -0x00000001983d0000 /usr/lib/libate.dylib -0x000000019956c000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib -0x0000000199563000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib -0x000000024f044000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/libllvm-flatbuffers.dylib -0x0000000249aa3000 /System/Library/PrivateFrameworks/FramePacing.framework/Versions/A/FramePacing -0x000000022cbb3000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib -0x000000024abd1000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/libGPUCompilerUtils.dylib -0x00000001a15f7000 /System/Library/PrivateFrameworks/GraphicsServices.framework/Versions/A/GraphicsServices -0x000000022cbc1000 /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL -0x000000022cc12000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib -0x000000022cbd5000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib -0x000000022cda2000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib -0x000000022cbde000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib -0x000000022cbd2000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib -0x000000022cbbb000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib -0x000000019955e000 /System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler -0x000000019953e000 /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment -0x0000000199566000 /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay -0x00000002805c9000 /System/Library/PrivateFrameworks/VideoToolboxParavirtualizationSupport.framework/Versions/A/VideoToolboxParavirtualizationSupport -0x0000000198677000 /System/Library/PrivateFrameworks/AppleVA.framework/Versions/A/AppleVA -0x000000022ec3e000 /System/Library/Frameworks/ExtensionFoundation.framework/Versions/A/ExtensionFoundation -0x00000001995cb000 /System/Library/PrivateFrameworks/CMCaptureCore.framework/Versions/A/CMCaptureCore -0x0000000198951000 /usr/lib/libspindump.dylib -0x0000000189fc4000 /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio -0x0000000198944000 /System/Library/PrivateFrameworks/AppServerSupport.framework/Versions/A/AppServerSupport -0x000000019b2d0000 /System/Library/PrivateFrameworks/perfdata.framework/Versions/A/perfdata -0x00000001899d7000 /System/Library/PrivateFrameworks/AudioToolboxCore.framework/Versions/A/AudioToolboxCore -0x00000001937c2000 /System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk -0x000000019aec6000 /usr/lib/libAudioStatistics.dylib -0x00000001b3867000 /System/Library/PrivateFrameworks/SystemPolicy.framework/Versions/A/SystemPolicy -0x000000019b174000 /usr/lib/libSMC.dylib -0x00000001bb1dd000 /usr/lib/swift/libswiftCoreMIDI.dylib -0x00000001a651d000 /System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI -0x000000019948c000 /usr/lib/libAudioToolboxUtility.dylib -0x000000019b2de000 /usr/lib/libperfcheck.dylib -0x000000023c54e000 /System/Library/PrivateFrameworks/AudioAnalytics.framework/Versions/A/AudioAnalytics -0x00000001da81e000 /System/Library/Frameworks/OSLog.framework/Versions/A/OSLog -0x0000000265777000 /System/Library/PrivateFrameworks/OSEligibility.framework/Versions/A/OSEligibility -0x0000000198746000 /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices -0x0000000230025000 /System/Library/Frameworks/LightweightCodeRequirements.framework/Versions/A/LightweightCodeRequirements -0x00000001985c0000 /System/Library/PrivateFrameworks/PlugInKit.framework/Versions/A/PlugInKit -0x0000000195e1a000 /System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices -0x00000001986e5000 /System/Library/PrivateFrameworks/IconFoundation.framework/Versions/A/IconFoundation -0x0000000255f80000 /System/Library/PrivateFrameworks/IconRendering.framework/Versions/A/IconRendering -0x00000001913ca000 /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI -0x00000001942f4000 /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage -0x000000026d172000 /System/Library/PrivateFrameworks/SFSymbols.framework/Versions/A/SFSymbols -0x000000022eaf4000 /System/Library/Frameworks/DeveloperToolsSupport.framework/Versions/A/DeveloperToolsSupport -0x00000001ab7ca000 /System/Library/PrivateFrameworks/RenderBox.framework/Versions/A/RenderBox -0x0000000193f75000 /System/Library/PrivateFrameworks/CoreSVG.framework/Versions/A/CoreSVG -0x000000019964f000 /System/Library/PrivateFrameworks/TextureIO.framework/Versions/A/TextureIO -0x00000001b48ec000 /usr/lib/swift/libswiftCoreImage.dylib -0x00000001988f4000 /System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer -0x00000002499ae000 /System/Library/PrivateFrameworks/FontServices.framework/Versions/A/FontServices -0x0000000198904000 /System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG -0x0000000191379000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib -0x000000028b763000 /usr/lib/libhvf.dylib -0x0000000266404000 /System/Library/PrivateFrameworks/ParsingInternal.framework/Versions/A/ParsingInternal -0x00000002499b2000 /System/Library/PrivateFrameworks/FontServices.framework/libXTFontStaticRegistryData.dylib -0x00000001947df000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSCore.framework/Versions/A/MPSCore -0x00000001965ea000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSImage.framework/Versions/A/MPSImage -0x0000000195fa9000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork -0x00000001963e8000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix -0x0000000196200000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector -0x000000019641a000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNDArray.framework/Versions/A/MPSNDArray -0x0000000230eaa000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSFunctions.framework/Versions/A/MPSFunctions -0x0000000230e8b000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSBenchmarkLoop.framework/Versions/A/MPSBenchmarkLoop -0x0000000230ebe000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSHost.framework/Versions/A/MPSHost -0x000000018772d000 /System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools -0x00000001b9b0d000 /System/Library/PrivateFrameworks/IOAccelMemoryInfo.framework/Versions/A/IOAccelMemoryInfo -0x00000001c807b000 /System/Library/PrivateFrameworks/kperf.framework/Versions/A/kperf -0x00000001b4868000 /System/Library/PrivateFrameworks/GPURawCounter.framework/Versions/A/GPURawCounter -0x00000001a5299000 /System/Library/PrivateFrameworks/ASEProcessing.framework/Versions/A/ASEProcessing -0x00000001d618a000 /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication -0x00000002698b5000 /System/Library/PrivateFrameworks/PhotosensitivityProcessing.framework/Versions/A/PhotosensitivityProcessing -0x000000026d1f8000 /System/Library/PrivateFrameworks/SILManager.framework/Versions/A/SILManager -0x00000001a1943000 /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication -0x00000001b47db000 /System/Library/PrivateFrameworks/MallocStackLogging.framework/Versions/A/MallocStackLogging -0x00000001a1921000 /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols -0x00000001c67cc000 /System/Library/PrivateFrameworks/OSAnalytics.framework/Versions/A/OSAnalytics -0x0000000247709000 /System/Library/PrivateFrameworks/DeviceRecovery.framework/Versions/A/DeviceRecovery -0x000000027be51000 /System/Library/PrivateFrameworks/Tightbeam.framework/Versions/A/Tightbeam -0x00000001c2870000 /usr/lib/swift/libswiftCompression.dylib -0x00000001ccebd000 /System/Library/PrivateFrameworks/AFKUser.framework/Versions/A/AFKUser -0x0000000199597000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATSUI.framework/Versions/A/ATSUI -0x000000019ac6f000 /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox -0x0000000196a5c000 /System/Library/Frameworks/UserNotifications.framework/Versions/A/UserNotifications -0x00000001ba2a4000 /System/Library/PrivateFrameworks/SiriInstrumentation.framework/Versions/A/SiriInstrumentation -0x000000026f688000 /System/Library/PrivateFrameworks/SiriAnalytics.framework/Versions/A/SiriAnalytics -0x00000001b7a03000 /System/Library/PrivateFrameworks/FeedbackLogger.framework/Versions/A/FeedbackLogger -0x00000001d230d000 /usr/lib/swift/libswiftAVFoundation.dylib -0x000000027e67a000 /System/Library/PrivateFrameworks/UnifiedAssetFramework.framework/Versions/A/UnifiedAssetFramework -0x000000019ae45000 /System/Library/PrivateFrameworks/AudioSession.framework/Versions/A/AudioSession -0x0000000198805000 /System/Library/PrivateFrameworks/MediaExperience.framework/Versions/A/MediaExperience -0x000000019ac19000 /System/Library/PrivateFrameworks/AudioSession.framework/libSessionUtility.dylib -0x00000001a04cd000 /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth -0x0000000195c8d000 /System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils -0x00000001ac4fe000 /System/Library/PrivateFrameworks/HID.framework/Versions/A/HID -0x00000002465fa000 /System/Library/PrivateFrameworks/CoreUtilsExtras.framework/Versions/A/CoreUtilsExtras -0x0000000255ed5000 /System/Library/PrivateFrameworks/IO80211.framework/Versions/A/IO80211 -0x000000019ce10000 /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth -0x000000028c41f000 /usr/lib/swift/libswiftRegexBuilder.dylib -0x0000000198460000 /usr/lib/libIOReport.dylib -0x00000001e2dc2000 /System/Library/PrivateFrameworks/WiFiPeerToPeer.framework/Versions/A/WiFiPeerToPeer -0x0000000195e29000 /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation -0x000000023ec54000 /System/Library/PrivateFrameworks/Centauri.framework/Versions/A/Centauri -0x0000000188111000 /System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon -0x000000028bbb3000 /usr/lib/libmrc.dylib -0x0000000255f40000 /System/Library/PrivateFrameworks/IPConfiguration.framework/Versions/A/IPConfiguration -0x00000001d6961000 /System/Library/PrivateFrameworks/Netrb.framework/Versions/A/Netrb -0x00000001a1450000 /System/Library/PrivateFrameworks/FrontBoardServices.framework/Versions/A/FrontBoardServices -0x0000000195f92000 /usr/lib/libgermantok.dylib -0x00000001949ce000 /System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData -0x00000001a06d6000 /System/Library/PrivateFrameworks/MediaKit.framework/Versions/A/MediaKit -0x00000001a0624000 /System/Library/Frameworks/DiscRecording.framework/Versions/A/DiscRecording -0x00000001986db000 /usr/lib/libheimdal-asn1.dylib -0x00000001a4101000 /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit -0x0000000191690000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory -0x000000019169e000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory -0x000000019d1b8000 /System/Library/PrivateFrameworks/GeoServices.framework/Versions/A/GeoServices -0x000000019abdf000 /System/Library/PrivateFrameworks/LocationSupport.framework/Versions/A/LocationSupport -0x0000000252bfe000 /System/Library/PrivateFrameworks/GeoServicesCore.framework/Versions/A/GeoServicesCore -0x00000001ad402000 /System/Library/PrivateFrameworks/PhoneNumbers.framework/Versions/A/PhoneNumbers -0x000000025b386000 /System/Library/PrivateFrameworks/LocationLogEncryption.framework/Versions/A/LocationLogEncryption -0x000000022d12e000 /System/Library/Frameworks/AVFAudio.framework/Versions/A/AVFAudio -0x000000022d272000 /System/Library/Frameworks/AVRouting.framework/Versions/A/AVRouting -0x00000001ad51a000 /usr/lib/libAccessibility.dylib -0x0000000259d70000 /System/Library/PrivateFrameworks/IsolatedCoreAudioClient.framework/Versions/A/IsolatedCoreAudioClient -0x00000002423ee000 /System/Library/PrivateFrameworks/CoreAudioOrchestration.framework/Versions/A/CoreAudioOrchestration -0x0000000199ab3000 /System/Library/Frameworks/MediaToolbox.framework/Versions/A/MediaToolbox -0x00000001a07fc000 /System/Library/PrivateFrameworks/CoreAVCHD.framework/Versions/A/CoreAVCHD -0x000000019f720000 /System/Library/Frameworks/MediaAccessibility.framework/Versions/A/MediaAccessibility -0x00000001a07f8000 /System/Library/PrivateFrameworks/Mangrove.framework/Versions/A/Mangrove -0x000000023e290000 /System/Library/PrivateFrameworks/CMPhoto.framework/Versions/A/CMPhoto -0x00000001a0fc5000 /System/Library/Frameworks/CoreTelephony.framework/Versions/A/CoreTelephony -0x00000001a07eb000 /System/Library/PrivateFrameworks/CoreAUC.framework/Versions/A/CoreAUC -0x000000023b3f6000 /System/Library/PrivateFrameworks/AppleJPEGXL.framework/Versions/A/AppleJPEGXL -0x000000019b4e8000 /usr/lib/libTelephonyUtilDynamic.dylib -0x00000001dd93f000 /System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit -0x00000001a40fc000 /System/Library/PrivateFrameworks/CryptoKitCBridging.framework/Versions/A/CryptoKitCBridging -0x00000001a1609000 /System/Library/Frameworks/CryptoTokenKit.framework/Versions/A/CryptoTokenKit -0x0000000247179000 /System/Library/PrivateFrameworks/Dendrite.framework/Versions/A/Dendrite -0x00000001b440c000 /System/Library/Frameworks/NaturalLanguage.framework/Versions/A/NaturalLanguage -0x0000000252901000 /System/Library/PrivateFrameworks/GenerativeModels.framework/Versions/A/GenerativeModels -0x00000001e2d49000 /usr/lib/swift/libswiftNaturalLanguage.dylib -0x000000023bf6d000 /System/Library/PrivateFrameworks/AppleMobileFileIntegrity.framework/Versions/A/AppleMobileFileIntegrity -0x000000028ad01000 /usr/lib/libTLE.dylib -0x00000001b480d000 /usr/lib/libmis.dylib -0x00000001ec491000 /System/Library/PrivateFrameworks/ConfigProfileHelper.framework/Versions/A/ConfigProfileHelper -0x00000001a428b000 /System/Library/PrivateFrameworks/Espresso.framework/Versions/A/Espresso -0x0000000191e20000 /System/Library/Frameworks/CoreML.framework/Versions/A/CoreML -0x00000001e0bf5000 /usr/lib/libedit.3.dylib -0x0000000229f3c000 /System/Library/PrivateFrameworks/ANECompiler.framework/Versions/A/ANECompiler -0x00000001a6361000 /System/Library/PrivateFrameworks/AppleNeuralEngine.framework/Versions/A/AppleNeuralEngine -0x000000025b4a4000 /System/Library/PrivateFrameworks/MIL.framework/Versions/A/MIL -0x0000000230ec4000 /System/Library/Frameworks/MetalPerformanceShadersGraph.framework/Versions/A/MetalPerformanceShadersGraph -0x000000025bc13000 /System/Library/PrivateFrameworks/MLCompilerServices.framework/Versions/A/MLCompilerServices -0x00000001a50dd000 /System/Library/PrivateFrameworks/ANEServices.framework/Versions/A/ANEServices -0x00000001b9ad0000 /usr/lib/libncurses.5.4.dylib -0x000000018b2ce000 /usr/lib/libsandbox.1.dylib -0x0000000198601000 /usr/lib/libMatch.1.dylib -0x00000002654f9000 /System/Library/PrivateFrameworks/ODIE.framework/Versions/A/ODIE -0x000000025e8a0000 /System/Library/PrivateFrameworks/MLModelAsset.framework/Versions/A/MLModelAsset -0x000000025bbb9000 /System/Library/PrivateFrameworks/MLCompilerRuntime.framework/Versions/A/MLCompilerRuntime -0x0000000196255000 /System/Library/Frameworks/MLCompute.framework/Versions/A/MLCompute -0x000000025bb3b000 /System/Library/PrivateFrameworks/MLAssetIO.framework/Versions/A/MLAssetIO -0x000000028c3f1000 /usr/lib/swift/libswiftMLCompute.dylib -0x00000001a11e0000 /System/Library/PrivateFrameworks/AVFCore.framework/Versions/A/AVFCore -0x00000001aae1b000 /System/Library/PrivateFrameworks/AVFCapture.framework/Versions/A/AVFCapture -0x000000023e087000 /System/Library/PrivateFrameworks/CMImaging.framework/Versions/A/CMImaging -0x00000001ab05d000 /System/Library/PrivateFrameworks/Quagga.framework/Versions/A/Quagga -0x00000001ab18e000 /System/Library/PrivateFrameworks/CMCapture.framework/Versions/A/CMCapture -0x000000019b071000 /System/Library/Frameworks/CoreMediaIO.framework/Versions/A/CoreMediaIO -0x000000023dfc2000 /System/Library/PrivateFrameworks/CMCaptureDevice.framework/Versions/A/CMCaptureDevice -0x0000000198a3d000 /System/Library/PrivateFrameworks/CoreBrightness.framework/Versions/A/CoreBrightness -0x000000023f14b000 /System/Library/PrivateFrameworks/CinematicFraming.framework/Versions/A/CinematicFraming -0x00000002619dd000 /System/Library/PrivateFrameworks/ModelManagerServices.framework/Versions/A/ModelManagerServices -0x00000001cf375000 /System/Library/PrivateFrameworks/CPMS.framework/Versions/A/CPMS -0x0000000279581000 /System/Library/PrivateFrameworks/SystemStatus.framework/Versions/A/SystemStatus -0x00000001b323c000 /System/Library/Frameworks/CoreMotion.framework/Versions/A/CoreMotion -0x00000001c3854000 /System/Library/PrivateFrameworks/TimeSync.framework/Versions/A/TimeSync -0x0000000247b41000 /System/Library/PrivateFrameworks/DistributedSensing.framework/Versions/A/DistributedSensing -0x00000001bec33000 /System/Library/PrivateFrameworks/MobileBluetooth.framework/Versions/A/MobileBluetooth -0x00000001c5518000 /System/Library/PrivateFrameworks/IOKitten.framework/Versions/A/IOKitten -0x000000023b270000 /System/Library/PrivateFrameworks/AppleIntelligenceReporting.framework/Versions/A/AppleIntelligenceReporting -0x0000000195b9c000 /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji -0x0000000188425000 /usr/lib/libCRFSuite.dylib -0x0000000189706000 /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling -0x00000001948ae000 /System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP -0x000000018e683000 /System/Library/PrivateFrameworks/Montreal.framework/Versions/A/Montreal -0x0000000196d10000 /usr/lib/libcmph.dylib -0x0000000195f33000 /usr/lib/libmecab.dylib -0x0000000196e81000 /usr/lib/libThaiTokenizer.dylib -0x00000002529e3000 /System/Library/PrivateFrameworks/GenerativeModelsFoundation.framework/Versions/A/GenerativeModelsFoundation -0x000000027c356000 /System/Library/PrivateFrameworks/TokenGeneration.framework/Versions/A/TokenGeneration -0x00000002527b7000 /System/Library/PrivateFrameworks/GenerativeFunctions.framework/Versions/A/GenerativeFunctions -0x0000000252805000 /System/Library/PrivateFrameworks/GenerativeFunctionsFoundation.framework/Versions/A/GenerativeFunctionsFoundation -0x000000026169e000 /System/Library/PrivateFrameworks/ModelCatalog.framework/Versions/A/ModelCatalog -0x000000026e8a2000 /System/Library/PrivateFrameworks/SensitiveContentAnalysisML.framework/Versions/A/SensitiveContentAnalysisML -0x000000025289b000 /System/Library/PrivateFrameworks/GenerativeFunctionsInstrumentation.framework/Versions/A/GenerativeFunctionsInstrumentation -0x000000026b6cb000 /System/Library/PrivateFrameworks/PromptKit.framework/Versions/A/PromptKit -0x000000026b0e1000 /System/Library/PrivateFrameworks/ProactiveDaemonSupport.framework/Versions/A/ProactiveDaemonSupport -0x000000027c58e000 /System/Library/PrivateFrameworks/TokenGenerationCore.framework/Versions/A/TokenGenerationCore -0x00000001b52db000 /System/Library/PrivateFrameworks/Trial.framework/Versions/A/Trial -0x00000001b525c000 /System/Library/PrivateFrameworks/TrialProto.framework/Versions/A/TrialProto -0x000000023ae9a000 /System/Library/PrivateFrameworks/AppleFlatBuffers.framework/Versions/A/AppleFlatBuffers -0x000000026eb72000 /System/Library/PrivateFrameworks/SentencePieceInternal.framework/Versions/A/SentencePieceInternal -0x000000019f77a000 /System/Library/Frameworks/Vision.framework/Versions/A/Vision -0x0000000246298000 /System/Library/PrivateFrameworks/CoreSceneUnderstanding.framework/Versions/A/CoreSceneUnderstanding -0x00000002811df000 /System/Library/PrivateFrameworks/VisionCore.framework/Versions/A/VisionCore -0x00000001999f0000 /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore -0x00000001bdbc1000 /System/Library/Frameworks/Vision.framework/libfaceCore.dylib -0x00000001be6db000 /System/Library/PrivateFrameworks/Futhark.framework/Versions/A/Futhark -0x00000001c2629000 /System/Library/PrivateFrameworks/InertiaCam.framework/Versions/A/InertiaCam -0x00000001be468000 /System/Library/PrivateFrameworks/TextRecognition.framework/Versions/A/TextRecognition -0x000000022eadd000 /System/Library/Frameworks/DataDetection.framework/Versions/A/DataDetection -0x00000001b8674000 /System/Library/PrivateFrameworks/TextInput.framework/Versions/A/TextInput -0x000000019849e000 /System/Library/PrivateFrameworks/CVNLP.framework/Versions/A/CVNLP -0x00000001dad09000 /System/Library/PrivateFrameworks/HIDDisplay.framework/Versions/A/HIDDisplay -0x000000019b255000 /usr/lib/libcups.2.dylib -0x000000019b2ec000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos -0x000000019af5c000 /usr/lib/libresolv.9.dylib -0x0000000198958000 /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal -0x00000001a4100000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Libraries/libHeimdalProxy.dylib -0x000000019b350000 /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth -0x00000001ad40e000 /System/Library/PrivateFrameworks/AXCoreUtilities.framework/Versions/A/AXCoreUtilities -0x00000001bda0a000 /System/Library/PrivateFrameworks/AttributeGraph.framework/Versions/A/AttributeGraph -0x000000028a801000 /usr/lib/libAXSafeCategoryBundle.dylib -0x0000000235252000 /System/Library/Frameworks/TabularData.framework/Versions/A/TabularData -0x000000023c11d000 /System/Library/PrivateFrameworks/ArgumentParserInternal.framework/Versions/A/ArgumentParserInternal -0x0000000195a5e000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib -0x0000000197053000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib -0x0000000195f95000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib -0x0000000196ec7000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib -0x000000019704e000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib -0x00000001949d5000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib -0x0000000188221000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib -0x000000022e5c2000 /System/Library/Frameworks/CoreTransferable.framework/Versions/A/CoreTransferable -0x000000019b2b4000 /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth -0x00000001918b4000 /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport -0x000000018ca51000 /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation -0x0000000195efd000 /usr/lib/libCheckFix.dylib -0x0000000190a3b000 /System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities -0x00000002569c7000 /System/Library/PrivateFrameworks/InstalledContentLibrary.framework/Versions/A/InstalledContentLibrary -0x000000018b192000 /System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore -0x00000001916ff000 /usr/lib/libapp_launch_measurement.dylib -0x00000001c8192000 /System/Library/PrivateFrameworks/MobileSystemServices.framework/Versions/A/MobileSystemServices -0x0000000198323000 /usr/lib/libxslt.1.dylib -0x0000000195ebc000 /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement -0x00000001a3792000 /usr/lib/libcurl.4.dylib -0x000000028b517000 /usr/lib/libcrypto.46.dylib -0x000000028c09a000 /usr/lib/libssl.48.dylib -0x00000001a346c000 /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP -0x00000001a34a8000 /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent -0x000000019af79000 /usr/lib/libsasl2.2.dylib -0x00000001a6710000 /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa -0x000000018b32d000 /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit -0x000000023ffce000 /System/Library/PrivateFrameworks/CollectionViewCore.framework/Versions/A/CollectionViewCore -0x0000000193f6f000 /System/Library/PrivateFrameworks/XCTTargetBootstrap.framework/Versions/A/XCTTargetBootstrap -0x0000000199a42000 /System/Library/PrivateFrameworks/UserActivity.framework/Versions/A/UserActivity -0x0000000249ab0000 /System/Library/PrivateFrameworks/FrontBoard.framework/Versions/A/FrontBoard -0x000000027df9f000 /System/Library/PrivateFrameworks/UIIntelligenceSupport.framework/Versions/A/UIIntelligenceSupport -0x00000002342db000 /System/Library/Frameworks/SwiftUICore.framework/Versions/A/SwiftUICore -0x0000000284b4b000 /System/Library/PrivateFrameworks/WritingTools.framework/Versions/A/WritingTools -0x0000000283942000 /System/Library/PrivateFrameworks/WindowManagement.framework/Versions/A/WindowManagement -0x00000002497e0000 /System/Library/PrivateFrameworks/FocusEngine.framework/Versions/A/FocusEngine -0x00000002471e9000 /System/Library/PrivateFrameworks/DesignLibrary.framework/Versions/A/DesignLibrary -0x0000000193f5a000 /System/Library/PrivateFrameworks/DFRFoundation.framework/Versions/A/DFRFoundation -0x000000027eeec000 /System/Library/PrivateFrameworks/UpdateCycle.framework/Versions/A/UpdateCycle -0x0000000193c5e000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox -0x000000019f040000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition -0x0000000191686000 /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis -0x000000019f3d0000 /System/Library/Frameworks/Accessibility.framework/Versions/A/Accessibility -0x0000000235238000 /System/Library/Frameworks/Symbols.framework/Versions/A/Symbols -0x0000000252dac000 /System/Library/PrivateFrameworks/Gestures.framework/Versions/A/Gestures -0x000000028c4c2000 /usr/lib/swift/libswiftSpatial.dylib -0x00000001b164e000 /usr/lib/swift/libswiftCoreGraphics.dylib -0x000000019fe14000 /usr/lib/swift/libswiftFoundation.dylib -0x00000001ebe32000 /usr/lib/swift/libswiftSwiftOnoneSupport.dylib -0x000000028c748000 /usr/lib/swift/libswiftsys_time.dylib -0x00000001d699f000 /System/Library/PrivateFrameworks/CoreMaterial.framework/Versions/A/CoreMaterial -0x000000028acfe000 /usr/lib/libSpatial.dylib -0x000000028a71e000 /System/Library/SubFrameworks/UIUtilities.framework/Versions/A/UIUtilities -0x0000000102004000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/server/libjvm.dylib -0x0000000100db8000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjimage.dylib -0x0000000100e14000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjdwp.dylib -0x0000000100e5c000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjava.dylib -0x0000000100de8000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libinstrument.dylib -0x0000000100ed0000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libzip.dylib -0x000000028a7f3000 /usr/lib/i18n/libiconv_std.dylib -0x000000028a7e9000 /usr/lib/i18n/libUTF8.dylib -0x000000028a7f8000 /usr/lib/i18n/libmapper_none.dylib -0x0000000100f5c000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libdt_socket.dylib -0x0000000101058000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnio.dylib -0x000000010109c000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnet.dylib -0x0000000101038000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement.dylib -0x0000000101078000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement_ext.dylib -0x00000001010c0000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libextnet.dylib -0x0000000101200000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libverify.dylib - - -VM Arguments: -jvm_args: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50259,suspend=y,server=n -javaagent:/Users/liangxin/Library/Caches/JetBrains/IntelliJIdea2026.1/captureAgent/debugger-agent.jar=file:///var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/capture10140205674518191061.props -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Ddebugger.async.stack.trace.for.all.threads=true -Dfile.encoding=UTF-8 -java_command: org.springblade.desk.DeskApplication -java_class_path (initial): /Users/liangxin/Project/JAVA/tms-erp-api/blade-service/blade-desk/target/classes:/Users/liangxin/.m2/repository/org/springblade/blade-core-boot/4.10.0.BASE-SNAPSHOT/blade-core-boot-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/org/springblade/blade-core-context/4.10.0.BASE-SNAPSHOT/blade-core-context-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/org/springblade/blade-core-db/4.10.0.BASE-SNAPSHOT/blade-core-db-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-starter-jdbc/3.5.16/spring-boot-starter-jdbc-3.5.16.jar:/Users/liangxin/.m2/repository/com/zaxxer/HikariCP/6.3.3/HikariCP-6.3.3.jar:/Users/liangxin/.m2/repository/com/baomidou/mybatis-plus-spring-boot3-starter/3.5.16/mybatis-plus-spring-boot3-starter-3.5.16.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/3.5.16/spring-boot-autoconfigure-3.5.16.jar:/Users/liangxin/.m2/repository/com/alibaba/druid-spring-boot-3-starter/1.2.28/druid-spring-boot-3-starter-1.2.28.jar:/Users/liangxin/.m2/repository/com/mysql/mysql-connector-j/9.4.0/mysql-connector-j-9.4.0.jar:/Users/liangxin/.m2/repository/com/google/protobuf/protobuf-java/4.31.1/protobuf-java-4.31.1.jar:/Users/liangxin/.m2/repository/org/springblade/blade-core-secure/4.10.0.BASE-SNAPSHOT/blade-core-secure-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/org/springblade/blade-core-cloud/4.10.0.BASE-SNAPSHOT/blade-core-cloud-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/de/codecentric/spring-boot-admin-starter-client/3.5.9/spring-boot-admin-starter-client-3.5.9.jar:/Users/liangxin/.m2/repository/de/codecentric/spring-boot-admin-client/3.5.9/spring-boot-admin-client-3.5.9.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-starter-actuator/3.5.16/spring-boot-starter-actuator-3.5.16.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-actuator-autoconfigure/3.5.16/spring-boot-actuator-aut -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 3 {product} {ergonomic} - uint G1ConcRefinementThreads = 10 {product} {ergonomic} - size_t G1HeapRegionSize = 8388608 {product} {ergonomic} - uintx GCDrainStackTargetSize = 64 {product} {ergonomic} - size_t InitialHeapSize = 603979776 {product} {ergonomic} - bool ManagementServer = true {product} {command line} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MaxHeapSize = 9663676416 {product} {ergonomic} - size_t MaxNewSize = 5796528128 {product} {ergonomic} - size_t MinHeapDeltaBytes = 8388608 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonProfiledCodeHeapSize = 0 {pd product} {ergonomic} - bool ProfileInterpreter = false {pd product} {command line} - uintx ProfiledCodeHeapSize = 0 {pd product} {ergonomic} - size_t SoftMaxHeapSize = 9663676416 {manageable} {ergonomic} - intx TieredStopAtLevel = 1 {product} {command line} - bool UseCompressedClassPointers = true {product lp64_product} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - bool UseNUMA = false {product} {ergonomic} - bool UseNUMAInterleaving = false {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags - #1: stderr all=off uptime,level,tags - -Environment Variables: -JAVA_HOME=/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home -PATH=/Users/liangxin/ai-infra/.venv/bin:/Users/liangxin/.nacos/bin:/Applications/Docker.app/Contents/Resources/bin:/Users/liangxin/Library/pnpm:/opt/homebrew/opt/ruby@3.2/bin:/opt/homebrew/opt/openssl@3/bin:/opt/miniconda3/bin:/opt/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home/bin:/Users/liangxin/fvm/default/bin:/Applications/MAMP/bin/php/php8.1.13/bin:/opt/homebrew/opt/ruby@3.2/bin:/Users/liangxin/.nvm/versions/node/v20.18.3/bin:/Applications/apache-tomcat-9.0.78:/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home/bin:/Users/liangxin/fvm/default/bin:/opt/homebrew/opt/libpng/bin:/Applications/pngquant:/Users/liangxin/AndroidSDK/platform-tools:/Users/liangxin/Library/Android/sdk/platform-tools:/Users/liangxin/Library/Andriod/sdk/cmdline-tools/latest/bin:/Users/liangxin/Library/Andriod/sdk:/Applications/apache-maven-3.8.1/bin:/opt/homebrew/bin:/usr/local/sbin:/usr/local/bin:/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/Users/liangxin/.local/bin:/Users/liangxin/fvm/default/bin:/Applications/MAMP/bin/php/php8.1.13/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin:/Library/Apple/usr/bin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/liangxin/.cargo/bin:true:/Applications/极空间.app/Contents/Resources/app.asar.unpacked/bin/platform-tools -SHELL=/bin/zsh -LANG=C.UTF-8 -TMPDIR=/var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/ - -Active Locale: -LC_ALL=C.UTF-8 -LC_COLLATE=C.UTF-8 -LC_CTYPE=C.UTF-8 -LC_MESSAGES=C.UTF-8 -LC_MONETARY=C.UTF-8 -LC_NUMERIC=C.UTF-8 -LC_TIME=C.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.dylib, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - - ---------------- S Y S T E M --------------- - -OS: -uname: Darwin 25.6.0 Darwin Kernel Version 25.6.0: Fri Jul 31 19:16:36 PDT 2026; root:xnu-12377.161.14~5/RELEASE_ARM64_T6030 arm64 -OS uptime: 2 days 23:37 hours -rlimit (soft/hard): STACK 8176k/65520k , CORE 0k/infinity , NPROC 6000/9000 , NOFILE 10240/infinity , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK infinity/infinity , RSS infinity/infinity -load average: 19.31 16.17 13.60 - -CPU: total 12 (initial active 12) 0x61:0x0:0x5f4dea93:0, fp, simd, crc, lse -machdep.cpu.brand_string:Apple M3 Pro -hw.cachelinesize:128 -hw.l1icachesize:131072 -hw.l1dcachesize:65536 -hw.l2cachesize:4194304 - -Memory: 16k page, physical 37748736k(166608k free), swap 16777216k(965120k free) - -vm_info: OpenJDK 64-Bit Server VM (17.0.8+7-LTS) for bsd-aarch64 JRE (17.0.8+7-LTS) (Zulu17.44+15-CA), built on Jul 5 2023 00:50:04 by "zulu_re" with clang Apple LLVM 12.0.0 (clang-1200.0.32.28) - -END. diff --git a/hs_err_pid22822.log b/hs_err_pid22822.log deleted file mode 100644 index 9cc29df9..00000000 --- a/hs_err_pid22822.log +++ /dev/null @@ -1,157 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGBUS (0xa) at pc=0x0000000104d364c0, pid=22822, tid=5379 -# -# JRE version: OpenJDK Runtime Environment Zulu17.44+15-CA (17.0.8+7) (build 17.0.8+7-LTS) -# Java VM: OpenJDK 64-Bit Server VM Zulu17.44+15-CA (17.0.8+7-LTS, mixed mode, emulated-client, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64) -# Problematic frame: -# C [libzip.dylib+0x64c0] newEntry+0x68 -# -# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again -# -# If you would like to submit a bug report, please visit: -# http://www.azul.com/support/ -# The crash happened outside the Java Virtual Machine in native code. -# See problematic frame for where to report the bug. -# - ---------------- S U M M A R Y ------------ - -Command Line: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:54448,suspend=y,server=n -javaagent:/Users/liangxin/Library/Caches/JetBrains/IntelliJIdea2026.1/captureAgent/debugger-agent.jar=file:///var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/capture14073385024433055703.props -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Ddebugger.async.stack.trace.for.all.threads=true -Dfile.encoding=UTF-8 org.springblade.admin.AdminApplication - -Host: "Mac15,6" arm64, 12 cores, 36G, Darwin 25.6.0, macOS 26.6.2 (25G83) -Time: Mon Sep 14 22:15:03 2026 CST elapsed time: 5.909458 seconds (0d 0h 0m 5s) - ---------------- T H R E A D --------------- - -Current thread (0x000000013601ac00): JavaThread "main" [_thread_in_native, id=5379, stack(0x000000016b250000,0x000000016b453000)] - -Stack: [0x000000016b250000,0x000000016b453000], sp=0x000000016b450260, free space=2048k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libzip.dylib+0x64c0] newEntry+0x68 -C [libzip.dylib+0x6390] ZIP_GetEntry2+0x14c -C [libzip.dylib+0x6d78] ZIP_FindEntry+0x3c -V [libjvm.dylib+0x25a408] ClassPathZipEntry::open_entry(JavaThread*, char const*, int*, bool)+0xb4 -V [libjvm.dylib+0x25a53c] ClassPathZipEntry::open_stream(JavaThread*, char const*)+0x20 -V [libjvm.dylib+0x25d918] ClassLoader::load_class(Symbol*, bool, JavaThread*)+0x150 -V [libjvm.dylib+0x981d60] SystemDictionary::load_instance_class_impl(Symbol*, Handle, JavaThread*)+0x2d0 -V [libjvm.dylib+0x98063c] SystemDictionary::load_instance_class(unsigned int, Symbol*, Handle, JavaThread*)+0x30 -V [libjvm.dylib+0x97fd48] SystemDictionary::resolve_instance_class_or_null(Symbol*, Handle, Handle, JavaThread*)+0x4dc -V [libjvm.dylib+0x97f334] SystemDictionary::resolve_or_fail(Symbol*, Handle, Handle, bool, JavaThread*)+0x80 -V [libjvm.dylib+0x2beb54] ConstantPool::klass_at_impl(constantPoolHandle const&, int, JavaThread*)+0x1e0 -V [libjvm.dylib+0x46d6f0] InterpreterRuntime::_new(JavaThread*, ConstantPool*, int)+0x94 -j com.intellij.rt.debugger.agent.CaptureStorage.createCapturedStack(Ljava/lang/Throwable;Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;)Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;+14 -j com.intellij.rt.debugger.agent.CaptureStorage.access$500(Ljava/lang/Throwable;Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;)Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;+2 -j com.intellij.rt.debugger.agent.CaptureStorage$3.run()V+75 -j com.intellij.rt.debugger.agent.OverheadDetector$PerThread.runIfNoOverhead(Ljava/lang/Runnable;)Z+62 -j com.intellij.rt.debugger.agent.CaptureStorage.runWithOverheadTrackingAndWithoutThrowableCapture(Lcom/intellij/rt/debugger/agent/CaptureStorage$ThreadLocalContext;Ljava/lang/Runnable;)Z+15 -j com.intellij.rt.debugger.agent.CaptureStorage.capture(Ljava/lang/Object;)V+26 -j java.util.concurrent.FutureTask.(Ljava/util/concurrent/Callable;)V+5 java.base@17.0.8 -j org.springframework.cglib.core.internal.LoadingCache.createEntry(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+27 -j org.springframework.cglib.core.internal.LoadingCache.get(Ljava/lang/Object;)Ljava/lang/Object;+39 -j org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(Lorg/springframework/cglib/core/AbstractClassGenerator;Z)Ljava/lang/Object;+11 -j org.springframework.cglib.core.AbstractClassGenerator.create(Ljava/lang/Object;)Ljava/lang/Object;+115 -j org.springframework.cglib.reflect.FastClass$Generator.create()Lorg/springframework/cglib/reflect/FastClass;+19 -j org.springframework.cglib.proxy.MethodProxy.helper(Lorg/springframework/cglib/proxy/MethodProxy$CreateInfo;Ljava/lang/Class;)Lorg/springframework/cglib/reflect/FastClass;+54 -j org.springframework.cglib.proxy.MethodProxy.init()V+40 -j org.springframework.cglib.proxy.MethodProxy.create(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/springframework/cglib/proxy/MethodProxy;+80 -j org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration$BlockingLoadBalancerRetryConfig$$SpringCGLIB$$0.CGLIB$STATICHOOK1()V+112 -j org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration$BlockingLoadBalancerRetryConfig$$SpringCGLIB$$0.()V+3 -v ~StubRoutines::call_stub -V [libjvm.dylib+0x4781f8] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x394 -V [libjvm.dylib+0x457c84] InstanceKlass::call_class_initializer(JavaThread*)+0x1e8 -V [libjvm.dylib+0x456f48] InstanceKlass::initialize_impl(JavaThread*)+0x65c -V [libjvm.dylib+0x51e020] JVM_FindClassFromCaller+0x340 -C [libjava.dylib+0x3a6c] Java_java_lang_Class_forName0+0x138 -J 1317 java.lang.Class.forName0(Ljava/lang/String;ZLjava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Class; java.base@17.0.8 (0 bytes) @ 0x000000010ed5306c [0x000000010ed52fc0+0x00000000000000ac] -V [libjvm.dylib+0x4715a0] InterpreterRuntime::resolve_from_cache(JavaThread*, Bytecodes::Code)+0x98 - -Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) -j com.intellij.rt.debugger.agent.CaptureStorage.createCapturedStack(Ljava/lang/Throwable;Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;)Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;+14 -j com.intellij.rt.debugger.agent.CaptureStorage.access$500(Ljava/lang/Throwable;Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;)Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;+2 -j com.intellij.rt.debugger.agent.CaptureStorage$3.run()V+75 -j com.intellij.rt.debugger.agent.OverheadDetector$PerThread.runIfNoOverhead(Ljava/lang/Runnable;)Z+62 -j com.intellij.rt.debugger.agent.CaptureStorage.runWithOverheadTrackingAndWithoutThrowableCapture(Lcom/intellij/rt/debugger/agent/CaptureStorage$ThreadLocalContext;Ljava/lang/Runnable;)Z+15 -j com.intellij.rt.debugger.agent.CaptureStorage.capture(Ljava/lang/Object;)V+26 -j java.util.concurrent.FutureTask.(Ljava/util/concurrent/Callable;)V+5 java.base@17.0.8 -j org.springframework.cglib.core.internal.LoadingCache.createEntry(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+27 -j org.springframework.cglib.core.internal.LoadingCache.get(Ljava/lang/Object;)Ljava/lang/Object;+39 -j org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(Lorg/springframework/cglib/core/AbstractClassGenerator;Z)Ljava/lang/Object;+11 -j org.springframework.cglib.core.AbstractClassGenerator.create(Ljava/lang/Object;)Ljava/lang/Object;+115 -j org.springframework.cglib.reflect.FastClass$Generator.create()Lorg/springframework/cglib/reflect/FastClass;+19 -j org.springframework.cglib.proxy.MethodProxy.helper(Lorg/springframework/cglib/proxy/MethodProxy$CreateInfo;Ljava/lang/Class;)Lorg/springframework/cglib/reflect/FastClass;+54 -j org.springframework.cglib.proxy.MethodProxy.init()V+40 -j org.springframework.cglib.proxy.MethodProxy.create(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/springframework/cglib/proxy/MethodProxy;+80 -j org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration$BlockingLoadBalancerRetryConfig$$SpringCGLIB$$0.CGLIB$STATICHOOK1()V+112 -j org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration$BlockingLoadBalancerRetryConfig$$SpringCGLIB$$0.()V+3 -v ~StubRoutines::call_stub -J 1317 java.lang.Class.forName0(Ljava/lang/String;ZLjava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Class; java.base@17.0.8 (0 bytes) @ 0x000000010ed5306c [0x000000010ed52fc0+0x00000000000000ac] -J 1432 c1 java.lang.Class.forName(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class; java.base@17.0.8 (47 bytes) @ 0x000000010ed807c8 [0x000000010ed806c0+0x0000000000000108] -j org.springframework.cglib.core.ReflectUtils.defineClass(Ljava/lang/String;[BLjava/lang/ClassLoader;Ljava/security/ProtectionDomain;Ljava/lang/Class;)Ljava/lang/Class;+460 -j org.springframework.cglib.core.AbstractClassGenerator.generate(Lorg/springframework/cglib/core/AbstractClassGenerator$ClassLoaderData;)Ljava/lang/Class;+209 -j org.springframework.cglib.proxy.Enhancer.generate(Lorg/springframework/cglib/core/AbstractClassGenerator$ClassLoaderData;)Ljava/lang/Class;+53 -j org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.lambda$new$1(Lorg/springframework/cglib/core/AbstractClassGenerator;)Ljava/lang/Object;+2 -j org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$$Lambda$857+0x00000070016c9418.apply(Ljava/lang/Object;)Ljava/lang/Object;+8 -j org.springframework.cglib.core.internal.LoadingCache.lambda$createEntry$1(Ljava/lang/Object;)Ljava/lang/Object;+5 -j org.springframework.cglib.core.internal.LoadingCache$$Lambda$859+0x00000070016c9a98.call()Ljava/lang/Object;+8 -j java.util.concurrent.FutureTask.run$$$capture()V+39 java.base@17.0.8 -j java.util.concurrent.FutureTask.run()V+5 java.base@17.0.8 -j org.springframework.cglib.core.internal.LoadingCache.createEntry(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+56 -j org.springframework.cglib.core.internal.LoadingCache.get(Ljava/lang/Object;)Ljava/lang/Object;+39 -j org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(Lorg/springframework/cglib/core/AbstractClassGenerator;Z)Ljava/lang/Object;+11 -j org.springframework.cglib.core.AbstractClassGenerator.create(Ljava/lang/Object;)Ljava/lang/Object;+115 -j org.springframework.cglib.proxy.Enhancer.createHelper()Ljava/lang/Object;+102 -j org.springframework.cglib.proxy.Enhancer.createClass()Ljava/lang/Class;+6 -j org.springframework.context.annotation.ConfigurationClassEnhancer.createClass(Lorg/springframework/cglib/proxy/Enhancer;Z)Ljava/lang/Class;+1 -j org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/lang/Class;+134 -j org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(Lorg/springframework/beans/factory/config/ConfigurableListableBeanFactory;)V+418 -j org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(Lorg/springframework/beans/factory/config/ConfigurableListableBeanFactory;)V+78 -j org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(Ljava/util/Collection;Lorg/springframework/beans/factory/config/ConfigurableListableBeanFactory;)V+61 -j org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(Lorg/springframework/beans/factory/config/ConfigurableListableBeanFactory;Ljava/util/List;)V+521 -j org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(Lorg/springframework/beans/factory/config/ConfigurableListableBeanFactory;)V+5 -j org.springframework.context.support.AbstractApplicationContext.refresh()V+62 -j org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh()V+1 -j org.springframework.boot.SpringApplication.refresh(Lorg/springframework/context/ConfigurableApplicationContext;)V+1 -j org.springframework.boot.SpringApplication.refreshContext(Lorg/springframework/context/ConfigurableApplicationContext;)V+19 -j org.springframework.boot.SpringApplication.run([Ljava/lang/String;)Lorg/springframework/context/ConfigurableApplicationContext;+113 -j org.springframework.boot.builder.SpringApplicationBuilder.run([Ljava/lang/String;)Lorg/springframework/context/ConfigurableApplicationContext;+38 -j org.springblade.core.launch.BladeApplication.run(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;)Lorg/springframework/context/ConfigurableApplicationContext;+9 -j org.springblade.admin.AdminApplication.main([Ljava/lang/String;)V+5 -v ~StubRoutines::call_stub - -siginfo: si_signo: 10 (SIGBUS), si_code: 1 (BUS_ADRALN), si_addr: 0x0000000104cfe958 - -Register to memory mapping: - - x0=0x0000600001ebc820 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x1=0x0 is NULL - x2=0xfffffffffffffff0 is an unknown value - x3=0x0000600001ebc830 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x4=0x0000600001ebc880 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x5=0x000000009b858ffb is an unknown value - x6=0x000000001ba00000 is an unknown value - x7=0x00000005c0183f80 is an oop: com.intellij.rt.debugger.agent.CaptureStorage$ConcurrentIdentityWeakHashMap$WeakKey -{0x00000005c0183f80} - klass: 'com/intellij/rt/debugger/agent/CaptureStorage$ConcurrentIdentityWeakHashMap$WeakKey' - - ---- fields (total size 4 words): - - private 'referent' 'Ljava/lang/Object;' @12 a 'java/lang/Thread'{0x00000005c0203dc0} (b80407b8) - - volatile 'queue' 'Ljava/lang/ref/ReferenceQueue;' @16 a 'java/lang/ref/ReferenceQueue'{0x00000005c0183ea0} (b80307d4) - - volatile 'next' 'Ljava/lang/ref/Reference;' @20 NULL (0) - - private transient 'discovered' 'Ljava/lang/ref/Reference;' @24 NULL (0) - - private final 'myHash' 'I' @28 897913732 (35851384) - x8=0x0000000104e2693c: getProcessHandle.procHandle+0x971c in /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjava.dylib at 0x0000000104e00000 - x9=0x0000000000128000 is an unknown value -x10=0x0000600001ebc000 points into unknown readable memory: 0x4c2800498af20001 | 01 00 f2 8a 49 00 28 4c -x11=0x0000000000000820 is an unknown value -x12=0x0000000000000050 is an unknown value -x13=0x0000000000000001 is an unknown value -x14=0x00000000ffffff4e is an unknown value -x15=0x00000000000007fb is an unknown value -x16=0x00000001829fd030: __bzero+0 in /usr/lib/system/libsystem_platform.dylib at 0x00000001829fa000 -x17=0x00000001f0a754a8 points into unknown readable memory: 0x00000001829fd030 | 30 d0 9f 82 01 00 00 00 -x18=0x0 is NULL -x19=0x0000600001ebc820 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 -x20=0x0 is NULL -x21=0x0000600000bf4240 points into unknown readable memory: 0x0000600001af00c0 | c0 00 af 01 00 60 00 00 -x22=0x0000000104cfe93c points into unknown readable memory: 50 4b 01 02 -x23= \ No newline at end of file diff --git a/hs_err_pid25098.log b/hs_err_pid25098.log deleted file mode 100644 index c5bda445..00000000 --- a/hs_err_pid25098.log +++ /dev/null @@ -1,1375 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGBUS (0xa) at pc=0x0000000104a124c0, pid=25098, tid=36379 -# -# JRE version: OpenJDK Runtime Environment Zulu17.44+15-CA (17.0.8+7) (build 17.0.8+7-LTS) -# Java VM: OpenJDK 64-Bit Server VM Zulu17.44+15-CA (17.0.8+7-LTS, mixed mode, emulated-client, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64) -# Problematic frame: -# C [libzip.dylib+0x64c0] newEntry+0x68 -# -# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again -# -# If you would like to submit a bug report, please visit: -# http://www.azul.com/support/ -# The crash happened outside the Java Virtual Machine in native code. -# See problematic frame for where to report the bug. -# - ---------------- S U M M A R Y ------------ - -Command Line: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:57772,suspend=y,server=n -javaagent:/Users/liangxin/Library/Caches/JetBrains/IntelliJIdea2026.1/captureAgent/debugger-agent.jar=file:///var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/capture2936228657643338079.props -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Ddebugger.async.stack.trace.for.all.threads=true -Dfile.encoding=UTF-8 org.springblade.transport.TransportApplication - -Host: "Mac15,6" arm64, 12 cores, 36G, Darwin 25.6.0, macOS 26.6.2 (25G83) -Time: Mon Sep 14 01:37:22 2026 CST elapsed time: 8.929714 seconds (0d 0h 0m 8s) - ---------------- T H R E A D --------------- - -Current thread (0x00000001178ff000): JavaThread "sentinel-datafile-log-executor-thread-1" daemon [_thread_in_native, id=36379, stack(0x000000031147c000,0x000000031167f000)] - -Stack: [0x000000031147c000,0x000000031167f000], sp=0x000000031167d9d0, free space=2054k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libzip.dylib+0x64c0] newEntry+0x68 -C [libzip.dylib+0x6390] ZIP_GetEntry2+0x14c -C [libzip.dylib+0x6d78] ZIP_FindEntry+0x3c -V [libjvm.dylib+0x25a408] ClassPathZipEntry::open_entry(JavaThread*, char const*, int*, bool)+0xb4 -V [libjvm.dylib+0x25a53c] ClassPathZipEntry::open_stream(JavaThread*, char const*)+0x20 -V [libjvm.dylib+0x25d918] ClassLoader::load_class(Symbol*, bool, JavaThread*)+0x150 -V [libjvm.dylib+0x981d60] SystemDictionary::load_instance_class_impl(Symbol*, Handle, JavaThread*)+0x2d0 -V [libjvm.dylib+0x98063c] SystemDictionary::load_instance_class(unsigned int, Symbol*, Handle, JavaThread*)+0x30 -V [libjvm.dylib+0x97fd48] SystemDictionary::resolve_instance_class_or_null(Symbol*, Handle, Handle, JavaThread*)+0x4dc -V [libjvm.dylib+0x97f334] SystemDictionary::resolve_or_fail(Symbol*, Handle, Handle, bool, JavaThread*)+0x80 -V [libjvm.dylib+0x2beb54] ConstantPool::klass_at_impl(constantPoolHandle const&, int, JavaThread*)+0x1e0 -V [libjvm.dylib+0x46d6f0] InterpreterRuntime::_new(JavaThread*, ConstantPool*, int)+0x94 -j com.intellij.rt.debugger.agent.CaptureStorage$DeepCapturedStack.collectStacks(Ljava/util/List;)Lcom/intellij/rt/debugger/agent/CaptureStorage$StackData;+89 -j com.intellij.rt.debugger.agent.CaptureStorage.getStackTrace(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+30 -j com.intellij.rt.debugger.agent.CaptureStorage.access$1000(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+2 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()[Ljava/lang/StackTraceElement;+31 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()Ljava/lang/Object;+1 -j com.intellij.rt.debugger.agent.CaptureStorage.withoutThrowableCapture(Lcom/intellij/rt/debugger/agent/CaptureStorage$Callable;)Ljava/lang/Object;+21 -j com.intellij.rt.debugger.agent.CaptureStorage.getAsyncStackTrace(Ljava/lang/Throwable;)[Ljava/lang/StackTraceElement;+19 -j java.lang.Throwable.printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V+32 java.base@17.0.8 -j java.lang.Throwable.printStackTrace(Ljava/io/PrintWriter;)V+9 java.base@17.0.8 -j com.alibaba.csp.sentinel.log.jul.CspFormatter.format(Ljava/util/logging/LogRecord;)Ljava/lang/String;+103 -j java.util.logging.StreamHandler.publish(Ljava/util/logging/LogRecord;)V+14 java.logging@17.0.8 -j java.util.logging.FileHandler.publish(Ljava/util/logging/LogRecord;)V+11 java.logging@17.0.8 -j com.alibaba.csp.sentinel.log.jul.DateFileLogHandler$LogTask.run()V+8 -j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+92 java.base@17.0.8 -j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5 java.base@17.0.8 -j java.lang.Thread.run()V+11 java.base@17.0.8 -v ~StubRoutines::call_stub -V [libjvm.dylib+0x4781f8] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x394 -V [libjvm.dylib+0x47720c] JavaCalls::call_virtual(JavaValue*, Klass*, Symbol*, Symbol*, JavaCallArguments*, JavaThread*)+0x11c -V [libjvm.dylib+0x4772d8] JavaCalls::call_virtual(JavaValue*, Handle, Klass*, Symbol*, Symbol*, JavaThread*)+0x64 -V [libjvm.dylib+0x52ebfc] thread_entry(JavaThread*, JavaThread*)+0xc4 -V [libjvm.dylib+0x9b22e8] JavaThread::thread_main_inner()+0x150 -V [libjvm.dylib+0x9b0990] Thread::call_run()+0xe0 -V [libjvm.dylib+0x7d0364] thread_native_entry(Thread*)+0x158 -C [libsystem_pthread.dylib+0x6c58] _pthread_start+0x88 - -Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) -j com.intellij.rt.debugger.agent.CaptureStorage$DeepCapturedStack.collectStacks(Ljava/util/List;)Lcom/intellij/rt/debugger/agent/CaptureStorage$StackData;+89 -j com.intellij.rt.debugger.agent.CaptureStorage.getStackTrace(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+30 -j com.intellij.rt.debugger.agent.CaptureStorage.access$1000(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+2 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()[Ljava/lang/StackTraceElement;+31 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()Ljava/lang/Object;+1 -j com.intellij.rt.debugger.agent.CaptureStorage.withoutThrowableCapture(Lcom/intellij/rt/debugger/agent/CaptureStorage$Callable;)Ljava/lang/Object;+21 -j com.intellij.rt.debugger.agent.CaptureStorage.getAsyncStackTrace(Ljava/lang/Throwable;)[Ljava/lang/StackTraceElement;+19 -j java.lang.Throwable.printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V+32 java.base@17.0.8 -j java.lang.Throwable.printStackTrace(Ljava/io/PrintWriter;)V+9 java.base@17.0.8 -j com.alibaba.csp.sentinel.log.jul.CspFormatter.format(Ljava/util/logging/LogRecord;)Ljava/lang/String;+103 -j java.util.logging.StreamHandler.publish(Ljava/util/logging/LogRecord;)V+14 java.logging@17.0.8 -j java.util.logging.FileHandler.publish(Ljava/util/logging/LogRecord;)V+11 java.logging@17.0.8 -j com.alibaba.csp.sentinel.log.jul.DateFileLogHandler$LogTask.run()V+8 -j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+92 java.base@17.0.8 -j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5 java.base@17.0.8 -j java.lang.Thread.run()V+11 java.base@17.0.8 -v ~StubRoutines::call_stub - -siginfo: si_signo: 10 (SIGBUS), si_code: 1 (BUS_ADRALN), si_addr: 0x000000010490de7b - -Register to memory mapping: - - x0=0x0000600001c38c80 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x1=0x0 is NULL - x2=0xffffffffffffffd0 is an unknown value - x3=0x0000600001c38c90 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x4=0x0000600001c38d00 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x5=0x000000008cc51ffb is an unknown value - x6=0x000000000ce00000 is an unknown value - x7=0x000000000000000a is an unknown value - x8=0x0000000104a35e5f points into unknown readable memory: 0a - x9=0x0000000000128000 is an unknown value -x10=0x0000600001c38000 points into unknown readable memory: 0x726f0040f29d0001 | 01 00 9d f2 40 00 6f 72 -x11=0x0000000000000c80 is an unknown value -x12=0x0000000000000050 is an unknown value -x13=0x0000000000000001 is an unknown value -x14=0x00000000ffffff5c is an unknown value -x15=0x00000000000007fb is an unknown value -x16=0x0000000185ab9030: __bzero+0 in /usr/lib/system/libsystem_platform.dylib at 0x0000000185ab6000 -x17=0x00000001f3b314a8 points into unknown readable memory: 0x0000000185ab9030 | 30 90 ab 85 01 00 00 00 -x18=0x0 is NULL -x19=0x0000600001c38c80 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 -x20=0x0 is NULL -x21=0x00006000009a8000 points into unknown readable memory: 0x00006000018b0180 | 80 01 8b 01 00 60 00 00 -x22=0x000000010490de5f points into unknown readable memory: 50 -x23=0x00000000d3a18b02 is an unknown value -x24=0x000000000000002f is an unknown value -x25=0x000000000000003d is an unknown value -x26=0x00000000000000cd is an unknown value -x27=0x0000600001c38ca8 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 -x28=0x0000000146e163d0 points into unknown readable memory: 0x65746e692f6d6f63 | 63 6f 6d 2f 69 6e 74 65 - - -Registers: - x0=0x0000600001c38c80 x1=0x0000000000000000 x2=0xffffffffffffffd0 x3=0x0000600001c38c90 - x4=0x0000600001c38d00 x5=0x000000008cc51ffb x6=0x000000000ce00000 x7=0x000000000000000a - x8=0x0000000104a35e5f x9=0x0000000000128000 x10=0x0000600001c38000 x11=0x0000000000000c80 -x12=0x0000000000000050 x13=0x0000000000000001 x14=0x00000000ffffff5c x15=0x00000000000007fb -x16=0x0000000185ab9030 x17=0x00000001f3b314a8 x18=0x0000000000000000 x19=0x0000600001c38c80 -x20=0x0000000000000000 x21=0x00006000009a8000 x22=0x000000010490de5f x23=0x00000000d3a18b02 -x24=0x000000000000002f x25=0x000000000000003d x26=0x00000000000000cd x27=0x0000600001c38ca8 -x28=0x0000000146e163d0 fp=0x000000031167da50 lr=0x0000000104a1248c sp=0x000000031167d9d0 -pc=0x0000000104a124c0 cpsr=0x0000000080001000 -Top of Stack: (sp=0x000000031167d9d0) -0x000000031167d9d0: 0000000000000000 0000000000000000 -0x000000031167d9e0: 0000000000000000 0000000000000000 -0x000000031167d9f0: 0000000000000000 0000000000000000 -0x000000031167da00: 0000000146e163d0 0000000159809800 -0x000000031167da10: 00000000000000cd 000000000000003d -0x000000031167da20: 000000000000002f 00000000d3a18b02 -0x000000031167da30: 0000600001c2e120 0000000000000000 -0x000000031167da40: 0000000146e16410 00006000009a8000 -0x000000031167da50: 000000031167dab0 0000000104a12390 -0x000000031167da60: 0000000146e163d0 0000000000000037 -0x000000031167da70: 0000000000000001 0000000146e16410 -0x000000031167da80: 00000001178ff348 0000000146e16410 -0x000000031167da90: 00006000009a8000 0000000146e16410 -0x000000031167daa0: 000000031167dbdc 000000031167daf4 -0x000000031167dab0: 000000031167dae0 0000000104a12d78 -0x000000031167dac0: 000000031167dbdc 00006000032b4150 -0x000000031167dad0: 0000000000000000 00000001178ff000 -0x000000031167dae0: 000000031167dbc0 0000000105d96408 -0x000000031167daf0: 00000001065f4388 0000000000000100 -0x000000031167db00: 000000031167db20 000000010606a5dc -0x000000031167db10: 00000001065f4388 000000031167dba0 -0x000000031167db20: 000000031167db70 0000000105e1c96c -0x000000031167db30: 0000000000000000 0000000000000000 -0x000000031167db40: 0000000000000001 00000001280a0290 -0x000000031167db50: 00000001178ff000 0000000146e167a8 -0x000000031167db60: 00000001066091e2 000000031167dc68 -0x000000031167db70: 000000031167db90 dde20fe0350d0029 -0x000000031167db80: 0000000000000001 0000000146e16410 -0x000000031167db90: 00006000032b4150 00000001280a0290 -0x000000031167dba0: 00000001178ff000 0000000146e167a8 -0x000000031167dbb0: 0000000146e163c0 00006000032b4150 -0x000000031167dbc0: 000000031167dbf0 0000000105d9653c - -Instructions: (pc=0x0000000104a124c0) -0x0000000104a123c0: 6b0c017f 54ffff60 17ffffde d2800016 -0x0000000104a123d0: 72001ebf 54000160 b5000156 f100073f -0x0000000104a123e0: 54fff7cb 8b140328 385ff108 7100bd1f -0x0000000104a123f0: 54fff741 d2800016 14000002 f9004e7f -0x0000000104a12400: f9402a60 94000451 aa1603e0 a9457bfd -0x0000000104a12410: a9444ff4 a94357f6 a9425ff8 a94167fa -0x0000000104a12420: a8c66ffc d65f03c0 6b03003f 540000e1 -0x0000000104a12430: 71000421 540000eb 38401408 38401449 -0x0000000104a12440: 6b09011f 54ffff60 52800000 d65f03c0 -0x0000000104a12450: 52800020 d65f03c0 d10243ff a9036ffc -0x0000000104a12460: a90467fa a9055ff8 a90657f6 a9074ff4 -0x0000000104a12470: a9087bfd 910203fd aa0203f4 aa0103f6 -0x0000000104a12480: aa0003f5 52800900 94000481 aa0003f3 -0x0000000104a12490: b4001320 f900027f aa1303fb f8028f7f -0x0000000104a124a0: f9001a7f 3940c2a8 34000288 f9400ea8 -0x0000000104a124b0: f94006c9 8b090108 f94016a9 cb090116 -0x0000000104a124c0: 79403ad8 39407ada 39407edc 794042c8 -0x0000000104a124d0: f90017e8 b9400ec8 f9000668 b9401ac8 -0x0000000104a124e0: f9000fe8 f9000a68 794016c8 34000488 -0x0000000104a124f0: b94016c8 14000023 f94006d7 34000d54 -0x0000000104a12500: f9401ea8 b4000288 f94022a9 eb17013f -0x0000000104a12510: 5400022c 5283fa4a 8b0a012a eb17015f -0x0000000104a12520: 540001ab 9140092a 8b170108 cb090116 -0x0000000104a12530: 79403ac8 79403ec9 794042cb 8b0802e8 -0x0000000104a12540: 8b090108 8b0b0108 9100b908 eb0a011f -0x0000000104a12550: 54000b4d aa1503e0 aa1703e1 52840002 -0x0000000104a12560: 94000384 aa0003f6 b4000aa0 f9401ea0 -0x0000000104a12570: 94000429 a903deb6 17ffffd2 d2800008 -0x0000000104a12580: aa0803f7 f9000e68 b94012c8 b9002268 -0x0000000104a12590: b842a2c9 f9405ea8 f9000be9 8b090108 -0x0000000104a125a0: cb0803e8 f9001e68 794012c8 b9004268 -0x0000000104a125b0: 91000700 94000436 aa0003f9 f9000260 - - -Stack slot to memory mapping: -stack at sp + 0 slots: 0x0 is NULL -stack at sp + 1 slots: 0x0 is NULL -stack at sp + 2 slots: 0x0 is NULL -stack at sp + 3 slots: 0x0 is NULL -stack at sp + 4 slots: 0x0 is NULL -stack at sp + 5 slots: 0x0 is NULL -stack at sp + 6 slots: 0x0000000146e163d0 points into unknown readable memory: 0x65746e692f6d6f63 | 63 6f 6d 2f 69 6e 74 65 -stack at sp + 7 slots: 0x0000000159809800 points into unknown readable memory: 0xffffffff5bbd78a2 | a2 78 bd 5b ff ff ff ff - - ---------------- P R O C E S S --------------- - -Threads class SMR info: -_java_thread_list=0x0000600003a5aec0, length=73, elements={ -0x0000000127008600, 0x000000012701a800, 0x0000000159809200, 0x0000000117008200, -0x000000011700ba00, 0x000000012701da00, 0x000000012701e000, 0x0000000117014000, -0x0000000105010a00, 0x000000015701ba00, 0x0000000137023800, 0x000000013701c200, -0x0000000105008200, 0x00000001278bcc00, 0x0000000157011e00, 0x0000000127900000, -0x0000000137023e00, 0x0000000117820600, 0x0000000117440400, 0x0000000127b6c800, -0x000000011752ae00, 0x00000001590ed600, 0x000000010542d200, 0x0000000117582c00, -0x00000001473b0800, 0x0000000157442800, 0x0000000157469a00, 0x0000000158186a00, -0x0000000127070600, 0x0000000127c83600, 0x00000001588e8600, 0x0000000117895e00, -0x000000015910e000, 0x00000001176b1800, 0x00000001054d9000, 0x0000000127cff600, -0x00000001176d7800, 0x000000011768a200, 0x00000001176f7c00, 0x0000000159134a00, -0x00000001178c8a00, 0x00000001574f1600, 0x0000000157557000, 0x00000001588c5a00, -0x0000000105539e00, 0x0000000117724c00, 0x000000015890a200, 0x00000001270c2a00, -0x0000000158924a00, 0x00000001598d1600, 0x0000000127d62e00, 0x00000001581bee00, -0x0000000117718c00, 0x0000000147538000, 0x0000000127da4a00, 0x0000000137555e00, -0x0000000147537a00, 0x0000000117731c00, 0x00000001374c1800, 0x0000000159930000, -0x00000001178ff000, 0x00000001055f5200, 0x00000001055e8200, 0x0000000147613600, -0x0000000157615000, 0x000000015762ea00, 0x0000000127e76400, 0x0000000127171400, -0x000000015765fe00, 0x0000000159961c00, 0x00000001300bb200, 0x000000010576e600, -0x000000012717f600 -} - -Java Threads: ( => current thread ) - 0x0000000127008600 JavaThread "main" [_thread_in_native, id=4099, stack(0x000000016b640000,0x000000016b843000)] - 0x000000012701a800 JavaThread "Reference Handler" daemon [_thread_blocked, id=20483, stack(0x0000000175494000,0x0000000175697000)] - 0x0000000159809200 JavaThread "Finalizer" daemon [_thread_blocked, id=20227, stack(0x00000001756a0000,0x00000001758a3000)] - 0x0000000117008200 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=30467, stack(0x00000001759c4000,0x0000000175bc7000)] - 0x000000011700ba00 JavaThread "Service Thread" daemon [_thread_blocked, id=30211, stack(0x0000000175bd0000,0x0000000175dd3000)] - 0x000000012701da00 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=29955, stack(0x0000000175ddc000,0x0000000175fdf000)] - 0x000000012701e000 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=23043, stack(0x0000000175fe8000,0x00000001761eb000)] - 0x0000000117014000 JavaThread "Sweeper thread" daemon [_thread_blocked, id=29187, stack(0x00000001761f4000,0x00000001763f7000)] - 0x0000000105010a00 JavaThread "C1 CompilerThread1" daemon [_thread_blocked, id=23555, stack(0x0000000176400000,0x0000000176603000)] - 0x000000015701ba00 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=23811, stack(0x000000017660c000,0x000000017680f000)] - 0x0000000137023800 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=24323, stack(0x0000000176818000,0x0000000176a1b000)] - 0x000000013701c200 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=28675, stack(0x0000000176a24000,0x0000000176c27000)] - 0x0000000105008200 JavaThread "JDWP Command Reader" daemon [_thread_in_native, id=28419, stack(0x0000000176c30000,0x0000000176e33000)] - 0x00000001278bcc00 JavaThread "IntelliJ Suspend Helper" daemon [_thread_blocked, id=27907, stack(0x0000000176e3c000,0x000000017703f000)] - 0x0000000157011e00 JavaThread "Notification Thread" daemon [_thread_blocked, id=25091, stack(0x0000000177048000,0x000000017724b000)] - 0x0000000127900000 JavaThread "CoarseTimer" daemon [_thread_blocked, id=25347, stack(0x0000000177254000,0x0000000177457000)] - 0x0000000137023e00 JavaThread "C1 CompilerThread2" daemon [_thread_blocked, id=25603, stack(0x0000000177460000,0x0000000177663000)] - 0x0000000117820600 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=25859, stack(0x000000017766c000,0x000000017786f000)] - 0x0000000117440400 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=35587, stack(0x0000000310c4c000,0x0000000310e4f000)] - 0x0000000127b6c800 JavaThread "com.alibaba.nacos.client.logging.0" daemon [_thread_blocked, id=35843, stack(0x0000000311064000,0x0000000311267000)] - 0x000000011752ae00 JavaThread "Attach Listener" daemon [_thread_blocked, id=40195, stack(0x0000000311cac000,0x0000000311eaf000)] - 0x00000001590ed600 JavaThread "nacos.publisher-com.alibaba.nacos.common.notify.SlowEvent" daemon [_thread_blocked, id=38915, stack(0x00000003122d0000,0x00000003124d3000)] - 0x000000010542d200 JavaThread "nacos.publisher-com.alibaba.nacos.client.config.impl.ConfigFuzzyWatchNotifyEvent" daemon [_thread_blocked, id=39683, stack(0x00000003124dc000,0x00000003126df000)] - 0x0000000117582c00 JavaThread "nacos.publisher-com.alibaba.nacos.client.config.impl.ConfigFuzzyWatchLoadEvent" daemon [_thread_blocked, id=43523, stack(0x00000003126e8000,0x00000003128eb000)] - 0x00000001473b0800 JavaThread "RMI TCP Connection(idle)" daemon [_thread_blocked, id=65283, stack(0x00000003128f4000,0x0000000312af7000)] - 0x0000000157442800 JavaThread "RMI Scheduler(0)" daemon [_thread_blocked, id=65027, stack(0x0000000312b00000,0x0000000312d03000)] - 0x0000000157469a00 JavaThread "com.alibaba.nacos.client.auth.ram.identify.watcher.0" daemon [_thread_blocked, id=44559, stack(0x0000000312d0c000,0x0000000312f0f000)] - 0x0000000158186a00 JavaThread "com.alibaba.nacos.client.login-executor.0" daemon [_thread_blocked, id=37647, stack(0x0000000311aa0000,0x0000000311ca3000)] - 0x0000000127070600 JavaThread "com.alibaba.nacos.client.listen-executor.0" daemon [_thread_blocked, id=64771, stack(0x0000000312f18000,0x000000031311b000)] - 0x0000000127c83600 JavaThread "com.alibaba.nacos.client.fuzzy-watcher-executor.0" daemon [_thread_blocked, id=64259, stack(0x0000000313124000,0x0000000313327000)] - 0x00000001588e8600 JavaThread "com.alibaba.nacos.client.remote.worker.0" daemon [_thread_blocked, id=63747, stack(0x0000000313330000,0x0000000313533000)] - 0x0000000117895e00 JavaThread "com.alibaba.nacos.client.remote.worker.1" daemon [_thread_blocked, id=45059, stack(0x000000031353c000,0x000000031373f000)] - 0x000000015910e000 JavaThread "grpc-nio-worker-ELG-1-1" daemon [_thread_in_native, id=63247, stack(0x0000000313748000,0x000000031394b000)] - 0x00000001176b1800 JavaThread "grpc-default-executor-0" daemon [_thread_blocked, id=45571, stack(0x0000000313954000,0x0000000313b57000)] - 0x00000001054d9000 JavaThread "nacos-grpc-client-executor-127.0.0.1-0" daemon [_thread_blocked, id=46083, stack(0x0000000313b60000,0x0000000313d63000)] - 0x0000000127cff600 JavaThread "nacos-grpc-client-executor-127.0.0.1-1" daemon [_thread_blocked, id=46339, stack(0x0000000313d6c000,0x0000000313f6f000)] - 0x00000001176d7800 JavaThread "RMI TCP Connection(4)-127.0.0.1" daemon [_thread_in_native, id=46595, stack(0x0000000313f78000,0x000000031417b000)] - 0x000000011768a200 JavaThread "grpc-nio-worker-ELG-1-2" daemon [_thread_in_native, id=61967, stack(0x0000000314184000,0x0000000314387000)] - 0x00000001176f7c00 JavaThread "nacos-grpc-client-executor-127.0.0.1-2" daemon [_thread_blocked, id=46851, stack(0x0000000314390000,0x0000000314593000)] - 0x0000000159134a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-3" daemon [_thread_blocked, id=61187, stack(0x000000031459c000,0x000000031479f000)] - 0x00000001178c8a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-4" daemon [_thread_blocked, id=60675, stack(0x00000003147a8000,0x00000003149ab000)] - 0x00000001574f1600 JavaThread "nacos-grpc-client-executor-127.0.0.1-5" daemon [_thread_blocked, id=60163, stack(0x00000003149b4000,0x0000000314bb7000)] - 0x0000000157557000 JavaThread "nacos-grpc-client-executor-127.0.0.1-6" daemon [_thread_blocked, id=47107, stack(0x0000000314bc0000,0x0000000314dc3000)] - 0x00000001588c5a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-7" daemon [_thread_blocked, id=59651, stack(0x0000000314dcc000,0x0000000314fcf000)] - 0x0000000105539e00 JavaThread "nacos.publisher-com.alibaba.nacos.common.ability.AbstractAbilityControlManager$AbilityUpdateEvent" daemon [_thread_blocked, id=59139, stack(0x0000000314fd8000,0x00000003151db000)] - 0x0000000117724c00 JavaThread "nacos-grpc-client-executor-127.0.0.1-8" daemon [_thread_blocked, id=47619, stack(0x00000003151e4000,0x00000003153e7000)] - 0x000000015890a200 JavaThread "nacos-grpc-client-executor-127.0.0.1-9" daemon [_thread_blocked, id=58371, stack(0x00000003153f0000,0x00000003155f3000)] - 0x00000001270c2a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-10" daemon [_thread_blocked, id=57859, stack(0x00000003155fc000,0x00000003157ff000)] - 0x0000000158924a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-11" daemon [_thread_blocked, id=47875, stack(0x0000000315808000,0x0000000315a0b000)] - 0x00000001598d1600 JavaThread "nacos-grpc-client-executor-127.0.0.1-12" daemon [_thread_blocked, id=48387, stack(0x0000000315a14000,0x0000000315c17000)] - 0x0000000127d62e00 JavaThread "nacos-grpc-client-executor-127.0.0.1-13" daemon [_thread_blocked, id=48899, stack(0x0000000315c20000,0x0000000315e23000)] - 0x00000001581bee00 JavaThread "nacos-grpc-client-executor-127.0.0.1-14" daemon [_thread_blocked, id=57091, stack(0x0000000315e2c000,0x000000031602f000)] - 0x0000000117718c00 JavaThread "nacos-grpc-client-executor-127.0.0.1-15" daemon [_thread_blocked, id=56579, stack(0x0000000316038000,0x000000031623b000)] - 0x0000000147538000 JavaThread "nacos-grpc-client-executor-127.0.0.1-16" daemon [_thread_blocked, id=56067, stack(0x0000000316244000,0x0000000316447000)] - 0x0000000127da4a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-17" daemon [_thread_blocked, id=55555, stack(0x0000000316450000,0x0000000316653000)] - 0x0000000137555e00 JavaThread "nacos-grpc-client-executor-127.0.0.1-18" daemon [_thread_blocked, id=49155, stack(0x000000031665c000,0x000000031685f000)] - 0x0000000147537a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-19" daemon [_thread_blocked, id=55055, stack(0x0000000316868000,0x0000000316a6b000)] - 0x0000000117731c00 JavaThread "nacos-grpc-client-executor-127.0.0.1-20" daemon [_thread_blocked, id=54787, stack(0x0000000316a74000,0x0000000316c77000)] - 0x00000001374c1800 JavaThread "nacos-grpc-client-executor-127.0.0.1-21" daemon [_thread_blocked, id=54275, stack(0x0000000316c80000,0x0000000316e83000)] - 0x0000000159930000 JavaThread "nacos-grpc-client-executor-127.0.0.1-22" daemon [_thread_blocked, id=54019, stack(0x0000000316e8c000,0x000000031708f000)] -=>0x00000001178ff000 JavaThread "sentinel-datafile-log-executor-thread-1" daemon [_thread_in_native, id=36379, stack(0x000000031147c000,0x000000031167f000)] - 0x00000001055f5200 JavaThread "sentinel-command-center-executor-thread-1" daemon [_thread_in_native, id=40979, stack(0x0000000311894000,0x0000000311a97000)] - 0x00000001055e8200 JavaThread "sentinel-heartbeat-send-task-thread-1" daemon [_thread_blocked, id=40743, stack(0x0000000311688000,0x000000031188b000)] - 0x0000000147613600 JavaThread "nacos-grpc-client-executor-127.0.0.1-23" daemon [_thread_blocked, id=36651, stack(0x0000000311270000,0x0000000311473000)] - 0x0000000157615000 JavaThread "nacos-grpc-client-executor-127.0.0.1-24" daemon [_thread_blocked, id=50195, stack(0x0000000317098000,0x000000031729b000)] - 0x000000015762ea00 JavaThread "nacos-grpc-client-executor-127.0.0.1-25" daemon [_thread_blocked, id=50443, stack(0x00000003172a4000,0x00000003174a7000)] - 0x0000000127e76400 JavaThread "nacos-grpc-client-executor-127.0.0.1-26" daemon [_thread_blocked, id=50691, stack(0x00000003174b0000,0x00000003176b3000)] - 0x0000000127171400 JavaThread "nacos-grpc-client-executor-127.0.0.1-27" daemon [_thread_blocked, id=51203, stack(0x00000003176bc000,0x00000003178bf000)] - 0x000000015765fe00 JavaThread "nacos-grpc-client-executor-127.0.0.1-28" daemon [_thread_blocked, id=52995, stack(0x00000003178c8000,0x0000000317acb000)] - 0x0000000159961c00 JavaThread "nacos-grpc-client-executor-127.0.0.1-29" daemon [_thread_blocked, id=52739, stack(0x0000000317ad4000,0x0000000317cd7000)] - 0x00000001300bb200 JavaThread "RMI TCP Connection(3)-127.0.0.1" daemon [_thread_in_native, id=32067, stack(0x0000000317ce0000,0x0000000317ee3000)] - 0x000000010576e600 JavaThread "sentinel-time-tick-thread" daemon [_thread_blocked, id=52099, stack(0x0000000340004000,0x0000000340207000)] - 0x000000012717f600 JavaThread "sentinel-heartbeat-send-task-thread-2" daemon [_thread_blocked, id=87043, stack(0x0000000340210000,0x0000000340413000)] - -Other Threads: - 0x0000000136e072e0 VMThread "VM Thread" [stack: 0x0000000175288000,0x000000017548b000] [id=18947] - 0x0000000104e18360 WatcherThread [stack: 0x0000000310e58000,0x000000031105b000] [id=41731] - 0x0000000126f05a10 GCTaskThread "GC Thread#0" [stack: 0x000000017484c000,0x0000000174a4f000] [id=14595] - 0x0000000104c0b500 GCTaskThread "GC Thread#1" [stack: 0x0000000177878000,0x0000000177a7b000] [id=26115] - 0x0000000156f07940 GCTaskThread "GC Thread#2" [stack: 0x0000000177a84000,0x0000000177c87000] [id=32771] - 0x0000000146e06230 GCTaskThread "GC Thread#3" [stack: 0x0000000177c90000,0x0000000177e93000] [id=43267] - 0x0000000104d05320 GCTaskThread "GC Thread#4" [stack: 0x0000000310004000,0x0000000310207000] [id=43011] - 0x0000000156f07dd0 GCTaskThread "GC Thread#5" [stack: 0x0000000310210000,0x0000000310413000] [id=42755] - 0x0000000104e103b0 GCTaskThread "GC Thread#6" [stack: 0x000000031041c000,0x000000031061f000] [id=34051] - 0x0000000104e10c30 GCTaskThread "GC Thread#7" [stack: 0x0000000310628000,0x000000031082b000] [id=42499] - 0x0000000104e114b0 GCTaskThread "GC Thread#8" [stack: 0x0000000310834000,0x0000000310a37000] [id=42243] - 0x0000000104e11d30 GCTaskThread "GC Thread#9" [stack: 0x0000000310a40000,0x0000000310c43000] [id=35075] - 0x0000000126e04ca0 ConcurrentGCThread "G1 Main Marker" [stack: 0x0000000174a58000,0x0000000174c5b000] [id=14339] - 0x0000000126e05530 ConcurrentGCThread "G1 Conc#0" [stack: 0x0000000174c64000,0x0000000174e67000] [id=13571] - 0x0000000104c2a5c0 ConcurrentGCThread "G1 Conc#1" [stack: 0x0000000311eb8000,0x00000003120bb000] [id=38147] - 0x0000000136e2f540 ConcurrentGCThread "G1 Conc#2" [stack: 0x00000003120c4000,0x00000003122c7000] [id=38659] - 0x0000000157806120 ConcurrentGCThread "G1 Refine#0" [stack: 0x0000000174e70000,0x0000000175073000] [id=21507] - 0x0000000126e05db0 ConcurrentGCThread "G1 Service" [stack: 0x000000017507c000,0x000000017527f000] [id=16899] - -Threads with active compile tasks: - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x00000005c0000000, size: 9216 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x000000f800000000-0x000000f800c14000-0x000000f800c14000), size 12664832, SharedBaseAddress: 0x000000f800000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x000000f801000000-0x000000f841000000, reserved size: 1073741824 -Narrow klass base: 0x000000f800000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - CPUs: 12 total, 12 available - Memory: 36864M - Large Page Support: Disabled - NUMA Support: Disabled - Compressed Oops: Enabled (Zero based) - Heap Region Size: 8M - Heap Min Capacity: 8M - Heap Initial Capacity: 576M - Heap Max Capacity: 9G - Pre-touch: Disabled - Parallel Workers: 10 - Concurrent Workers: 3 - Concurrent Refinement Workers: 10 - Periodic GC: Disabled - -Heap: - garbage-first heap total 221184K, used 70377K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 4 young (32768K), 2 survivors (16384K) - Metaspace used 60876K, committed 61312K, reserved 1114112K - class space used 7924K, committed 8128K, reserved 1048576K - -Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, OA=open archive, CA=closed archive, TAMS=top-at-mark-start (previous, next) -| 0|0x00000005c0000000, 0x00000005c0800000, 0x00000005c0800000|100%| O| |TAMS 0x00000005c0800000, 0x00000005c0000000| Untracked -| 1|0x00000005c0800000, 0x00000005c1000000, 0x00000005c1000000|100%| O| |TAMS 0x00000005c1000000, 0x00000005c0800000| Untracked -| 2|0x00000005c1000000, 0x00000005c1782e00, 0x00000005c1800000| 93%| O| |TAMS 0x00000005c1782e00, 0x00000005c1000000| Untracked -| 3|0x00000005c1800000, 0x00000005c2000000, 0x00000005c2000000|100%| O| |TAMS 0x00000005c2000000, 0x00000005c1800000| Untracked -| 4|0x00000005c2000000, 0x00000005c2800000, 0x00000005c2800000|100%| O| |TAMS 0x00000005c2800000, 0x00000005c2000000| Untracked -| 5|0x00000005c2800000, 0x00000005c2b4da00, 0x00000005c3000000| 41%| O| |TAMS 0x00000005c2b4da00, 0x00000005c2800000| Untracked -| 6|0x00000005c3000000, 0x00000005c3000000, 0x00000005c3800000| 0%| F| |TAMS 0x00000005c3000000, 0x00000005c3000000| Untracked -| 7|0x00000005c3800000, 0x00000005c3800000, 0x00000005c4000000| 0%| F| |TAMS 0x00000005c3800000, 0x00000005c3800000| Untracked -| 8|0x00000005c4000000, 0x00000005c4000000, 0x00000005c4800000| 0%| F| |TAMS 0x00000005c4000000, 0x00000005c4000000| Untracked -| 9|0x00000005c4800000, 0x00000005c4800000, 0x00000005c5000000| 0%| F| |TAMS 0x00000005c4800000, 0x00000005c4800000| Untracked -| 10|0x00000005c5000000, 0x00000005c5000000, 0x00000005c5800000| 0%| F| |TAMS 0x00000005c5000000, 0x00000005c5000000| Untracked -| 11|0x00000005c5800000, 0x00000005c5800000, 0x00000005c6000000| 0%| F| |TAMS 0x00000005c5800000, 0x00000005c5800000| Untracked -| 12|0x00000005c6000000, 0x00000005c6000000, 0x00000005c6800000| 0%| F| |TAMS 0x00000005c6000000, 0x00000005c6000000| Untracked -| 13|0x00000005c6800000, 0x00000005c6800000, 0x00000005c7000000| 0%| F| |TAMS 0x00000005c6800000, 0x00000005c6800000| Untracked -| 14|0x00000005c7000000, 0x00000005c7000000, 0x00000005c7800000| 0%| F| |TAMS 0x00000005c7000000, 0x00000005c7000000| Untracked -| 15|0x00000005c7800000, 0x00000005c7800000, 0x00000005c8000000| 0%| F| |TAMS 0x00000005c7800000, 0x00000005c7800000| Untracked -| 16|0x00000005c8000000, 0x00000005c81f1d58, 0x00000005c8800000| 24%| S|CS|TAMS 0x00000005c8000000, 0x00000005c8000000| Complete -| 17|0x00000005c8800000, 0x00000005c9000000, 0x00000005c9000000|100%| S|CS|TAMS 0x00000005c8800000, 0x00000005c8800000| Complete -| 18|0x00000005c9000000, 0x00000005c9000000, 0x00000005c9800000| 0%| F| |TAMS 0x00000005c9000000, 0x00000005c9000000| Untracked -| 19|0x00000005c9800000, 0x00000005c9800000, 0x00000005ca000000| 0%| F| |TAMS 0x00000005c9800000, 0x00000005c9800000| Untracked -| 20|0x00000005ca000000, 0x00000005ca000000, 0x00000005ca800000| 0%| F| |TAMS 0x00000005ca000000, 0x00000005ca000000| Untracked -| 21|0x00000005ca800000, 0x00000005ca800000, 0x00000005cb000000| 0%| F| |TAMS 0x00000005ca800000, 0x00000005ca800000| Untracked -| 22|0x00000005cb000000, 0x00000005cb000000, 0x00000005cb800000| 0%| F| |TAMS 0x00000005cb000000, 0x00000005cb000000| Untracked -| 23|0x00000005cb800000, 0x00000005cbe5add0, 0x00000005cc000000| 79%| E| |TAMS 0x00000005cb800000, 0x00000005cb800000| Complete -| 71|0x00000005e3800000, 0x00000005e4000000, 0x00000005e4000000|100%| E|CS|TAMS 0x00000005e3800000, 0x00000005e3800000| Complete -|1150|0x00000007ff000000, 0x00000007ff778000, 0x00000007ff800000| 93%|OA| |TAMS 0x00000007ff778000, 0x00000007ff000000| Untracked -|1151|0x00000007ff800000, 0x00000007ff880000, 0x0000000800000000| 6%|CA| |TAMS 0x00000007ff880000, 0x00000007ff800000| Untracked - -Card table byte_map: [0x000000011289c000,0x0000000113a9c000] _byte_map_base: 0x000000010fa9c000 - -Marking Bits (Prev, Next): (CMBitMap*) 0x0000000127011250, (CMBitMap*) 0x0000000127011210 - Prev Bits: [0x000000016b848000, 0x0000000174848000) - Next Bits: [0x000000015a000000, 0x0000000163000000) - -Polling page: 0x00000001048e0000 - -Metaspace: - -Usage: - Non-class: 51.71 MB used. - Class: 7.74 MB used. - Both: 59.45 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 51.94 MB ( 81%) committed, 1 nodes. - Class space: 1.00 GB reserved, 7.94 MB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 59.88 MB ( 6%) committed. - -Chunk freelists: - Non-Class: 11.69 MB - Class: 8.03 MB - Both: 19.72 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 98.25 MB -CDS: on -MetaspaceReclaimPolicy: balanced - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. - - new_chunks_are_fully_committed: 0. - - uncommit_free_chunks: 1. - - use_allocation_guard: 0. - - handle_deallocations: 1. - - -Internal statistics: - -num_allocs_failed_limit: 9. -num_arena_births: 620. -num_arena_deaths: 4. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 958. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 13. -num_chunks_taken_from_freelist: 2511. -num_chunk_merges: 9. -num_chunk_splits: 1878. -num_chunks_enlarged: 1524. -num_inconsistent_stats: 0. - -CodeCache: size=49152Kb used=12288Kb max_used=12288Kb free=36863Kb - bounds [0x000000010e69c000, 0x000000010f2ac000, 0x000000011169c000] - total_blobs=6256 nmethods=5630 adapters=553 - compilation: enabled - stopped_count=0, restarted_count=0 - full_count=0 - -Compilation events (20 events): -Event: 8.861 Thread 0x000000012701e000 5881 1 org.springframework.beans.factory.support.DefaultListableBeanFactory::getBeanNamesForType (101 bytes) -Event: 8.861 Thread 0x000000012701e000 nmethod 5881 0x000000010f296b10 code [0x000000010f296d00, 0x000000010f297178] -Event: 8.873 Thread 0x0000000137023e00 5882 1 org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec::getStrategy (18 bytes) -Event: 8.873 Thread 0x0000000137023e00 nmethod 5882 0x000000010f297410 code [0x000000010f297580, 0x000000010f297658] -Event: 8.873 Thread 0x000000012701e000 5883 1 org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec::getParameterizedContainers (5 bytes) -Event: 8.873 Thread 0x0000000105010a00 5884 1 org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec::getIgnoredTypes (5 bytes) -Event: 8.873 Thread 0x000000012701e000 nmethod 5883 0x000000010f297710 code [0x000000010f297880, 0x000000010f297918] -Event: 8.873 Thread 0x0000000105010a00 nmethod 5884 0x000000010f297a10 code [0x000000010f297b80, 0x000000010f297c18] -Event: 8.884 Thread 0x0000000117820600 5885 1 java.security.BasicPermission::init (132 bytes) -Event: 8.884 Thread 0x0000000117820600 nmethod 5885 0x000000010f297d10 code [0x000000010f297f80, 0x000000010f298658] -Event: 8.909 Thread 0x0000000137023e00 5887 1 org.springframework.context.annotation.AnnotationScopeMetadataResolver::resolveScopeMetadata (85 bytes) -Event: 8.909 Thread 0x0000000105010a00 5888 1 org.springframework.context.annotation.ScopeMetadata:: (18 bytes) -Event: 8.909 Thread 0x0000000105010a00 nmethod 5888 0x000000010f298b10 code [0x000000010f298cc0, 0x000000010f298e58] -Event: 8.909 Thread 0x000000012701e000 5889 1 org.springframework.core.annotation.TypeMappedAnnotation::getClassLoader (70 bytes) -Event: 8.909 Thread 0x0000000137023e00 nmethod 5887 0x000000010f298f10 code [0x000000010f299180, 0x000000010f299818] -Event: 8.910 Thread 0x000000012701e000 nmethod 5889 0x000000010f299c90 code [0x000000010f299ec0, 0x000000010f29a478] -Event: 8.911 Thread 0x0000000137023e00 5890 1 org.springframework.beans.factory.support.DefaultListableBeanFactory::getBeanNamesForType (35 bytes) -Event: 8.912 Thread 0x0000000137023e00 nmethod 5890 0x000000010f29a890 code [0x000000010f29aa40, 0x000000010f29ac38] -Event: 8.927 Thread 0x000000012701e000 5893 1 java.util.regex.Pattern::qtype (39 bytes) -Event: 8.927 Thread 0x000000012701e000 nmethod 5893 0x000000010f29b990 code [0x000000010f29bb80, 0x000000010f29beb8] - -GC Heap History (20 events): -Event: 1.161 GC heap before -{Heap before GC invocations=3 (full 0): - garbage-first heap total 606208K, used 83747K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 7 young (57344K), 1 survivors (8192K) - Metaspace used 15618K, committed 15936K, reserved 1114112K - class space used 1924K, committed 2048K, reserved 1048576K -} -Event: 1.164 GC heap after -{Heap after GC invocations=4 (full 0): - garbage-first heap total 606208K, used 35635K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 15618K, committed 15936K, reserved 1114112K - class space used 1924K, committed 2048K, reserved 1048576K -} -Event: 1.392 GC heap before -{Heap before GC invocations=4 (full 0): - garbage-first heap total 606208K, used 76595K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 7 young (57344K), 1 survivors (8192K) - Metaspace used 21245K, committed 21504K, reserved 1114112K - class space used 2660K, committed 2752K, reserved 1048576K -} -Event: 1.393 GC heap after -{Heap after GC invocations=5 (full 0): - garbage-first heap total 606208K, used 37226K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 21245K, committed 21504K, reserved 1114112K - class space used 2660K, committed 2752K, reserved 1048576K -} -Event: 2.427 GC heap before -{Heap before GC invocations=6 (full 0): - garbage-first heap total 196608K, used 143722K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 14 young (114688K), 1 survivors (8192K) - Metaspace used 31866K, committed 32256K, reserved 1114112K - class space used 3982K, committed 4160K, reserved 1048576K -} -Event: 2.441 GC heap after -{Heap after GC invocations=7 (full 0): - garbage-first heap total 196608K, used 39539K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 31866K, committed 32256K, reserved 1114112K - class space used 3982K, committed 4160K, reserved 1048576K -} -Event: 2.521 GC heap before -{Heap before GC invocations=7 (full 0): - garbage-first heap total 196608K, used 47731K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 1 survivors (8192K) - Metaspace used 32583K, committed 33024K, reserved 1114112K - class space used 4074K, committed 4288K, reserved 1048576K -} -Event: 2.527 GC heap after -{Heap after GC invocations=8 (full 0): - garbage-first heap total 196608K, used 37869K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 32583K, committed 33024K, reserved 1114112K - class space used 4074K, committed 4288K, reserved 1048576K -} -Event: 2.683 GC heap before -{Heap before GC invocations=8 (full 0): - garbage-first heap total 196608K, used 62445K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 5 young (40960K), 1 survivors (8192K) - Metaspace used 35765K, committed 36096K, reserved 1114112K - class space used 4463K, committed 4608K, reserved 1048576K -} -Event: 2.686 GC heap after -{Heap after GC invocations=9 (full 0): - garbage-first heap total 245760K, used 38769K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 35765K, committed 36096K, reserved 1114112K - class space used 4463K, committed 4608K, reserved 1048576K -} -Event: 4.142 GC heap before -{Heap before GC invocations=10 (full 0): - garbage-first heap total 221184K, used 161649K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 16 young (131072K), 1 survivors (8192K) - Metaspace used 47506K, committed 47936K, reserved 1114112K - class space used 6180K, committed 6400K, reserved 1048576K -} -Event: 4.163 GC heap after -{Heap after GC invocations=11 (full 0): - garbage-first heap total 221184K, used 42475K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 2 survivors (16384K) - Metaspace used 47506K, committed 47936K, reserved 1114112K - class space used 6180K, committed 6400K, reserved 1048576K -} -Event: 4.432 GC heap before -{Heap before GC invocations=11 (full 0): - garbage-first heap total 221184K, used 50667K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 3 young (24576K), 2 survivors (16384K) - Metaspace used 48268K, committed 48704K, reserved 1114112K - class space used 6299K, committed 6528K, reserved 1048576K -} -Event: 4.450 GC heap after -{Heap after GC invocations=12 (full 0): - garbage-first heap total 221184K, used 43614K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 48268K, committed 48704K, reserved 1114112K - class space used 6299K, committed 6528K, reserved 1048576K -} -Event: 5.741 GC heap before -{Heap before GC invocations=12 (full 0): - garbage-first heap total 221184K, used 150110K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 15 young (122880K), 1 survivors (8192K) - Metaspace used 51028K, committed 51456K, reserved 1114112K - class space used 6663K, committed 6848K, reserved 1048576K -} -Event: 5.746 GC heap after -{Heap after GC invocations=13 (full 0): - garbage-first heap total 221184K, used 53612K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 2 survivors (16384K) - Metaspace used 51028K, committed 51456K, reserved 1114112K - class space used 6663K, committed 6848K, reserved 1048576K -} -Event: 7.882 GC heap before -{Heap before GC invocations=13 (full 0): - garbage-first heap total 221184K, used 160108K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 15 young (122880K), 2 survivors (16384K) - Metaspace used 58340K, committed 58816K, reserved 1114112K - class space used 7527K, committed 7744K, reserved 1048576K -} -Event: 7.898 GC heap after -{Heap after GC invocations=14 (full 0): - garbage-first heap total 221184K, used 58444K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 58340K, committed 58816K, reserved 1114112K - class space used 7527K, committed 7744K, reserved 1048576K -} -Event: 8.518 GC heap before -{Heap before GC invocations=14 (full 0): - garbage-first heap total 221184K, used 107596K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 8 young (65536K), 1 survivors (8192K) - Metaspace used 59896K, committed 60288K, reserved 1114112K - class space used 7761K, committed 7936K, reserved 1048576K -} -Event: 8.521 GC heap after -{Heap after GC invocations=15 (full 0): - garbage-first heap total 221184K, used 62185K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 2 survivors (16384K) - Metaspace used 59896K, committed 60288K, reserved 1114112K - class space used 7761K, committed 7936K, reserved 1048576K -} - -Dll operation events (11 events): -Event: 0.018 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjava.dylib -Event: 0.019 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libzip.dylib -Event: 0.090 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libinstrument.dylib -Event: 0.092 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnio.dylib -Event: 0.095 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnet.dylib -Event: 0.119 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjimage.dylib -Event: 0.128 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libzip.dylib -Event: 0.236 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement.dylib -Event: 0.245 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement_ext.dylib -Event: 0.377 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libextnet.dylib -Event: 7.955 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libverify.dylib - -Deoptimization events (20 events): -Event: 8.649 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010eb95348 sp=0x000000016b841cf0 -Event: 8.649 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b8419d0 mode 1 -Event: 8.649 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010ef28ad0 sp=0x000000016b841d90 -Event: 8.649 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b841b10 mode 1 -Event: 8.650 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010eb078a8 sp=0x000000016b841480 -Event: 8.651 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b841120 mode 1 -Event: 8.651 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010eb06b3c sp=0x000000016b841550 -Event: 8.651 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b841220 mode 1 -Event: 8.651 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010eb95348 sp=0x000000016b841cf0 -Event: 8.651 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b8419d0 mode 1 -Event: 8.651 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010ef28ad0 sp=0x000000016b841d90 -Event: 8.651 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b841b10 mode 1 -Event: 8.652 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010eb078a8 sp=0x000000016b841480 -Event: 8.652 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b841120 mode 1 -Event: 8.652 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010eb06b3c sp=0x000000016b841550 -Event: 8.652 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b841220 mode 1 -Event: 8.652 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010eb95348 sp=0x000000016b841cf0 -Event: 8.652 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b8419d0 mode 1 -Event: 8.652 Thread 0x0000000127008600 DEOPT PACKING pc=0x000000010ef28ad0 sp=0x000000016b841d90 -Event: 8.652 Thread 0x0000000127008600 DEOPT UNPACKING pc=0x000000010e6e377c sp=0x000000016b841b10 mode 1 - -Classes unloaded (2 events): -Event: 8.535 Thread 0x0000000136e072e0 Unloading class 0x000000f801664800 'SC' -Event: 8.535 Thread 0x0000000136e072e0 Unloading class 0x000000f801554000 'SC' - -Classes redefined (1 events): -Event: 0.110 Thread 0x0000000136e072e0 redefined class name=java.lang.Throwable, count=1 - -Internal exceptions (20 events): -Event: 4.426 Thread 0x0000000127008600 Exception (0x00000005e3fa79a8) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 4.563 Thread 0x0000000147623c00 Exception (0x00000005cb43d600) -thrown [src/hotspot/share/prims/jni.cpp, line 535] -Event: 4.599 Thread 0x00000001473b0800 Exception (0x00000005cb7d5300) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 4.677 Thread 0x0000000127008600 Exception (0x00000005ca98d140) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 826] -Event: 4.697 Thread 0x0000000127008600 Exception (0x00000005caa29b78) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 5.103 Thread 0x00000001473b0800 Exception (0x00000005cb7e1d70) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 5.448 Thread 0x0000000127008600 Exception (0x00000005c58f6100) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 826] -Event: 5.616 Thread 0x00000001473b0800 Exception (0x00000005c5541730) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 6.121 Thread 0x00000001473b0800 Exception (0x00000005caee8ad8) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 6.550 Thread 0x0000000127008600 Exception (0x00000005c90aba90) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 826] -Event: 6.627 Thread 0x00000001473b0800 Exception (0x00000005c952e2e8) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 7.132 Thread 0x00000001176d7800 Exception (0x00000005c89f7490) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 7.198 Thread 0x0000000127008600 Exception (0x00000005c84b3350) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 7.198 Thread 0x0000000127008600 Exception (0x00000005c84b9da0) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 7.199 Thread 0x0000000127008600 Exception (0x00000005c84bdd98) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 7.211 Thread 0x0000000127008600 Exception (0x00000005c8555d28) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 7.637 Thread 0x00000001176d7800 Exception (0x00000005c8a03c48) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 8.139 Thread 0x00000001176d7800 Exception (0x00000005c980a0c0) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 8.643 Thread 0x00000001176d7800 Exception (0x00000005e3e4d110) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 8.927 Thread 0x00000001055e8200 Exception (0x00000005cbe046d0) -thrown [src/hotspot/share/prims/jni.cpp, line 516] - -VM Operations (20 events): -Event: 5.825 Executing VM operation: HandshakeAllThreads -Event: 5.825 Executing VM operation: HandshakeAllThreads done -Event: 6.540 Executing VM operation: ICBufferFull -Event: 6.540 Executing VM operation: ICBufferFull done -Event: 6.580 Executing VM operation: HandshakeAllThreads -Event: 6.580 Executing VM operation: HandshakeAllThreads done -Event: 7.253 Executing VM operation: HandshakeAllThreads -Event: 7.253 Executing VM operation: HandshakeAllThreads done -Event: 7.456 Executing VM operation: HandshakeAllThreads -Event: 7.456 Executing VM operation: HandshakeAllThreads done -Event: 7.704 Executing VM operation: ICBufferFull -Event: 7.704 Executing VM operation: ICBufferFull done -Event: 7.881 Executing VM operation: G1CollectForAllocation -Event: 7.898 Executing VM operation: G1CollectForAllocation done -Event: 8.517 Executing VM operation: CollectForMetadataAllocation -Event: 8.521 Executing VM operation: CollectForMetadataAllocation done -Event: 8.534 Executing VM operation: G1PauseRemark -Event: 8.542 Executing VM operation: G1PauseRemark done -Event: 8.548 Executing VM operation: G1PauseCleanup -Event: 8.549 Executing VM operation: G1PauseCleanup done - -Events (20 events): -Event: 8.927 loading class sun/net/util/SocketExceptions done -Event: 8.928 Thread 0x000000012717f600 Thread added: 0x000000012717f600 -Event: 8.928 Protecting memory [0x0000000340210000,0x000000034021c000] with protection modes 0 -Event: 8.928 loading class java/lang/Throwable$WrappedPrintWriter -Event: 8.928 loading class java/lang/Throwable$WrappedPrintWriter done -Event: 8.928 loading class com/intellij/rt/debugger/agent/CaptureStorage$9 -Event: 8.928 loading class com/intellij/rt/debugger/agent/CaptureStorage$Callable -Event: 8.928 loading class com/intellij/rt/debugger/agent/CaptureStorage$Callable done -Event: 8.928 loading class com/intellij/rt/debugger/agent/CaptureStorage$9 done -Event: 8.928 loading class com/intellij/rt/debugger/agent/CaptureStorage$DeepCapturedStack -Event: 8.928 loading class com/intellij/rt/debugger/agent/CaptureStorage$DeepCapturedStack done -Event: 8.928 loading class jdk/internal/loader/BootLoader$PackageHelper$1 -Event: 8.928 loading class jdk/internal/loader/BootLoader$PackageHelper$1 done -Event: 8.928 loading class jdk/internal/loader/BootLoader$PackageHelper$2 -Event: 8.928 loading class jdk/internal/loader/BootLoader$PackageHelper$2 done -Event: 8.928 loading class java/util/jar/JarInputStream -Event: 8.928 loading class java/util/zip/ZipInputStream -Event: 8.929 loading class java/util/zip/ZipInputStream done -Event: 8.929 loading class java/util/jar/JarInputStream done -Event: 8.929 loading class com/intellij/rt/debugger/agent/CaptureStorage$StackData - - -Dynamic libraries: -0x0000000104880000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjli.dylib -0x0000000195854000 /usr/lib/libz.1.dylib -0x000000019590a000 /usr/lib/libSystem.B.dylib -0x0000000195904000 /usr/lib/system/libcache.dylib -0x00000001958bf000 /usr/lib/system/libcommonCrypto.dylib -0x00000001958ea000 /usr/lib/system/libcompiler_rt.dylib -0x00000001958df000 /usr/lib/system/libcopyfile.dylib -0x00000001857f2000 /usr/lib/system/libcorecrypto.dylib -0x00000001858f2000 /usr/lib/system/libdispatch.dylib -0x000000018568f000 /usr/lib/system/libdyld.dylib -0x00000001958fa000 /usr/lib/system/libkeymgr.dylib -0x00000001958a2000 /usr/lib/system/libmacho.dylib -0x0000000194b35000 /usr/lib/system/libquarantine.dylib -0x00000001958f7000 /usr/lib/system/libremovefile.dylib -0x000000018c265000 /usr/lib/system/libsystem_asl.dylib -0x0000000185778000 /usr/lib/system/libsystem_blocks.dylib -0x000000018593d000 /usr/lib/system/libsystem_c.dylib -0x00000001958ee000 /usr/lib/system/libsystem_collections.dylib -0x00000001934d5000 /usr/lib/system/libsystem_configuration.dylib -0x00000001920c3000 /usr/lib/system/libsystem_containermanager.dylib -0x00000001952d4000 /usr/lib/system/libsystem_coreservices.dylib -0x0000000189a8c000 /usr/lib/system/libsystem_darwin.dylib -0x000000028b4e0000 /usr/lib/system/libsystem_darwindirectory.dylib -0x00000001958fb000 /usr/lib/system/libsystem_dnssd.dylib -0x000000028b4e4000 /usr/lib/system/libsystem_eligibility.dylib -0x000000018593a000 /usr/lib/system/libsystem_featureflags.dylib -0x0000000185abf000 /usr/lib/system/libsystem_info.dylib -0x0000000195863000 /usr/lib/system/libsystem_m.dylib -0x00000001858a1000 /usr/lib/system/libsystem_malloc.dylib -0x000000018c1c8000 /usr/lib/system/libsystem_networkextension.dylib -0x0000000189ef7000 /usr/lib/system/libsystem_notify.dylib -0x00000001934da000 /usr/lib/system/libsystem_sandbox.dylib -0x000000028b4ef000 /usr/lib/system/libsystem_sanitizers.dylib -0x00000001958f3000 /usr/lib/system/libsystem_secinit.dylib -0x0000000185a6b000 /usr/lib/system/libsystem_kernel.dylib -0x0000000185ab6000 /usr/lib/system/libsystem_platform.dylib -0x0000000185aa9000 /usr/lib/system/libsystem_pthread.dylib -0x000000018de1e000 /usr/lib/system/libsystem_symptoms.dylib -0x00000001857d1000 /usr/lib/system/libsystem_trace.dylib -0x000000028b4f7000 /usr/lib/system/libsystem_trial.dylib -0x00000001958cd000 /usr/lib/system/libunwind.dylib -0x000000018577c000 /usr/lib/system/libxpc.dylib -0x000000018563c000 /usr/lib/libobjc.A.dylib -0x0000000185aef000 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation -0x00000001991ff000 /usr/lib/swift/libswiftCore.dylib -0x0000000185a50000 /usr/lib/libc++abi.dylib -0x00000002898cd000 /usr/lib/libRosetta.dylib -0x00000001859bf000 /usr/lib/libc++.1.dylib -0x000000018735e000 /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation -0x00000001a2ddf000 /usr/lib/swift/libswiftObjectiveC.dylib -0x000000028ad49000 /usr/lib/libswiftPrespecialized.dylib -0x0000000186fcd000 /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration -0x000000019033f000 /System/Library/PrivateFrameworks/CoreAutoLayout.framework/Versions/A/CoreAutoLayout -0x000000019590c000 /usr/lib/libfakelink.dylib -0x0000000195bb5000 /usr/lib/libcompression.dylib -0x000000018be12000 /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork -0x000000018f770000 /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration -0x000000019595f000 /usr/lib/libarchive.2.dylib -0x000000018f675000 /usr/lib/libDiagnosticMessagesClient.dylib -0x00000001897b6000 /usr/lib/libicucore.A.dylib -0x0000000190388000 /usr/lib/libxml2.2.dylib -0x000000019e08e000 /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices -0x00000001934e8000 /usr/lib/liblangid.dylib -0x0000000189e0e000 /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit -0x000000019bd00000 /System/Library/Frameworks/Combine.framework/Versions/A/Combine -0x000000023ec2f000 /System/Library/PrivateFrameworks/CollectionsInternal.framework/Versions/A/CollectionsInternal -0x000000026ac75000 /System/Library/PrivateFrameworks/ReflectionInternal.framework/Versions/A/ReflectionInternal -0x000000026bbc9000 /System/Library/PrivateFrameworks/RuntimeInternal.framework/Versions/A/RuntimeInternal -0x000000019590e000 /System/Library/PrivateFrameworks/SoftLinking.framework/Versions/A/SoftLinking -0x00000001b34c8000 /usr/lib/swift/libswiftCoreFoundation.dylib -0x00000001b028b000 /usr/lib/swift/libswiftDarwin.dylib -0x000000019fe05000 /usr/lib/swift/libswiftDispatch.dylib -0x00000001b3529000 /usr/lib/swift/libswiftIOKit.dylib -0x000000028b18c000 /usr/lib/swift/libswiftSystem.dylib -0x00000001b34db000 /usr/lib/swift/libswiftXPC.dylib -0x000000028b1be000 /usr/lib/swift/libswift_Builtin_float.dylib -0x000000028b1bf000 /usr/lib/swift/libswift_Concurrency.dylib -0x000000028b24b000 /usr/lib/swift/libswift_DarwinFoundation1.dylib -0x000000028b2ef000 /usr/lib/swift/libswift_StringProcessing.dylib -0x00000001a2de3000 /usr/lib/swift/libswiftos.dylib -0x0000000189d8e000 /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal -0x00000001958d7000 /usr/lib/liboah.dylib -0x0000000189396000 /System/Library/Frameworks/Security.framework/Versions/A/Security -0x00000001a2213000 /System/Library/PrivateFrameworks/DiskImages.framework/Versions/A/DiskImages -0x00000001afd2f000 /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS -0x0000000190304000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents -0x0000000189a96000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore -0x000000018f6e4000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata -0x00000001952db000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices -0x0000000195a57000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit -0x000000018dd98000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE -0x000000018604e000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices -0x0000000196e60000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices -0x0000000190311000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList -0x0000000195aea000 /usr/lib/libapple_nghttp2.dylib -0x000000018d9b4000 /usr/lib/libsqlite3.dylib -0x000000018db9d000 /System/Library/Frameworks/Accounts.framework/Versions/A/Accounts -0x00000001a2455000 /System/Library/PrivateFrameworks/AppSupport.framework/Versions/A/AppSupport -0x00000001b227a000 /System/Library/Frameworks/AVFoundation.framework/Versions/A/AVFoundation -0x000000018f645000 /System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics -0x000000018c858000 /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics -0x0000000199f3a000 /System/Library/Frameworks/GSS.framework/Versions/A/GSS -0x0000000198322000 /System/Library/PrivateFrameworks/InternationalSupport.framework/Versions/A/InternationalSupport -0x000000018dd2c000 /System/Library/PrivateFrameworks/RunningBoardServices.framework/Versions/A/RunningBoardServices -0x00000001a2d67000 /System/Library/PrivateFrameworks/StreamingZip.framework/Versions/A/StreamingZip -0x000000018c1e3000 /usr/lib/libenergytrace.dylib -0x000000018de27000 /System/Library/Frameworks/Network.framework/Versions/A/Network -0x0000000194b5d000 /usr/lib/libbsm.0.dylib -0x00000001958a6000 /usr/lib/system/libkxld.dylib -0x000000023a201000 /System/Library/PrivateFrameworks/AppleKeyStore.framework/Versions/A/AppleKeyStore -0x00000002895cf000 /usr/lib/libCoreEntitlements.dylib -0x000000025f341000 /System/Library/PrivateFrameworks/MessageSecurity.framework/Versions/A/MessageSecurity -0x000000018d998000 /System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer -0x000000019f214000 /System/Library/PrivateFrameworks/SymptomDiagnosticReporter.framework/Versions/A/SymptomDiagnosticReporter -0x00000001970a5000 /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport -0x000000018c1e5000 /usr/lib/libMobileGestalt.dylib -0x00000001952bb000 /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression -0x0000000194b45000 /usr/lib/libcoretls.dylib -0x0000000196ed6000 /usr/lib/libcoretls_cfhelpers.dylib -0x0000000195baf000 /usr/lib/libpam.2.dylib -0x0000000196f4c000 /usr/lib/libxar.1.dylib -0x0000000196ed8000 /System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS -0x000000027734f000 /System/Library/PrivateFrameworks/SwiftASN1Internal.framework/Versions/A/SwiftASN1Internal -0x0000000196f5b000 /usr/lib/libutil.dylib -0x00000001934e3000 /System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo -0x000000019480c000 /System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/Versions/A/IOMobileFramebuffer -0x00000001920fc000 /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface -0x00000001a1b73000 /System/Library/PrivateFrameworks/CoreWiFi.framework/Versions/A/CoreWiFi -0x00000001b3388000 /System/Library/PrivateFrameworks/LoggingSupport.framework/Versions/A/LoggingSupport -0x0000000199f9d000 /System/Library/PrivateFrameworks/MobileAsset.framework/Versions/A/MobileAsset -0x000000019f224000 /System/Library/PrivateFrameworks/PowerLog.framework/Versions/A/PowerLog -0x00000001a06e6000 /System/Library/PrivateFrameworks/Rapport.framework/Versions/A/Rapport -0x0000000232daa000 /System/Library/Frameworks/SwiftData.framework/Versions/A/SwiftData -0x000000018b846000 /System/Library/Frameworks/UniformTypeIdentifiers.framework/Versions/A/UniformTypeIdentifiers -0x0000000190531000 /System/Library/PrivateFrameworks/UserManagement.framework/Versions/A/UserManagement -0x000000018bd39000 /usr/lib/libboringssl.dylib -0x000000018de0c000 /usr/lib/libdns_services.dylib -0x00000001b23ae000 /usr/lib/libquic.dylib -0x0000000199190000 /usr/lib/libusrtcp.dylib -0x000000023b0bb000 /System/Library/PrivateFrameworks/AtomicsInternal.framework/Versions/A/AtomicsInternal -0x00000001d976e000 /System/Library/PrivateFrameworks/InternalSwiftProtobuf.framework/Versions/A/InternalSwiftProtobuf -0x000000028b013000 /usr/lib/swift/libswiftDistributed.dylib -0x000000028b03c000 /usr/lib/swift/libswiftObservation.dylib -0x000000028b178000 /usr/lib/swift/libswiftSynchronization.dylib -0x00000001934e1000 /System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary -0x000000023b8eb000 /System/Library/PrivateFrameworks/BiomeLibrary.framework/Versions/A/BiomeLibrary -0x00000001c2511000 /System/Library/PrivateFrameworks/BiomeStreams.framework/Versions/A/BiomeStreams -0x00000001be560000 /System/Library/PrivateFrameworks/BiomeFoundation.framework/Versions/A/BiomeFoundation -0x00000001c87be000 /System/Library/PrivateFrameworks/BiomePubSub.framework/Versions/A/BiomePubSub -0x000000018d5aa000 /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData -0x00000001a3d4a000 /System/Library/PrivateFrameworks/ProactiveSupport.framework/Versions/A/ProactiveSupport -0x0000000234e08000 /System/Library/Frameworks/_LocationEssentials.framework/Versions/A/_LocationEssentials -0x0000000196eb7000 /usr/lib/liblzma.5.dylib -0x000000019e30d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate -0x0000000194a3e000 /System/Library/PrivateFrameworks/MobileKeyBag.framework/Versions/A/MobileKeyBag -0x00000001a2769000 /System/Library/PrivateFrameworks/InternationalTextSearch.framework/Versions/A/InternationalTextSearch -0x00000001baa33000 /System/Library/PrivateFrameworks/SoftwareUpdateCoreSupport.framework/Versions/A/SoftwareUpdateCoreSupport -0x00000001c2fb0000 /System/Library/PrivateFrameworks/SoftwareUpdateCoreConnect.framework/Versions/A/SoftwareUpdateCoreConnect -0x00000001a230d000 /System/Library/PrivateFrameworks/RemoteServiceDiscovery.framework/Versions/A/RemoteServiceDiscovery -0x00000001ba60a000 /System/Library/PrivateFrameworks/MSUDataAccessor.framework/Versions/A/MSUDataAccessor -0x00000001b555b000 /usr/lib/libbootpolicy.dylib -0x00000001a2324000 /System/Library/PrivateFrameworks/RemoteXPC.framework/Versions/A/RemoteXPC -0x00000001c23e5000 /usr/lib/libFDR.dylib -0x00000001c83c0000 /usr/lib/libamsupport.dylib -0x00000002898c5000 /usr/lib/libReverseProxyDevice.dylib -0x0000000239a6f000 /System/Library/PrivateFrameworks/AppleDeviceQuerySupport.framework/Versions/A/AppleDeviceQuerySupport -0x00000001cb58a000 /usr/lib/libpartition2_dynamic.dylib -0x0000000195ac6000 /System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce -0x000000028947a000 /usr/lib/libAppleArchive.dylib -0x00000001952c7000 /usr/lib/libbz2.1.0.dylib -0x000000018f77a000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage -0x000000019e069000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib -0x0000000196f92000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib -0x0000000186552000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib -0x00000001a2768000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices -0x000000019046f000 /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo -0x000000018cfae000 /System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync -0x00000001889d6000 /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText -0x0000000192bef000 /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO -0x0000000199b4a000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS -0x000000018d156000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices -0x0000000198218000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore -0x0000000199f03000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD -0x0000000199efe000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy -0x0000000199b1c000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis -0x000000018c2a1000 /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight -0x00000001925ca000 /System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib -0x000000018dc3a000 /System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard -0x00000001a0166000 /System/Library/PrivateFrameworks/BoardServices.framework/Versions/A/BoardServices -0x00000001a2035000 /System/Library/PrivateFrameworks/BackBoardServices.framework/Versions/A/BackBoardServices -0x000000023b7f0000 /System/Library/PrivateFrameworks/BackBoardHIDEventFoundation.framework/Versions/A/BackBoardHIDEventFoundation -0x00000001884f2000 /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay -0x0000000197b71000 /System/Library/Frameworks/VideoToolbox.framework/Versions/A/VideoToolbox -0x0000000195bad000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders -0x0000000269b7f000 /System/Library/PrivateFrameworks/ProDisplayLibrary.framework/Versions/A/ProDisplayLibrary -0x00000001a5e6a000 /System/Library/PrivateFrameworks/IOSurfaceAccelerator.framework/Versions/A/IOSurfaceAccelerator -0x0000000192124000 /System/Library/Frameworks/Metal.framework/Versions/A/Metal -0x0000000192119000 /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator -0x0000000192428000 /System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia -0x000000018c27d000 /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC -0x0000000197b29000 /System/Library/PrivateFrameworks/WatchdogClient.framework/Versions/A/WatchdogClient -0x000000018fb9f000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore -0x0000000197b2b000 /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport -0x00000001cb36c000 /usr/lib/swift/libswiftAccelerate.dylib -0x00000001b34a8000 /usr/lib/swift/libswiftCoreAudio.dylib -0x00000001cf4fd000 /usr/lib/swift/libswiftCoreMedia.dylib -0x00000001c149e000 /usr/lib/swift/libswiftMetal.dylib -0x00000001d0cb0000 /usr/lib/swift/libswiftOSLog.dylib -0x00000001c68c4000 /usr/lib/swift/libswiftQuartzCore.dylib -0x00000001cb35c000 /usr/lib/swift/libswiftUniformTypeIdentifiers.dylib -0x000000028b1a6000 /usr/lib/swift/libswiftVideoToolbox.dylib -0x00000001b7022000 /usr/lib/swift/libswiftsimd.dylib -0x00000001c881f000 /System/Library/PrivateFrameworks/BiomeStorage.framework/Versions/A/BiomeStorage -0x0000000258030000 /System/Library/PrivateFrameworks/IntelligencePlatformLibrary.framework/Versions/A/IntelligencePlatformLibrary -0x0000000268943000 /System/Library/PrivateFrameworks/PoirotSchematizer.framework/Versions/A/PoirotSchematizer -0x000000023c1a6000 /System/Library/PrivateFrameworks/BiomeSync.framework/Versions/A/BiomeSync -0x000000023b8d1000 /System/Library/PrivateFrameworks/BiomeDSL.framework/Versions/A/BiomeDSL -0x00000001e1979000 /System/Library/PrivateFrameworks/FeatureFlags.framework/Versions/A/FeatureFlags -0x00000002689b1000 /System/Library/PrivateFrameworks/PoirotUDFs.framework/Versions/A/PoirotUDFs -0x000000028b24e000 /usr/lib/swift/libswift_DarwinFoundation2.dylib -0x000000028b24f000 /usr/lib/swift/libswift_DarwinFoundation3.dylib -0x00000001a06db000 /System/Library/PrivateFrameworks/CoreTime.framework/Versions/A/CoreTime -0x0000000195944000 /usr/lib/libiconv.2.dylib -0x00000001958a1000 /usr/lib/libcharset.1.dylib -0x0000000268906000 /System/Library/PrivateFrameworks/PoirotSQLite.framework/Versions/A/PoirotSQLite -0x000000028b250000 /usr/lib/swift/libswift_RegexParser.dylib -0x000000023d7dc000 /System/Library/PrivateFrameworks/CascadeSets.framework/Versions/A/CascadeSets -0x000000019a114000 /System/Library/PrivateFrameworks/CorePhoneNumbers.framework/Versions/A/CorePhoneNumbers -0x0000000197923000 /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG -0x00000001972fc000 /usr/lib/libexpat.1.dylib -0x00000001980ee000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib -0x0000000198119000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib -0x0000000198201000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib -0x0000000197968000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib -0x000000019700c000 /usr/lib/libate.dylib -0x00000001981a8000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib -0x000000019819f000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib -0x000000024dc80000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/libllvm-flatbuffers.dylib -0x00000002486df000 /System/Library/PrivateFrameworks/FramePacing.framework/Versions/A/FramePacing -0x000000022b7ef000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib -0x000000024980d000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/libGPUCompilerUtils.dylib -0x00000001a0233000 /System/Library/PrivateFrameworks/GraphicsServices.framework/Versions/A/GraphicsServices -0x000000022b7fd000 /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL -0x000000022b84e000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib -0x000000022b811000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib -0x000000022b9de000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib -0x000000022b81a000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib -0x000000022b80e000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib -0x000000022b7f7000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib -0x000000019819a000 /System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler -0x000000019817a000 /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment -0x00000001981a2000 /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay -0x000000027f205000 /System/Library/PrivateFrameworks/VideoToolboxParavirtualizationSupport.framework/Versions/A/VideoToolboxParavirtualizationSupport -0x00000001972b3000 /System/Library/PrivateFrameworks/AppleVA.framework/Versions/A/AppleVA -0x000000022d87a000 /System/Library/Frameworks/ExtensionFoundation.framework/Versions/A/ExtensionFoundation -0x0000000198207000 /System/Library/PrivateFrameworks/CMCaptureCore.framework/Versions/A/CMCaptureCore -0x000000019758d000 /usr/lib/libspindump.dylib -0x0000000188c00000 /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio -0x0000000197580000 /System/Library/PrivateFrameworks/AppServerSupport.framework/Versions/A/AppServerSupport -0x0000000199f0c000 /System/Library/PrivateFrameworks/perfdata.framework/Versions/A/perfdata -0x0000000188613000 /System/Library/PrivateFrameworks/AudioToolboxCore.framework/Versions/A/AudioToolboxCore -0x00000001923fe000 /System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk -0x0000000199b02000 /usr/lib/libAudioStatistics.dylib -0x00000001b24a3000 /System/Library/PrivateFrameworks/SystemPolicy.framework/Versions/A/SystemPolicy -0x0000000199db0000 /usr/lib/libSMC.dylib -0x00000001b9e19000 /usr/lib/swift/libswiftCoreMIDI.dylib -0x00000001a5159000 /System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI -0x00000001980c8000 /usr/lib/libAudioToolboxUtility.dylib -0x0000000199f1a000 /usr/lib/libperfcheck.dylib -0x000000023b18a000 /System/Library/PrivateFrameworks/AudioAnalytics.framework/Versions/A/AudioAnalytics -0x00000001d945a000 /System/Library/Frameworks/OSLog.framework/Versions/A/OSLog -0x00000002643b3000 /System/Library/PrivateFrameworks/OSEligibility.framework/Versions/A/OSEligibility -0x0000000197382000 /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices -0x000000022ec61000 /System/Library/Frameworks/LightweightCodeRequirements.framework/Versions/A/LightweightCodeRequirements -0x00000001971fc000 /System/Library/PrivateFrameworks/PlugInKit.framework/Versions/A/PlugInKit -0x0000000194a56000 /System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices -0x0000000197321000 /System/Library/PrivateFrameworks/IconFoundation.framework/Versions/A/IconFoundation -0x0000000254bbc000 /System/Library/PrivateFrameworks/IconRendering.framework/Versions/A/IconRendering -0x0000000190006000 /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI -0x0000000192f30000 /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage -0x000000026bdae000 /System/Library/PrivateFrameworks/SFSymbols.framework/Versions/A/SFSymbols -0x000000022d730000 /System/Library/Frameworks/DeveloperToolsSupport.framework/Versions/A/DeveloperToolsSupport -0x00000001aa406000 /System/Library/PrivateFrameworks/RenderBox.framework/Versions/A/RenderBox -0x0000000192bb1000 /System/Library/PrivateFrameworks/CoreSVG.framework/Versions/A/CoreSVG -0x000000019828b000 /System/Library/PrivateFrameworks/TextureIO.framework/Versions/A/TextureIO -0x00000001b3528000 /usr/lib/swift/libswiftCoreImage.dylib -0x0000000197530000 /System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer -0x00000002485ea000 /System/Library/PrivateFrameworks/FontServices.framework/Versions/A/FontServices -0x0000000197540000 /System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG -0x000000018ffb5000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib -0x000000028a39f000 /usr/lib/libhvf.dylib -0x0000000265040000 /System/Library/PrivateFrameworks/ParsingInternal.framework/Versions/A/ParsingInternal -0x00000002485ee000 /System/Library/PrivateFrameworks/FontServices.framework/libXTFontStaticRegistryData.dylib -0x000000019341b000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSCore.framework/Versions/A/MPSCore -0x0000000195226000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSImage.framework/Versions/A/MPSImage -0x0000000194be5000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork -0x0000000195024000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix -0x0000000194e3c000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector -0x0000000195056000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNDArray.framework/Versions/A/MPSNDArray -0x000000022fae6000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSFunctions.framework/Versions/A/MPSFunctions -0x000000022fac7000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSBenchmarkLoop.framework/Versions/A/MPSBenchmarkLoop -0x000000022fafa000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSHost.framework/Versions/A/MPSHost -0x0000000186369000 /System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools -0x00000001b8749000 /System/Library/PrivateFrameworks/IOAccelMemoryInfo.framework/Versions/A/IOAccelMemoryInfo -0x00000001c6cb7000 /System/Library/PrivateFrameworks/kperf.framework/Versions/A/kperf -0x00000001b34a4000 /System/Library/PrivateFrameworks/GPURawCounter.framework/Versions/A/GPURawCounter -0x00000001a3ed5000 /System/Library/PrivateFrameworks/ASEProcessing.framework/Versions/A/ASEProcessing -0x00000001d4dc6000 /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication -0x00000002684f1000 /System/Library/PrivateFrameworks/PhotosensitivityProcessing.framework/Versions/A/PhotosensitivityProcessing -0x000000026be34000 /System/Library/PrivateFrameworks/SILManager.framework/Versions/A/SILManager -0x00000001a057f000 /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication -0x00000001b3417000 /System/Library/PrivateFrameworks/MallocStackLogging.framework/Versions/A/MallocStackLogging -0x00000001a055d000 /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols -0x00000001c5408000 /System/Library/PrivateFrameworks/OSAnalytics.framework/Versions/A/OSAnalytics -0x0000000246345000 /System/Library/PrivateFrameworks/DeviceRecovery.framework/Versions/A/DeviceRecovery -0x000000027aa8d000 /System/Library/PrivateFrameworks/Tightbeam.framework/Versions/A/Tightbeam -0x00000001c14ac000 /usr/lib/swift/libswiftCompression.dylib -0x00000001cbaf9000 /System/Library/PrivateFrameworks/AFKUser.framework/Versions/A/AFKUser -0x00000001981d3000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATSUI.framework/Versions/A/ATSUI -0x00000001998ab000 /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox -0x0000000195698000 /System/Library/Frameworks/UserNotifications.framework/Versions/A/UserNotifications -0x00000001b8ee0000 /System/Library/PrivateFrameworks/SiriInstrumentation.framework/Versions/A/SiriInstrumentation -0x000000026e2c4000 /System/Library/PrivateFrameworks/SiriAnalytics.framework/Versions/A/SiriAnalytics -0x00000001b663f000 /System/Library/PrivateFrameworks/FeedbackLogger.framework/Versions/A/FeedbackLogger -0x00000001d0f49000 /usr/lib/swift/libswiftAVFoundation.dylib -0x000000027d2b6000 /System/Library/PrivateFrameworks/UnifiedAssetFramework.framework/Versions/A/UnifiedAssetFramework -0x0000000199a81000 /System/Library/PrivateFrameworks/AudioSession.framework/Versions/A/AudioSession -0x0000000197441000 /System/Library/PrivateFrameworks/MediaExperience.framework/Versions/A/MediaExperience -0x0000000199855000 /System/Library/PrivateFrameworks/AudioSession.framework/libSessionUtility.dylib -0x000000019f109000 /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth -0x00000001948c9000 /System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils -0x00000001ab13a000 /System/Library/PrivateFrameworks/HID.framework/Versions/A/HID -0x0000000245236000 /System/Library/PrivateFrameworks/CoreUtilsExtras.framework/Versions/A/CoreUtilsExtras -0x0000000254b11000 /System/Library/PrivateFrameworks/IO80211.framework/Versions/A/IO80211 -0x000000019ba4c000 /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth -0x000000028b05b000 /usr/lib/swift/libswiftRegexBuilder.dylib -0x000000019709c000 /usr/lib/libIOReport.dylib -0x00000001e19fe000 /System/Library/PrivateFrameworks/WiFiPeerToPeer.framework/Versions/A/WiFiPeerToPeer -0x0000000194a65000 /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation -0x000000023d890000 /System/Library/PrivateFrameworks/Centauri.framework/Versions/A/Centauri -0x0000000186d4d000 /System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon -0x000000028a7ef000 /usr/lib/libmrc.dylib -0x0000000254b7c000 /System/Library/PrivateFrameworks/IPConfiguration.framework/Versions/A/IPConfiguration -0x00000001d559d000 /System/Library/PrivateFrameworks/Netrb.framework/Versions/A/Netrb -0x00000001a008c000 /System/Library/PrivateFrameworks/FrontBoardServices.framework/Versions/A/FrontBoardServices -0x0000000194bce000 /usr/lib/libgermantok.dylib -0x000000019360a000 /System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData -0x000000019f312000 /System/Library/PrivateFrameworks/MediaKit.framework/Versions/A/MediaKit -0x000000019f260000 /System/Library/Frameworks/DiscRecording.framework/Versions/A/DiscRecording -0x0000000197317000 /usr/lib/libheimdal-asn1.dylib -0x00000001a2d3d000 /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit -0x00000001902cc000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory -0x00000001902da000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory -0x000000019bdf4000 /System/Library/PrivateFrameworks/GeoServices.framework/Versions/A/GeoServices -0x000000019981b000 /System/Library/PrivateFrameworks/LocationSupport.framework/Versions/A/LocationSupport -0x000000025183a000 /System/Library/PrivateFrameworks/GeoServicesCore.framework/Versions/A/GeoServicesCore -0x00000001ac03e000 /System/Library/PrivateFrameworks/PhoneNumbers.framework/Versions/A/PhoneNumbers -0x0000000259fc2000 /System/Library/PrivateFrameworks/LocationLogEncryption.framework/Versions/A/LocationLogEncryption -0x000000022bd6a000 /System/Library/Frameworks/AVFAudio.framework/Versions/A/AVFAudio -0x000000022beae000 /System/Library/Frameworks/AVRouting.framework/Versions/A/AVRouting -0x00000001ac156000 /usr/lib/libAccessibility.dylib -0x00000002589ac000 /System/Library/PrivateFrameworks/IsolatedCoreAudioClient.framework/Versions/A/IsolatedCoreAudioClient -0x000000024102a000 /System/Library/PrivateFrameworks/CoreAudioOrchestration.framework/Versions/A/CoreAudioOrchestration -0x00000001986ef000 /System/Library/Frameworks/MediaToolbox.framework/Versions/A/MediaToolbox -0x000000019f438000 /System/Library/PrivateFrameworks/CoreAVCHD.framework/Versions/A/CoreAVCHD -0x000000019e35c000 /System/Library/Frameworks/MediaAccessibility.framework/Versions/A/MediaAccessibility -0x000000019f434000 /System/Library/PrivateFrameworks/Mangrove.framework/Versions/A/Mangrove -0x000000023cecc000 /System/Library/PrivateFrameworks/CMPhoto.framework/Versions/A/CMPhoto -0x000000019fc01000 /System/Library/Frameworks/CoreTelephony.framework/Versions/A/CoreTelephony -0x000000019f427000 /System/Library/PrivateFrameworks/CoreAUC.framework/Versions/A/CoreAUC -0x000000023a032000 /System/Library/PrivateFrameworks/AppleJPEGXL.framework/Versions/A/AppleJPEGXL -0x000000019a124000 /usr/lib/libTelephonyUtilDynamic.dylib -0x00000001dc57b000 /System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit -0x00000001a2d38000 /System/Library/PrivateFrameworks/CryptoKitCBridging.framework/Versions/A/CryptoKitCBridging -0x00000001a0245000 /System/Library/Frameworks/CryptoTokenKit.framework/Versions/A/CryptoTokenKit -0x0000000245db5000 /System/Library/PrivateFrameworks/Dendrite.framework/Versions/A/Dendrite -0x00000001b3048000 /System/Library/Frameworks/NaturalLanguage.framework/Versions/A/NaturalLanguage -0x000000025153d000 /System/Library/PrivateFrameworks/GenerativeModels.framework/Versions/A/GenerativeModels -0x00000001e1985000 /usr/lib/swift/libswiftNaturalLanguage.dylib -0x000000023aba9000 /System/Library/PrivateFrameworks/AppleMobileFileIntegrity.framework/Versions/A/AppleMobileFileIntegrity -0x000000028993d000 /usr/lib/libTLE.dylib -0x00000001b3449000 /usr/lib/libmis.dylib -0x00000001eb0cd000 /System/Library/PrivateFrameworks/ConfigProfileHelper.framework/Versions/A/ConfigProfileHelper -0x00000001a2ec7000 /System/Library/PrivateFrameworks/Espresso.framework/Versions/A/Espresso -0x0000000190a5c000 /System/Library/Frameworks/CoreML.framework/Versions/A/CoreML -0x00000001df831000 /usr/lib/libedit.3.dylib -0x0000000228b78000 /System/Library/PrivateFrameworks/ANECompiler.framework/Versions/A/ANECompiler -0x00000001a4f9d000 /System/Library/PrivateFrameworks/AppleNeuralEngine.framework/Versions/A/AppleNeuralEngine -0x000000025a0e0000 /System/Library/PrivateFrameworks/MIL.framework/Versions/A/MIL -0x000000022fb00000 /System/Library/Frameworks/MetalPerformanceShadersGraph.framework/Versions/A/MetalPerformanceShadersGraph -0x000000025a84f000 /System/Library/PrivateFrameworks/MLCompilerServices.framework/Versions/A/MLCompilerServices -0x00000001a3d19000 /System/Library/PrivateFrameworks/ANEServices.framework/Versions/A/ANEServices -0x00000001b870c000 /usr/lib/libncurses.5.4.dylib -0x0000000189f0a000 /usr/lib/libsandbox.1.dylib -0x000000019723d000 /usr/lib/libMatch.1.dylib -0x0000000264135000 /System/Library/PrivateFrameworks/ODIE.framework/Versions/A/ODIE -0x000000025d4dc000 /System/Library/PrivateFrameworks/MLModelAsset.framework/Versions/A/MLModelAsset -0x000000025a7f5000 /System/Library/PrivateFrameworks/MLCompilerRuntime.framework/Versions/A/MLCompilerRuntime -0x0000000194e91000 /System/Library/Frameworks/MLCompute.framework/Versions/A/MLCompute -0x000000025a777000 /System/Library/PrivateFrameworks/MLAssetIO.framework/Versions/A/MLAssetIO -0x000000028b02d000 /usr/lib/swift/libswiftMLCompute.dylib -0x000000019fe1c000 /System/Library/PrivateFrameworks/AVFCore.framework/Versions/A/AVFCore -0x00000001a9a57000 /System/Library/PrivateFrameworks/AVFCapture.framework/Versions/A/AVFCapture -0x000000023ccc3000 /System/Library/PrivateFrameworks/CMImaging.framework/Versions/A/CMImaging -0x00000001a9c99000 /System/Library/PrivateFrameworks/Quagga.framework/Versions/A/Quagga -0x00000001a9dca000 /System/Library/PrivateFrameworks/CMCapture.framework/Versions/A/CMCapture -0x0000000199cad000 /System/Library/Frameworks/CoreMediaIO.framework/Versions/A/CoreMediaIO -0x000000023cbfe000 /System/Library/PrivateFrameworks/CMCaptureDevice.framework/Versions/A/CMCaptureDevice -0x0000000197679000 /System/Library/PrivateFrameworks/CoreBrightness.framework/Versions/A/CoreBrightness -0x000000023dd87000 /System/Library/PrivateFrameworks/CinematicFraming.framework/Versions/A/CinematicFraming -0x0000000260619000 /System/Library/PrivateFrameworks/ModelManagerServices.framework/Versions/A/ModelManagerServices -0x00000001cdfb1000 /System/Library/PrivateFrameworks/CPMS.framework/Versions/A/CPMS -0x00000002781bd000 /System/Library/PrivateFrameworks/SystemStatus.framework/Versions/A/SystemStatus -0x00000001b1e78000 /System/Library/Frameworks/CoreMotion.framework/Versions/A/CoreMotion -0x00000001c2490000 /System/Library/PrivateFrameworks/TimeSync.framework/Versions/A/TimeSync -0x000000024677d000 /System/Library/PrivateFrameworks/DistributedSensing.framework/Versions/A/DistributedSensing -0x00000001bd86f000 /System/Library/PrivateFrameworks/MobileBluetooth.framework/Versions/A/MobileBluetooth -0x00000001c4154000 /System/Library/PrivateFrameworks/IOKitten.framework/Versions/A/IOKitten -0x0000000239eac000 /System/Library/PrivateFrameworks/AppleIntelligenceReporting.framework/Versions/A/AppleIntelligenceReporting -0x00000001947d8000 /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji -0x0000000187061000 /usr/lib/libCRFSuite.dylib -0x0000000188342000 /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling -0x00000001934ea000 /System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP -0x000000018d2bf000 /System/Library/PrivateFrameworks/Montreal.framework/Versions/A/Montreal -0x000000019594c000 /usr/lib/libcmph.dylib -0x0000000194b6f000 /usr/lib/libmecab.dylib -0x0000000195abd000 /usr/lib/libThaiTokenizer.dylib -0x000000025161f000 /System/Library/PrivateFrameworks/GenerativeModelsFoundation.framework/Versions/A/GenerativeModelsFoundation -0x000000027af92000 /System/Library/PrivateFrameworks/TokenGeneration.framework/Versions/A/TokenGeneration -0x00000002513f3000 /System/Library/PrivateFrameworks/GenerativeFunctions.framework/Versions/A/GenerativeFunctions -0x0000000251441000 /System/Library/PrivateFrameworks/GenerativeFunctionsFoundation.framework/Versions/A/GenerativeFunctionsFoundation -0x00000002602da000 /System/Library/PrivateFrameworks/ModelCatalog.framework/Versions/A/ModelCatalog -0x000000026d4de000 /System/Library/PrivateFrameworks/SensitiveContentAnalysisML.framework/Versions/A/SensitiveContentAnalysisML -0x00000002514d7000 /System/Library/PrivateFrameworks/GenerativeFunctionsInstrumentation.framework/Versions/A/GenerativeFunctionsInstrumentation -0x000000026a307000 /System/Library/PrivateFrameworks/PromptKit.framework/Versions/A/PromptKit -0x0000000269d1d000 /System/Library/PrivateFrameworks/ProactiveDaemonSupport.framework/Versions/A/ProactiveDaemonSupport -0x000000027b1ca000 /System/Library/PrivateFrameworks/TokenGenerationCore.framework/Versions/A/TokenGenerationCore -0x00000001b3f17000 /System/Library/PrivateFrameworks/Trial.framework/Versions/A/Trial -0x00000001b3e98000 /System/Library/PrivateFrameworks/TrialProto.framework/Versions/A/TrialProto -0x0000000239ad6000 /System/Library/PrivateFrameworks/AppleFlatBuffers.framework/Versions/A/AppleFlatBuffers -0x000000026d7ae000 /System/Library/PrivateFrameworks/SentencePieceInternal.framework/Versions/A/SentencePieceInternal -0x000000019e3b6000 /System/Library/Frameworks/Vision.framework/Versions/A/Vision -0x0000000244ed4000 /System/Library/PrivateFrameworks/CoreSceneUnderstanding.framework/Versions/A/CoreSceneUnderstanding -0x000000027fe1b000 /System/Library/PrivateFrameworks/VisionCore.framework/Versions/A/VisionCore -0x000000019862c000 /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore -0x00000001bc7fd000 /System/Library/Frameworks/Vision.framework/libfaceCore.dylib -0x00000001bd317000 /System/Library/PrivateFrameworks/Futhark.framework/Versions/A/Futhark -0x00000001c1265000 /System/Library/PrivateFrameworks/InertiaCam.framework/Versions/A/InertiaCam -0x00000001bd0a4000 /System/Library/PrivateFrameworks/TextRecognition.framework/Versions/A/TextRecognition -0x000000022d719000 /System/Library/Frameworks/DataDetection.framework/Versions/A/DataDetection -0x00000001b72b0000 /System/Library/PrivateFrameworks/TextInput.framework/Versions/A/TextInput -0x00000001970da000 /System/Library/PrivateFrameworks/CVNLP.framework/Versions/A/CVNLP -0x00000001d9945000 /System/Library/PrivateFrameworks/HIDDisplay.framework/Versions/A/HIDDisplay -0x0000000199e91000 /usr/lib/libcups.2.dylib -0x0000000199f28000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos -0x0000000199b98000 /usr/lib/libresolv.9.dylib -0x0000000197594000 /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal -0x00000001a2d3c000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Libraries/libHeimdalProxy.dylib -0x0000000199f8c000 /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth -0x00000001ac04a000 /System/Library/PrivateFrameworks/AXCoreUtilities.framework/Versions/A/AXCoreUtilities -0x00000001bc646000 /System/Library/PrivateFrameworks/AttributeGraph.framework/Versions/A/AttributeGraph -0x000000028943d000 /usr/lib/libAXSafeCategoryBundle.dylib -0x0000000233e8e000 /System/Library/Frameworks/TabularData.framework/Versions/A/TabularData -0x000000023ad59000 /System/Library/PrivateFrameworks/ArgumentParserInternal.framework/Versions/A/ArgumentParserInternal -0x000000019469a000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib -0x0000000195c8f000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib -0x0000000194bd1000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib -0x0000000195b03000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib -0x0000000195c8a000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib -0x0000000193611000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib -0x0000000186e5d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib -0x000000022d1fe000 /System/Library/Frameworks/CoreTransferable.framework/Versions/A/CoreTransferable -0x0000000199ef0000 /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth -0x00000001904f0000 /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport -0x000000018b68d000 /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation -0x0000000194b39000 /usr/lib/libCheckFix.dylib -0x000000018f677000 /System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities -0x0000000255603000 /System/Library/PrivateFrameworks/InstalledContentLibrary.framework/Versions/A/InstalledContentLibrary -0x0000000189dce000 /System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore -0x000000019033b000 /usr/lib/libapp_launch_measurement.dylib -0x00000001c6dce000 /System/Library/PrivateFrameworks/MobileSystemServices.framework/Versions/A/MobileSystemServices -0x0000000196f5f000 /usr/lib/libxslt.1.dylib -0x0000000194af8000 /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement -0x00000001a23ce000 /usr/lib/libcurl.4.dylib -0x000000028a153000 /usr/lib/libcrypto.46.dylib -0x000000028acd6000 /usr/lib/libssl.48.dylib -0x00000001a20a8000 /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP -0x00000001a20e4000 /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent -0x0000000199bb5000 /usr/lib/libsasl2.2.dylib -0x00000001a534c000 /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa -0x0000000189f69000 /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit -0x000000023ec0a000 /System/Library/PrivateFrameworks/CollectionViewCore.framework/Versions/A/CollectionViewCore -0x0000000192bab000 /System/Library/PrivateFrameworks/XCTTargetBootstrap.framework/Versions/A/XCTTargetBootstrap -0x000000019867e000 /System/Library/PrivateFrameworks/UserActivity.framework/Versions/A/UserActivity -0x00000002486ec000 /System/Library/PrivateFrameworks/FrontBoard.framework/Versions/A/FrontBoard -0x000000027cbdb000 /System/Library/PrivateFrameworks/UIIntelligenceSupport.framework/Versions/A/UIIntelligenceSupport -0x0000000232f17000 /System/Library/Frameworks/SwiftUICore.framework/Versions/A/SwiftUICore -0x0000000283787000 /System/Library/PrivateFrameworks/WritingTools.framework/Versions/A/WritingTools -0x000000028257e000 /System/Library/PrivateFrameworks/WindowManagement.framework/Versions/A/WindowManagement -0x000000024841c000 /System/Library/PrivateFrameworks/FocusEngine.framework/Versions/A/FocusEngine -0x0000000245e25000 /System/Library/PrivateFrameworks/DesignLibrary.framework/Versions/A/DesignLibrary -0x0000000192b96000 /System/Library/PrivateFrameworks/DFRFoundation.framework/Versions/A/DFRFoundation -0x000000027db28000 /System/Library/PrivateFrameworks/UpdateCycle.framework/Versions/A/UpdateCycle -0x000000019289a000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox -0x000000019dc7c000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition -0x00000001902c2000 /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis -0x000000019e00c000 /System/Library/Frameworks/Accessibility.framework/Versions/A/Accessibility -0x0000000233e74000 /System/Library/Frameworks/Symbols.framework/Versions/A/Symbols -0x00000002519e8000 /System/Library/PrivateFrameworks/Gestures.framework/Versions/A/Gestures -0x000000028b0fe000 /usr/lib/swift/libswiftSpatial.dylib -0x00000001b028a000 /usr/lib/swift/libswiftCoreGraphics.dylib -0x000000019ea50000 /usr/lib/swift/libswiftFoundation.dylib -0x00000001eaa6e000 /usr/lib/swift/libswiftSwiftOnoneSupport.dylib -0x000000028b384000 /usr/lib/swift/libswiftsys_time.dylib -0x00000001d55db000 /System/Library/PrivateFrameworks/CoreMaterial.framework/Versions/A/CoreMaterial -0x000000028993a000 /usr/lib/libSpatial.dylib -0x000000028935a000 /System/Library/SubFrameworks/UIUtilities.framework/Versions/A/UIUtilities -0x0000000105b3c000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/server/libjvm.dylib -0x00000001048f4000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjimage.dylib -0x0000000104950000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjdwp.dylib -0x0000000104998000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjava.dylib -0x0000000104924000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libinstrument.dylib -0x0000000104a0c000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libzip.dylib -0x000000028942f000 /usr/lib/i18n/libiconv_std.dylib -0x0000000289425000 /usr/lib/i18n/libUTF8.dylib -0x0000000289434000 /usr/lib/i18n/libmapper_none.dylib -0x0000000104a98000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libdt_socket.dylib -0x0000000104b90000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnio.dylib -0x0000000104bd4000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnet.dylib -0x0000000104b70000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement.dylib -0x0000000104bb0000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement_ext.dylib -0x0000000104f00000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libextnet.dylib -0x0000000104f30000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libverify.dylib - - -VM Arguments: -jvm_args: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:57772,suspend=y,server=n -javaagent:/Users/liangxin/Library/Caches/JetBrains/IntelliJIdea2026.1/captureAgent/debugger-agent.jar=file:///var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/capture2936228657643338079.props -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Ddebugger.async.stack.trace.for.all.threads=true -Dfile.encoding=UTF-8 -java_command: org.springblade.transport.TransportApplication -java_class_path (initial): /Users/liangxin/Project/JAVA/tms-erp-api/blade-service/blade-transport/target/classes:/Users/liangxin/.m2/repository/org/springblade/blade-core-boot/4.10.0.BASE-SNAPSHOT/blade-core-boot-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/org/springblade/blade-core-context/4.10.0.BASE-SNAPSHOT/blade-core-context-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/org/springblade/blade-core-db/4.10.0.BASE-SNAPSHOT/blade-core-db-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-starter-jdbc/3.5.16/spring-boot-starter-jdbc-3.5.16.jar:/Users/liangxin/.m2/repository/com/zaxxer/HikariCP/6.3.3/HikariCP-6.3.3.jar:/Users/liangxin/.m2/repository/com/baomidou/mybatis-plus-spring-boot3-starter/3.5.16/mybatis-plus-spring-boot3-starter-3.5.16.jar:/Users/liangxin/.m2/repository/com/alibaba/druid-spring-boot-3-starter/1.2.28/druid-spring-boot-3-starter-1.2.28.jar:/Users/liangxin/.m2/repository/com/mysql/mysql-connector-j/9.4.0/mysql-connector-j-9.4.0.jar:/Users/liangxin/.m2/repository/com/google/protobuf/protobuf-java/4.31.1/protobuf-java-4.31.1.jar:/Users/liangxin/.m2/repository/org/springblade/blade-core-secure/4.10.0.BASE-SNAPSHOT/blade-core-secure-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/org/springblade/blade-core-cloud/4.10.0.BASE-SNAPSHOT/blade-core-cloud-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/de/codecentric/spring-boot-admin-starter-client/3.5.9/spring-boot-admin-starter-client-3.5.9.jar:/Users/liangxin/.m2/repository/de/codecentric/spring-boot-admin-client/3.5.9/spring-boot-admin-client-3.5.9.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-starter-actuator/3.5.16/spring-boot-starter-actuator-3.5.16.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-actuator-autoconfigure/3.5.16/spring-boot-actuator-autoconfigure-3.5.16.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-actuator/3.5.16/spring-boot-act -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 3 {product} {ergonomic} - uint G1ConcRefinementThreads = 10 {product} {ergonomic} - size_t G1HeapRegionSize = 8388608 {product} {ergonomic} - uintx GCDrainStackTargetSize = 64 {product} {ergonomic} - size_t InitialHeapSize = 603979776 {product} {ergonomic} - bool ManagementServer = true {product} {command line} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MaxHeapSize = 9663676416 {product} {ergonomic} - size_t MaxNewSize = 5796528128 {product} {ergonomic} - size_t MinHeapDeltaBytes = 8388608 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonProfiledCodeHeapSize = 0 {pd product} {ergonomic} - bool ProfileInterpreter = false {pd product} {command line} - uintx ProfiledCodeHeapSize = 0 {pd product} {ergonomic} - size_t SoftMaxHeapSize = 9663676416 {manageable} {ergonomic} - intx TieredStopAtLevel = 1 {product} {command line} - bool UseCompressedClassPointers = true {product lp64_product} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - bool UseNUMA = false {product} {ergonomic} - bool UseNUMAInterleaving = false {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags - #1: stderr all=off uptime,level,tags - -Environment Variables: -JAVA_HOME=/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home -PATH=/Users/liangxin/ai-infra/.venv/bin:/Users/liangxin/.nacos/bin:/Applications/Docker.app/Contents/Resources/bin:/Users/liangxin/Library/pnpm:/opt/homebrew/opt/ruby@3.2/bin:/opt/homebrew/opt/openssl@3/bin:/opt/miniconda3/bin:/opt/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home/bin:/Users/liangxin/fvm/default/bin:/Applications/MAMP/bin/php/php8.1.13/bin:/opt/homebrew/opt/ruby@3.2/bin:/Users/liangxin/.nvm/versions/node/v20.18.3/bin:/Applications/apache-tomcat-9.0.78:/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home/bin:/Users/liangxin/fvm/default/bin:/opt/homebrew/opt/libpng/bin:/Applications/pngquant:/Users/liangxin/AndroidSDK/platform-tools:/Users/liangxin/Library/Android/sdk/platform-tools:/Users/liangxin/Library/Andriod/sdk/cmdline-tools/latest/bin:/Users/liangxin/Library/Andriod/sdk:/Applications/apache-maven-3.8.1/bin:/opt/homebrew/bin:/usr/local/sbin:/usr/local/bin:/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/Users/liangxin/.local/bin:/Users/liangxin/fvm/default/bin:/Applications/MAMP/bin/php/php8.1.13/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin:/Library/Apple/usr/bin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/liangxin/.cargo/bin:true:/Applications/极空间.app/Contents/Resources/app.asar.unpacked/bin/platform-tools -SHELL=/bin/zsh -LANG=C.UTF-8 -TMPDIR=/var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/ - -Active Locale: -LC_ALL=C.UTF-8 -LC_COLLATE=C.UTF-8 -LC_CTYPE=C.UTF-8 -LC_MESSAGES=C.UTF-8 -LC_MONETARY=C.UTF-8 -LC_NUMERIC=C.UTF-8 -LC_TIME=C.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.dylib, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - - ---------------- S Y S T E M --------------- - -OS: -uname: Darwin 25.6.0 Darwin Kernel Version 25.6.0: Fri Jul 31 19:16:36 PDT 2026; root:xnu-12377.161.14~5/RELEASE_ARM64_T6030 arm64 -OS uptime: 3 days 11:55 hours -rlimit (soft/hard): STACK 8176k/65520k , CORE 0k/infinity , NPROC 6000/9000 , NOFILE 10240/65536 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK infinity/infinity , RSS infinity/infinity -load average: 13.76 8.45 9.16 - -CPU: total 12 (initial active 12) 0x61:0x0:0x5f4dea93:0, fp, simd, crc, lse -machdep.cpu.brand_string:Apple M3 Pro -hw.cachelinesize:128 -hw.l1icachesize:131072 -hw.l1dcachesize:65536 -hw.l2cachesize:4194304 - -Memory: 16k page, physical 37748736k(1387216k free), swap 12582912k(791104k free) - -vm_info: OpenJDK 64-Bit Server VM (17.0.8+7-LTS) for bsd-aarch64 JRE (17.0.8+7-LTS) (Zulu17.44+15-CA), built on Jul 5 2023 00:50:04 by "zulu_re" with clang Apple LLVM 12.0.0 (clang-1200.0.32.28) - -END. diff --git a/hs_err_pid40988.log b/hs_err_pid40988.log deleted file mode 100644 index 52e4b4ea..00000000 --- a/hs_err_pid40988.log +++ /dev/null @@ -1,1368 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGBUS (0xa) at pc=0x00000001046de4c0, pid=40988, tid=36131 -# -# JRE version: OpenJDK Runtime Environment Zulu17.44+15-CA (17.0.8+7) (build 17.0.8+7-LTS) -# Java VM: OpenJDK 64-Bit Server VM Zulu17.44+15-CA (17.0.8+7-LTS, mixed mode, emulated-client, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64) -# Problematic frame: -# C [libzip.dylib+0x64c0] newEntry+0x68 -# -# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again -# -# If you would like to submit a bug report, please visit: -# http://www.azul.com/support/ -# The crash happened outside the Java Virtual Machine in native code. -# See problematic frame for where to report the bug. -# - ---------------- S U M M A R Y ------------ - -Command Line: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:49167,suspend=y,server=n -javaagent:/Users/liangxin/Library/Caches/JetBrains/IntelliJIdea2026.1/captureAgent/debugger-agent.jar=file:///var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/capture18007844485071508468.props -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Ddebugger.async.stack.trace.for.all.threads=true -Dfile.encoding=UTF-8 org.springblade.resource.ResourceApplication - -Host: "Mac15,6" arm64, 12 cores, 36G, Darwin 25.6.0, macOS 26.6.2 (25G83) -Time: Thu Sep 17 20:22:18 2026 CST elapsed time: 7.706668 seconds (0d 0h 0m 7s) - ---------------- T H R E A D --------------- - -Current thread (0x000000010fa93c00): JavaThread "sentinel-datafile-log-executor-thread-1" daemon [_thread_in_native, id=36131, stack(0x0000000318210000,0x0000000318413000)] - -Stack: [0x0000000318210000,0x0000000318413000], sp=0x00000003184119d0, free space=2054k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libzip.dylib+0x64c0] newEntry+0x68 -C [libzip.dylib+0x6390] ZIP_GetEntry2+0x14c -C [libzip.dylib+0x6d78] ZIP_FindEntry+0x3c -V [libjvm.dylib+0x25a408] ClassPathZipEntry::open_entry(JavaThread*, char const*, int*, bool)+0xb4 -V [libjvm.dylib+0x25a53c] ClassPathZipEntry::open_stream(JavaThread*, char const*)+0x20 -V [libjvm.dylib+0x25d918] ClassLoader::load_class(Symbol*, bool, JavaThread*)+0x150 -V [libjvm.dylib+0x981d60] SystemDictionary::load_instance_class_impl(Symbol*, Handle, JavaThread*)+0x2d0 -V [libjvm.dylib+0x98063c] SystemDictionary::load_instance_class(unsigned int, Symbol*, Handle, JavaThread*)+0x30 -V [libjvm.dylib+0x97fd48] SystemDictionary::resolve_instance_class_or_null(Symbol*, Handle, Handle, JavaThread*)+0x4dc -V [libjvm.dylib+0x97f334] SystemDictionary::resolve_or_fail(Symbol*, Handle, Handle, bool, JavaThread*)+0x80 -V [libjvm.dylib+0x2beb54] ConstantPool::klass_at_impl(constantPoolHandle const&, int, JavaThread*)+0x1e0 -V [libjvm.dylib+0x46d6f0] InterpreterRuntime::_new(JavaThread*, ConstantPool*, int)+0x94 -j com.intellij.rt.debugger.agent.CaptureStorage$DeepCapturedStack.collectStacks(Ljava/util/List;)Lcom/intellij/rt/debugger/agent/CaptureStorage$StackData;+89 -j com.intellij.rt.debugger.agent.CaptureStorage.getStackTrace(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+30 -j com.intellij.rt.debugger.agent.CaptureStorage.access$1000(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+2 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()[Ljava/lang/StackTraceElement;+31 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()Ljava/lang/Object;+1 -j com.intellij.rt.debugger.agent.CaptureStorage.withoutThrowableCapture(Lcom/intellij/rt/debugger/agent/CaptureStorage$Callable;)Ljava/lang/Object;+21 -j com.intellij.rt.debugger.agent.CaptureStorage.getAsyncStackTrace(Ljava/lang/Throwable;)[Ljava/lang/StackTraceElement;+19 -j java.lang.Throwable.printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V+32 java.base@17.0.8 -j java.lang.Throwable.printStackTrace(Ljava/io/PrintWriter;)V+9 java.base@17.0.8 -j com.alibaba.csp.sentinel.log.jul.CspFormatter.format(Ljava/util/logging/LogRecord;)Ljava/lang/String;+103 -j java.util.logging.StreamHandler.publish(Ljava/util/logging/LogRecord;)V+14 java.logging@17.0.8 -j java.util.logging.FileHandler.publish(Ljava/util/logging/LogRecord;)V+11 java.logging@17.0.8 -j com.alibaba.csp.sentinel.log.jul.DateFileLogHandler$LogTask.run()V+8 -j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+92 java.base@17.0.8 -j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5 java.base@17.0.8 -j java.lang.Thread.run()V+11 java.base@17.0.8 -v ~StubRoutines::call_stub -V [libjvm.dylib+0x4781f8] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x394 -V [libjvm.dylib+0x47720c] JavaCalls::call_virtual(JavaValue*, Klass*, Symbol*, Symbol*, JavaCallArguments*, JavaThread*)+0x11c -V [libjvm.dylib+0x4772d8] JavaCalls::call_virtual(JavaValue*, Handle, Klass*, Symbol*, Symbol*, JavaThread*)+0x64 -V [libjvm.dylib+0x52ebfc] thread_entry(JavaThread*, JavaThread*)+0xc4 -V [libjvm.dylib+0x9b22e8] JavaThread::thread_main_inner()+0x150 -V [libjvm.dylib+0x9b0990] Thread::call_run()+0xe0 -V [libjvm.dylib+0x7d0364] thread_native_entry(Thread*)+0x158 -C [libsystem_pthread.dylib+0x6c58] _pthread_start+0x88 - -Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) -j com.intellij.rt.debugger.agent.CaptureStorage$DeepCapturedStack.collectStacks(Ljava/util/List;)Lcom/intellij/rt/debugger/agent/CaptureStorage$StackData;+89 -j com.intellij.rt.debugger.agent.CaptureStorage.getStackTrace(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+30 -j com.intellij.rt.debugger.agent.CaptureStorage.access$1000(Lcom/intellij/rt/debugger/agent/CaptureStorage$CapturedStack;I)Ljava/util/ArrayList;+2 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()[Ljava/lang/StackTraceElement;+31 -j com.intellij.rt.debugger.agent.CaptureStorage$9.call()Ljava/lang/Object;+1 -j com.intellij.rt.debugger.agent.CaptureStorage.withoutThrowableCapture(Lcom/intellij/rt/debugger/agent/CaptureStorage$Callable;)Ljava/lang/Object;+21 -j com.intellij.rt.debugger.agent.CaptureStorage.getAsyncStackTrace(Ljava/lang/Throwable;)[Ljava/lang/StackTraceElement;+19 -j java.lang.Throwable.printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V+32 java.base@17.0.8 -j java.lang.Throwable.printStackTrace(Ljava/io/PrintWriter;)V+9 java.base@17.0.8 -j com.alibaba.csp.sentinel.log.jul.CspFormatter.format(Ljava/util/logging/LogRecord;)Ljava/lang/String;+103 -j java.util.logging.StreamHandler.publish(Ljava/util/logging/LogRecord;)V+14 java.logging@17.0.8 -j java.util.logging.FileHandler.publish(Ljava/util/logging/LogRecord;)V+11 java.logging@17.0.8 -j com.alibaba.csp.sentinel.log.jul.DateFileLogHandler$LogTask.run()V+8 -j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+92 java.base@17.0.8 -j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5 java.base@17.0.8 -j java.lang.Thread.run()V+11 java.base@17.0.8 -v ~StubRoutines::call_stub - -siginfo: si_signo: 10 (SIGBUS), si_code: 1 (BUS_ADRALN), si_addr: 0x00000001046c5e7b - -Register to memory mapping: - - x0=0x0000600000694eb0 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x1=0x0 is NULL - x2=0x0 is NULL - x3=0x0000600000694ec0 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 - x4=0x0000600000694f00 points into unknown readable memory: 0x0000600003c95440 | 40 54 c9 03 00 60 00 00 - x5=0x000000009d64e030 is an unknown value - x6=0x0000000000000eb0 is an unknown value - x7=0x000000000000000a is an unknown value - x8=0x00000001047ede5f: gdata+0xcbf7 in /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjdwp.dylib at 0x00000001047a8000 - x9=0x0000000000128000 is an unknown value -x10=0x0000600000694eb0 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 -x11=0x000066d8c3c50000 is an unknown value -x12=0x0000000000000050 is an unknown value -x13=0x000060000242e518 points into unknown readable memory: 0x000000009d84d82f | 2f d8 84 9d 00 00 00 00 -x14=0x00000000001ff800 is an unknown value -x15=0x00000000000007fb is an unknown value -x16=0x0000000186e7d030: __bzero+0 in /usr/lib/system/libsystem_platform.dylib at 0x0000000186e7a000 -x17=0x00000001f4ef54a8 points into unknown readable memory: 0x0000000186e7d030 | 30 d0 e7 86 01 00 00 00 -x18=0x0 is NULL -x19=0x0000600000694eb0 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 -x20=0x0 is NULL -x21=0x0000600001324000 points into unknown readable memory: 0x00006000002382a0 | a0 82 23 00 00 60 00 00 -x22=0x00000001046c5e5f points into unknown readable memory: 50 -x23=0x00000000d3a18b02 is an unknown value -x24=0x000000000000002f is an unknown value -x25=0x000000000000003d is an unknown value -x26=0x00000000000000cd is an unknown value -x27=0x0000600000694ed8 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 -x28=0x0000000105127d40 points into unknown readable memory: 0x65746e692f6d6f63 | 63 6f 6d 2f 69 6e 74 65 - - -Registers: - x0=0x0000600000694eb0 x1=0x0000000000000000 x2=0x0000000000000000 x3=0x0000600000694ec0 - x4=0x0000600000694f00 x5=0x000000009d64e030 x6=0x0000000000000eb0 x7=0x000000000000000a - x8=0x00000001047ede5f x9=0x0000000000128000 x10=0x0000600000694eb0 x11=0x000066d8c3c50000 -x12=0x0000000000000050 x13=0x000060000242e518 x14=0x00000000001ff800 x15=0x00000000000007fb -x16=0x0000000186e7d030 x17=0x00000001f4ef54a8 x18=0x0000000000000000 x19=0x0000600000694eb0 -x20=0x0000000000000000 x21=0x0000600001324000 x22=0x00000001046c5e5f x23=0x00000000d3a18b02 -x24=0x000000000000002f x25=0x000000000000003d x26=0x00000000000000cd x27=0x0000600000694ed8 -x28=0x0000000105127d40 fp=0x0000000318411a50 lr=0x00000001046de48c sp=0x00000003184119d0 -pc=0x00000001046de4c0 cpsr=0x0000000060001000 -Top of Stack: (sp=0x00000003184119d0) -0x00000003184119d0: 0000000000000000 0000000000000000 -0x00000003184119e0: 0000000000000000 0000000000000000 -0x00000003184119f0: 0000000000000000 0000000000000000 -0x0000000318411a00: 0000000105127d40 0000000107809600 -0x0000000318411a10: 00000000000000cd 000000000000003d -0x0000000318411a20: 000000000000002f 00000000d3a18b02 -0x0000000318411a30: 0000600000694f00 0000000000000000 -0x0000000318411a40: 0000000105127d80 0000600001324000 -0x0000000318411a50: 0000000318411ab0 00000001046de390 -0x0000000318411a60: 0000000105127d40 0000000000000037 -0x0000000318411a70: 0000000000000001 0000000105127d80 -0x0000000318411a80: 000000010fa93f48 0000000105127d80 -0x0000000318411a90: 0000600001324000 0000000105127d80 -0x0000000318411aa0: 0000000318411bdc 0000000318411af4 -0x0000000318411ab0: 0000000318411ae0 00000001046ded78 -0x0000000318411ac0: 0000000318411bdc 00006000028341e0 -0x0000000318411ad0: 0000000000000000 000000010fa93c00 -0x0000000318411ae0: 0000000318411bc0 0000000105a1a408 -0x0000000318411af0: 0000000106278388 0000000000000100 -0x0000000318411b00: 0000000318411b20 0000000105cee5dc -0x0000000318411b10: 0000000106278388 0000000318411ba0 -0x0000000318411b20: 0000000318411b70 0000000105aa096c -0x0000000318411b30: 0000000000000000 0000000000000000 -0x0000000318411b40: 0000000000000001 0000000158a50290 -0x0000000318411b50: 000000010fa93c00 0000000105128118 -0x0000000318411b60: 000000010628d1e2 0000000318411c68 -0x0000000318411b70: 0000000318411b90 43eef1f7fdfa0026 -0x0000000318411b80: 0000000000000001 0000000105127d80 -0x0000000318411b90: 00006000028341e0 0000000158a50290 -0x0000000318411ba0: 000000010fa93c00 0000000105128118 -0x0000000318411bb0: 0000000105127d30 00006000028341e0 -0x0000000318411bc0: 0000000318411bf0 0000000105a1a53c - -Instructions: (pc=0x00000001046de4c0) -0x00000001046de3c0: 6b0c017f 54ffff60 17ffffde d2800016 -0x00000001046de3d0: 72001ebf 54000160 b5000156 f100073f -0x00000001046de3e0: 54fff7cb 8b140328 385ff108 7100bd1f -0x00000001046de3f0: 54fff741 d2800016 14000002 f9004e7f -0x00000001046de400: f9402a60 94000451 aa1603e0 a9457bfd -0x00000001046de410: a9444ff4 a94357f6 a9425ff8 a94167fa -0x00000001046de420: a8c66ffc d65f03c0 6b03003f 540000e1 -0x00000001046de430: 71000421 540000eb 38401408 38401449 -0x00000001046de440: 6b09011f 54ffff60 52800000 d65f03c0 -0x00000001046de450: 52800020 d65f03c0 d10243ff a9036ffc -0x00000001046de460: a90467fa a9055ff8 a90657f6 a9074ff4 -0x00000001046de470: a9087bfd 910203fd aa0203f4 aa0103f6 -0x00000001046de480: aa0003f5 52800900 94000481 aa0003f3 -0x00000001046de490: b4001320 f900027f aa1303fb f8028f7f -0x00000001046de4a0: f9001a7f 3940c2a8 34000288 f9400ea8 -0x00000001046de4b0: f94006c9 8b090108 f94016a9 cb090116 -0x00000001046de4c0: 79403ad8 39407ada 39407edc 794042c8 -0x00000001046de4d0: f90017e8 b9400ec8 f9000668 b9401ac8 -0x00000001046de4e0: f9000fe8 f9000a68 794016c8 34000488 -0x00000001046de4f0: b94016c8 14000023 f94006d7 34000d54 -0x00000001046de500: f9401ea8 b4000288 f94022a9 eb17013f -0x00000001046de510: 5400022c 5283fa4a 8b0a012a eb17015f -0x00000001046de520: 540001ab 9140092a 8b170108 cb090116 -0x00000001046de530: 79403ac8 79403ec9 794042cb 8b0802e8 -0x00000001046de540: 8b090108 8b0b0108 9100b908 eb0a011f -0x00000001046de550: 54000b4d aa1503e0 aa1703e1 52840002 -0x00000001046de560: 94000384 aa0003f6 b4000aa0 f9401ea0 -0x00000001046de570: 94000429 a903deb6 17ffffd2 d2800008 -0x00000001046de580: aa0803f7 f9000e68 b94012c8 b9002268 -0x00000001046de590: b842a2c9 f9405ea8 f9000be9 8b090108 -0x00000001046de5a0: cb0803e8 f9001e68 794012c8 b9004268 -0x00000001046de5b0: 91000700 94000436 aa0003f9 f9000260 - - -Stack slot to memory mapping: -stack at sp + 0 slots: 0x0 is NULL -stack at sp + 1 slots: 0x0 is NULL -stack at sp + 2 slots: 0x0 is NULL -stack at sp + 3 slots: 0x0 is NULL -stack at sp + 4 slots: 0x0 is NULL -stack at sp + 5 slots: 0x0 is NULL -stack at sp + 6 slots: 0x0000000105127d40 points into unknown readable memory: 0x65746e692f6d6f63 | 63 6f 6d 2f 69 6e 74 65 -stack at sp + 7 slots: 0x0000000107809600 points into unknown readable memory: 0xffffffff5bbd78a2 | a2 78 bd 5b ff ff ff ff - - ---------------- P R O C E S S --------------- - -Threads class SMR info: -_java_thread_list=0x000060000217cce0, length=71, elements={ -0x0000000107808a00, 0x000000011b808200, 0x000000010f813a00, 0x0000000107009200, -0x0000000107009800, 0x000000011e014a00, 0x000000011b00c400, 0x0000000107823800, -0x000000011c00a200, 0x000000011a813c00, 0x000000011a816400, 0x000000011e80fa00, -0x000000011a0d9600, 0x000000010f812c00, 0x000000011e02fe00, 0x000000011b1b6800, -0x000000011a573600, 0x000000011c8e8800, 0x000000011b960000, 0x0000000107024a00, -0x000000011f3d8600, 0x000000011eba7600, 0x000000010f9e0600, 0x000000011f41b600, -0x000000011c068400, 0x000000011f47fc00, 0x000000011c047c00, 0x000000011f440200, -0x000000011b404800, 0x000000011f4a3a00, 0x000000011c07bc00, 0x000000011c095c00, -0x000000011b95a800, 0x000000011e499200, 0x000000011e4bd000, 0x000000011b4a8800, -0x000000011a66aa00, 0x000000011f504600, 0x000000011ad0cc00, 0x000000011f598a00, -0x000000011b9bb000, 0x000000011a693400, 0x000000011f3e9600, 0x0000000107978800, -0x0000000107973c00, 0x0000000107934000, 0x0000000107961000, 0x000000011b989600, -0x000000011ad8e400, 0x000000011ad93000, 0x000000011e4a8000, 0x000000011b52f200, -0x000000011b9a0a00, 0x000000011a69d400, 0x000000011b563c00, 0x000000010fa93c00, -0x000000011b5a3a00, 0x000000011e51f600, 0x000000011f65ba00, 0x000000011b62e600, -0x000000011edd6200, 0x000000011edf8e00, 0x000000011f67a800, 0x000000011ae25600, -0x000000011ae41800, 0x000000011ae41e00, 0x000000011edf4400, 0x000000011edef000, -0x000000011b3b4400, 0x0000000107ada400, 0x000000011b77a400 -} - -Java Threads: ( => current thread ) - 0x0000000107808a00 JavaThread "main" [_thread_in_native, id=4355, stack(0x000000016b888000,0x000000016ba8b000)] - 0x000000011b808200 JavaThread "Reference Handler" daemon [_thread_blocked, id=18179, stack(0x000000016c6dc000,0x000000016c8df000)] - 0x000000010f813a00 JavaThread "Finalizer" daemon [_thread_blocked, id=18947, stack(0x000000016c8e8000,0x000000016caeb000)] - 0x0000000107009200 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=31235, stack(0x000000016cc0c000,0x000000016ce0f000)] - 0x0000000107009800 JavaThread "Service Thread" daemon [_thread_blocked, id=30723, stack(0x000000016ce18000,0x000000016d01b000)] - 0x000000011e014a00 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=23299, stack(0x000000016d024000,0x000000016d227000)] - 0x000000011b00c400 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=30211, stack(0x000000016d230000,0x000000016d433000)] - 0x0000000107823800 JavaThread "Sweeper thread" daemon [_thread_blocked, id=24067, stack(0x000000016d43c000,0x000000016d63f000)] - 0x000000011c00a200 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=24579, stack(0x000000016d648000,0x000000016d84b000)] - 0x000000011a813c00 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=25091, stack(0x000000016d854000,0x000000016da57000)] - 0x000000011a816400 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=29699, stack(0x000000016da60000,0x000000016dc63000)] - 0x000000011e80fa00 JavaThread "JDWP Command Reader" daemon [_thread_in_native, id=29443, stack(0x000000016dc6c000,0x000000016de6f000)] - 0x000000011a0d9600 JavaThread "IntelliJ Suspend Helper" daemon [_thread_blocked, id=28931, stack(0x000000016de78000,0x000000016e07b000)] - 0x000000010f812c00 JavaThread "Notification Thread" daemon [_thread_blocked, id=25603, stack(0x000000016e084000,0x000000016e287000)] - 0x000000011e02fe00 JavaThread "CoarseTimer" daemon [_thread_blocked, id=28163, stack(0x000000016e290000,0x000000016e493000)] - 0x000000011b1b6800 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=34307, stack(0x000000016f708000,0x000000016f90b000)] - 0x000000011a573600 JavaThread "com.alibaba.nacos.client.logging.0" daemon [_thread_blocked, id=35331, stack(0x000000016fb20000,0x000000016fd23000)] - 0x000000011c8e8800 JavaThread "Attach Listener" daemon [_thread_blocked, id=42243, stack(0x000000016fd2c000,0x000000016ff2f000)] - 0x000000011b960000 JavaThread "RMI TCP Connection(1)-127.0.0.1" daemon [_thread_in_native, id=40963, stack(0x0000000318a40000,0x0000000318c43000)] - 0x0000000107024a00 JavaThread "nacos.publisher-com.alibaba.nacos.common.notify.SlowEvent" daemon [_thread_blocked, id=37635, stack(0x0000000318c4c000,0x0000000318e4f000)] - 0x000000011f3d8600 JavaThread "nacos.publisher-com.alibaba.nacos.client.config.impl.ConfigFuzzyWatchNotifyEvent" daemon [_thread_blocked, id=40451, stack(0x0000000318e58000,0x000000031905b000)] - 0x000000011eba7600 JavaThread "nacos.publisher-com.alibaba.nacos.client.config.impl.ConfigFuzzyWatchLoadEvent" daemon [_thread_blocked, id=39939, stack(0x0000000319064000,0x0000000319267000)] - 0x000000010f9e0600 JavaThread "RMI Scheduler(0)" daemon [_thread_blocked, id=38915, stack(0x0000000319688000,0x000000031988b000)] - 0x000000011f41b600 JavaThread "com.alibaba.nacos.client.auth.ram.identify.watcher.0" daemon [_thread_blocked, id=43527, stack(0x0000000319894000,0x0000000319a97000)] - 0x000000011c068400 JavaThread "com.alibaba.nacos.client.login-executor.0" daemon [_thread_blocked, id=37127, stack(0x0000000318834000,0x0000000318a37000)] - 0x000000011f47fc00 JavaThread "com.alibaba.nacos.client.listen-executor.0" daemon [_thread_blocked, id=43779, stack(0x0000000319aa0000,0x0000000319ca3000)] - 0x000000011c047c00 JavaThread "com.alibaba.nacos.client.fuzzy-watcher-executor.0" daemon [_thread_blocked, id=44291, stack(0x0000000319cac000,0x0000000319eaf000)] - 0x000000011f440200 JavaThread "com.alibaba.nacos.client.remote.worker.0" daemon [_thread_blocked, id=44803, stack(0x0000000319eb8000,0x000000031a0bb000)] - 0x000000011b404800 JavaThread "com.alibaba.nacos.client.remote.worker.1" daemon [_thread_blocked, id=64771, stack(0x000000031a0c4000,0x000000031a2c7000)] - 0x000000011f4a3a00 JavaThread "grpc-nio-worker-ELG-1-1" daemon [_thread_in_native, id=64531, stack(0x000000031a2d0000,0x000000031a4d3000)] - 0x000000011c07bc00 JavaThread "grpc-default-executor-0" daemon [_thread_blocked, id=64003, stack(0x000000031a4dc000,0x000000031a6df000)] - 0x000000011c095c00 JavaThread "nacos-grpc-client-executor-127.0.0.1-0" daemon [_thread_blocked, id=45315, stack(0x000000031a6e8000,0x000000031a8eb000)] - 0x000000011b95a800 JavaThread "nacos-grpc-client-executor-127.0.0.1-1" daemon [_thread_blocked, id=45827, stack(0x000000031a8f4000,0x000000031aaf7000)] - 0x000000011e499200 JavaThread "grpc-nio-worker-ELG-1-2" daemon [_thread_in_native, id=46083, stack(0x000000031ab00000,0x000000031ad03000)] - 0x000000011e4bd000 JavaThread "nacos-grpc-client-executor-127.0.0.1-2" daemon [_thread_blocked, id=46339, stack(0x000000031ad0c000,0x000000031af0f000)] - 0x000000011b4a8800 JavaThread "nacos-grpc-client-executor-127.0.0.1-3" daemon [_thread_blocked, id=62979, stack(0x000000031af18000,0x000000031b11b000)] - 0x000000011a66aa00 JavaThread "nacos-grpc-client-executor-127.0.0.1-4" daemon [_thread_blocked, id=62467, stack(0x000000031b124000,0x000000031b327000)] - 0x000000011f504600 JavaThread "nacos-grpc-client-executor-127.0.0.1-5" daemon [_thread_blocked, id=46851, stack(0x000000031b330000,0x000000031b533000)] - 0x000000011ad0cc00 JavaThread "nacos-grpc-client-executor-127.0.0.1-6" daemon [_thread_blocked, id=47363, stack(0x000000031b53c000,0x000000031b73f000)] - 0x000000011f598a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-7" daemon [_thread_blocked, id=61955, stack(0x000000031b748000,0x000000031b94b000)] - 0x000000011b9bb000 JavaThread "nacos.publisher-com.alibaba.nacos.common.ability.AbstractAbilityControlManager$AbilityUpdateEvent" daemon [_thread_blocked, id=61443, stack(0x000000031b954000,0x000000031bb57000)] - 0x000000011a693400 JavaThread "nacos-grpc-client-executor-127.0.0.1-8" daemon [_thread_blocked, id=47875, stack(0x000000031bb60000,0x000000031bd63000)] - 0x000000011f3e9600 JavaThread "nacos-grpc-client-executor-127.0.0.1-9" daemon [_thread_blocked, id=60931, stack(0x000000031bd6c000,0x000000031bf6f000)] - 0x0000000107978800 JavaThread "nacos-grpc-client-executor-127.0.0.1-10" daemon [_thread_blocked, id=48387, stack(0x000000031bf78000,0x000000031c17b000)] - 0x0000000107973c00 JavaThread "nacos-grpc-client-executor-127.0.0.1-11" daemon [_thread_blocked, id=48643, stack(0x000000031c184000,0x000000031c387000)] - 0x0000000107934000 JavaThread "nacos-grpc-client-executor-127.0.0.1-12" daemon [_thread_blocked, id=48899, stack(0x000000031c390000,0x000000031c593000)] - 0x0000000107961000 JavaThread "nacos-grpc-client-executor-127.0.0.1-13" daemon [_thread_blocked, id=49155, stack(0x000000031c59c000,0x000000031c79f000)] - 0x000000011b989600 JavaThread "nacos-grpc-client-executor-127.0.0.1-14" daemon [_thread_blocked, id=59395, stack(0x000000031c7a8000,0x000000031c9ab000)] - 0x000000011ad8e400 JavaThread "nacos-grpc-client-executor-127.0.0.1-15" daemon [_thread_blocked, id=49667, stack(0x000000031c9b4000,0x000000031cbb7000)] - 0x000000011ad93000 JavaThread "nacos-grpc-client-executor-127.0.0.1-16" daemon [_thread_blocked, id=58883, stack(0x000000031cbc0000,0x000000031cdc3000)] - 0x000000011e4a8000 JavaThread "nacos-grpc-client-executor-127.0.0.1-17" daemon [_thread_blocked, id=58627, stack(0x000000031cdcc000,0x000000031cfcf000)] - 0x000000011b52f200 JavaThread "nacos-grpc-client-executor-127.0.0.1-18" daemon [_thread_blocked, id=50435, stack(0x000000031cfd8000,0x000000031d1db000)] - 0x000000011b9a0a00 JavaThread "nacos-grpc-client-executor-127.0.0.1-19" daemon [_thread_blocked, id=50955, stack(0x000000031d1e4000,0x000000031d3e7000)] - 0x000000011a69d400 JavaThread "nacos-grpc-client-executor-127.0.0.1-20" daemon [_thread_blocked, id=51203, stack(0x000000031d3f0000,0x000000031d5f3000)] - 0x000000011b563c00 JavaThread "nacos-grpc-client-executor-127.0.0.1-21" daemon [_thread_blocked, id=51459, stack(0x000000031d5fc000,0x000000031d7ff000)] -=>0x000000010fa93c00 JavaThread "sentinel-datafile-log-executor-thread-1" daemon [_thread_in_native, id=36131, stack(0x0000000318210000,0x0000000318413000)] - 0x000000011b5a3a00 JavaThread "sentinel-command-center-executor-thread-1" daemon [_thread_in_native, id=36635, stack(0x0000000318628000,0x000000031882b000)] - 0x000000011e51f600 JavaThread "sentinel-heartbeat-send-task-thread-1" daemon [_thread_blocked, id=41523, stack(0x000000031841c000,0x000000031861f000)] - 0x000000011f65ba00 JavaThread "C1 CompilerThread1" daemon [_thread_blocked, id=36403, stack(0x0000000318004000,0x0000000318207000)] - 0x000000011b62e600 JavaThread "nacos-grpc-client-executor-127.0.0.1-22" daemon [_thread_blocked, id=57635, stack(0x000000031d808000,0x000000031da0b000)] - 0x000000011edd6200 JavaThread "nacos-grpc-client-executor-127.0.0.1-23" daemon [_thread_blocked, id=57095, stack(0x000000031da14000,0x000000031dc17000)] - 0x000000011edf8e00 JavaThread "nacos-grpc-client-executor-127.0.0.1-24" daemon [_thread_blocked, id=56579, stack(0x000000031dc20000,0x000000031de23000)] - 0x000000011f67a800 JavaThread "nacos-grpc-client-executor-127.0.0.1-25" daemon [_thread_blocked, id=51715, stack(0x000000031de2c000,0x000000031e02f000)] - 0x000000011ae25600 JavaThread "nacos-grpc-client-executor-127.0.0.1-26" daemon [_thread_blocked, id=56067, stack(0x000000031e038000,0x000000031e23b000)] - 0x000000011ae41800 JavaThread "nacos-grpc-client-executor-127.0.0.1-27" daemon [_thread_blocked, id=55555, stack(0x000000031e244000,0x000000031e447000)] - 0x000000011ae41e00 JavaThread "nacos-grpc-client-executor-127.0.0.1-28" daemon [_thread_blocked, id=52483, stack(0x000000031e450000,0x000000031e653000)] - 0x000000011edf4400 JavaThread "nacos-grpc-client-executor-127.0.0.1-29" daemon [_thread_blocked, id=55043, stack(0x000000031e65c000,0x000000031e85f000)] - 0x000000011edef000 JavaThread "nacos-grpc-client-executor-127.0.0.1-30" daemon [_thread_blocked, id=54787, stack(0x000000031e868000,0x000000031ea6b000)] - 0x000000011b3b4400 JavaThread "nacos-grpc-client-executor-127.0.0.1-31" daemon [_thread_blocked, id=54531, stack(0x000000031ea74000,0x000000031ec77000)] - 0x0000000107ada400 JavaThread "sentinel-time-tick-thread" daemon [_thread_blocked, id=32027, stack(0x000000031ec80000,0x000000031ee83000)] - 0x000000011b77a400 JavaThread "sentinel-heartbeat-send-task-thread-2" daemon [_thread_blocked, id=53555, stack(0x000000031ee8c000,0x000000031f08f000)] - -Other Threads: - 0x0000000104d04d00 VMThread "VM Thread" [stack: 0x000000016c4d0000,0x000000016c6d3000] [id=19715] - 0x0000000104c0a4f0 WatcherThread [stack: 0x000000016f914000,0x000000016fb17000] [id=34819] - 0x0000000104e067f0 GCTaskThread "GC Thread#0" [stack: 0x000000016ba94000,0x000000016bc97000] [id=12547] - 0x00000001051109e0 GCTaskThread "GC Thread#1" [stack: 0x000000016e49c000,0x000000016e69f000] [id=25859] - 0x0000000105214660 GCTaskThread "GC Thread#2" [stack: 0x000000016e6a8000,0x000000016e8ab000] [id=27395] - 0x000000010de05990 GCTaskThread "GC Thread#3" [stack: 0x000000016e8b4000,0x000000016eab7000] [id=26883] - 0x0000000105110e70 GCTaskThread "GC Thread#4" [stack: 0x000000016eac0000,0x000000016ecc3000] [id=26115] - 0x00000001051116f0 GCTaskThread "GC Thread#5" [stack: 0x000000016eccc000,0x000000016eecf000] [id=32771] - 0x0000000105111f70 GCTaskThread "GC Thread#6" [stack: 0x000000016eed8000,0x000000016f0db000] [id=43011] - 0x00000001051127f0 GCTaskThread "GC Thread#7" [stack: 0x000000016f0e4000,0x000000016f2e7000] [id=33283] - 0x0000000105113070 GCTaskThread "GC Thread#8" [stack: 0x000000016f2f0000,0x000000016f4f3000] [id=33795] - 0x0000000104809f30 GCTaskThread "GC Thread#9" [stack: 0x000000016f4fc000,0x000000016f6ff000] [id=42755] - 0x00000001050042b0 ConcurrentGCThread "G1 Main Marker" [stack: 0x000000016bca0000,0x000000016bea3000] [id=14083] - 0x000000011df045c0 ConcurrentGCThread "G1 Conc#0" [stack: 0x000000016beac000,0x000000016c0af000] [id=13827] - 0x000000010512ad30 ConcurrentGCThread "G1 Conc#1" [stack: 0x0000000319270000,0x0000000319473000] [id=39427] - 0x0000000104e11120 ConcurrentGCThread "G1 Conc#2" [stack: 0x000000031947c000,0x000000031967f000] [id=38403] - 0x0000000105105c00 ConcurrentGCThread "G1 Refine#0" [stack: 0x000000016c0b8000,0x000000016c2bb000] [id=16643] - 0x0000000105204080 ConcurrentGCThread "G1 Service" [stack: 0x000000016c2c4000,0x000000016c4c7000] [id=21251] - -Threads with active compile tasks: - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x00000005c0000000, size: 9216 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x000000e000000000-0x000000e000c14000-0x000000e000c14000), size 12664832, SharedBaseAddress: 0x000000e000000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x000000e001000000-0x000000e041000000, reserved size: 1073741824 -Narrow klass base: 0x000000e000000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - CPUs: 12 total, 12 available - Memory: 36864M - Large Page Support: Disabled - NUMA Support: Disabled - Compressed Oops: Enabled (Zero based) - Heap Region Size: 8M - Heap Min Capacity: 8M - Heap Initial Capacity: 576M - Heap Max Capacity: 9G - Pre-touch: Disabled - Parallel Workers: 10 - Concurrent Workers: 3 - Concurrent Refinement Workers: 10 - Periodic GC: Disabled - -Heap: - garbage-first heap total 196608K, used 119331K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 10 young (81920K), 1 survivors (8192K) - Metaspace used 65956K, committed 66496K, reserved 1114112K - class space used 8750K, committed 9024K, reserved 1048576K - -Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, OA=open archive, CA=closed archive, TAMS=top-at-mark-start (previous, next) -| 0|0x00000005c0000000, 0x00000005c0800000, 0x00000005c0800000|100%| O| |TAMS 0x00000005c0800000, 0x00000005c0000000| Untracked -| 1|0x00000005c0800000, 0x00000005c1000000, 0x00000005c1000000|100%| O| |TAMS 0x00000005c1000000, 0x00000005c0800000| Untracked -| 2|0x00000005c1000000, 0x00000005c1800000, 0x00000005c1800000|100%| O| |TAMS 0x00000005c178d800, 0x00000005c1000000| Untracked -| 3|0x00000005c1800000, 0x00000005c1f6fc00, 0x00000005c2000000| 92%| O| |TAMS 0x00000005c1f6fc00, 0x00000005c1800000| Untracked -| 4|0x00000005c2000000, 0x00000005c2521200, 0x00000005c2800000| 64%| O| |TAMS 0x00000005c2000000, 0x00000005c2000000| Untracked -| 5|0x00000005c2800000, 0x00000005c2800000, 0x00000005c3000000| 0%| F| |TAMS 0x00000005c2800000, 0x00000005c2800000| Untracked -| 6|0x00000005c3000000, 0x00000005c3000000, 0x00000005c3800000| 0%| F| |TAMS 0x00000005c3000000, 0x00000005c3000000| Untracked -| 7|0x00000005c3800000, 0x00000005c3800000, 0x00000005c4000000| 0%| F| |TAMS 0x00000005c3800000, 0x00000005c3800000| Untracked -| 8|0x00000005c4000000, 0x00000005c4000000, 0x00000005c4800000| 0%| F| |TAMS 0x00000005c4000000, 0x00000005c4000000| Untracked -| 9|0x00000005c4800000, 0x00000005c4800000, 0x00000005c5000000| 0%| F| |TAMS 0x00000005c4800000, 0x00000005c4800000| Untracked -| 10|0x00000005c5000000, 0x00000005c5000000, 0x00000005c5800000| 0%| F| |TAMS 0x00000005c5000000, 0x00000005c5000000| Untracked -| 11|0x00000005c5800000, 0x00000005c5800000, 0x00000005c6000000| 0%| F| |TAMS 0x00000005c5800000, 0x00000005c5800000| Untracked -| 12|0x00000005c6000000, 0x00000005c64df298, 0x00000005c6800000| 60%| E| |TAMS 0x00000005c6000000, 0x00000005c6000000| Complete -| 13|0x00000005c6800000, 0x00000005c7000000, 0x00000005c7000000|100%| E|CS|TAMS 0x00000005c6800000, 0x00000005c6800000| Complete -| 14|0x00000005c7000000, 0x00000005c7800000, 0x00000005c7800000|100%| E|CS|TAMS 0x00000005c7000000, 0x00000005c7000000| Complete -| 15|0x00000005c7800000, 0x00000005c8000000, 0x00000005c8000000|100%| E|CS|TAMS 0x00000005c7800000, 0x00000005c7800000| Complete -| 16|0x00000005c8000000, 0x00000005c8800000, 0x00000005c8800000|100%| S|CS|TAMS 0x00000005c8000000, 0x00000005c8000000| Complete -| 17|0x00000005c8800000, 0x00000005c9000000, 0x00000005c9000000|100%| E|CS|TAMS 0x00000005c8800000, 0x00000005c8800000| Complete -| 18|0x00000005c9000000, 0x00000005c9800000, 0x00000005c9800000|100%| E|CS|TAMS 0x00000005c9000000, 0x00000005c9000000| Complete -| 19|0x00000005c9800000, 0x00000005ca000000, 0x00000005ca000000|100%| E|CS|TAMS 0x00000005c9800000, 0x00000005c9800000| Complete -| 68|0x00000005e2000000, 0x00000005e2800000, 0x00000005e2800000|100%| E|CS|TAMS 0x00000005e2000000, 0x00000005e2000000| Complete -| 71|0x00000005e3800000, 0x00000005e4000000, 0x00000005e4000000|100%| E|CS|TAMS 0x00000005e3800000, 0x00000005e3800000| Complete -|1150|0x00000007ff000000, 0x00000007ff778000, 0x00000007ff800000| 93%|OA| |TAMS 0x00000007ff778000, 0x00000007ff000000| Untracked -|1151|0x00000007ff800000, 0x00000007ff880000, 0x0000000800000000| 6%|CA| |TAMS 0x00000007ff880000, 0x00000007ff800000| Untracked - -Card table byte_map: [0x000000010c200000,0x000000010d400000] _byte_map_base: 0x0000000109400000 - -Marking Bits (Prev, Next): (CMBitMap*) 0x000000010f808250, (CMBitMap*) 0x000000010f808210 - Prev Bits: [0x0000000149000000, 0x0000000152000000) - Next Bits: [0x0000000140000000, 0x0000000149000000) - -Polling page: 0x0000000104698000 - -Metaspace: - -Usage: - Non-class: 55.87 MB used. - Class: 8.55 MB used. - Both: 64.41 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 56.12 MB ( 88%) committed, 1 nodes. - Class space: 1.00 GB reserved, 8.81 MB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 64.94 MB ( 6%) committed. - -Chunk freelists: - Non-Class: 7.80 MB - Class: 7.22 MB - Both: 15.02 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 100.31 MB -CDS: on -MetaspaceReclaimPolicy: balanced - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. - - new_chunks_are_fully_committed: 0. - - uncommit_free_chunks: 1. - - use_allocation_guard: 0. - - handle_deallocations: 1. - - -Internal statistics: - -num_allocs_failed_limit: 17. -num_arena_births: 702. -num_arena_deaths: 2. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 1039. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 19. -num_chunks_taken_from_freelist: 2813. -num_chunk_merges: 12. -num_chunk_splits: 2108. -num_chunks_enlarged: 1687. -num_inconsistent_stats: 0. - -CodeCache: size=49152Kb used=11912Kb max_used=11912Kb free=37239Kb - bounds [0x0000000108000000, 0x0000000108bb0000, 0x000000010b000000] - total_blobs=6643 nmethods=6019 adapters=554 - compilation: enabled - stopped_count=0, restarted_count=0 - full_count=0 - -Compilation events (20 events): -Event: 7.622 Thread 0x000000011b00c400 6308 1 org.aspectj.internal.lang.reflect.PerClauseImpl::getKind (5 bytes) -Event: 7.622 Thread 0x000000011b00c400 nmethod 6308 0x0000000108b9ea10 code [0x0000000108b9eb80, 0x0000000108b9ec18] -Event: 7.622 Thread 0x000000011b00c400 6310 ! 1 jdk.proxy2.$Proxy142::annotationType (29 bytes) -Event: 7.622 Thread 0x000000011b00c400 nmethod 6310 0x0000000108b9ed10 code [0x0000000108b9eec0, 0x0000000108b9f0d8] -Event: 7.623 Thread 0x000000011b00c400 6311 1 java.lang.reflect.Field::getAnnotation (23 bytes) -Event: 7.623 Thread 0x000000011f65ba00 6312 1 org.springframework.aop.aspectj.annotation.BeanFactoryAspectInstanceFactory::getAspectMetadata (5 bytes) -Event: 7.623 Thread 0x000000011b00c400 nmethod 6311 0x0000000108b9f290 code [0x0000000108b9f480, 0x0000000108b9f778] -Event: 7.623 Thread 0x000000011f65ba00 nmethod 6312 0x0000000108b9f990 code [0x0000000108b9fb00, 0x0000000108b9fb98] -Event: 7.623 Thread 0x000000011b00c400 6313 1 org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory::findAspectJAnnotationOnMethod (43 bytes) -Event: 7.623 Thread 0x000000011b00c400 nmethod 6313 0x0000000108b9fc90 code [0x0000000108b9fe40, 0x0000000108ba0018] -Event: 7.627 Thread 0x000000011b00c400 6314 ! 1 jdk.proxy2.$Proxy84::annotationType (29 bytes) -Event: 7.627 Thread 0x000000011b00c400 nmethod 6314 0x0000000108ba0190 code [0x0000000108ba0340, 0x0000000108ba0558] -Event: 7.627 Thread 0x000000011b00c400 6315 1 java.util.concurrent.atomic.AtomicInteger::getAndAdd (12 bytes) -Event: 7.627 Thread 0x000000011b00c400 nmethod 6315 0x0000000108ba0710 code [0x0000000108ba0880, 0x0000000108ba0958] -Event: 7.703 Thread 0x000000011f65ba00 6320 1 java.util.regex.Pattern::unread (11 bytes) -Event: 7.703 Thread 0x000000011b00c400 6321 1 java.util.regex.Pattern::qtype (39 bytes) -Event: 7.704 Thread 0x000000011f65ba00 nmethod 6320 0x0000000108ba1610 code [0x0000000108ba1780, 0x0000000108ba1858] -Event: 7.704 Thread 0x000000011b00c400 nmethod 6321 0x0000000108ba1910 code [0x0000000108ba1b00, 0x0000000108ba1e38] -Event: 7.704 Thread 0x000000011b00c400 6322 1 jdk.internal.misc.Unsafe::putReferenceOpaque (9 bytes) -Event: 7.704 Thread 0x000000011b00c400 nmethod 6322 0x0000000108ba2010 code [0x0000000108ba2180, 0x0000000108ba2298] - -GC Heap History (20 events): -Event: 0.685 GC heap before -{Heap before GC invocations=2 (full 0): - garbage-first heap total 606208K, used 49439K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 4 young (32768K), 1 survivors (8192K) - Metaspace used 11758K, committed 11968K, reserved 1114112K - class space used 1313K, committed 1408K, reserved 1048576K -} -Event: 0.687 GC heap after -{Heap after GC invocations=3 (full 0): - garbage-first heap total 606208K, used 28495K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 11758K, committed 11968K, reserved 1114112K - class space used 1313K, committed 1408K, reserved 1048576K -} -Event: 1.150 GC heap before -{Heap before GC invocations=3 (full 0): - garbage-first heap total 606208K, used 77647K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 7 young (57344K), 1 survivors (8192K) - Metaspace used 19291K, committed 19584K, reserved 1114112K - class space used 2462K, committed 2560K, reserved 1048576K -} -Event: 1.153 GC heap after -{Heap after GC invocations=4 (full 0): - garbage-first heap total 606208K, used 31366K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 19291K, committed 19584K, reserved 1114112K - class space used 2462K, committed 2560K, reserved 1048576K -} -Event: 1.228 GC heap before -{Heap before GC invocations=4 (full 0): - garbage-first heap total 606208K, used 47750K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 4 young (32768K), 1 survivors (8192K) - Metaspace used 21191K, committed 21504K, reserved 1114112K - class space used 2665K, committed 2816K, reserved 1048576K -} -Event: 1.231 GC heap after -{Heap after GC invocations=5 (full 0): - garbage-first heap total 606208K, used 32744K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 21191K, committed 21504K, reserved 1114112K - class space used 2665K, committed 2816K, reserved 1048576K -} -Event: 2.119 GC heap before -{Heap before GC invocations=6 (full 0): - garbage-first heap total 221184K, used 106472K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 12 young (98304K), 1 survivors (8192K) - Metaspace used 35766K, committed 36096K, reserved 1114112K - class space used 4465K, committed 4608K, reserved 1048576K -} -Event: 2.122 GC heap after -{Heap after GC invocations=7 (full 0): - garbage-first heap total 221184K, used 35490K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 2 survivors (16384K) - Metaspace used 35766K, committed 36096K, reserved 1114112K - class space used 4465K, committed 4608K, reserved 1048576K -} -Event: 2.130 GC heap before -{Heap before GC invocations=7 (full 0): - garbage-first heap total 221184K, used 35490K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 3 young (24576K), 2 survivors (16384K) - Metaspace used 36067K, committed 36416K, reserved 1114112K - class space used 4504K, committed 4672K, reserved 1048576K -} -Event: 2.134 GC heap after -{Heap after GC invocations=8 (full 0): - garbage-first heap total 221184K, used 36545K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 36067K, committed 36416K, reserved 1114112K - class space used 4504K, committed 4672K, reserved 1048576K -} -Event: 2.147 GC heap before -{Heap before GC invocations=8 (full 0): - garbage-first heap total 221184K, used 36545K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 1 survivors (8192K) - Metaspace used 36418K, committed 36736K, reserved 1114112K - class space used 4549K, committed 4672K, reserved 1048576K -} -Event: 2.148 GC heap after -{Heap after GC invocations=9 (full 0): - garbage-first heap total 442368K, used 35602K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 36418K, committed 36736K, reserved 1114112K - class space used 4549K, committed 4672K, reserved 1048576K -} -Event: 3.154 GC heap before -{Heap before GC invocations=10 (full 0): - garbage-first heap total 196608K, used 158482K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 17 young (139264K), 1 survivors (8192K) - Metaspace used 48508K, committed 48960K, reserved 1114112K - class space used 6329K, committed 6528K, reserved 1048576K -} -Event: 3.158 GC heap after -{Heap after GC invocations=11 (full 0): - garbage-first heap total 196608K, used 40351K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 48508K, committed 48960K, reserved 1114112K - class space used 6329K, committed 6528K, reserved 1048576K -} -Event: 4.257 GC heap before -{Heap before GC invocations=11 (full 0): - garbage-first heap total 196608K, used 138655K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 13 young (106496K), 1 survivors (8192K) - Metaspace used 54014K, committed 54464K, reserved 1114112K - class space used 7010K, committed 7232K, reserved 1048576K -} -Event: 4.263 GC heap after -{Heap after GC invocations=12 (full 0): - garbage-first heap total 196608K, used 46705K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 2 survivors (16384K) - Metaspace used 54014K, committed 54464K, reserved 1114112K - class space used 7010K, committed 7232K, reserved 1048576K -} -Event: 5.515 GC heap before -{Heap before GC invocations=12 (full 0): - garbage-first heap total 196608K, used 136817K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 13 young (106496K), 2 survivors (16384K) - Metaspace used 58257K, committed 58624K, reserved 1114112K - class space used 7651K, committed 7808K, reserved 1048576K -} -Event: 5.523 GC heap after -{Heap after GC invocations=13 (full 0): - garbage-first heap total 196608K, used 52335K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 2 young (16384K), 2 survivors (16384K) - Metaspace used 58257K, committed 58624K, reserved 1114112K - class space used 7651K, committed 7808K, reserved 1048576K -} -Event: 6.372 GC heap before -{Heap before GC invocations=13 (full 0): - garbage-first heap total 196608K, used 85103K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 7 young (57344K), 2 survivors (16384K) - Metaspace used 61127K, committed 61568K, reserved 1114112K - class space used 8029K, committed 8256K, reserved 1048576K -} -Event: 6.376 GC heap after -{Heap after GC invocations=14 (full 0): - garbage-first heap total 196608K, used 53795K [0x00000005c0000000, 0x0000000800000000) - region size 8192K, 1 young (8192K), 1 survivors (8192K) - Metaspace used 61127K, committed 61568K, reserved 1114112K - class space used 8029K, committed 8256K, reserved 1048576K -} - -Dll operation events (11 events): -Event: 0.042 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjava.dylib -Event: 0.043 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libzip.dylib -Event: 0.145 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libinstrument.dylib -Event: 0.147 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnio.dylib -Event: 0.149 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnet.dylib -Event: 0.169 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjimage.dylib -Event: 0.179 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libzip.dylib -Event: 0.296 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement.dylib -Event: 0.309 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement_ext.dylib -Event: 0.423 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libextnet.dylib -Event: 5.147 Loaded shared library /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libverify.dylib - -Deoptimization events (20 events): -Event: 7.531 Thread 0x0000000107808a00 DEOPT PACKING pc=0x0000000108333ac8 sp=0x000000016ba89ac0 -Event: 7.531 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba897a0 mode 1 -Event: 7.531 Thread 0x0000000107808a00 DEOPT PACKING pc=0x00000001086c7750 sp=0x000000016ba89b60 -Event: 7.531 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba898e0 mode 1 -Event: 7.531 Thread 0x0000000107808a00 DEOPT PACKING pc=0x00000001082b8728 sp=0x000000016ba89240 -Event: 7.531 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba88ee0 mode 1 -Event: 7.531 Thread 0x0000000107808a00 DEOPT PACKING pc=0x00000001082b823c sp=0x000000016ba89310 -Event: 7.531 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba88fe0 mode 1 -Event: 7.531 Thread 0x0000000107808a00 DEOPT PACKING pc=0x0000000108333ac8 sp=0x000000016ba89ab0 -Event: 7.531 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba89790 mode 1 -Event: 7.531 Thread 0x0000000107808a00 DEOPT PACKING pc=0x00000001086c7750 sp=0x000000016ba89b50 -Event: 7.531 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba898d0 mode 1 -Event: 7.543 Thread 0x0000000107808a00 DEOPT PACKING pc=0x0000000108535ad4 sp=0x000000016ba89bb0 -Event: 7.543 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba89930 mode 1 -Event: 7.545 Thread 0x0000000107808a00 DEOPT PACKING pc=0x0000000108535ad4 sp=0x000000016ba89ba0 -Event: 7.545 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba89920 mode 1 -Event: 7.572 Thread 0x0000000107808a00 DEOPT PACKING pc=0x0000000108535ad4 sp=0x000000016ba89bb0 -Event: 7.572 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba89930 mode 1 -Event: 7.572 Thread 0x0000000107808a00 DEOPT PACKING pc=0x0000000108535ad4 sp=0x000000016ba89ba0 -Event: 7.572 Thread 0x0000000107808a00 DEOPT UNPACKING pc=0x000000010804777c sp=0x000000016ba89920 mode 1 - -Classes unloaded (1 events): -Event: 6.390 Thread 0x0000000104d04d00 Unloading class 0x000000e001554000 'SC' - -Classes redefined (1 events): -Event: 0.160 Thread 0x0000000104d04d00 redefined class name=java.lang.Throwable, count=1 - -Internal exceptions (20 events): -Event: 5.854 Thread 0x000000011b960000 Exception (0x00000005c9c7a940) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 6.357 Thread 0x000000011b960000 Exception (0x00000005c8b001d0) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 6.865 Thread 0x000000011b960000 Exception (0x00000005c9009658) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 7.070 Thread 0x0000000107808a00 Exception (0x00000005c8d01110) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 7.070 Thread 0x0000000107808a00 Exception (0x00000005c8d05e08) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 7.071 Thread 0x0000000107808a00 Exception (0x00000005c8d0b6a8) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 7.072 Thread 0x0000000107808a00 Exception (0x00000005c8d17440) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 7.177 Thread 0x0000000107808a00 Exception (0x00000005c7aaa528) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 7.178 Thread 0x0000000107808a00 Exception (0x00000005c7ab2338) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 7.187 Thread 0x0000000107808a00 Exception (0x00000005c7b50300) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 7.187 Thread 0x0000000107808a00 Exception (0x00000005c7b577f8) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 7.187 Thread 0x0000000107808a00 Exception (0x00000005c7b5fdb8) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 7.207 Thread 0x0000000107808a00 Exception (0x00000005c7b914a8) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 7.216 Thread 0x0000000107808a00 Exception (0x00000005c7b9a268) -thrown [src/hotspot/share/classfile/systemDictionary.cpp, line 248] -Event: 7.342 Thread 0x0000000107808a00 Exception (0x00000005c72e5358) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 759] -Event: 7.368 Thread 0x000000011b960000 Exception (0x00000005c7479150) -thrown [src/hotspot/share/runtime/reflection.cpp, line 1121] -Event: 7.479 Thread 0x0000000107808a00 Exception (0x00000005c69c4500) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 826] -Event: 7.525 Thread 0x0000000107808a00 Exception (0x00000005c6bbd418) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 826] -Event: 7.526 Thread 0x0000000107808a00 Exception (0x00000005c6bc3d28) -thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 826] -Event: 7.704 Thread 0x000000011e51f600 Exception (0x00000005c6477ae0) -thrown [src/hotspot/share/prims/jni.cpp, line 516] - -VM Operations (20 events): -Event: 6.389 Executing VM operation: G1PauseRemark -Event: 6.394 Executing VM operation: G1PauseRemark done -Event: 6.401 Executing VM operation: G1PauseCleanup -Event: 6.401 Executing VM operation: G1PauseCleanup done -Event: 6.543 Executing VM operation: HandshakeAllThreads -Event: 6.543 Executing VM operation: HandshakeAllThreads done -Event: 6.555 Executing VM operation: HandshakeAllThreads -Event: 6.555 Executing VM operation: HandshakeAllThreads done -Event: 6.560 Executing VM operation: HandshakeAllThreads -Event: 6.560 Executing VM operation: HandshakeAllThreads done -Event: 7.076 Executing VM operation: HandshakeAllThreads -Event: 7.076 Executing VM operation: HandshakeAllThreads done -Event: 7.080 Executing VM operation: HandshakeAllThreads -Event: 7.080 Executing VM operation: HandshakeAllThreads done -Event: 7.096 Executing VM operation: HandshakeAllThreads -Event: 7.096 Executing VM operation: HandshakeAllThreads done -Event: 7.131 Executing VM operation: ICBufferFull -Event: 7.131 Executing VM operation: ICBufferFull done -Event: 7.466 Executing VM operation: ICBufferFull -Event: 7.466 Executing VM operation: ICBufferFull done - -Events (20 events): -Event: 7.703 loading class java/net/SocksSocketImpl$3 done -Event: 7.704 loading class sun/net/util/SocketExceptions -Event: 7.704 loading class sun/net/util/SocketExceptions done -Event: 7.704 Thread 0x000000011b77a400 Thread added: 0x000000011b77a400 -Event: 7.704 loading class java/lang/Throwable$WrappedPrintWriter -Event: 7.704 loading class java/lang/Throwable$WrappedPrintWriter done -Event: 7.704 Protecting memory [0x000000031ee8c000,0x000000031ee98000] with protection modes 0 -Event: 7.704 loading class com/intellij/rt/debugger/agent/CaptureStorage$9 -Event: 7.704 loading class com/intellij/rt/debugger/agent/CaptureStorage$Callable -Event: 7.704 loading class com/intellij/rt/debugger/agent/CaptureStorage$Callable done -Event: 7.704 loading class com/intellij/rt/debugger/agent/CaptureStorage$9 done -Event: 7.705 loading class jdk/internal/loader/BootLoader$PackageHelper$1 -Event: 7.705 loading class jdk/internal/loader/BootLoader$PackageHelper$1 done -Event: 7.705 loading class jdk/internal/loader/BootLoader$PackageHelper$2 -Event: 7.705 loading class jdk/internal/loader/BootLoader$PackageHelper$2 done -Event: 7.705 loading class java/util/jar/JarInputStream -Event: 7.705 loading class java/util/zip/ZipInputStream -Event: 7.705 loading class java/util/zip/ZipInputStream done -Event: 7.705 loading class java/util/jar/JarInputStream done -Event: 7.706 loading class com/intellij/rt/debugger/agent/CaptureStorage$StackData - - -Dynamic libraries: -0x0000000104638000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjli.dylib -0x0000000196c18000 /usr/lib/libz.1.dylib -0x0000000196cce000 /usr/lib/libSystem.B.dylib -0x0000000196cc8000 /usr/lib/system/libcache.dylib -0x0000000196c83000 /usr/lib/system/libcommonCrypto.dylib -0x0000000196cae000 /usr/lib/system/libcompiler_rt.dylib -0x0000000196ca3000 /usr/lib/system/libcopyfile.dylib -0x0000000186bb6000 /usr/lib/system/libcorecrypto.dylib -0x0000000186cb6000 /usr/lib/system/libdispatch.dylib -0x0000000186a53000 /usr/lib/system/libdyld.dylib -0x0000000196cbe000 /usr/lib/system/libkeymgr.dylib -0x0000000196c66000 /usr/lib/system/libmacho.dylib -0x0000000195ef9000 /usr/lib/system/libquarantine.dylib -0x0000000196cbb000 /usr/lib/system/libremovefile.dylib -0x000000018d629000 /usr/lib/system/libsystem_asl.dylib -0x0000000186b3c000 /usr/lib/system/libsystem_blocks.dylib -0x0000000186d01000 /usr/lib/system/libsystem_c.dylib -0x0000000196cb2000 /usr/lib/system/libsystem_collections.dylib -0x0000000194899000 /usr/lib/system/libsystem_configuration.dylib -0x0000000193487000 /usr/lib/system/libsystem_containermanager.dylib -0x0000000196698000 /usr/lib/system/libsystem_coreservices.dylib -0x000000018ae50000 /usr/lib/system/libsystem_darwin.dylib -0x000000028c8a4000 /usr/lib/system/libsystem_darwindirectory.dylib -0x0000000196cbf000 /usr/lib/system/libsystem_dnssd.dylib -0x000000028c8a8000 /usr/lib/system/libsystem_eligibility.dylib -0x0000000186cfe000 /usr/lib/system/libsystem_featureflags.dylib -0x0000000186e83000 /usr/lib/system/libsystem_info.dylib -0x0000000196c27000 /usr/lib/system/libsystem_m.dylib -0x0000000186c65000 /usr/lib/system/libsystem_malloc.dylib -0x000000018d58c000 /usr/lib/system/libsystem_networkextension.dylib -0x000000018b2bb000 /usr/lib/system/libsystem_notify.dylib -0x000000019489e000 /usr/lib/system/libsystem_sandbox.dylib -0x000000028c8b3000 /usr/lib/system/libsystem_sanitizers.dylib -0x0000000196cb7000 /usr/lib/system/libsystem_secinit.dylib -0x0000000186e2f000 /usr/lib/system/libsystem_kernel.dylib -0x0000000186e7a000 /usr/lib/system/libsystem_platform.dylib -0x0000000186e6d000 /usr/lib/system/libsystem_pthread.dylib -0x000000018f1e2000 /usr/lib/system/libsystem_symptoms.dylib -0x0000000186b95000 /usr/lib/system/libsystem_trace.dylib -0x000000028c8bb000 /usr/lib/system/libsystem_trial.dylib -0x0000000196c91000 /usr/lib/system/libunwind.dylib -0x0000000186b40000 /usr/lib/system/libxpc.dylib -0x0000000186a00000 /usr/lib/libobjc.A.dylib -0x0000000186eb3000 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation -0x000000019a5c3000 /usr/lib/swift/libswiftCore.dylib -0x0000000186e14000 /usr/lib/libc++abi.dylib -0x000000028ac91000 /usr/lib/libRosetta.dylib -0x0000000186d83000 /usr/lib/libc++.1.dylib -0x0000000188722000 /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation -0x00000001a41a3000 /usr/lib/swift/libswiftObjectiveC.dylib -0x000000028c10d000 /usr/lib/libswiftPrespecialized.dylib -0x0000000188391000 /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration -0x0000000191703000 /System/Library/PrivateFrameworks/CoreAutoLayout.framework/Versions/A/CoreAutoLayout -0x0000000196cd0000 /usr/lib/libfakelink.dylib -0x0000000196f79000 /usr/lib/libcompression.dylib -0x000000018d1d6000 /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork -0x0000000190b34000 /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration -0x0000000196d23000 /usr/lib/libarchive.2.dylib -0x0000000190a39000 /usr/lib/libDiagnosticMessagesClient.dylib -0x000000018ab7a000 /usr/lib/libicucore.A.dylib -0x000000019174c000 /usr/lib/libxml2.2.dylib -0x000000019f452000 /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices -0x00000001948ac000 /usr/lib/liblangid.dylib -0x000000018b1d2000 /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit -0x000000019d0c4000 /System/Library/Frameworks/Combine.framework/Versions/A/Combine -0x000000023fff3000 /System/Library/PrivateFrameworks/CollectionsInternal.framework/Versions/A/CollectionsInternal -0x000000026c039000 /System/Library/PrivateFrameworks/ReflectionInternal.framework/Versions/A/ReflectionInternal -0x000000026cf8d000 /System/Library/PrivateFrameworks/RuntimeInternal.framework/Versions/A/RuntimeInternal -0x0000000196cd2000 /System/Library/PrivateFrameworks/SoftLinking.framework/Versions/A/SoftLinking -0x00000001b488c000 /usr/lib/swift/libswiftCoreFoundation.dylib -0x00000001b164f000 /usr/lib/swift/libswiftDarwin.dylib -0x00000001a11c9000 /usr/lib/swift/libswiftDispatch.dylib -0x00000001b48ed000 /usr/lib/swift/libswiftIOKit.dylib -0x000000028c550000 /usr/lib/swift/libswiftSystem.dylib -0x00000001b489f000 /usr/lib/swift/libswiftXPC.dylib -0x000000028c582000 /usr/lib/swift/libswift_Builtin_float.dylib -0x000000028c583000 /usr/lib/swift/libswift_Concurrency.dylib -0x000000028c60f000 /usr/lib/swift/libswift_DarwinFoundation1.dylib -0x000000028c6b3000 /usr/lib/swift/libswift_StringProcessing.dylib -0x00000001a41a7000 /usr/lib/swift/libswiftos.dylib -0x000000018b152000 /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal -0x0000000196c9b000 /usr/lib/liboah.dylib -0x000000018a75a000 /System/Library/Frameworks/Security.framework/Versions/A/Security -0x00000001a35d7000 /System/Library/PrivateFrameworks/DiskImages.framework/Versions/A/DiskImages -0x00000001b10f3000 /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS -0x00000001916c8000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents -0x000000018ae5a000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore -0x0000000190aa8000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata -0x000000019669f000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices -0x0000000196e1b000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit -0x000000018f15c000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE -0x0000000187412000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices -0x0000000198224000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices -0x00000001916d5000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList -0x0000000196eae000 /usr/lib/libapple_nghttp2.dylib -0x000000018ed78000 /usr/lib/libsqlite3.dylib -0x000000018ef61000 /System/Library/Frameworks/Accounts.framework/Versions/A/Accounts -0x00000001a3819000 /System/Library/PrivateFrameworks/AppSupport.framework/Versions/A/AppSupport -0x00000001b363e000 /System/Library/Frameworks/AVFoundation.framework/Versions/A/AVFoundation -0x0000000190a09000 /System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics -0x000000018dc1c000 /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics -0x000000019b2fe000 /System/Library/Frameworks/GSS.framework/Versions/A/GSS -0x00000001996e6000 /System/Library/PrivateFrameworks/InternationalSupport.framework/Versions/A/InternationalSupport -0x000000018f0f0000 /System/Library/PrivateFrameworks/RunningBoardServices.framework/Versions/A/RunningBoardServices -0x00000001a412b000 /System/Library/PrivateFrameworks/StreamingZip.framework/Versions/A/StreamingZip -0x000000018d5a7000 /usr/lib/libenergytrace.dylib -0x000000018f1eb000 /System/Library/Frameworks/Network.framework/Versions/A/Network -0x0000000195f21000 /usr/lib/libbsm.0.dylib -0x0000000196c6a000 /usr/lib/system/libkxld.dylib -0x000000023b5c5000 /System/Library/PrivateFrameworks/AppleKeyStore.framework/Versions/A/AppleKeyStore -0x000000028a993000 /usr/lib/libCoreEntitlements.dylib -0x0000000260705000 /System/Library/PrivateFrameworks/MessageSecurity.framework/Versions/A/MessageSecurity -0x000000018ed5c000 /System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer -0x00000001a05d8000 /System/Library/PrivateFrameworks/SymptomDiagnosticReporter.framework/Versions/A/SymptomDiagnosticReporter -0x0000000198469000 /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport -0x000000018d5a9000 /usr/lib/libMobileGestalt.dylib -0x000000019667f000 /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression -0x0000000195f09000 /usr/lib/libcoretls.dylib -0x000000019829a000 /usr/lib/libcoretls_cfhelpers.dylib -0x0000000196f73000 /usr/lib/libpam.2.dylib -0x0000000198310000 /usr/lib/libxar.1.dylib -0x000000019829c000 /System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS -0x0000000278713000 /System/Library/PrivateFrameworks/SwiftASN1Internal.framework/Versions/A/SwiftASN1Internal -0x000000019831f000 /usr/lib/libutil.dylib -0x00000001948a7000 /System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo -0x0000000195bd0000 /System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/Versions/A/IOMobileFramebuffer -0x00000001934c0000 /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface -0x00000001a2f37000 /System/Library/PrivateFrameworks/CoreWiFi.framework/Versions/A/CoreWiFi -0x00000001b474c000 /System/Library/PrivateFrameworks/LoggingSupport.framework/Versions/A/LoggingSupport -0x000000019b361000 /System/Library/PrivateFrameworks/MobileAsset.framework/Versions/A/MobileAsset -0x00000001a05e8000 /System/Library/PrivateFrameworks/PowerLog.framework/Versions/A/PowerLog -0x00000001a1aaa000 /System/Library/PrivateFrameworks/Rapport.framework/Versions/A/Rapport -0x000000023416e000 /System/Library/Frameworks/SwiftData.framework/Versions/A/SwiftData -0x000000018cc0a000 /System/Library/Frameworks/UniformTypeIdentifiers.framework/Versions/A/UniformTypeIdentifiers -0x00000001918f5000 /System/Library/PrivateFrameworks/UserManagement.framework/Versions/A/UserManagement -0x000000018d0fd000 /usr/lib/libboringssl.dylib -0x000000018f1d0000 /usr/lib/libdns_services.dylib -0x00000001b3772000 /usr/lib/libquic.dylib -0x000000019a554000 /usr/lib/libusrtcp.dylib -0x000000023c47f000 /System/Library/PrivateFrameworks/AtomicsInternal.framework/Versions/A/AtomicsInternal -0x00000001dab32000 /System/Library/PrivateFrameworks/InternalSwiftProtobuf.framework/Versions/A/InternalSwiftProtobuf -0x000000028c3d7000 /usr/lib/swift/libswiftDistributed.dylib -0x000000028c400000 /usr/lib/swift/libswiftObservation.dylib -0x000000028c53c000 /usr/lib/swift/libswiftSynchronization.dylib -0x00000001948a5000 /System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary -0x000000023ccaf000 /System/Library/PrivateFrameworks/BiomeLibrary.framework/Versions/A/BiomeLibrary -0x00000001c38d5000 /System/Library/PrivateFrameworks/BiomeStreams.framework/Versions/A/BiomeStreams -0x00000001bf924000 /System/Library/PrivateFrameworks/BiomeFoundation.framework/Versions/A/BiomeFoundation -0x00000001c9b82000 /System/Library/PrivateFrameworks/BiomePubSub.framework/Versions/A/BiomePubSub -0x000000018e96e000 /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData -0x00000001a510e000 /System/Library/PrivateFrameworks/ProactiveSupport.framework/Versions/A/ProactiveSupport -0x00000002361cc000 /System/Library/Frameworks/_LocationEssentials.framework/Versions/A/_LocationEssentials -0x000000019827b000 /usr/lib/liblzma.5.dylib -0x000000019f6d1000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate -0x0000000195e02000 /System/Library/PrivateFrameworks/MobileKeyBag.framework/Versions/A/MobileKeyBag -0x00000001a3b2d000 /System/Library/PrivateFrameworks/InternationalTextSearch.framework/Versions/A/InternationalTextSearch -0x00000001bbdf7000 /System/Library/PrivateFrameworks/SoftwareUpdateCoreSupport.framework/Versions/A/SoftwareUpdateCoreSupport -0x00000001c4374000 /System/Library/PrivateFrameworks/SoftwareUpdateCoreConnect.framework/Versions/A/SoftwareUpdateCoreConnect -0x00000001a36d1000 /System/Library/PrivateFrameworks/RemoteServiceDiscovery.framework/Versions/A/RemoteServiceDiscovery -0x00000001bb9ce000 /System/Library/PrivateFrameworks/MSUDataAccessor.framework/Versions/A/MSUDataAccessor -0x00000001b691f000 /usr/lib/libbootpolicy.dylib -0x00000001a36e8000 /System/Library/PrivateFrameworks/RemoteXPC.framework/Versions/A/RemoteXPC -0x00000001c37a9000 /usr/lib/libFDR.dylib -0x00000001c9784000 /usr/lib/libamsupport.dylib -0x000000028ac89000 /usr/lib/libReverseProxyDevice.dylib -0x000000023ae33000 /System/Library/PrivateFrameworks/AppleDeviceQuerySupport.framework/Versions/A/AppleDeviceQuerySupport -0x00000001cc94e000 /usr/lib/libpartition2_dynamic.dylib -0x0000000196e8a000 /System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce -0x000000028a83e000 /usr/lib/libAppleArchive.dylib -0x000000019668b000 /usr/lib/libbz2.1.0.dylib -0x0000000190b3e000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage -0x000000019f42d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib -0x0000000198356000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib -0x0000000187916000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib -0x00000001a3b2c000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices -0x0000000191833000 /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo -0x000000018e372000 /System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync -0x0000000189d9a000 /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText -0x0000000193fb3000 /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO -0x000000019af0e000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS -0x000000018e51a000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices -0x00000001995dc000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore -0x000000019b2c7000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD -0x000000019b2c2000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy -0x000000019aee0000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis -0x000000018d665000 /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight -0x000000019398e000 /System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib -0x000000018effe000 /System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard -0x00000001a152a000 /System/Library/PrivateFrameworks/BoardServices.framework/Versions/A/BoardServices -0x00000001a33f9000 /System/Library/PrivateFrameworks/BackBoardServices.framework/Versions/A/BackBoardServices -0x000000023cbb4000 /System/Library/PrivateFrameworks/BackBoardHIDEventFoundation.framework/Versions/A/BackBoardHIDEventFoundation -0x00000001898b6000 /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay -0x0000000198f35000 /System/Library/Frameworks/VideoToolbox.framework/Versions/A/VideoToolbox -0x0000000196f71000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders -0x000000026af43000 /System/Library/PrivateFrameworks/ProDisplayLibrary.framework/Versions/A/ProDisplayLibrary -0x00000001a722e000 /System/Library/PrivateFrameworks/IOSurfaceAccelerator.framework/Versions/A/IOSurfaceAccelerator -0x00000001934e8000 /System/Library/Frameworks/Metal.framework/Versions/A/Metal -0x00000001934dd000 /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator -0x00000001937ec000 /System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia -0x000000018d641000 /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC -0x0000000198eed000 /System/Library/PrivateFrameworks/WatchdogClient.framework/Versions/A/WatchdogClient -0x0000000190f63000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore -0x0000000198eef000 /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport -0x00000001cc730000 /usr/lib/swift/libswiftAccelerate.dylib -0x00000001b486c000 /usr/lib/swift/libswiftCoreAudio.dylib -0x00000001d08c1000 /usr/lib/swift/libswiftCoreMedia.dylib -0x00000001c2862000 /usr/lib/swift/libswiftMetal.dylib -0x00000001d2074000 /usr/lib/swift/libswiftOSLog.dylib -0x00000001c7c88000 /usr/lib/swift/libswiftQuartzCore.dylib -0x00000001cc720000 /usr/lib/swift/libswiftUniformTypeIdentifiers.dylib -0x000000028c56a000 /usr/lib/swift/libswiftVideoToolbox.dylib -0x00000001b83e6000 /usr/lib/swift/libswiftsimd.dylib -0x00000001c9be3000 /System/Library/PrivateFrameworks/BiomeStorage.framework/Versions/A/BiomeStorage -0x00000002593f4000 /System/Library/PrivateFrameworks/IntelligencePlatformLibrary.framework/Versions/A/IntelligencePlatformLibrary -0x0000000269d07000 /System/Library/PrivateFrameworks/PoirotSchematizer.framework/Versions/A/PoirotSchematizer -0x000000023d56a000 /System/Library/PrivateFrameworks/BiomeSync.framework/Versions/A/BiomeSync -0x000000023cc95000 /System/Library/PrivateFrameworks/BiomeDSL.framework/Versions/A/BiomeDSL -0x00000001e2d3d000 /System/Library/PrivateFrameworks/FeatureFlags.framework/Versions/A/FeatureFlags -0x0000000269d75000 /System/Library/PrivateFrameworks/PoirotUDFs.framework/Versions/A/PoirotUDFs -0x000000028c612000 /usr/lib/swift/libswift_DarwinFoundation2.dylib -0x000000028c613000 /usr/lib/swift/libswift_DarwinFoundation3.dylib -0x00000001a1a9f000 /System/Library/PrivateFrameworks/CoreTime.framework/Versions/A/CoreTime -0x0000000196d08000 /usr/lib/libiconv.2.dylib -0x0000000196c65000 /usr/lib/libcharset.1.dylib -0x0000000269cca000 /System/Library/PrivateFrameworks/PoirotSQLite.framework/Versions/A/PoirotSQLite -0x000000028c614000 /usr/lib/swift/libswift_RegexParser.dylib -0x000000023eba0000 /System/Library/PrivateFrameworks/CascadeSets.framework/Versions/A/CascadeSets -0x000000019b4d8000 /System/Library/PrivateFrameworks/CorePhoneNumbers.framework/Versions/A/CorePhoneNumbers -0x0000000198ce7000 /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG -0x00000001986c0000 /usr/lib/libexpat.1.dylib -0x00000001994b2000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib -0x00000001994dd000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib -0x00000001995c5000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib -0x0000000198d2c000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib -0x00000001983d0000 /usr/lib/libate.dylib -0x000000019956c000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib -0x0000000199563000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib -0x000000024f044000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/libllvm-flatbuffers.dylib -0x0000000249aa3000 /System/Library/PrivateFrameworks/FramePacing.framework/Versions/A/FramePacing -0x000000022cbb3000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib -0x000000024abd1000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/libGPUCompilerUtils.dylib -0x00000001a15f7000 /System/Library/PrivateFrameworks/GraphicsServices.framework/Versions/A/GraphicsServices -0x000000022cbc1000 /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL -0x000000022cc12000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib -0x000000022cbd5000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib -0x000000022cda2000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib -0x000000022cbde000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib -0x000000022cbd2000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib -0x000000022cbbb000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib -0x000000019955e000 /System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler -0x000000019953e000 /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment -0x0000000199566000 /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay -0x00000002805c9000 /System/Library/PrivateFrameworks/VideoToolboxParavirtualizationSupport.framework/Versions/A/VideoToolboxParavirtualizationSupport -0x0000000198677000 /System/Library/PrivateFrameworks/AppleVA.framework/Versions/A/AppleVA -0x000000022ec3e000 /System/Library/Frameworks/ExtensionFoundation.framework/Versions/A/ExtensionFoundation -0x00000001995cb000 /System/Library/PrivateFrameworks/CMCaptureCore.framework/Versions/A/CMCaptureCore -0x0000000198951000 /usr/lib/libspindump.dylib -0x0000000189fc4000 /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio -0x0000000198944000 /System/Library/PrivateFrameworks/AppServerSupport.framework/Versions/A/AppServerSupport -0x000000019b2d0000 /System/Library/PrivateFrameworks/perfdata.framework/Versions/A/perfdata -0x00000001899d7000 /System/Library/PrivateFrameworks/AudioToolboxCore.framework/Versions/A/AudioToolboxCore -0x00000001937c2000 /System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk -0x000000019aec6000 /usr/lib/libAudioStatistics.dylib -0x00000001b3867000 /System/Library/PrivateFrameworks/SystemPolicy.framework/Versions/A/SystemPolicy -0x000000019b174000 /usr/lib/libSMC.dylib -0x00000001bb1dd000 /usr/lib/swift/libswiftCoreMIDI.dylib -0x00000001a651d000 /System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI -0x000000019948c000 /usr/lib/libAudioToolboxUtility.dylib -0x000000019b2de000 /usr/lib/libperfcheck.dylib -0x000000023c54e000 /System/Library/PrivateFrameworks/AudioAnalytics.framework/Versions/A/AudioAnalytics -0x00000001da81e000 /System/Library/Frameworks/OSLog.framework/Versions/A/OSLog -0x0000000265777000 /System/Library/PrivateFrameworks/OSEligibility.framework/Versions/A/OSEligibility -0x0000000198746000 /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices -0x0000000230025000 /System/Library/Frameworks/LightweightCodeRequirements.framework/Versions/A/LightweightCodeRequirements -0x00000001985c0000 /System/Library/PrivateFrameworks/PlugInKit.framework/Versions/A/PlugInKit -0x0000000195e1a000 /System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices -0x00000001986e5000 /System/Library/PrivateFrameworks/IconFoundation.framework/Versions/A/IconFoundation -0x0000000255f80000 /System/Library/PrivateFrameworks/IconRendering.framework/Versions/A/IconRendering -0x00000001913ca000 /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI -0x00000001942f4000 /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage -0x000000026d172000 /System/Library/PrivateFrameworks/SFSymbols.framework/Versions/A/SFSymbols -0x000000022eaf4000 /System/Library/Frameworks/DeveloperToolsSupport.framework/Versions/A/DeveloperToolsSupport -0x00000001ab7ca000 /System/Library/PrivateFrameworks/RenderBox.framework/Versions/A/RenderBox -0x0000000193f75000 /System/Library/PrivateFrameworks/CoreSVG.framework/Versions/A/CoreSVG -0x000000019964f000 /System/Library/PrivateFrameworks/TextureIO.framework/Versions/A/TextureIO -0x00000001b48ec000 /usr/lib/swift/libswiftCoreImage.dylib -0x00000001988f4000 /System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer -0x00000002499ae000 /System/Library/PrivateFrameworks/FontServices.framework/Versions/A/FontServices -0x0000000198904000 /System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG -0x0000000191379000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib -0x000000028b763000 /usr/lib/libhvf.dylib -0x0000000266404000 /System/Library/PrivateFrameworks/ParsingInternal.framework/Versions/A/ParsingInternal -0x00000002499b2000 /System/Library/PrivateFrameworks/FontServices.framework/libXTFontStaticRegistryData.dylib -0x00000001947df000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSCore.framework/Versions/A/MPSCore -0x00000001965ea000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSImage.framework/Versions/A/MPSImage -0x0000000195fa9000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork -0x00000001963e8000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix -0x0000000196200000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector -0x000000019641a000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNDArray.framework/Versions/A/MPSNDArray -0x0000000230eaa000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSFunctions.framework/Versions/A/MPSFunctions -0x0000000230e8b000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSBenchmarkLoop.framework/Versions/A/MPSBenchmarkLoop -0x0000000230ebe000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSHost.framework/Versions/A/MPSHost -0x000000018772d000 /System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools -0x00000001b9b0d000 /System/Library/PrivateFrameworks/IOAccelMemoryInfo.framework/Versions/A/IOAccelMemoryInfo -0x00000001c807b000 /System/Library/PrivateFrameworks/kperf.framework/Versions/A/kperf -0x00000001b4868000 /System/Library/PrivateFrameworks/GPURawCounter.framework/Versions/A/GPURawCounter -0x00000001a5299000 /System/Library/PrivateFrameworks/ASEProcessing.framework/Versions/A/ASEProcessing -0x00000001d618a000 /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication -0x00000002698b5000 /System/Library/PrivateFrameworks/PhotosensitivityProcessing.framework/Versions/A/PhotosensitivityProcessing -0x000000026d1f8000 /System/Library/PrivateFrameworks/SILManager.framework/Versions/A/SILManager -0x00000001a1943000 /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication -0x00000001b47db000 /System/Library/PrivateFrameworks/MallocStackLogging.framework/Versions/A/MallocStackLogging -0x00000001a1921000 /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols -0x00000001c67cc000 /System/Library/PrivateFrameworks/OSAnalytics.framework/Versions/A/OSAnalytics -0x0000000247709000 /System/Library/PrivateFrameworks/DeviceRecovery.framework/Versions/A/DeviceRecovery -0x000000027be51000 /System/Library/PrivateFrameworks/Tightbeam.framework/Versions/A/Tightbeam -0x00000001c2870000 /usr/lib/swift/libswiftCompression.dylib -0x00000001ccebd000 /System/Library/PrivateFrameworks/AFKUser.framework/Versions/A/AFKUser -0x0000000199597000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATSUI.framework/Versions/A/ATSUI -0x000000019ac6f000 /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox -0x0000000196a5c000 /System/Library/Frameworks/UserNotifications.framework/Versions/A/UserNotifications -0x00000001ba2a4000 /System/Library/PrivateFrameworks/SiriInstrumentation.framework/Versions/A/SiriInstrumentation -0x000000026f688000 /System/Library/PrivateFrameworks/SiriAnalytics.framework/Versions/A/SiriAnalytics -0x00000001b7a03000 /System/Library/PrivateFrameworks/FeedbackLogger.framework/Versions/A/FeedbackLogger -0x00000001d230d000 /usr/lib/swift/libswiftAVFoundation.dylib -0x000000027e67a000 /System/Library/PrivateFrameworks/UnifiedAssetFramework.framework/Versions/A/UnifiedAssetFramework -0x000000019ae45000 /System/Library/PrivateFrameworks/AudioSession.framework/Versions/A/AudioSession -0x0000000198805000 /System/Library/PrivateFrameworks/MediaExperience.framework/Versions/A/MediaExperience -0x000000019ac19000 /System/Library/PrivateFrameworks/AudioSession.framework/libSessionUtility.dylib -0x00000001a04cd000 /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth -0x0000000195c8d000 /System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils -0x00000001ac4fe000 /System/Library/PrivateFrameworks/HID.framework/Versions/A/HID -0x00000002465fa000 /System/Library/PrivateFrameworks/CoreUtilsExtras.framework/Versions/A/CoreUtilsExtras -0x0000000255ed5000 /System/Library/PrivateFrameworks/IO80211.framework/Versions/A/IO80211 -0x000000019ce10000 /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth -0x000000028c41f000 /usr/lib/swift/libswiftRegexBuilder.dylib -0x0000000198460000 /usr/lib/libIOReport.dylib -0x00000001e2dc2000 /System/Library/PrivateFrameworks/WiFiPeerToPeer.framework/Versions/A/WiFiPeerToPeer -0x0000000195e29000 /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation -0x000000023ec54000 /System/Library/PrivateFrameworks/Centauri.framework/Versions/A/Centauri -0x0000000188111000 /System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon -0x000000028bbb3000 /usr/lib/libmrc.dylib -0x0000000255f40000 /System/Library/PrivateFrameworks/IPConfiguration.framework/Versions/A/IPConfiguration -0x00000001d6961000 /System/Library/PrivateFrameworks/Netrb.framework/Versions/A/Netrb -0x00000001a1450000 /System/Library/PrivateFrameworks/FrontBoardServices.framework/Versions/A/FrontBoardServices -0x0000000195f92000 /usr/lib/libgermantok.dylib -0x00000001949ce000 /System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData -0x00000001a06d6000 /System/Library/PrivateFrameworks/MediaKit.framework/Versions/A/MediaKit -0x00000001a0624000 /System/Library/Frameworks/DiscRecording.framework/Versions/A/DiscRecording -0x00000001986db000 /usr/lib/libheimdal-asn1.dylib -0x00000001a4101000 /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit -0x0000000191690000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory -0x000000019169e000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory -0x000000019d1b8000 /System/Library/PrivateFrameworks/GeoServices.framework/Versions/A/GeoServices -0x000000019abdf000 /System/Library/PrivateFrameworks/LocationSupport.framework/Versions/A/LocationSupport -0x0000000252bfe000 /System/Library/PrivateFrameworks/GeoServicesCore.framework/Versions/A/GeoServicesCore -0x00000001ad402000 /System/Library/PrivateFrameworks/PhoneNumbers.framework/Versions/A/PhoneNumbers -0x000000025b386000 /System/Library/PrivateFrameworks/LocationLogEncryption.framework/Versions/A/LocationLogEncryption -0x000000022d12e000 /System/Library/Frameworks/AVFAudio.framework/Versions/A/AVFAudio -0x000000022d272000 /System/Library/Frameworks/AVRouting.framework/Versions/A/AVRouting -0x00000001ad51a000 /usr/lib/libAccessibility.dylib -0x0000000259d70000 /System/Library/PrivateFrameworks/IsolatedCoreAudioClient.framework/Versions/A/IsolatedCoreAudioClient -0x00000002423ee000 /System/Library/PrivateFrameworks/CoreAudioOrchestration.framework/Versions/A/CoreAudioOrchestration -0x0000000199ab3000 /System/Library/Frameworks/MediaToolbox.framework/Versions/A/MediaToolbox -0x00000001a07fc000 /System/Library/PrivateFrameworks/CoreAVCHD.framework/Versions/A/CoreAVCHD -0x000000019f720000 /System/Library/Frameworks/MediaAccessibility.framework/Versions/A/MediaAccessibility -0x00000001a07f8000 /System/Library/PrivateFrameworks/Mangrove.framework/Versions/A/Mangrove -0x000000023e290000 /System/Library/PrivateFrameworks/CMPhoto.framework/Versions/A/CMPhoto -0x00000001a0fc5000 /System/Library/Frameworks/CoreTelephony.framework/Versions/A/CoreTelephony -0x00000001a07eb000 /System/Library/PrivateFrameworks/CoreAUC.framework/Versions/A/CoreAUC -0x000000023b3f6000 /System/Library/PrivateFrameworks/AppleJPEGXL.framework/Versions/A/AppleJPEGXL -0x000000019b4e8000 /usr/lib/libTelephonyUtilDynamic.dylib -0x00000001dd93f000 /System/Library/Frameworks/CryptoKit.framework/Versions/A/CryptoKit -0x00000001a40fc000 /System/Library/PrivateFrameworks/CryptoKitCBridging.framework/Versions/A/CryptoKitCBridging -0x00000001a1609000 /System/Library/Frameworks/CryptoTokenKit.framework/Versions/A/CryptoTokenKit -0x0000000247179000 /System/Library/PrivateFrameworks/Dendrite.framework/Versions/A/Dendrite -0x00000001b440c000 /System/Library/Frameworks/NaturalLanguage.framework/Versions/A/NaturalLanguage -0x0000000252901000 /System/Library/PrivateFrameworks/GenerativeModels.framework/Versions/A/GenerativeModels -0x00000001e2d49000 /usr/lib/swift/libswiftNaturalLanguage.dylib -0x000000023bf6d000 /System/Library/PrivateFrameworks/AppleMobileFileIntegrity.framework/Versions/A/AppleMobileFileIntegrity -0x000000028ad01000 /usr/lib/libTLE.dylib -0x00000001b480d000 /usr/lib/libmis.dylib -0x00000001ec491000 /System/Library/PrivateFrameworks/ConfigProfileHelper.framework/Versions/A/ConfigProfileHelper -0x00000001a428b000 /System/Library/PrivateFrameworks/Espresso.framework/Versions/A/Espresso -0x0000000191e20000 /System/Library/Frameworks/CoreML.framework/Versions/A/CoreML -0x00000001e0bf5000 /usr/lib/libedit.3.dylib -0x0000000229f3c000 /System/Library/PrivateFrameworks/ANECompiler.framework/Versions/A/ANECompiler -0x00000001a6361000 /System/Library/PrivateFrameworks/AppleNeuralEngine.framework/Versions/A/AppleNeuralEngine -0x000000025b4a4000 /System/Library/PrivateFrameworks/MIL.framework/Versions/A/MIL -0x0000000230ec4000 /System/Library/Frameworks/MetalPerformanceShadersGraph.framework/Versions/A/MetalPerformanceShadersGraph -0x000000025bc13000 /System/Library/PrivateFrameworks/MLCompilerServices.framework/Versions/A/MLCompilerServices -0x00000001a50dd000 /System/Library/PrivateFrameworks/ANEServices.framework/Versions/A/ANEServices -0x00000001b9ad0000 /usr/lib/libncurses.5.4.dylib -0x000000018b2ce000 /usr/lib/libsandbox.1.dylib -0x0000000198601000 /usr/lib/libMatch.1.dylib -0x00000002654f9000 /System/Library/PrivateFrameworks/ODIE.framework/Versions/A/ODIE -0x000000025e8a0000 /System/Library/PrivateFrameworks/MLModelAsset.framework/Versions/A/MLModelAsset -0x000000025bbb9000 /System/Library/PrivateFrameworks/MLCompilerRuntime.framework/Versions/A/MLCompilerRuntime -0x0000000196255000 /System/Library/Frameworks/MLCompute.framework/Versions/A/MLCompute -0x000000025bb3b000 /System/Library/PrivateFrameworks/MLAssetIO.framework/Versions/A/MLAssetIO -0x000000028c3f1000 /usr/lib/swift/libswiftMLCompute.dylib -0x00000001a11e0000 /System/Library/PrivateFrameworks/AVFCore.framework/Versions/A/AVFCore -0x00000001aae1b000 /System/Library/PrivateFrameworks/AVFCapture.framework/Versions/A/AVFCapture -0x000000023e087000 /System/Library/PrivateFrameworks/CMImaging.framework/Versions/A/CMImaging -0x00000001ab05d000 /System/Library/PrivateFrameworks/Quagga.framework/Versions/A/Quagga -0x00000001ab18e000 /System/Library/PrivateFrameworks/CMCapture.framework/Versions/A/CMCapture -0x000000019b071000 /System/Library/Frameworks/CoreMediaIO.framework/Versions/A/CoreMediaIO -0x000000023dfc2000 /System/Library/PrivateFrameworks/CMCaptureDevice.framework/Versions/A/CMCaptureDevice -0x0000000198a3d000 /System/Library/PrivateFrameworks/CoreBrightness.framework/Versions/A/CoreBrightness -0x000000023f14b000 /System/Library/PrivateFrameworks/CinematicFraming.framework/Versions/A/CinematicFraming -0x00000002619dd000 /System/Library/PrivateFrameworks/ModelManagerServices.framework/Versions/A/ModelManagerServices -0x00000001cf375000 /System/Library/PrivateFrameworks/CPMS.framework/Versions/A/CPMS -0x0000000279581000 /System/Library/PrivateFrameworks/SystemStatus.framework/Versions/A/SystemStatus -0x00000001b323c000 /System/Library/Frameworks/CoreMotion.framework/Versions/A/CoreMotion -0x00000001c3854000 /System/Library/PrivateFrameworks/TimeSync.framework/Versions/A/TimeSync -0x0000000247b41000 /System/Library/PrivateFrameworks/DistributedSensing.framework/Versions/A/DistributedSensing -0x00000001bec33000 /System/Library/PrivateFrameworks/MobileBluetooth.framework/Versions/A/MobileBluetooth -0x00000001c5518000 /System/Library/PrivateFrameworks/IOKitten.framework/Versions/A/IOKitten -0x000000023b270000 /System/Library/PrivateFrameworks/AppleIntelligenceReporting.framework/Versions/A/AppleIntelligenceReporting -0x0000000195b9c000 /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji -0x0000000188425000 /usr/lib/libCRFSuite.dylib -0x0000000189706000 /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling -0x00000001948ae000 /System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP -0x000000018e683000 /System/Library/PrivateFrameworks/Montreal.framework/Versions/A/Montreal -0x0000000196d10000 /usr/lib/libcmph.dylib -0x0000000195f33000 /usr/lib/libmecab.dylib -0x0000000196e81000 /usr/lib/libThaiTokenizer.dylib -0x00000002529e3000 /System/Library/PrivateFrameworks/GenerativeModelsFoundation.framework/Versions/A/GenerativeModelsFoundation -0x000000027c356000 /System/Library/PrivateFrameworks/TokenGeneration.framework/Versions/A/TokenGeneration -0x00000002527b7000 /System/Library/PrivateFrameworks/GenerativeFunctions.framework/Versions/A/GenerativeFunctions -0x0000000252805000 /System/Library/PrivateFrameworks/GenerativeFunctionsFoundation.framework/Versions/A/GenerativeFunctionsFoundation -0x000000026169e000 /System/Library/PrivateFrameworks/ModelCatalog.framework/Versions/A/ModelCatalog -0x000000026e8a2000 /System/Library/PrivateFrameworks/SensitiveContentAnalysisML.framework/Versions/A/SensitiveContentAnalysisML -0x000000025289b000 /System/Library/PrivateFrameworks/GenerativeFunctionsInstrumentation.framework/Versions/A/GenerativeFunctionsInstrumentation -0x000000026b6cb000 /System/Library/PrivateFrameworks/PromptKit.framework/Versions/A/PromptKit -0x000000026b0e1000 /System/Library/PrivateFrameworks/ProactiveDaemonSupport.framework/Versions/A/ProactiveDaemonSupport -0x000000027c58e000 /System/Library/PrivateFrameworks/TokenGenerationCore.framework/Versions/A/TokenGenerationCore -0x00000001b52db000 /System/Library/PrivateFrameworks/Trial.framework/Versions/A/Trial -0x00000001b525c000 /System/Library/PrivateFrameworks/TrialProto.framework/Versions/A/TrialProto -0x000000023ae9a000 /System/Library/PrivateFrameworks/AppleFlatBuffers.framework/Versions/A/AppleFlatBuffers -0x000000026eb72000 /System/Library/PrivateFrameworks/SentencePieceInternal.framework/Versions/A/SentencePieceInternal -0x000000019f77a000 /System/Library/Frameworks/Vision.framework/Versions/A/Vision -0x0000000246298000 /System/Library/PrivateFrameworks/CoreSceneUnderstanding.framework/Versions/A/CoreSceneUnderstanding -0x00000002811df000 /System/Library/PrivateFrameworks/VisionCore.framework/Versions/A/VisionCore -0x00000001999f0000 /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore -0x00000001bdbc1000 /System/Library/Frameworks/Vision.framework/libfaceCore.dylib -0x00000001be6db000 /System/Library/PrivateFrameworks/Futhark.framework/Versions/A/Futhark -0x00000001c2629000 /System/Library/PrivateFrameworks/InertiaCam.framework/Versions/A/InertiaCam -0x00000001be468000 /System/Library/PrivateFrameworks/TextRecognition.framework/Versions/A/TextRecognition -0x000000022eadd000 /System/Library/Frameworks/DataDetection.framework/Versions/A/DataDetection -0x00000001b8674000 /System/Library/PrivateFrameworks/TextInput.framework/Versions/A/TextInput -0x000000019849e000 /System/Library/PrivateFrameworks/CVNLP.framework/Versions/A/CVNLP -0x00000001dad09000 /System/Library/PrivateFrameworks/HIDDisplay.framework/Versions/A/HIDDisplay -0x000000019b255000 /usr/lib/libcups.2.dylib -0x000000019b2ec000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos -0x000000019af5c000 /usr/lib/libresolv.9.dylib -0x0000000198958000 /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal -0x00000001a4100000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Libraries/libHeimdalProxy.dylib -0x000000019b350000 /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth -0x00000001ad40e000 /System/Library/PrivateFrameworks/AXCoreUtilities.framework/Versions/A/AXCoreUtilities -0x00000001bda0a000 /System/Library/PrivateFrameworks/AttributeGraph.framework/Versions/A/AttributeGraph -0x000000028a801000 /usr/lib/libAXSafeCategoryBundle.dylib -0x0000000235252000 /System/Library/Frameworks/TabularData.framework/Versions/A/TabularData -0x000000023c11d000 /System/Library/PrivateFrameworks/ArgumentParserInternal.framework/Versions/A/ArgumentParserInternal -0x0000000195a5e000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib -0x0000000197053000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib -0x0000000195f95000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib -0x0000000196ec7000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib -0x000000019704e000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib -0x00000001949d5000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib -0x0000000188221000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib -0x000000022e5c2000 /System/Library/Frameworks/CoreTransferable.framework/Versions/A/CoreTransferable -0x000000019b2b4000 /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth -0x00000001918b4000 /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport -0x000000018ca51000 /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation -0x0000000195efd000 /usr/lib/libCheckFix.dylib -0x0000000190a3b000 /System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities -0x00000002569c7000 /System/Library/PrivateFrameworks/InstalledContentLibrary.framework/Versions/A/InstalledContentLibrary -0x000000018b192000 /System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore -0x00000001916ff000 /usr/lib/libapp_launch_measurement.dylib -0x00000001c8192000 /System/Library/PrivateFrameworks/MobileSystemServices.framework/Versions/A/MobileSystemServices -0x0000000198323000 /usr/lib/libxslt.1.dylib -0x0000000195ebc000 /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement -0x00000001a3792000 /usr/lib/libcurl.4.dylib -0x000000028b517000 /usr/lib/libcrypto.46.dylib -0x000000028c09a000 /usr/lib/libssl.48.dylib -0x00000001a346c000 /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP -0x00000001a34a8000 /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent -0x000000019af79000 /usr/lib/libsasl2.2.dylib -0x00000001a6710000 /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa -0x000000018b32d000 /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit -0x000000023ffce000 /System/Library/PrivateFrameworks/CollectionViewCore.framework/Versions/A/CollectionViewCore -0x0000000193f6f000 /System/Library/PrivateFrameworks/XCTTargetBootstrap.framework/Versions/A/XCTTargetBootstrap -0x0000000199a42000 /System/Library/PrivateFrameworks/UserActivity.framework/Versions/A/UserActivity -0x0000000249ab0000 /System/Library/PrivateFrameworks/FrontBoard.framework/Versions/A/FrontBoard -0x000000027df9f000 /System/Library/PrivateFrameworks/UIIntelligenceSupport.framework/Versions/A/UIIntelligenceSupport -0x00000002342db000 /System/Library/Frameworks/SwiftUICore.framework/Versions/A/SwiftUICore -0x0000000284b4b000 /System/Library/PrivateFrameworks/WritingTools.framework/Versions/A/WritingTools -0x0000000283942000 /System/Library/PrivateFrameworks/WindowManagement.framework/Versions/A/WindowManagement -0x00000002497e0000 /System/Library/PrivateFrameworks/FocusEngine.framework/Versions/A/FocusEngine -0x00000002471e9000 /System/Library/PrivateFrameworks/DesignLibrary.framework/Versions/A/DesignLibrary -0x0000000193f5a000 /System/Library/PrivateFrameworks/DFRFoundation.framework/Versions/A/DFRFoundation -0x000000027eeec000 /System/Library/PrivateFrameworks/UpdateCycle.framework/Versions/A/UpdateCycle -0x0000000193c5e000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox -0x000000019f040000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition -0x0000000191686000 /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis -0x000000019f3d0000 /System/Library/Frameworks/Accessibility.framework/Versions/A/Accessibility -0x0000000235238000 /System/Library/Frameworks/Symbols.framework/Versions/A/Symbols -0x0000000252dac000 /System/Library/PrivateFrameworks/Gestures.framework/Versions/A/Gestures -0x000000028c4c2000 /usr/lib/swift/libswiftSpatial.dylib -0x00000001b164e000 /usr/lib/swift/libswiftCoreGraphics.dylib -0x000000019fe14000 /usr/lib/swift/libswiftFoundation.dylib -0x00000001ebe32000 /usr/lib/swift/libswiftSwiftOnoneSupport.dylib -0x000000028c748000 /usr/lib/swift/libswiftsys_time.dylib -0x00000001d699f000 /System/Library/PrivateFrameworks/CoreMaterial.framework/Versions/A/CoreMaterial -0x000000028acfe000 /usr/lib/libSpatial.dylib -0x000000028a71e000 /System/Library/SubFrameworks/UIUtilities.framework/Versions/A/UIUtilities -0x00000001057c0000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/server/libjvm.dylib -0x00000001046ac000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjimage.dylib -0x00000001047a8000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjdwp.dylib -0x00000001046f4000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libjava.dylib -0x0000000104900000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libinstrument.dylib -0x00000001046d8000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libzip.dylib -0x000000028a7f3000 /usr/lib/i18n/libiconv_std.dylib -0x000000028a7e9000 /usr/lib/i18n/libUTF8.dylib -0x000000028a7f8000 /usr/lib/i18n/libmapper_none.dylib -0x00000001049d0000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libdt_socket.dylib -0x0000000104f6c000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnio.dylib -0x0000000104fb0000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libnet.dylib -0x00000001049e4000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement.dylib -0x0000000104f4c000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libmanagement_ext.dylib -0x0000000104f8c000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libextnet.dylib -0x0000000105300000 /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/lib/libverify.dylib - - -VM Arguments: -jvm_args: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:49167,suspend=y,server=n -javaagent:/Users/liangxin/Library/Caches/JetBrains/IntelliJIdea2026.1/captureAgent/debugger-agent.jar=file:///var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/capture18007844485071508468.props -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Ddebugger.async.stack.trace.for.all.threads=true -Dfile.encoding=UTF-8 -java_command: org.springblade.resource.ResourceApplication -java_class_path (initial): /Users/liangxin/Project/JAVA/tms-erp-api/blade-ops/blade-resource/target/classes:/Users/liangxin/Project/JAVA/tms-erp-api/blade-common/target/classes:/Users/liangxin/.m2/repository/org/springblade/blade-core-launch/4.10.0.BASE-SNAPSHOT/blade-core-launch-4.10.0.BASE-SNAPSHOT.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-starter-web/3.5.16/spring-boot-starter-web-3.5.16.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-starter-json/3.5.16/spring-boot-starter-json-3.5.16.jar:/Users/liangxin/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.21.4/jackson-datatype-jdk8-2.21.4.jar:/Users/liangxin/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.18.0/jackson-module-parameter-names-2.18.0.jar:/Users/liangxin/.m2/repository/org/springframework/spring-webmvc/6.2.19/spring-webmvc-6.2.19.jar:/Users/liangxin/.m2/repository/org/springframework/spring-context/6.2.19/spring-context-6.2.19.jar:/Users/liangxin/.m2/repository/org/springframework/spring-expression/6.2.19/spring-expression-6.2.19.jar:/Users/liangxin/.m2/repository/org/springframework/boot/spring-boot-starter-undertow/3.5.16/spring-boot-starter-undertow-3.5.16.jar:/Users/liangxin/.m2/repository/io/undertow/undertow-core/2.3.24.Final/undertow-core-2.3.24.Final.jar:/Users/liangxin/.m2/repository/org/jboss/xnio/xnio-api/3.8.16.Final/xnio-api-3.8.16.Final.jar:/Users/liangxin/.m2/repository/org/wildfly/common/wildfly-common/1.5.4.Final/wildfly-common-1.5.4.Final.jar:/Users/liangxin/.m2/repository/org/wildfly/client/wildfly-client-config/1.0.1.Final/wildfly-client-config-1.0.1.Final.jar:/Users/liangxin/.m2/repository/org/jboss/xnio/xnio-nio/3.8.16.Final/xnio-nio-3.8.16.Final.jar:/Users/liangxin/.m2/repository/org/jboss/threads/jboss-threads/3.7.0.Final/jboss-threads-3.7.0.Final.jar:/Users/liangxin/.m2/repository/io/smallrye/common/smallrye-common-annotation/2.6.0/smallrye-common-annotation-2.6.0.jar:/User -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 3 {product} {ergonomic} - uint G1ConcRefinementThreads = 10 {product} {ergonomic} - size_t G1HeapRegionSize = 8388608 {product} {ergonomic} - uintx GCDrainStackTargetSize = 64 {product} {ergonomic} - size_t InitialHeapSize = 603979776 {product} {ergonomic} - bool ManagementServer = true {product} {command line} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MaxHeapSize = 9663676416 {product} {ergonomic} - size_t MaxNewSize = 5796528128 {product} {ergonomic} - size_t MinHeapDeltaBytes = 8388608 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonProfiledCodeHeapSize = 0 {pd product} {ergonomic} - bool ProfileInterpreter = false {pd product} {command line} - uintx ProfiledCodeHeapSize = 0 {pd product} {ergonomic} - size_t SoftMaxHeapSize = 9663676416 {manageable} {ergonomic} - intx TieredStopAtLevel = 1 {product} {command line} - bool UseCompressedClassPointers = true {product lp64_product} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - bool UseNUMA = false {product} {ergonomic} - bool UseNUMAInterleaving = false {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags - #1: stderr all=off uptime,level,tags - -Environment Variables: -JAVA_HOME=/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home -PATH=/Users/liangxin/ai-infra/.venv/bin:/Users/liangxin/.nacos/bin:/Applications/Docker.app/Contents/Resources/bin:/Users/liangxin/Library/pnpm:/opt/homebrew/opt/ruby@3.2/bin:/opt/homebrew/opt/openssl@3/bin:/opt/miniconda3/bin:/opt/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home/bin:/Users/liangxin/fvm/default/bin:/Applications/MAMP/bin/php/php8.1.13/bin:/opt/homebrew/opt/ruby@3.2/bin:/Users/liangxin/.nvm/versions/node/v20.18.3/bin:/Applications/apache-tomcat-9.0.78:/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home/bin:/Users/liangxin/fvm/default/bin:/opt/homebrew/opt/libpng/bin:/Applications/pngquant:/Users/liangxin/AndroidSDK/platform-tools:/Users/liangxin/Library/Android/sdk/platform-tools:/Users/liangxin/Library/Andriod/sdk/cmdline-tools/latest/bin:/Users/liangxin/Library/Andriod/sdk:/Applications/apache-maven-3.8.1/bin:/opt/homebrew/bin:/usr/local/sbin:/usr/local/bin:/Users/liangxin/JDK/zulu17.48.15-ca-jdk17.0.10-macosx_aarch64/zulu-17.jdk/Contents/Home/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/Users/liangxin/.local/bin:/Users/liangxin/fvm/default/bin:/Applications/MAMP/bin/php/php8.1.13/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin:/Library/Apple/usr/bin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/liangxin/.cargo/bin:true:/Applications/极空间.app/Contents/Resources/app.asar.unpacked/bin/platform-tools -SHELL=/bin/zsh -LANG=C.UTF-8 -TMPDIR=/var/folders/pk/drq93rk10q733kk02fgp89xh0000gn/T/ - -Active Locale: -LC_ALL=C.UTF-8 -LC_COLLATE=C.UTF-8 -LC_CTYPE=C.UTF-8 -LC_MESSAGES=C.UTF-8 -LC_MONETARY=C.UTF-8 -LC_NUMERIC=C.UTF-8 -LC_TIME=C.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.dylib, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO, unblocked - - ---------------- S Y S T E M --------------- - -OS: -uname: Darwin 25.6.0 Darwin Kernel Version 25.6.0: Fri Jul 31 19:16:36 PDT 2026; root:xnu-12377.161.14~5/RELEASE_ARM64_T6030 arm64 -OS uptime: 2 days 5:15 hours -rlimit (soft/hard): STACK 8176k/65520k , CORE 0k/infinity , NPROC 6000/9000 , NOFILE 10240/infinity , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK infinity/infinity , RSS infinity/infinity -load average: 16.89 38.96 54.23 - -CPU: total 12 (initial active 12) 0x61:0x0:0x5f4dea93:0, fp, simd, crc, lse -machdep.cpu.brand_string:Apple M3 Pro -hw.cachelinesize:128 -hw.l1icachesize:131072 -hw.l1dcachesize:65536 -hw.l2cachesize:4194304 - -Memory: 16k page, physical 37748736k(215216k free), swap 18874368k(1062912k free) - -vm_info: OpenJDK 64-Bit Server VM (17.0.8+7-LTS) for bsd-aarch64 JRE (17.0.8+7-LTS) (Zulu17.44+15-CA), built on Jul 5 2023 00:50:04 by "zulu_re" with clang Apple LLVM 12.0.0 (clang-1200.0.32.28) - -END. From eef9d7ad9d62b62225325efc2d54d796229bb930 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Sun, 27 Sep 2026 22:54:30 +0800 Subject: [PATCH 21/29] =?UTF-8?q?:sparkles:=20=E5=AE=8C=E5=96=84=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E5=AF=BC=E5=85=A5=E9=85=8D=E8=BD=BD=E6=A0=87=E8=AF=86?= =?UTF-8?q?=E3=80=81=E5=AF=BC=E5=85=A5=E7=8A=B6=E6=80=81=E4=B8=8E=E5=87=AD?= =?UTF-8?q?=E8=AF=81=E6=96=87=E4=BB=B6=E5=A4=B9=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 记录配载标识号并在同批次多运单时生成配载单,导入状态与运单状态对齐,凭证按车牌文件夹统计并支持压缩包重传匹配。 Co-authored-by: Cursor --- .../transport/pojo/entity/LoadingManage.java | 2 +- .../transport/pojo/entity/Waybill.java | 5 +- .../transport/pojo/vo/VoucherFolderVO.java | 1 + .../transport/pojo/vo/WaybillVO.java | 4 + .../controller/ProcessConfigController.java | 24 +- .../transport/excel/LoadingManageExcel.java | 2 +- .../excel/MasterOrderWaybillExcel.java | 2 +- .../transport/excel/WaybillExcel.java | 2 +- .../excel/WaybillImportBatchExcel.java | 2 +- .../service/IVoucherManageService.java | 1 + .../impl/LoadingManageServiceImpl.java | 34 +- .../impl/VoucherManageServiceImpl.java | 397 ++++++++++++++++-- .../impl/WaybillImportBatchServiceImpl.java | 93 +++- .../service/impl/WaybillServiceImpl.java | 9 +- .../transport/wrapper/WaybillWrapper.java | 26 ++ doc/sql/transport/blade_tms_business.sql | 1 + ...de_waybill_loading_identifier_20260927.sql | 2 + 17 files changed, 545 insertions(+), 62 deletions(-) create mode 100644 doc/sql/transport/blade_waybill_loading_identifier_20260927.sql diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/LoadingManage.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/LoadingManage.java index 6393fc0a..e037a882 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/LoadingManage.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/LoadingManage.java @@ -56,7 +56,7 @@ public class LoadingManage extends TenantEntity { @Schema(description = "货物名称") private String cargoName; - @Schema(description = "车/船/航班/班列") + @Schema(description = "车牌号/船班号/船次号/班次号") private String vehicleNo; @Schema(description = "挂车车牌号") diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/Waybill.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/Waybill.java index 81c481d9..dec1a0b5 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/Waybill.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/Waybill.java @@ -162,7 +162,7 @@ public class Waybill extends TenantEntity { @TableField(updateStrategy = FieldStrategy.ALWAYS) private String driverRejectReason; - @Schema(description = "车/船/航班/班列号") + @Schema(description = "车牌号/船班号/船次号/班次号") private String vehicleNo; @Schema(description = "船长") @@ -234,6 +234,9 @@ public class Waybill extends TenantEntity { @Schema(description = "配载单号") private String loadingNo; + @Schema(description = "配载标识号") + private String loadingIdentifier; + @Schema(description = "运单批次号") private String batchNo; diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/VoucherFolderVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/VoucherFolderVO.java index 1f70c945..6c9ca5a5 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/VoucherFolderVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/VoucherFolderVO.java @@ -25,6 +25,7 @@ public class VoucherFolderVO implements Serializable { private String folderName; private Long waybillId; private String waybillNo; + private String loadingNo; private Integer matched; private String processStatus; private String fileName; diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillVO.java index cea37c38..ebba5343 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillVO.java @@ -66,6 +66,10 @@ public class WaybillVO extends Waybill { @Schema(description = "业务状态名称") private String businessStatusName; + @TableField(exist = false) + @Schema(description = "运输方式名称") + private String transportTypeName; + @TableField(exist = false) @Schema(description = "是否需要司机确认接单(过程配置接单节点)") private Boolean requireAccept; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ProcessConfigController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ProcessConfigController.java index c0cb3d30..68381d8c 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ProcessConfigController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ProcessConfigController.java @@ -51,7 +51,9 @@ import org.springblade.transport.pojo.entity.VoucherManage; import org.springblade.transport.pojo.entity.Waybill; import org.springblade.transport.pojo.vo.BusinessRemoveResultVO; import org.springblade.transport.pojo.vo.ProcessConfigVO; +import org.springblade.transport.pojo.vo.VoucherFolderVO; import org.springblade.transport.service.IProcessConfigService; +import org.springblade.transport.service.IVoucherManageService; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; @@ -80,6 +82,7 @@ import java.util.concurrent.TimeUnit; public class ProcessConfigController extends BladeController { private final IProcessConfigService processConfigService; + private final IVoucherManageService voucherManageService; private final WaybillMapper waybillMapper; private final VoucherFileMapper voucherFileMapper; private final VoucherImageMapper voucherImageMapper; @@ -88,11 +91,13 @@ public class ProcessConfigController extends BladeController { @Value("${file.storage.minio.bucket-name:${minio.bucket-name:}}") private String minioBucketName; - public ProcessConfigController(IProcessConfigService processConfigService, WaybillMapper waybillMapper, + public ProcessConfigController(IProcessConfigService processConfigService, IVoucherManageService voucherManageService, + WaybillMapper waybillMapper, VoucherFileMapper voucherFileMapper, VoucherImageMapper voucherImageMapper, VoucherManageMapper voucherManageMapper, ObjectProvider minioClientProvider) { this.processConfigService = processConfigService; + this.voucherManageService = voucherManageService; this.waybillMapper = waybillMapper; this.voucherFileMapper = voucherFileMapper; this.voucherImageMapper = voucherImageMapper; @@ -128,6 +133,23 @@ public class ProcessConfigController extends BladeController { return R.data(detail); } + @GetMapping("/voucher-folders") + @ApiOperationSupport(order = 2) + @Operation(summary = "查询运单执行凭证文件夹") + public R> voucherFolders( + @Parameter(description = "运单主键", required = true) @RequestParam Long waybillId) { + return R.data(voucherManageService.listWaybillFolders(waybillId)); + } + + @GetMapping("/voucher-folder-detail") + @ApiOperationSupport(order = 2) + @Operation(summary = "查询运单执行凭证文件夹详情") + public R voucherFolderDetail( + @Parameter(description = "凭证批次主键", required = true) @RequestParam Long voucherId, + @Parameter(description = "车牌号", required = true) @RequestParam String plateNo) { + return R.data(voucherManageService.folderDetail(voucherId, plateNo)); + } + @GetMapping("/voucher-images") @ApiOperationSupport(order = 2) @Operation(summary = "查询运单已关联凭证图片") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/LoadingManageExcel.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/LoadingManageExcel.java index 6380c7a2..f50c2079 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/LoadingManageExcel.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/LoadingManageExcel.java @@ -34,7 +34,7 @@ public class LoadingManageExcel implements Serializable { private String loadingNo; @ExcelProperty("配载子单号") private String loadingSubNos; - @ExcelProperty("车牌号/航班号/船号/班列号") + @ExcelProperty("车牌号/船班号/船次号/班次号") private String vehicleNo; @ExcelProperty("司机") private String driverName; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/MasterOrderWaybillExcel.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/MasterOrderWaybillExcel.java index 82246841..362e3390 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/MasterOrderWaybillExcel.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/MasterOrderWaybillExcel.java @@ -59,7 +59,7 @@ public class MasterOrderWaybillExcel { private String carrierName; @ExcelProperty("司机") private String driverName; - @ExcelProperty("车牌号/航班号/船号/班列号") + @ExcelProperty("车牌号/船班号/船次号/班次号") private String vehicleNo; @ExcelProperty("开始日期") private LocalDate startDate; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/WaybillExcel.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/WaybillExcel.java index c093fdd8..ec1ca37c 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/WaybillExcel.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/WaybillExcel.java @@ -98,7 +98,7 @@ public class WaybillExcel implements Serializable { private String driverName; @ExcelProperty("司机手机号") private String driverPhone; - @ExcelProperty("车/船/航班/班列号") + @ExcelProperty("车牌号/船班号/船次号/班次号") private String vehicleNo; @ExcelProperty("挂车车牌号") private String trailerVehicleNo; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/WaybillImportBatchExcel.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/WaybillImportBatchExcel.java index ac90cc8b..91528040 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/WaybillImportBatchExcel.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/WaybillImportBatchExcel.java @@ -28,7 +28,7 @@ public class WaybillImportBatchExcel implements Serializable { private String originalNo; @ExcelProperty("配载标识号") private String loadingIdentifier; - @ExcelProperty("*车牌号/航班号/船号/班列号") + @ExcelProperty("*车牌号/船班号/船次号/班次号") private String vehicleNo; @ExcelProperty("*运输方式") private String transportType; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IVoucherManageService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IVoucherManageService.java index 92c253a5..b8a16346 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IVoucherManageService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IVoucherManageService.java @@ -19,6 +19,7 @@ public interface IVoucherManageService extends BaseService { VoucherManageVO detail(Long id); IPage folderPage(IPage page, Long voucherId, String plateNo, Integer matched); VoucherFolderVO folderDetail(Long voucherId, String plateNo); + List listWaybillFolders(Long waybillId); void replaceFolder(Long voucherId, String plateNo, MultipartFile file); void replaceFolderByObject(Long voucherId, String plateNo, String objectKey, String fileName, Long size, String contentType); void removeFolder(Long voucherId, String plateNo); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java index df6a10f3..0ed279c4 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java @@ -42,6 +42,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; import java.util.Set; @@ -176,7 +177,11 @@ public class LoadingManageServiceImpl extends BaseServiceImpllambdaUpdate() @@ -229,6 +234,27 @@ public class LoadingManageServiceImpl extends BaseServiceImpl waybills, String loadingNo) { + Set waybillIds = new LinkedHashSet<>(waybillIds(existing.getWaybillIdsJson())); + waybills.stream().map(Waybill::getId).filter(Objects::nonNull).forEach(waybillIds::add); + List mergedWaybillIds = new ArrayList<>(waybillIds); + List linkedWaybills = waybillMapper.selectList(Wrappers.lambdaQuery() + .in(Waybill::getId, mergedWaybillIds) + .eq(Waybill::getIsDeleted, 0)); + existing.setWaybillIdsJson(JsonUtil.toJson(mergedWaybillIds)); + existing.setLoadingSubNos(linkedWaybills.stream() + .map(Waybill::getWaybillNo) + .filter(Func::isNotEmpty) + .collect(Collectors.joining(","))); + updateById(existing); + waybillMapper.update(null, Wrappers.lambdaUpdate() + .in(Waybill::getId, mergedWaybillIds) + .set(Waybill::getLoadingNo, loadingNo)); + } + /** * 根据导入运单构建配载单的途经地: * 组内运单按导入顺序串联路线,上一票的到货地址与下一票的发货地址相同(中途卸货点)时只保留一个点, @@ -644,7 +670,7 @@ public class LoadingManageServiceImpl extends BaseServiceImpl minioClientProvider; private final String minioBucketName; @@ -87,6 +91,7 @@ public class VoucherManageServiceImpl extends BaseServiceImpl minioClientProvider, @Value("${file.storage.minio.bucket-name:${minio.bucket-name:}}") String minioBucketName, @Value("${file.storage.minio.root-directory:${minio.root-directory:}}") String minioRootDirectory) { @@ -95,6 +100,7 @@ public class VoucherManageServiceImpl extends BaseServiceImpl selectPage(IPage page, VoucherManageVO query) { IPage result = VoucherManageWrapper.build().pageVO(page(page, buildQuery(query))); - // 凭证数量按文件夹(车牌目录)统计,兼容历史记录中仍保存图片数量的旧数据。 + // 凭证数量、已关联数量、未关联数量都按压缩包中的车牌文件夹统计,不按图片张数。 if (result.getRecords() != null) { result.getRecords().forEach(item -> { VoucherFolderCounts folderCounts = countVoucherFolderRelations(item.getTenantId(), item.getId()); @@ -182,12 +188,22 @@ public class VoucherManageServiceImpl extends BaseServiceImpl oldFiles = voucherFileMapper.selectList(Wrappers.lambdaQuery() - .eq(VoucherFile::getTenantId, voucher.getTenantId()).eq(VoucherFile::getVoucherId, voucherId) - .eq(VoucherFile::getPlateNo, normalizedPlateNo).eq(VoucherFile::getIsDeleted, 0)); - List oldImages = voucherImageMapper.selectList(Wrappers.lambdaQuery() - .eq(VoucherImage::getTenantId, voucher.getTenantId()).eq(VoucherImage::getVoucherId, voucherId) - .eq(VoucherImage::getPlateNo, normalizedPlateNo).eq(VoucherImage::getIsDeleted, 0)); + if (isZipFile) { + try { + // 压缩包里只要有一个文件夹名对上已有车牌或运单车牌,就替换对应凭证,不必整包都匹配。 + if (replaceZipFoldersByName(voucher, normalizedPlateNo, uploadFile)) { + refreshVoucherCounts(voucher); + return; + } + } catch (ServiceException exception) { + throw exception; + } catch (Exception exception) { + log.error("按文件夹替换车牌凭证失败 voucherId={}, plateNo={}", voucherId, normalizedPlateNo, exception); + throw new ServiceException("凭证文件上传失败"); + } + } + List oldFiles = listNormalizedPlateFiles(voucher, normalizedPlateNo); + List oldImages = listNormalizedPlateImages(voucher, normalizedPlateNo); if (oldFiles.isEmpty() && oldImages.isEmpty()) throw new ServiceException("车牌凭证不存在"); if (oldFiles.stream().anyMatch(item -> Objects.equals(item.getMatched(), 1)) || oldImages.stream().anyMatch(item -> Objects.equals(item.getMatched(), 1))) { @@ -228,11 +244,10 @@ public class VoucherManageServiceImpl extends BaseServiceImpl listWaybillFolders(Long waybillId) { + if (waybillId == null) return List.of(); + Waybill waybill = waybillService.getById(waybillId); + if (waybill == null || Objects.equals(waybill.getIsDeleted(), 1)) return List.of(); + Set voucherIds = new HashSet<>(); + voucherImageMapper.selectList(Wrappers.lambdaQuery() + .eq(VoucherImage::getWaybillId, waybillId) + .eq(VoucherImage::getIsDeleted, 0)) + .forEach(image -> { + if (image.getVoucherId() != null) voucherIds.add(image.getVoucherId()); + }); + voucherFileMapper.selectList(Wrappers.lambdaQuery() + .eq(VoucherFile::getWaybillId, waybillId) + .eq(VoucherFile::getIsDeleted, 0)) + .forEach(file -> { + if (file.getVoucherId() != null) voucherIds.add(file.getVoucherId()); + }); + if (voucherIds.isEmpty() && Func.isNotEmpty(waybill.getBatchNo())) { + list(Wrappers.lambdaQuery() + .eq(VoucherManage::getTenantId, waybill.getTenantId()) + .eq(VoucherManage::getIsDeleted, 0)) + .stream() + .filter(voucher -> containsWaybillBatchNo(voucher.getWaybillBatchNo(), waybill.getBatchNo())) + .forEach(voucher -> voucherIds.add(voucher.getId())); + } + List folders = new ArrayList<>(); + for (Long voucherId : voucherIds) { + VoucherManage voucher = getById(voucherId); + if (!visibleWaybillVoucher(voucher)) continue; + folderRecords(voucher, false).stream() + .filter(folder -> folderBelongsToWaybill(folder, waybill)) + .forEach(folders::add); + } + folders.sort(Comparator.comparing(VoucherFolderVO::getCreateTime, Comparator.nullsLast(Comparator.reverseOrder()))); + return folders; + } + + private boolean folderBelongsToWaybill(VoucherFolderVO folder, Waybill waybill) { + if (Objects.equals(folder.getWaybillId(), waybill.getId())) return true; + if (folder.getWaybillId() != null) return false; + String plateNo = normalizePlateNo(folder.getPlateNo()); + return Func.isNotEmpty(plateNo) && waybillPlateNumbers(waybill).contains(plateNo); + } + + /** + * 承运商上传的凭证只在审核通过后展示到运单执行详情;内部上传保持原展示规则。 + */ + private boolean visibleWaybillVoucher(VoucherManage voucher) { + return voucher != null && !Objects.equals(voucher.getIsDeleted(), 1) + && (!"承运商".equals(voucher.getUploadSource()) || "审核通过".equals(voucher.getAuditStatus())); + } + + private boolean containsWaybillBatchNo(String batchNos, String batchNo) { + return Func.isNotEmpty(batchNos) && Func.isNotEmpty(batchNo) + && Arrays.stream(batchNos.split(",")).map(String::trim).anyMatch(batchNo::equals); + } + + private void fillFolderLoadingNo(List folders) { + List waybillIds = folders.stream().map(VoucherFolderVO::getWaybillId).filter(Objects::nonNull).distinct().toList(); + if (waybillIds.isEmpty()) return; + Map waybillMap = waybillService.listByIds(waybillIds).stream() + .collect(Collectors.toMap(Waybill::getId, item -> item, (left, right) -> left)); + Map loadingNoMap = new HashMap<>(); + for (Long waybillId : waybillIds) { + Waybill waybill = waybillMap.get(waybillId); + String loadingNo = waybill == null ? null : waybill.getLoadingNo(); + if (Func.isEmpty(loadingNo)) { + loadingNo = findLoadingNo(waybill == null ? null : waybill.getTenantId(), waybillId); + } + if (Func.isNotEmpty(loadingNo)) loadingNoMap.put(waybillId, loadingNo); + } + folders.forEach(folder -> { + if (folder.getWaybillId() != null) folder.setLoadingNo(loadingNoMap.get(folder.getWaybillId())); + }); + } + + private String findLoadingNo(String tenantId, Long waybillId) { + if (waybillId == null) return null; + String waybillIdText = String.valueOf(waybillId); + LambdaQueryWrapper query = Wrappers.lambdaQuery() + .like(LoadingManage::getWaybillIdsJson, waybillIdText) + .orderByDesc(LoadingManage::getCreateTime) + .last("limit 20"); + if (Func.isNotEmpty(tenantId)) query.eq(LoadingManage::getTenantId, tenantId); + return loadingManageMapper.selectList(query).stream() + .filter(item -> containsJsonId(item.getWaybillIdsJson(), waybillIdText)) + .map(LoadingManage::getLoadingNo) + .filter(Func::isNotEmpty) + .findFirst() + .orElse(null); + } + + private boolean containsJsonId(String json, String idText) { + if (Func.isEmpty(json) || Func.isEmpty(idText)) return false; + return Arrays.stream(json.split("\\D+")).anyMatch(idText::equals); + } + private void addFolderFile(Map grouped, VoucherManage voucher, VoucherFileVO file, java.util.Date createTime, java.util.Date updateTime) { String plate = normalizePlateNo(file.getPlateNo()); if (Func.isEmpty(plate)) plate = "未识别车牌"; @@ -398,6 +512,174 @@ public class VoucherManageServiceImpl extends BaseServiceImpl waybillByPlate = new HashMap<>(); + for (Waybill waybill : listRelatedWaybills(voucher)) { + for (String waybillPlateNo : waybillPlateNumbers(waybill)) { + waybillByPlate.putIfAbsent(waybillPlateNo, waybill); + } + } + Set existingPlates = new HashSet<>(); + voucherFileMapper.selectList(Wrappers.lambdaQuery() + .eq(VoucherFile::getTenantId, voucher.getTenantId()).eq(VoucherFile::getVoucherId, voucher.getId()) + .eq(VoucherFile::getIsDeleted, 0)).forEach(file -> addPlateNumber(existingPlates, file.getPlateNo())); + voucherImageMapper.selectList(Wrappers.lambdaQuery() + .eq(VoucherImage::getTenantId, voucher.getTenantId()).eq(VoucherImage::getVoucherId, voucher.getId()) + .eq(VoucherImage::getIsDeleted, 0)).forEach(image -> addPlateNumber(existingPlates, image.getPlateNo())); + Charset archiveCharset = detectArchiveCharset(archivePath); + Set matchedPlates = new HashSet<>(); + try (InputStream source = Files.newInputStream(archivePath); + ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(source), archiveCharset)) { + ZipEntry entry; + while ((entry = zipInputStream.getNextEntry()) != null) { + if (entry.isDirectory()) continue; + String plateNo = plateFromZipEntry(entry.getName(), requestedPlateNo, existingPlates, waybillByPlate); + if (Func.isNotEmpty(plateNo)) matchedPlates.add(plateNo); + } + } + if (matchedPlates.isEmpty()) return false; + log.info("[单个上传] 压缩包文件夹命中,准备替换 voucherId={}, requestedPlateNo={}, matchedPlates={}", + voucher.getId(), requestedPlateNo, matchedPlates); + matchedPlates.forEach(plateNo -> deletePlateVoucherFiles(voucher, plateNo)); + int fileCount = 0; + int imageCount = 0; + try (InputStream source = Files.newInputStream(archivePath); + ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(source), archiveCharset)) { + ZipEntry entry; + while ((entry = zipInputStream.getNextEntry()) != null) { + if (entry.isDirectory()) continue; + String entryName = entry.getName().replace('\\', '/'); + String plateNo = plateFromZipEntry(entryName, requestedPlateNo, existingPlates, waybillByPlate); + if (!matchedPlates.contains(plateNo)) continue; + List pathParts = Arrays.stream(entryName.split("/")).filter(Func::isNotEmpty).toList(); + if (pathParts.isEmpty()) continue; + String rawFileName = pathParts.get(pathParts.size() - 1); + boolean imageFile = isImageFile(rawFileName); + String storedFileName = safeFileName(rawFileName); + if (Func.isEmpty(storedFileName)) continue; + Waybill matchedWaybill = waybillByPlate.get(plateNo); + if (saveZipVoucherFile(voucher, plateNo, matchedWaybill, entryName, storedFileName, imageFile, entry, zipInputStream)) { + fileCount++; + if (imageFile) imageCount++; + } + } + } + if (fileCount == 0) throw new ServiceException("压缩包内没有找到有效的文件"); + log.info("[单个上传] 按文件夹替换完成 voucherId={}, matchedPlates={}, fileCount={}, imageCount={}", + voucher.getId(), matchedPlates, fileCount, imageCount); + return true; + } finally { + deleteTempArchive(archivePath); + } + } + + /** + * 从压缩包路径的每一层目录识别车牌。车牌文件夹外面还套了其它目录时,也不能漏掉。 + * 优先当前重新上传的车牌,其次关联运单车牌,再其次批次里已有车牌。 + */ + private String plateFromZipEntry(String entryName, String requestedPlateNo, Set existingPlates, Map waybillByPlate) { + if (Func.isEmpty(entryName)) return null; + String normalizedName = entryName.replace('\\', '/'); + if (normalizedName.equals("__MACOSX") || normalizedName.startsWith("__MACOSX/")) return null; + List pathParts = Arrays.stream(normalizedName.split("/")).filter(Func::isNotEmpty).toList(); + if (pathParts.size() <= 1) return null; + List directories = new ArrayList<>(); + for (int index = 0; index < pathParts.size() - 1; index++) { + String plateNo = normalizePlateNo(pathParts.get(index)); + if (Func.isEmpty(plateNo) || "凭证导入".equals(plateNo) || plateNo.startsWith("__MACOSX") || ".".equals(plateNo)) continue; + directories.add(plateNo); + } + if (directories.isEmpty()) return null; + if (Func.isNotEmpty(requestedPlateNo) && directories.contains(requestedPlateNo)) return requestedPlateNo; + for (String plateNo : directories) { + if (waybillByPlate.containsKey(plateNo)) return plateNo; + } + for (String plateNo : directories) { + if (existingPlates.contains(plateNo)) return plateNo; + } + return null; + } + + private List listNormalizedPlateFiles(VoucherManage voucher, String plateNo) { + String normalizedPlateNo = normalizePlateNo(plateNo); + return voucherFileMapper.selectList(Wrappers.lambdaQuery() + .eq(VoucherFile::getTenantId, voucher.getTenantId()) + .eq(VoucherFile::getVoucherId, voucher.getId()) + .eq(VoucherFile::getIsDeleted, 0)) + .stream() + .filter(file -> normalizedPlateNo.equals(normalizePlateNo(file.getPlateNo()))) + .toList(); + } + + private List listNormalizedPlateImages(VoucherManage voucher, String plateNo) { + String normalizedPlateNo = normalizePlateNo(plateNo); + return voucherImageMapper.selectList(Wrappers.lambdaQuery() + .eq(VoucherImage::getTenantId, voucher.getTenantId()) + .eq(VoucherImage::getVoucherId, voucher.getId()) + .eq(VoucherImage::getIsDeleted, 0)) + .stream() + .filter(image -> normalizedPlateNo.equals(normalizePlateNo(image.getPlateNo()))) + .toList(); + } + + private void deletePlateVoucherFiles(VoucherManage voucher, String plateNo) { + List oldFiles = listNormalizedPlateFiles(voucher, plateNo); + List oldImages = listNormalizedPlateImages(voucher, plateNo); + oldFiles.forEach(item -> voucherFileMapper.deleteById(item.getId())); + oldImages.forEach(item -> voucherImageMapper.deleteById(item.getId())); + java.util.stream.Stream.concat(oldFiles.stream().map(VoucherFile::getObjectKey), oldImages.stream().map(VoucherImage::getObjectKey)) + .filter(Func::isNotEmpty).distinct().forEach(this::deleteObjectQuietly); + } + + private boolean saveZipVoucherFile(VoucherManage voucher, String plateNo, Waybill matchedWaybill, String entryName, + String fileName, boolean imageFile, ZipEntry entry, ZipInputStream zipInputStream) throws Exception { + String waybillNo = matchedWaybill == null ? "unmatched" : safePathPart(matchedWaybill.getWaybillNo()); + String objectKey = buildObjectKey(voucher.getId(), waybillNo, plateNo, entryName); + String contentType = contentType(fileName); + minioClient().putObject(PutObjectArgs.builder().bucket(minioBucketName).object(objectKey) + .stream(zipInputStream, entry.getSize(), 10 * 1024 * 1024) + .contentType(contentType).build()); + VoucherFile file = new VoucherFile(); + file.setVoucherId(voucher.getId()); + file.setVoucherBatchNo(voucher.getVoucherBatchNo()); + file.setWaybillId(matchedWaybill == null ? null : matchedWaybill.getId()); + file.setWaybillNo(matchedWaybill == null ? null : matchedWaybill.getWaybillNo()); + file.setPlateNo(plateNo); + file.setFolderName(plateNo); + file.setEntryName(entryName); + file.setFileName(fileName); + file.setObjectKey(objectKey); + file.setFileSize(entry.getSize() < 0 ? null : entry.getSize()); + file.setContentType(contentType); + file.setFileType(imageFile ? "image" : "file"); + file.setMatched(matchedWaybill == null ? 0 : 1); + file.setTenantId(voucher.getTenantId()); + voucherFileMapper.insert(file); + if (!imageFile) return true; + VoucherImage image = new VoucherImage(); + image.setVoucherId(voucher.getId()); + image.setVoucherBatchNo(voucher.getVoucherBatchNo()); + image.setWaybillId(matchedWaybill == null ? null : matchedWaybill.getId()); + image.setWaybillNo(matchedWaybill == null ? null : matchedWaybill.getWaybillNo()); + image.setPlateNo(plateNo); + image.setImageName(fileName); + image.setObjectKey(objectKey); + image.setMatched(matchedWaybill == null ? 0 : 1); + image.setTenantId(voucher.getTenantId()); + voucherImageMapper.insert(image); + return true; + } + private void replaceFolderWithZip(VoucherManage voucher, String plateNo, Waybill matchedWaybill, MultipartFile zipFile) throws Exception { log.info("[单个上传] 开始解压替换 voucherId={}, plateNo={}, fileName={}", voucher.getId(), plateNo, zipFile.getOriginalFilename()); Charset zipCharset = StandardCharsets.UTF_8; @@ -583,23 +865,82 @@ public class VoucherManageServiceImpl extends BaseServiceImpl waybillPlates = new HashSet<>(); + if (voucher != null) { + for (Waybill waybill : listRelatedWaybills(voucher)) { + waybillPlates.addAll(waybillPlateNumbers(waybill)); + } + } List files = voucherFileMapper.selectList(Wrappers.lambdaQuery() .eq(VoucherFile::getTenantId, tenantId).eq(VoucherFile::getVoucherId, voucherId).eq(VoucherFile::getIsDeleted, 0)); + Map relatedByFolder = new LinkedHashMap<>(); if (!files.isEmpty()) { - Set folders = files.stream().map(item -> folderKey(item.getPlateNo())).collect(Collectors.toSet()); - Set relatedFolders = files.stream().filter(item -> Objects.equals(item.getMatched(), 1)) - .map(item -> folderKey(item.getPlateNo())).collect(Collectors.toSet()); - return new VoucherFolderCounts(folders.size(), relatedFolders.size(), folders.size() - relatedFolders.size()); + for (VoucherFile file : files) { + accumulatePlateFolder(relatedByFolder, waybillPlates, file.getPlateNo(), file.getFolderName(), file.getEntryName(), file.getMatched()); + } + } else { + List images = voucherImageMapper.selectList(Wrappers.lambdaQuery() + .eq(VoucherImage::getTenantId, tenantId).eq(VoucherImage::getVoucherId, voucherId).eq(VoucherImage::getIsDeleted, 0)); + for (VoucherImage image : images) { + accumulatePlateFolder(relatedByFolder, waybillPlates, image.getPlateNo(), image.getPlateNo(), null, image.getMatched()); + } } - List images = voucherImageMapper.selectList(Wrappers.lambdaQuery() - .eq(VoucherImage::getTenantId, tenantId).eq(VoucherImage::getVoucherId, voucherId).eq(VoucherImage::getIsDeleted, 0)); - Set folders = images.stream().map(item -> folderKey(item.getPlateNo())).collect(Collectors.toSet()); - Set relatedFolders = images.stream().filter(item -> Objects.equals(item.getMatched(), 1)) - .map(item -> folderKey(item.getPlateNo())).collect(Collectors.toSet()); - return new VoucherFolderCounts(folders.size(), relatedFolders.size(), folders.size() - relatedFolders.size()); + int related = (int) relatedByFolder.values().stream().filter(Boolean::booleanValue).count(); + int total = relatedByFolder.size(); + return new VoucherFolderCounts(total, related, total - related); } + private void accumulatePlateFolder(Map relatedByFolder, Set waybillPlates, + String plateNo, String folderName, String entryName, Integer matched) { + String plateFolder = countedPlateFolder(plateNo, folderName, entryName, waybillPlates); + if (Func.isEmpty(plateFolder)) return; + boolean related = Objects.equals(matched, 1) || waybillPlates.contains(plateFolder); + relatedByFolder.merge(plateFolder, related, (left, right) -> left || right); + } + + /** + * 从车牌字段和压缩包路径中识别车牌文件夹。外层业务目录、内层图片目录都不计入凭证数量。 + */ + private String countedPlateFolder(String plateNo, String folderName, String entryName, Set waybillPlates) { + List candidates = new ArrayList<>(); + addPlateCandidate(candidates, plateNo); + addPlateCandidate(candidates, folderName); + if (Func.isNotEmpty(entryName)) { + List pathParts = Arrays.stream(entryName.replace('\\', '/').split("/")).filter(Func::isNotEmpty).toList(); + int directoryCount = Math.max(pathParts.size() - 1, 0); + for (int index = 0; index < directoryCount; index++) { + addPlateCandidate(candidates, pathParts.get(index)); + } + } + for (String candidate : candidates) { + if (waybillPlates.contains(candidate)) return candidate; + } + for (String candidate : candidates) { + if (isPlateFolderName(candidate)) return candidate; + } + return null; + } + + private void addPlateCandidate(List candidates, String plateNo) { + String normalizedPlateNo = normalizePlateNo(plateNo); + if (Func.isNotEmpty(normalizedPlateNo) && !"未识别车牌".equals(normalizedPlateNo) && !candidates.contains(normalizedPlateNo)) { + candidates.add(normalizedPlateNo); + } + } + + private boolean isPlateFolderName(String plateNo) { + return Func.isNotEmpty(plateNo) && PLATE_FOLDER_PATTERN.matcher(plateNo).matches(); + } + + private static final Pattern PLATE_FOLDER_PATTERN = Pattern.compile( + "^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-Z0-9]{4,6}(?:挂|学|警|港|澳)?$"); + private record VoucherFolderCounts(int total, int related, int unrelated) {} private String folderKey(String plateNo) { @@ -1020,13 +1361,19 @@ public class VoucherManageServiceImpl extends BaseServiceImpl implements IWaybillImportBatchService { - /** 批量导入状态仅保留草稿与导入完成两种。 */ + /** 保存草稿仍使用 draft;确认导入的状态与运单业务状态一致。 */ private static final String STATUS_DRAFT = "draft"; + private static final String STATUS_RUNNING = "running"; private static final String STATUS_COMPLETED = "completed"; private static final String IMPORT_TYPE_WAYBILL = "waybill"; private static final String IMPORT_TYPE_SETTLEMENT = "settlement"; @@ -101,7 +103,7 @@ public class WaybillImportBatchServiceImpl extends BaseServiceImpl waybills = new ArrayList<>(); - Map> loadingWaybills = new TreeMap<>(); for (int index = 0; index < rows.size(); index++) { if (skipRows.contains(index)) continue; Waybill waybill = waybillByRow.getOrDefault(index, rowWaybills.get(index)); - // 配载标识号必须取自行数据:运单落库(prepareForSave)会把新建运单的 loadingNo 置空 - String loadingIdentifier = stringValue(rows.get(index), "loadingIdentifier", "配载标识号"); try { if (draft) waybillService.saveDraft(waybill); else waybillService.submit(waybill); } catch (Exception exception) { throw new ServiceException("第" + (index + 1) + "行" + (draft ? "保存" : "导入") + "失败:" + exception.getMessage()); } - waybills.add(waybill); - if (!draft && IMPORT_TYPE_WAYBILL.equals(batch.getImportType()) && Func.isNotEmpty(loadingIdentifier)) { - loadingWaybills.computeIfAbsent(loadingIdentifier, key -> new ArrayList<>()).add(waybill); + // 进行中导入要保持运单为进行中,避免过程接单配置在查询时把状态改回待执行。 + if (STATUS_RUNNING.equals(importStatus)) { + waybillService.update(Wrappers.lambdaUpdate() + .eq(Waybill::getId, waybill.getId()) + .set(Waybill::getBusinessStatus, STATUS_RUNNING) + .set(Waybill::getDriverAcceptStatus, WaybillProcessSupport.ACCEPT_ACCEPTED)); + waybill.setBusinessStatus(STATUS_RUNNING); + waybill.setDriverAcceptStatus(WaybillProcessSupport.ACCEPT_ACCEPTED); } + waybills.add(waybill); + } + // 同一配载标识号有多条运单时,生成一张配载单并回写运单关联。 + if (!draft && IMPORT_TYPE_WAYBILL.equals(batch.getImportType())) { + createLoadingsForSharedIdentifiers(batch); } - loadingWaybills.forEach(loadingManageService::createFromImportedWaybills); batch.setWaybillCount(existingWaybillCount + waybills.size()); if (append && !draft) { - batch.setImportStatus(STATUS_COMPLETED); + batch.setImportStatus(importStatus); } updateById(batch); - // 导入完成且导入类型为运单时,按合同费用生成模式(系统生成)同步生成应收应付明细。 - if (!draft && IMPORT_TYPE_WAYBILL.equals(batch.getImportType())) { + // 导入状态为已完成时,按合同费用生成模式(系统生成)同步生成应收应付明细。 + if (STATUS_COMPLETED.equals(importStatus) && IMPORT_TYPE_WAYBILL.equals(batch.getImportType())) { receivablePayableDetailService.generateForImportedWaybills(waybills); } return batch; } + /** + * 按批次内已落库运单的配载标识号分组。标识号相同且不少于两条时创建或补齐配载单。 + */ + private void createLoadingsForSharedIdentifiers(WaybillImportBatch batch) { + List batchWaybills = waybillService.list(Wrappers.lambdaQuery() + .eq(Waybill::getImportBatchId, batch.getId()) + .eq(Waybill::getIsDeleted, 0) + .orderByAsc(Waybill::getCreateTime) + .orderByAsc(Waybill::getId)); + Map> loadingWaybills = new java.util.LinkedHashMap<>(); + for (Waybill waybill : batchWaybills) { + if (Func.isEmpty(waybill.getLoadingIdentifier())) continue; + loadingWaybills.computeIfAbsent(waybill.getLoadingIdentifier(), key -> new ArrayList<>()).add(waybill); + } + loadingWaybills.forEach((loadingIdentifier, groupedWaybills) -> { + if (groupedWaybills.size() > 1) { + loadingManageService.createFromImportedWaybills(loadingIdentifier, groupedWaybills); + } + }); + } + private void clearBatchWaybills(Long batchId) { if (Func.isEmpty(batchId)) return; List waybills = waybillService.list(Wrappers.lambdaQuery() @@ -311,6 +340,7 @@ public class WaybillImportBatchServiceImpl extends BaseServiceImpl page(IPage page, WaybillImportBatchRequest request) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery() .eq(WaybillImportBatch::getIsDeleted, 0) + .eq(request.getId() != null, WaybillImportBatch::getId, request.getId()) .like(Func.isNotEmpty(request.getBatchNo()), WaybillImportBatch::getBatchNo, request.getBatchNo()) .apply(Func.isNotEmpty(request.getCarrierId()), "FIND_IN_SET({0}, carrier_ids)", request.getCarrierId()) .eq(Func.isNotEmpty(request.getCarrierName()), WaybillImportBatch::getCarrierName, request.getCarrierName()) @@ -341,6 +371,23 @@ public class WaybillImportBatchServiceImpl extends BaseServiceImpl row, List errors) { - String vehicleNo = stringValue(row, "vehicleNo", "车牌号/航班号/船号/班列号"); + String vehicleNo = stringValue(row, "vehicleNo", "车牌号/船班号/船次号/班次号", "车牌号/航班号/船号/班列号"); String transportType = stringValue(row, "transportType", "运输类型", "*运输类型", "运输方式", "*运输方式"); if (Func.isEmpty(transportType)) { return; } - // 公路运输必须填写车牌号;其他运输方式的该字段可填写航班号、船号或班列号。 + // 公路运输必须填写车牌号;其他运输方式的该字段可填写船班号、船次号或班次号。 if (!isRoadTransport(transportType)) { return; } @@ -897,12 +944,12 @@ public class WaybillImportBatchServiceImpl extends BaseServiceImpl assertNotLoaded(oldRecord); waybill.setWaybillNo(oldRecord.getWaybillNo()); waybill.setLoadingNo(oldRecord.getLoadingNo()); + waybill.setLoadingIdentifier(oldRecord.getLoadingIdentifier()); waybill.setDeptId(oldRecord.getDeptId()); waybill.setDeptName(oldRecord.getDeptName()); waybill.setMileageRemark(oldRecord.getMileageRemark()); @@ -993,6 +994,7 @@ public class WaybillServiceImpl extends BaseServiceImpl target.setPlanName(source.getPlanName()); target.setMasterNo(null); target.setLoadingNo(null); + target.setLoadingIdentifier(null); target.setBatchNo(source.getBatchNo()); target.setRelationNo(source.getRelationNo()); target.setCurrentProcessNode(source.getCurrentProcessNode()); @@ -1418,6 +1420,7 @@ public class WaybillServiceImpl extends BaseServiceImpl waybill.setPlanName(TransportBusinessSupport.trimToNull(waybill.getPlanName())); waybill.setMasterNo(TransportBusinessSupport.trimToNull(waybill.getMasterNo())); waybill.setLoadingNo(TransportBusinessSupport.trimToNull(waybill.getLoadingNo())); + waybill.setLoadingIdentifier(TransportBusinessSupport.trimToNull(waybill.getLoadingIdentifier())); waybill.setBatchNo(TransportBusinessSupport.trimToNull(waybill.getBatchNo())); waybill.setRelationNo(TransportBusinessSupport.trimToNull(waybill.getRelationNo())); waybill.setCurrentProcessNode(TransportBusinessSupport.trimToNull(waybill.getCurrentProcessNode())); @@ -1490,7 +1493,7 @@ public class WaybillServiceImpl extends BaseServiceImpl TransportBusinessSupport.validateRequired(waybill.getQuantityUnit(), "数量单位不能为空"); TransportBusinessSupport.validateRequired(waybill.getCarrierType(), "承运类型不能为空"); TransportBusinessSupport.validateRequired( - waybill.getVehicleNo(), isRoadTransport(waybill.getTransportType()) ? "车牌号不能为空" : "船/航/班列号不能为空" + waybill.getVehicleNo(), isRoadTransport(waybill.getTransportType()) ? "车牌号不能为空" : "船班号/船次号/班次号不能为空" ); if (isRoadTransport(waybill.getTransportType())) { if ("承运商".equals(waybill.getCarrierType())) { @@ -1527,7 +1530,7 @@ public class WaybillServiceImpl extends BaseServiceImpl TransportBusinessSupport.validateLength(waybill.getCarrierName(), 255, "承运商名称不能超过255字"); TransportBusinessSupport.validateLength(waybill.getDriverName(), 255, "司机姓名不能超过255字"); TransportBusinessSupport.validateLength(waybill.getDriverPhone(), 50, "司机手机号不能超过50字"); - TransportBusinessSupport.validateLength(waybill.getVehicleNo(), 255, "车/船/航班/班列号不能超过255字"); + TransportBusinessSupport.validateLength(waybill.getVehicleNo(), 255, "车牌号/船班号/船次号/班次号不能超过255字"); TransportBusinessSupport.validateLength(waybill.getCaptainName(), 20, "船长不能超过20字"); TransportBusinessSupport.validateLength(waybill.getCabinNo(), 30, "舱位不能超过30字"); TransportBusinessSupport.validateLength(waybill.getContainerNo(), 30, "箱号不能超过30字"); @@ -1637,7 +1640,7 @@ public class WaybillServiceImpl extends BaseServiceImpl if (isRoadTransport(waybill.getTransportType())) { return; } - TransportBusinessSupport.validateLength(waybill.getVehicleNo(), 30, "船/航/班列号不能超过30字"); + TransportBusinessSupport.validateLength(waybill.getVehicleNo(), 30, "船班号/船次号/班次号不能超过30字"); TransportBusinessSupport.validateLength(waybill.getCaptainName(), 20, "船长不能超过20字"); TransportBusinessSupport.validateLength(waybill.getCabinNo(), 30, "舱位不能超过30字"); TransportBusinessSupport.validateLength(waybill.getContainerNo(), 30, "箱号不能超过30字"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java index 56e803af..c7db3b41 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java @@ -26,6 +26,8 @@ import org.springblade.core.mp.support.BaseEntityWrapper; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.system.cache.DictBizCache; +import org.springblade.system.cache.DictCache; import org.springblade.system.cache.UserCache; import org.springblade.transport.pojo.entity.Waybill; import org.springblade.transport.pojo.vo.WaybillVO; @@ -58,6 +60,7 @@ public class WaybillWrapper extends BaseEntityWrapper { waybill.getBusinessStatus(), waybill.getProcessJson(), waybill.getDriverAcceptStatus()); waybillVO.setBusinessStatus(displayStatus); waybillVO.setBusinessStatusName(businessStatusName(displayStatus)); + waybillVO.setTransportTypeName(transportTypeName(waybill.getTransportType())); waybillVO.setRequireAccept(WaybillProcessSupport.requiresDriverAcceptConfirmation(waybill.getProcessJson())); // 未维护里程等占位值 -1 对外展示为空 if (isSentinelMinusOne(waybillVO.getMileage())) { @@ -76,6 +79,29 @@ public class WaybillWrapper extends BaseEntityWrapper { return value != null && value.compareTo(BigDecimal.valueOf(-1)) == 0; } + /** + * 运输方式按业务字典名称展示,系统内仍保存字典键。 + */ + public static String transportTypeName(String value) { + if (Func.isEmpty(value)) { + return value; + } + String name = ""; + try { + name = DictBizCache.getValue("transport_type", value); + } catch (Exception exception) { + name = ""; + } + if (Func.isEmpty(name)) { + try { + name = DictCache.getValue("transport_type", value); + } catch (Exception exception) { + name = ""; + } + } + return Func.isEmpty(name) ? value : name; + } + public static String businessStatusName(String status) { if (status == null) { return "未知"; diff --git a/doc/sql/transport/blade_tms_business.sql b/doc/sql/transport/blade_tms_business.sql index 62a0472c..a91fa295 100644 --- a/doc/sql/transport/blade_tms_business.sql +++ b/doc/sql/transport/blade_tms_business.sql @@ -283,6 +283,7 @@ CREATE TABLE `blade_waybill` ( `plan_name` varchar(100) DEFAULT NULL COMMENT '计划名称', `master_no` varchar(100) DEFAULT NULL COMMENT '多联总单', `loading_no` varchar(100) DEFAULT NULL COMMENT '配载单号', + `loading_identifier` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '配载标识号', `batch_no` varchar(100) DEFAULT NULL COMMENT '运单批次号', `relation_no` varchar(100) DEFAULT NULL COMMENT '关联单号', `current_process_node` varchar(100) DEFAULT NULL COMMENT '当前过程节点', diff --git a/doc/sql/transport/blade_waybill_loading_identifier_20260927.sql b/doc/sql/transport/blade_waybill_loading_identifier_20260927.sql new file mode 100644 index 00000000..aeadca4a --- /dev/null +++ b/doc/sql/transport/blade_waybill_loading_identifier_20260927.sql @@ -0,0 +1,2 @@ +ALTER TABLE `blade_waybill` + ADD COLUMN `loading_identifier` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '配载标识号' AFTER `loading_no`; From 247440288b6cea2574681dcaed19faba38518044 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Sun, 27 Sep 2026 23:16:17 +0800 Subject: [PATCH 22/29] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E8=AE=A1=E5=88=92-1=E5=8D=A0=E4=BD=8D=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E5=AF=B9=E8=B4=A6=E5=AF=BC=E5=85=A5=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E6=8C=89=E5=8E=9F=E8=A1=A8=E5=85=A8=E9=87=8F?= =?UTF-8?q?=E5=88=97=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../common/excel/ImportFailureExcelUtil.java | 183 +++++++++++++++--- .../TransportReconciliationController.java | 10 +- .../impl/WaybillImportBatchServiceImpl.java | 20 +- .../service/impl/WaybillServiceImpl.java | 7 + .../transport/wrapper/WaybillWrapper.java | 7 + 5 files changed, 196 insertions(+), 31 deletions(-) diff --git a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java index 955cc989..0fc7d2f1 100644 --- a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java +++ b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java @@ -45,7 +45,9 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -174,7 +176,10 @@ public class ImportFailureExcelUtil { } /** - * 以「原始单元格文本」方式重读导入文件,得到的行用于构造读取阶段的失败明细。 + * 以「原始单元格文本」方式重读导入文件,得到的行用于构造失败明细。 + *

+ * 优先使用 Excel 文件真实表头(含动态费用列等模型类未声明的列),保证失败明细 + * 与原导入模板列一致,用户修正后可直接用该文件重新导入。 *

* 用途:当 {@code ExcelUtil.read(file, XxxExcel.class)} 因单元格无法转换而失败时, * 已解析的实体列表是不完整的(异常中断了整批读取)。此时用本方法重读一次: @@ -182,18 +187,36 @@ public class ImportFailureExcelUtil { * 供导出「原表全量 + 仅出错行带原因」的失败明细。 * * @param file 上传的 Excel 文件 - * @param excelClass 导入模型类(按列序号反查表头名,用于把列序号映射成列名) + * @param excelClass 导入模型类(表头缺失时按列序号反查表头名) * @return 按行组织的明细数据:每行是「表头名 → 单元格文本」的有序 Map; * 读不出内容时返回空列表(调用方按空明细处理) */ public static List> readRawRows(java.io.InputStream file, Class excelClass) { List> rawRows = new ArrayList<>(); + Map headerByIndex = new LinkedHashMap<>(); try { cn.idev.excel.read.builder.ExcelReaderBuilder builder = cn.idev.excel.FastExcel .read(file, new cn.idev.excel.event.AnalysisEventListener>() { + @Override + public void invokeHeadMap(Map headMap, cn.idev.excel.context.AnalysisContext context) { + if (headMap == null) { + return; + } + headMap.forEach((index, header) -> { + if (index == null) { + return; + } + String name = header == null ? "" : header.trim(); + // 历史失败明细再导入时忽略旧的失败原因列,导出时重新追加 + if (!name.isEmpty() && !FAILURE_REASON.equals(name)) { + headerByIndex.put(index, name); + } + }); + } + @Override public void invoke(Map data, cn.idev.excel.context.AnalysisContext context) { - rawRows.add(new java.util.LinkedHashMap<>(data)); + rawRows.add(data == null ? new LinkedHashMap<>() : new LinkedHashMap<>(data)); } @Override @@ -206,25 +229,80 @@ public class ImportFailureExcelUtil { // 重读本身失败时退回空明细,由调用方按「无法读取」提示 return new ArrayList<>(); } - List fields = excelClass == null ? List.of() : excelFields(excelClass); List> rows = new ArrayList<>(); for (Map rawRow : rawRows) { - Map row = new java.util.LinkedHashMap<>(); - for (Map.Entry entry : rawRow.entrySet()) { - Integer columnIndex = entry.getKey(); - String columnName = columnIndex != null && columnIndex < fields.size() - ? columnName(excelClass, columnIndex) - : null; - if (columnName == null) { - columnName = "第" + (columnIndex == null ? "?" : columnIndex + 1) + "列"; + Map row = new LinkedHashMap<>(); + Set columnIndexes = new LinkedHashSet<>(headerByIndex.keySet()); + if (rawRow != null) { + columnIndexes.addAll(rawRow.keySet()); + } + List sortedIndexes = new ArrayList<>(columnIndexes); + Collections.sort(sortedIndexes); + for (Integer columnIndex : sortedIndexes) { + if (columnIndex == null) { + continue; } - row.put(columnName, entry.getValue()); + String columnName = headerByIndex.get(columnIndex); + if (columnName == null || columnName.isBlank()) { + columnName = columnName(excelClass, columnIndex); + } + if (columnName == null || columnName.isBlank()) { + columnName = "第" + (columnIndex + 1) + "列"; + } + if (FAILURE_REASON.equals(columnName)) { + continue; + } + row.put(columnName, rawRow == null ? null : rawRow.get(columnIndex)); } rows.add(row); } return rows; } + /** + * 按原上传文件真实表头导出失败明细(含动态列),并追加「导入失败原因」。 + *

+ * 适用于运输对账等「模板列 = 固定列 + 动态费用列」场景:按实体字段反射导出 + * 会丢掉动态列,用户无法用失败文件修正后重新导入。本方法重读原文件全量列, + * 再按 failureList 行序挂上失败原因。 + * + * @param response 响应 + * @param fileName 文件名 + * @param sheetName 工作表名 + * @param file 原导入文件 + * @param failureList 校验失败列表(与原表行序一致,成功行 errorMessage 可为空) + * @param excelClass 导入模型类(原文件重读失败时回退到按实体导出) + */ + public static void exportOriginalWithFailures(HttpServletResponse response, String fileName, String sheetName, + org.springframework.web.multipart.MultipartFile file, + List failureList, Class excelClass) { + List> rawRows = new ArrayList<>(); + if (file != null && !file.isEmpty()) { + try (java.io.InputStream inputStream = file.getInputStream()) { + rawRows = readRawRows(inputStream, excelClass); + } catch (IOException ignored) { + rawRows = new ArrayList<>(); + } + } + if (rawRows.isEmpty()) { + // 原文件读不出时回退实体导出,至少保证失败原因可下载 + if (failureList != null && !failureList.isEmpty()) { + export(response, fileName, sheetName, failureList, excelClass); + } + return; + } + Map failureMessageByRow = new HashMap<>(); + if (failureList != null) { + for (int index = 0; index < failureList.size(); index++) { + Object message = errorMessage(failureList.get(index)); + if (message != null && !String.valueOf(message).isBlank()) { + failureMessageByRow.put(index, String.valueOf(message)); + } + } + } + exportRawFailure(response, fileName, sheetName, rawRows, failureMessageByRow); + } + /** * 导出「读取阶段失败」明细:原表全量行 + 末尾「导入失败原因」列。 *

@@ -259,24 +337,20 @@ public class ImportFailureExcelUtil { } List> rows = new ArrayList<>(); Map> redColumnsByRow = new HashMap<>(); + List> headerKeywords = new ArrayList<>(); + for (int columnIndex = 0; columnIndex < headers.size() - 1; columnIndex++) { + headerKeywords.add(headerKeywords(headers.get(columnIndex))); + } for (int rowIndex = 0; rowIndex < rawRows.size(); rowIndex++) { Map rawRow = rawRows.get(rowIndex); List row = new ArrayList<>(); - Set redColumns = new LinkedHashSet<>(); - // 失败原因列恒标红 - redColumns.add(headers.size() - 1); String failureMessage = failureMessageByRow == null ? null : failureMessageByRow.get(rowIndex); for (int columnIndex = 0; columnIndex < headers.size() - 1; columnIndex++) { - String header = headers.get(columnIndex); - row.add(rawRow.get(header)); - // 失败原因里出现该列名时,标红该列单元格 - if (failureMessage != null && !failureMessage.isBlank() && failureMessage.contains("「" + header + "」")) { - redColumns.add(columnIndex); - } + row.add(rawRow.get(headers.get(columnIndex))); } row.add(failureMessage == null ? "" : failureMessage); rows.add(row); - redColumnsByRow.put(rowIndex, redColumns); + redColumnsByRow.put(rowIndex, resolveRawRedColumns(failureMessage, headerKeywords, headers.size() - 1)); } try { FastExcel.write(response.getOutputStream()) @@ -612,6 +686,69 @@ public class ImportFailureExcelUtil { .toList(); } + /** + * 按真实表头生成定位关键词(用于原表失败明细标红) + */ + private static List headerKeywords(String header) { + if (header == null || header.isBlank()) { + return List.of(); + } + List keywords = new ArrayList<>(); + keywords.add(header); + keywords.addAll(Arrays.asList(header.replace("*", "").split("[//、()()\\s]+"))); + return keywords.stream() + .map(ImportFailureExcelUtil::normalize) + .filter(keyword -> keyword.length() >= 2) + .distinct() + .toList(); + } + + /** + * 按失败原因命中表头关键词,计算需要标红的列(含失败原因列) + */ + private static Set resolveRawRedColumns(String failureMessage, List> headerKeywords, + int failureReasonColumnIndex) { + Set redColumns = new LinkedHashSet<>(); + redColumns.add(failureReasonColumnIndex); + String normalizedReason = normalize(failureMessage); + if (normalizedReason.isEmpty()) { + return redColumns; + } + List matches = new ArrayList<>(); + for (int column = 0; column < headerKeywords.size(); column++) { + for (String keyword : headerKeywords.get(column)) { + int fromIndex = 0; + while (true) { + int index = normalizedReason.indexOf(keyword, fromIndex); + if (index < 0) { + break; + } + matches.add(new int[]{index, index + keyword.length(), column}); + fromIndex = index + 1; + } + } + } + for (int[] match : matches) { + if (!isRawMatchSubsumed(match, matches)) { + redColumns.add(match[2]); + } + } + return redColumns; + } + + private static boolean isRawMatchSubsumed(int[] match, List matches) { + int matchLength = match[1] - match[0]; + for (int[] other : matches) { + if (other[2] == match[2]) { + continue; + } + if ((other[1] - other[0]) > matchLength && other[0] <= match[0] && other[1] >= match[1]) { + return true; + } + } + return false; + } + private static class ImportFailureCellStyleHandler implements CellWriteHandler { private final int failureReasonColumnIndex; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java index 97242618..70fa983e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/TransportReconciliationController.java @@ -140,8 +140,9 @@ public class TransportReconciliationController extends BladeController { for (int index = 0; index < rows.size() && index < feeItems.size(); index++) rows.get(index).setFeeItems(feeItems.get(index)); reconciliationService.importVehicles(id, rows); } catch (org.springblade.common.excel.ImportFailureException exception) { - // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 - ImportFailureExcelUtil.export(response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), VehicleReconciliationExcel.class); + // 按原表真实表头导出全量列(含动态费用),修正后可直接重新导入 + ImportFailureExcelUtil.exportOriginalWithFailures(response, "运输对账导入失败明细" + DateUtil.time(), + "导入失败明细", file, exception.getFailureList(), VehicleReconciliationExcel.class); return null; } catch (Exception readException) { // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, @@ -173,8 +174,9 @@ public class TransportReconciliationController extends BladeController { for (int index = 0; index < rows.size() && index < feeItems.size(); index++) rows.get(index).setFeeItems(feeItems.get(index)); reconciliationService.importCargoes(id, rows); } catch (org.springblade.common.excel.ImportFailureException exception) { - // 任一行失败即整批回滚,导出原表全部数据并标注错误(含按列标红)。 - ImportFailureExcelUtil.export(response, "运输对账导入失败明细" + DateUtil.time(), "导入失败明细", exception.getFailureList(), CargoReconciliationExcel.class); + // 按原表真实表头导出全量列(含动态费用),修正后可直接重新导入 + ImportFailureExcelUtil.exportOriginalWithFailures(response, "运输对账导入失败明细" + DateUtil.time(), + "导入失败明细", file, exception.getFailureList(), CargoReconciliationExcel.class); return null; } catch (Exception readException) { // 读取阶段异常兜底:单元格内容无法转换(如金额列填「一万二千元」)时, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillImportBatchServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillImportBatchServiceImpl.java index 4754a874..b1eb6ab9 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillImportBatchServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillImportBatchServiceImpl.java @@ -406,11 +406,22 @@ public class WaybillImportBatchServiceImpl extends BaseServiceImpl row, WaybillImportBatch batch, Long carrierContractId, boolean draft) { if (row == null) throw new ServiceException("运单数据不正确"); Waybill waybill = new Waybill(); @@ -461,8 +472,9 @@ public class WaybillImportBatchServiceImpl extends BaseServiceImpl waybill.setBusinessStatus(TransportBusinessSupport.trimToNull(waybill.getBusinessStatus())); waybill.setDataSource(TransportBusinessSupport.normalizeWaybillDataSource(waybill.getDataSource())); waybill.setPlanName(TransportBusinessSupport.trimToNull(waybill.getPlanName())); + // BladeX 数字 null 序列化为 -1;未选计划时归一为空,避免占位值落库/回显 + if (waybill.getPlanId() != null && waybill.getPlanId() <= 0L) { + waybill.setPlanId(null); + } + if (waybill.getPlanId() == null || "-1".equals(waybill.getPlanName())) { + waybill.setPlanName(null); + } waybill.setMasterNo(TransportBusinessSupport.trimToNull(waybill.getMasterNo())); waybill.setLoadingNo(TransportBusinessSupport.trimToNull(waybill.getLoadingNo())); waybill.setLoadingIdentifier(TransportBusinessSupport.trimToNull(waybill.getLoadingIdentifier())); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java index c7db3b41..65401f97 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java @@ -72,6 +72,13 @@ public class WaybillWrapper extends BaseEntityWrapper { if (isSentinelMinusOne(waybillVO.getUnitPrice())) { waybillVO.setUnitPrice(null); } + // 计划未选时 planId 可能为库内 -1 或序列化占位,统一清空避免前端回显 -1 + if (waybillVO.getPlanId() != null && waybillVO.getPlanId() <= 0L) { + waybillVO.setPlanId(null); + } + if (waybillVO.getPlanId() == null || "-1".equals(waybillVO.getPlanName())) { + waybillVO.setPlanName(null); + } return waybillVO; } From beb085064453f779a432ac233837c7ed6c0da46c Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Tue, 29 Sep 2026 02:23:19 +0800 Subject: [PATCH 23/29] =?UTF-8?q?:sparkles:=20=E8=A7=A3=E8=80=A6MK?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E5=AE=9E=E4=BE=8B=E4=B8=8E=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?ID=EF=BC=8C=E5=85=AC=E5=BC=80=E9=A1=B5=E6=8C=89formInstanceId?= =?UTF-8?q?=E5=8F=8D=E6=9F=A5=E4=B8=9A=E5=8A=A1=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../process/feign/IBusinessProcessClient.java | 11 + .../process/pojo/entity/BusinessProcess.java | 6 + .../process/pojo/entity/MkFormBind.java | 94 ++++++ .../process/pojo/vo/MkFormBindVO.java | 61 ++++ .../controller/BusinessProcessController.java | 12 +- .../process/feign/BusinessProcessClient.java | 8 + .../process/mapper/BusinessProcessMapper.xml | 1 + .../process/mapper/MkFormBindMapper.java | 38 +++ .../process/mapper/MkFormBindMapper.xml | 17 ++ .../service/IBusinessProcessService.java | 18 +- .../process/service/IMkFormBindService.java | 80 +++++ .../impl/BusinessProcessServiceImpl.java | 96 ++++-- .../service/impl/MkFormBindServiceImpl.java | 174 +++++++++++ .../springblade/system/mapper/DeptMapper.java | 13 + .../springblade/system/mapper/DeptMapper.xml | 41 +++ .../system/service/IDeptService.java | 8 +- .../system/service/impl/DeptServiceImpl.java | 156 +++++++++- .../CustomerArchivePublicController.java | 29 +- .../controller/MkProcessPublicController.java | 30 +- .../transport/mk/MkProcessBizHandlers.java | 287 ++++++++++++++---- .../service/impl/CommonCargoServiceImpl.java | 12 +- .../support/TransportBusinessSupport.java | 26 ++ .../mk/pojo/dto/MKProcessCreateDTO.java | 7 +- .../changelog/mk-form-bind-202609290215.sql | 43 +++ 24 files changed, 1172 insertions(+), 96 deletions(-) create mode 100644 blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/entity/MkFormBind.java create mode 100644 blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/vo/MkFormBindVO.java create mode 100644 blade-service/blade-system/src/main/java/org/springblade/process/mapper/MkFormBindMapper.java create mode 100644 blade-service/blade-system/src/main/java/org/springblade/process/mapper/MkFormBindMapper.xml create mode 100644 blade-service/blade-system/src/main/java/org/springblade/process/service/IMkFormBindService.java create mode 100644 blade-service/blade-system/src/main/java/org/springblade/process/service/impl/MkFormBindServiceImpl.java create mode 100644 doc/sql/changelog/mk-form-bind-202609290215.sql diff --git a/blade-service-api/blade-process-api/src/main/java/org/springblade/process/feign/IBusinessProcessClient.java b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/feign/IBusinessProcessClient.java index ecbdf0c6..ddbd4897 100644 --- a/blade-service-api/blade-process-api/src/main/java/org/springblade/process/feign/IBusinessProcessClient.java +++ b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/feign/IBusinessProcessClient.java @@ -7,6 +7,7 @@ import org.springblade.process.pojo.dto.BusinessProcessDeleteDTO; import org.springblade.process.pojo.dto.BusinessProcessSubmitDTO; import org.springblade.process.pojo.dto.BusinessProcessUpdateDTO; import org.springblade.process.pojo.vo.BusinessProcessVO; +import org.springblade.process.pojo.vo.MkFormBindVO; import org.springblade.process.pojo.vo.ProcessApprovedRecordVO; import org.springblade.process.pojo.vo.ProcessTodoVO; import org.springframework.cloud.openfeign.FeignClient; @@ -40,6 +41,7 @@ public interface IBusinessProcessClient { String QUERY_APPROVED_RECORD_LIST = API_PREFIX + "/queryApprovedRecordsNoAttachments"; String GET_CURRENT_NODES = API_PREFIX + "/getCurrentNodes"; String GET_PROCESS_INFO = API_PREFIX + "/getProcessInfo"; + String RESOLVE_BY_FORM_INSTANCE_ID = API_PREFIX + "/resolveByFormInstanceId"; /** * 提交业务流程 @@ -126,4 +128,13 @@ public interface IBusinessProcessClient { @GetMapping(GET_PROCESS_INFO) FR getProcessInfo(@RequestParam("processInstanceId") String processInstanceId, @RequestParam(value = "loginName", required = false) String loginName); + + /** + * 按表单实例id解析业务绑定 + * + * @param formInstanceId 表单实例id + * @return 绑定信息(含业务主键) + */ + @GetMapping(RESOLVE_BY_FORM_INSTANCE_ID) + FR resolveByFormInstanceId(@RequestParam("formInstanceId") Long formInstanceId); } diff --git a/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/entity/BusinessProcess.java b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/entity/BusinessProcess.java index bac2329d..45329958 100644 --- a/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/entity/BusinessProcess.java +++ b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/entity/BusinessProcess.java @@ -65,6 +65,12 @@ public class BusinessProcess implements Serializable { */ @Schema(description = "业务id") private Long bizId; + /** + * MK表单实例id + */ + @JsonSerialize(using = ToStringSerializer.class) + @Schema(description = "MK表单实例id") + private Long formInstanceId; /** * 流程实例id */ diff --git a/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/entity/MkFormBind.java b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/entity/MkFormBind.java new file mode 100644 index 00000000..03499c83 --- /dev/null +++ b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/entity/MkFormBind.java @@ -0,0 +1,94 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.process.pojo.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springblade.core.tool.utils.DateUtil; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * MK表单实例绑定表 实体类 + * + * @author BladeX + */ +@Data +@TableName("blade_mk_form_bind") +@Schema(description = "MkFormBind对象") +public class MkFormBind implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @JsonSerialize(using = ToStringSerializer.class) + @Schema(description = "主键") + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + @Schema(description = "租户ID") + private String tenantId; + + @Schema(description = "业务类型") + private String bizType; + + @JsonSerialize(using = ToStringSerializer.class) + @Schema(description = "业务主键") + private Long bizId; + + @JsonSerialize(using = ToStringSerializer.class) + @Schema(description = "MK表单实例id") + private Long formInstanceId; + + @Schema(description = "MK流程实例id") + private String processInstanceId; + + @Schema(description = "是否当前生效(1是0否)") + private Integer isCurrent; + + @DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME) + @JsonFormat(pattern = DateUtil.PATTERN_DATETIME) + @Schema(description = "创建时间", hidden = true) + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + @DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME) + @JsonFormat(pattern = DateUtil.PATTERN_DATETIME) + @Schema(description = "更新时间", hidden = true) + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; +} diff --git a/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/vo/MkFormBindVO.java b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/vo/MkFormBindVO.java new file mode 100644 index 00000000..a1623972 --- /dev/null +++ b/blade-service-api/blade-process-api/src/main/java/org/springblade/process/pojo/vo/MkFormBindVO.java @@ -0,0 +1,61 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.process.pojo.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * MK表单实例绑定 VO + * + * @author BladeX + */ +@Data +@Schema(description = "MkFormBindVO") +public class MkFormBindVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @JsonSerialize(using = ToStringSerializer.class) + @Schema(description = "业务主键") + private Long bizId; + + @Schema(description = "业务类型") + private String bizType; + + @JsonSerialize(using = ToStringSerializer.class) + @Schema(description = "MK表单实例id") + private Long formInstanceId; + + @Schema(description = "MK流程实例id") + private String processInstanceId; +} diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java b/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java index 5566fe9a..f65cc45e 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java @@ -13,6 +13,7 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.StringUtil; import org.springblade.process.pojo.dto.ApprovalDTO; import org.springblade.process.pojo.vo.ApprovalVO; import org.springblade.process.pojo.vo.ProcessApprovedRecordVO; @@ -55,22 +56,27 @@ public class BusinessProcessController extends BladeController { @PostMapping("/processSubmit") @ApiOperationSupport(order = 2) - @Operation(summary = "提交MK审核流", description = "调用mk processSubmit,传入templateCode/submitIdentity/formInstanceId") + @Operation(summary = "提交MK审核流", description = "传入bizId/bizType/templateCode,后端生成或复用formInstanceId后调用mk processSubmit") public R processSubmit(@Validated @RequestBody MKProcessCreateDTO param) { return R.data(businessProcessService.processSubmit(param)); } @GetMapping("/hasMkProcessInstance") @ApiOperationSupport(order = 8) - @Operation(summary = "查询MK流程实例是否存在", description = "传入业务id(formInstanceId),有数据则无需删除/重新提交") + @Operation(summary = "查询MK流程实例是否存在", description = "传入业务主键bizId,有数据则无需删除/重新提交") public R hasMkProcessInstance(@Valid @NotBlank(message = "业务id不能为空") String bizId) { return R.data(businessProcessService.hasMkProcessInstance(bizId)); } @PostMapping("/processDelete") @ApiOperationSupport(order = 7) + @Operation(summary = "删除MK审核流", description = "传入bizId,删除当前业务对应MK流程实例") public R processDelete(@RequestBody MKProcessCreateDTO param) { - return R.data(businessProcessService.processDelete(param == null ? null : param.getFormInstanceId())); + String bizId = null; + if (param != null) { + bizId = StringUtil.isNotBlank(param.getBizId()) ? param.getBizId() : param.getFormInstanceId(); + } + return R.data(businessProcessService.processDelete(bizId)); } @GetMapping("/isEditView") diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/feign/BusinessProcessClient.java b/blade-service/blade-system/src/main/java/org/springblade/process/feign/BusinessProcessClient.java index fa87f975..cc94ba25 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/feign/BusinessProcessClient.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/feign/BusinessProcessClient.java @@ -11,6 +11,7 @@ import org.springblade.process.pojo.dto.BusinessProcessDeleteDTO; import org.springblade.process.pojo.dto.BusinessProcessSubmitDTO; import org.springblade.process.pojo.dto.BusinessProcessUpdateDTO; import org.springblade.process.pojo.vo.BusinessProcessVO; +import org.springblade.process.pojo.vo.MkFormBindVO; import org.springblade.process.pojo.vo.ProcessApprovedRecordVO; import org.springblade.process.pojo.vo.ProcessTodoVO; import org.springblade.process.service.IBusinessProcessService; @@ -94,4 +95,11 @@ public class BusinessProcessClient implements IBusinessProcessClient { @RequestParam(value = "loginName", required = false) String loginName) { return FR.data(businessProcessService.getProcessInfo(processInstanceId, loginName)); } + + @PreAuth(AuthConstant.PERMIT_ALL) + @GetMapping(RESOLVE_BY_FORM_INSTANCE_ID) + @Override + public FR resolveByFormInstanceId(@RequestParam("formInstanceId") Long formInstanceId) { + return FR.data(businessProcessService.resolveByFormInstanceId(formInstanceId)); + } } diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/mapper/BusinessProcessMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/process/mapper/BusinessProcessMapper.xml index 47b45b79..4aa5df53 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/mapper/BusinessProcessMapper.xml +++ b/blade-service/blade-system/src/main/java/org/springblade/process/mapper/BusinessProcessMapper.xml @@ -6,6 +6,7 @@ + diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/mapper/MkFormBindMapper.java b/blade-service/blade-system/src/main/java/org/springblade/process/mapper/MkFormBindMapper.java new file mode 100644 index 00000000..23e701f4 --- /dev/null +++ b/blade-service/blade-system/src/main/java/org/springblade/process/mapper/MkFormBindMapper.java @@ -0,0 +1,38 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.process.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.process.pojo.entity.MkFormBind; + +/** + * MK表单实例绑定表 Mapper 接口 + * + * @author BladeX + */ +public interface MkFormBindMapper extends BaseMapper { + +} diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/mapper/MkFormBindMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/process/mapper/MkFormBindMapper.xml new file mode 100644 index 00000000..b19c1df2 --- /dev/null +++ b/blade-service/blade-system/src/main/java/org/springblade/process/mapper/MkFormBindMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java index fd25cbb5..866f9341 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java @@ -29,7 +29,7 @@ public interface IBusinessProcessService extends IService { /** * 直接调用 MK processSubmit 提交流程 * - * @param param MK 流程创建参数 + * @param param MK 流程创建参数(传 bizId+bizType,后端生成/复用 formInstanceId) * @return 流程实例 id */ String processSubmit(MKProcessCreateDTO param); @@ -37,18 +37,26 @@ public interface IBusinessProcessService extends IService { /** * 按业务 id 查询 MK 流程实例是否仍有数据(本地有 processInstanceId 且 MK getProcessInfo 有返回) * - * @param bizId 业务 id(如客商 id / formInstanceId) + * @param bizId 业务主键 * @return true=流程实例仍存在 */ boolean hasMkProcessInstance(String bizId); /** - * 按业务表单实例 id 删除 MK 流程(不删除本地业务流程记录,供驳回后重新提交使用) + * 按业务主键删除 MK 流程(不删除本地业务流程记录与表单绑定,供驳回后重新提交使用) * - * @param formInstanceId 业务表单实例 id + * @param bizId 业务主键 * @return 是否成功 */ - boolean processDelete(String formInstanceId); + boolean processDelete(String bizId); + + /** + * 按表单实例id解析业务绑定 + * + * @param formInstanceId 表单实例id + * @return 绑定信息 + */ + MkFormBindVO resolveByFormInstanceId(Long formInstanceId); /** * 获取流程当前节点详情 diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/IMkFormBindService.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/IMkFormBindService.java new file mode 100644 index 00000000..81a7178a --- /dev/null +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/IMkFormBindService.java @@ -0,0 +1,80 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.process.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.springblade.process.pojo.entity.MkFormBind; +import org.springblade.process.pojo.vo.MkFormBindVO; + +/** + * MK表单实例绑定表 服务类 + * + * @author BladeX + */ +public interface IMkFormBindService extends IService { + + /** + * 查询业务当前生效的表单实例绑定 + * + * @param bizType 业务类型(可空,空时仅按业务id查) + * @param bizId 业务主键 + * @return 当前绑定,不存在返回 null + */ + MkFormBind getCurrentBind(String bizType, Long bizId); + + /** + * 按表单实例id查询绑定 + * + * @param formInstanceId 表单实例id + * @return 绑定记录 + */ + MkFormBind getByFormInstanceId(Long formInstanceId); + + /** + * 按表单实例id解析业务主键等信息 + * + * @param formInstanceId 表单实例id + * @return 绑定 VO + */ + MkFormBindVO resolveByFormInstanceId(Long formInstanceId); + + /** + * 解析或生成表单实例id:无当前绑定则新建;当前流程已审批通过则新建;否则复用 + * + * @param bizType 业务类型 + * @param bizId 业务主键 + * @return 本次应使用的表单实例id + */ + Long resolveOrCreateFormInstanceId(String bizType, Long bizId); + + /** + * 回写流程实例id到当前绑定 + * + * @param formInstanceId 表单实例id + * @param processInstanceId 流程实例id + */ + void updateProcessInstanceId(Long formInstanceId, String processInstanceId); +} diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java index fe45212a..5cba67dc 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java @@ -25,6 +25,7 @@ import org.springblade.process.pojo.entity.BusinessProcess; import org.springblade.process.pojo.enums.TodoStatus; import org.springblade.process.pojo.vo.*; import org.springblade.process.service.IBusinessProcessService; +import org.springblade.process.service.IMkFormBindService; import org.springblade.system.pojo.entity.User; import org.springblade.system.service.IUserService; import org.springblade.thirdparty.mk.config.MKProperties; @@ -72,6 +73,7 @@ public class BusinessProcessServiceImpl extends ServiceImpllambdaQuery() .eq(BusinessProcess::getBizId, bizId) + .orderByDesc(BusinessProcess::getUpdateTime) + .last("limit 1") ); // 已有流程实例且 MK 仍能查到详情时,不再删除、不再重新创建提交 - if (businessProcess != null && StringUtil.isNotBlank(businessProcess.getProcessInstanceId())) { + if (businessProcess != null && StringUtil.isNotBlank(businessProcess.getProcessInstanceId()) + && Objects.equals(formInstanceId, businessProcess.getFormInstanceId())) { String existingProcessInstanceId = businessProcess.getProcessInstanceId(); Object existingProcessInfo = this.getProcessInfo(existingProcessInstanceId, loginName); if (hasProcessInfoData(existingProcessInfo)) { - log.info("MK流程实例已存在,跳过创建并提交流程 formInstanceId={} processInstanceId={}", - param.getFormInstanceId(), existingProcessInstanceId); + log.info("MK流程实例已存在,跳过创建并提交流程 bizId={} formInstanceId={} processInstanceId={}", + bizId, formInstanceIdText, existingProcessInstanceId); businessProcess.setApproveStatus(ApproveStatusEnum.APPROVING.getValue()); if (StringUtil.isNotBlank(param.getSubject())) { businessProcess.setSubject(param.getSubject()); } businessProcess.setPromoterLoginName(loginName); + businessProcess.setFormInstanceId(formInstanceId); this.updateById(businessProcess); this.getCurrentNodes(existingProcessInstanceId, loginName); - this.syncBizFromProcessInfo(bizType, param.getFormInstanceId(), existingProcessInfo); + this.syncBizFromProcessInfo(bizType, String.valueOf(bizId), existingProcessInfo); return existingProcessInstanceId; } } MKProcessCreateDTO mkParam = new MKProcessCreateDTO(); - mkParam.setFormInstanceId(param.getFormInstanceId()); + mkParam.setFormInstanceId(formInstanceIdText); mkParam.setSubject(param.getSubject()); mkParam.setSubmitIdentity(loginName); mkParam.setLoginName(loginName); @@ -197,15 +201,35 @@ public class BusinessProcessServiceImpl extends ServiceImpllambdaQuery() .eq(BusinessProcess::getBizId, id) + .orderByDesc(BusinessProcess::getUpdateTime) .last("limit 1") ); if (businessProcess == null || StringUtil.isBlank(businessProcess.getProcessInstanceId())) { return false; } + // 审批通过后允许再次提交新表单实例,视为当前无有效待办流程 + if (Objects.equals(ApproveStatusEnum.APPROVED.getValue(), businessProcess.getApproveStatus())) { + return false; + } String loginName = businessProcess.getPromoterLoginName(); if (StringUtil.isBlank(loginName)) { loginName = resolveCurrentUserPhone(); @@ -257,18 +286,20 @@ public class BusinessProcessServiceImpl extends ServiceImpllambdaQuery() .eq(BusinessProcess::getBizId, bizId) + .orderByDesc(BusinessProcess::getUpdateTime) + .last("limit 1") ); if (businessProcess == null || StringUtil.isBlank(businessProcess.getProcessInstanceId())) { - log.warn("客商驳回后删除流程跳过,未找到流程实例 formInstanceId={}", formInstanceId); + log.warn("驳回后删除流程跳过,未找到流程实例 bizId={}", bizId); return true; } String loginName = businessProcess.getPromoterLoginName(); @@ -276,8 +307,8 @@ public class BusinessProcessServiceImpl extends ServiceImpllambdaQuery() + .eq(BusinessProcess::getBizId, formInstanceId) + .last("limit 1") + ); + if (businessProcess == null) { + businessProcess = this.getOne(Wrappers.lambdaQuery() + .eq(BusinessProcess::getFormInstanceId, formInstanceId) + .last("limit 1") + ); + } + if (businessProcess == null) { + return null; + } + MkFormBindVO fallback = new MkFormBindVO(); + fallback.setBizId(businessProcess.getBizId()); + fallback.setFormInstanceId(businessProcess.getFormInstanceId() != null + ? businessProcess.getFormInstanceId() : businessProcess.getBizId()); + fallback.setProcessInstanceId(businessProcess.getProcessInstanceId()); + return fallback; + } + @Override public List getCurrentNodes(String processInstanceId, String loginName) { if (StringUtils.isBlank(processInstanceId)) { diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/MkFormBindServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/MkFormBindServiceImpl.java new file mode 100644 index 00000000..21fee54d --- /dev/null +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/MkFormBindServiceImpl.java @@ -0,0 +1,174 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.process.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.log.utils.AssertUtils; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.process.mapper.BusinessProcessMapper; +import org.springblade.process.mapper.MkFormBindMapper; +import org.springblade.process.pojo.entity.BusinessProcess; +import org.springblade.process.pojo.entity.MkFormBind; +import org.springblade.process.pojo.enums.ApproveStatusEnum; +import org.springblade.process.pojo.vo.MkFormBindVO; +import org.springblade.process.service.IMkFormBindService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.Objects; + +/** + * MK表单实例绑定表 服务实现类 + * + * @author BladeX + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class MkFormBindServiceImpl extends ServiceImpl implements IMkFormBindService { + + private final BusinessProcessMapper businessProcessMapper; + + @Override + public MkFormBind getCurrentBind(String bizType, Long bizId) { + AssertUtils.notNull(bizId, "业务id不能为空"); + MkFormBind bind = null; + if (StringUtil.isNotBlank(bizType)) { + bind = this.getOne(Wrappers.lambdaQuery() + .eq(MkFormBind::getBizType, bizType) + .eq(MkFormBind::getBizId, bizId) + .eq(MkFormBind::getIsCurrent, 1) + .orderByDesc(MkFormBind::getCreateTime) + .last("limit 1") + ); + } + if (bind == null) { + // 兼容历史迁移数据 biz_type 为空,或未传 bizType + bind = this.getOne(Wrappers.lambdaQuery() + .eq(MkFormBind::getBizId, bizId) + .eq(MkFormBind::getIsCurrent, 1) + .orderByDesc(MkFormBind::getCreateTime) + .last("limit 1") + ); + } + return bind; + } + + @Override + public MkFormBind getByFormInstanceId(Long formInstanceId) { + AssertUtils.notNull(formInstanceId, "表单实例id不能为空"); + return this.getOne(Wrappers.lambdaQuery() + .eq(MkFormBind::getFormInstanceId, formInstanceId) + .last("limit 1") + ); + } + + @Override + public MkFormBindVO resolveByFormInstanceId(Long formInstanceId) { + MkFormBind bind = this.getByFormInstanceId(formInstanceId); + if (bind == null) { + return null; + } + MkFormBindVO vo = new MkFormBindVO(); + vo.setBizId(bind.getBizId()); + vo.setBizType(bind.getBizType()); + vo.setFormInstanceId(bind.getFormInstanceId()); + vo.setProcessInstanceId(bind.getProcessInstanceId()); + return vo; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Long resolveOrCreateFormInstanceId(String bizType, Long bizId) { + AssertUtils.notNull(bizId, "业务id不能为空"); + MkFormBind current = this.getCurrentBind(bizType, bizId); + if (current == null) { + return this.createNewBind(bizType, bizId); + } + BusinessProcess businessProcess = businessProcessMapper.selectOne(Wrappers.lambdaQuery() + .eq(BusinessProcess::getBizId, bizId) + .orderByDesc(BusinessProcess::getUpdateTime) + .last("limit 1") + ); + boolean approvedPass = businessProcess != null + && Objects.equals(ApproveStatusEnum.APPROVED.getValue(), businessProcess.getApproveStatus()); + if (approvedPass) { + log.info("审核通过后再次提交,生成新表单实例 bizType={} bizId={} oldFormInstanceId={}", + bizType, bizId, current.getFormInstanceId()); + this.lambdaUpdate() + .eq(MkFormBind::getBizId, bizId) + .eq(MkFormBind::getIsCurrent, 1) + .set(MkFormBind::getIsCurrent, 0) + .set(MkFormBind::getUpdateTime, new Date()) + .update(); + return this.createNewBind(bizType, bizId); + } + log.info("复用当前表单实例 bizType={} bizId={} formInstanceId={}", + bizType, bizId, current.getFormInstanceId()); + if (StringUtil.isNotBlank(bizType) && StringUtil.isBlank(current.getBizType())) { + current.setBizType(bizType); + current.setUpdateTime(new Date()); + this.updateById(current); + } + return current.getFormInstanceId(); + } + + @Override + public void updateProcessInstanceId(Long formInstanceId, String processInstanceId) { + AssertUtils.notNull(formInstanceId, "表单实例id不能为空"); + this.lambdaUpdate() + .eq(MkFormBind::getFormInstanceId, formInstanceId) + .set(MkFormBind::getProcessInstanceId, processInstanceId) + .set(MkFormBind::getUpdateTime, new Date()) + .update(); + } + + private Long createNewBind(String bizType, Long bizId) { + Long formInstanceId = IdWorker.getId(); + MkFormBind bind = new MkFormBind(); + bind.setId(IdWorker.getId()); + bind.setTenantId(StringUtil.isBlank(AuthUtil.getTenantId()) ? "000000" : AuthUtil.getTenantId()); + bind.setBizType(StringUtil.isBlank(bizType) ? "" : bizType); + bind.setBizId(bizId); + bind.setFormInstanceId(formInstanceId); + bind.setIsCurrent(1); + bind.setCreateTime(new Date()); + bind.setUpdateTime(new Date()); + boolean saved = this.save(bind); + if (!saved) { + throw new ServiceException("保存表单实例绑定失败"); + } + log.info("创建表单实例绑定 bizType={} bizId={} formInstanceId={}", bizType, bizId, formInstanceId); + return formInstanceId; + } +} diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java index 55661a6a..6176e472 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.java @@ -26,6 +26,7 @@ package org.springblade.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.springblade.system.pojo.entity.Dept; import org.springblade.system.pojo.vo.DeptVO; @@ -66,6 +67,18 @@ public interface DeptMapper extends BaseMapper { */ List lazyTree(String tenantId, Long parentId); + /** + * 按组织 ID 集合查询树节点(用于数据权限过滤后的根节点回显) + * + * @param tenantId 租户ID,空表示不限 + * @param ids 需要返回的组织 ID + * @param childIds 计算 hasChildren 时允许计入的子组织 ID;为空则 hasChildren 恒为 false + * @return 树节点列表 + */ + List treeNodesByIds(@Param("tenantId") String tenantId, + @Param("ids") List ids, + @Param("childIds") List childIds); + /** * 获取部门名 * diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml index baef84dc..85508294 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml +++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml @@ -115,6 +115,47 @@ ORDER BY dept.sort + +