From 861252f066bc963f193e6ed0577e386f6652ce3e Mon Sep 17 00:00:00 2001 From: lixiaolong <702156524@qq.com> Date: Fri, 14 Aug 2026 15:12:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(flow):=20=E4=BF=AE=E5=A4=8D=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E6=89=A7=E8=A1=8C=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在FlowItemExecutor中添加GlobalException导入并修改分支匹配失败处理逻辑 - 将分支节点未匹配到路径的警告改为抛出异常 - 在FlowTaskAsyncDispatcher中添加异常处理相关依赖注入 - 实现更完善的异常捕获和任务失败标记机制 - 优化中断异常处理确保线程状态正确维护 - 添加任务上下文检查避免重复失败标记 --- .../flow/runtime/engine/FlowItemExecutor.java | 4 ++-- .../engine/FlowTaskAsyncDispatcher.java | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowItemExecutor.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowItemExecutor.java index 0729953..6332a42 100644 --- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowItemExecutor.java +++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowItemExecutor.java @@ -3,6 +3,7 @@ package com.cmvr.test.flow.runtime.engine; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjUtil; import com.alibaba.fastjson2.JSONObject; +import com.cmvr.common.exception.GlobalException; import com.cmvr.test.enums.NodeTypeEnum; import com.cmvr.test.flow.builder.FlowEdge; import com.cmvr.test.flow.builder.FlowGraph; @@ -260,8 +261,7 @@ public class FlowItemExecutor { FlowEdge matchedEdge = graph.getEdgeByFromAnchorId(matchedAnchorId); if (matchedEdge == null) { - log.warn("未找到匹配的分支出边,anchorId={}, nodeId={}", matchedAnchorId, nodeId); - return; + throw new GlobalException("分支节点未匹配到可执行路径,节点: {},锚点: {}", node.getNodeName(), matchedAnchorId); } // 移除未命中的路径 diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskAsyncDispatcher.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskAsyncDispatcher.java index 6ddeae7..55c8bfd 100644 --- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskAsyncDispatcher.java +++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskAsyncDispatcher.java @@ -1,6 +1,10 @@ package com.cmvr.test.flow.runtime.engine; +import cn.hutool.core.exceptions.ExceptionUtil; +import com.cmvr.test.enums.ActionEnum; import com.cmvr.test.enums.RunModeEnum; +import com.cmvr.test.flow.context.TaskContext; +import com.cmvr.test.flow.context.TaskInstHolder; import com.cmvr.test.model.dto.TeQueryTaskDetailDTO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -22,6 +26,7 @@ public class FlowTaskAsyncDispatcher { private final ThreadPoolTaskExecutor executor; private final FlowTaskEngine taskEngine; + private final TaskInstHolder taskInstHolder; /** * 异步提交流程任务 @@ -42,8 +47,18 @@ public class FlowTaskAsyncDispatcher { log.info("异步任务执行结束:threadName={}, instId={}, taskId={}", Thread.currentThread().getName(), instId, taskId); } catch (Exception e) { log.error("任务执行异常:threadName={}, instId={}, taskId={}, 错误={}", Thread.currentThread().getName(), instId, taskId, e.getMessage(), e); - Thread.currentThread().interrupt(); // 保持中断状态 + if (ExceptionUtil.getRootCause(e) instanceof InterruptedException) { + Thread.currentThread().interrupt(); + return; + } + TaskContext context = taskInstHolder.getContext(instId); + if (context != null && !context.isStopped()) { + taskInstHolder.markFailed( + instId, taskId, context.getItemId(), null, null, + ActionEnum.NONE.getOperate(), ActionEnum.NONE.getAction(), null, + "任务执行异常: " + e.getMessage(), null); + } } }); } -} \ No newline at end of file +}