From c7c0a3d6bc831933d81d82d519b789a29d41ef0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E4=B8=8D=E7=AC=A6?= <826801306@qq.com> Date: Mon, 22 Jun 2026 10:58:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=9B=B4=E6=96=B0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8F=AF=E9=A9=B3=E5=9B=9E=E7=9A=84=E5=89=8D=E7=BD=AE=E8=8A=82?= =?UTF-8?q?=E7=82=B9=EF=BC=8C=E6=A0=B9=E6=8D=AE=E6=B5=81=E7=A8=8B=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FlwTaskServiceImpl.java | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 95f20af7f..c4e417789 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -64,6 +64,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; import static org.dromara.workflow.common.constant.FlowConstant.*; @@ -544,27 +545,31 @@ public class FlwTaskServiceImpl implements IFlwTaskService { return nodeService.getByNodeCodes(Collections.singletonList(node.getAnyNodeSkip()), task.getDefinitionId()); } //获取可驳回的前置节点 - List nodes = nodeService.previousNodeList(task.getDefinitionId(), nowNodeCode); - List hisTaskList = hisTaskService.getByInsId(task.getInstanceId()); + Instance instance = insService.getById(task.getInstanceId()); + List allPreNodes = nodeService.previousNodeList(task.getDefinitionId(), nowNodeCode); + Node startNode = nodeService.getStartNode(task.getDefinitionId()); + List allPreNodes2 = new ArrayList<>(); + getBackTaskNodes(allPreNodes2, instance, CollUtil.toList(startNode)); + List nodes = allPreNodes.stream().filter(allPreNodes2::contains).collect(Collectors.toList()); - Map nodeMap = StreamUtils.toIdentityMap(nodes, Node::getNodeCode); - Set added = new HashSet<>(); - List backNodeList = new ArrayList<>(); - for (HisTask hisTask : hisTaskList) { - Node nodeValue = nodeMap.get(hisTask.getNodeCode()); - if (nodeValue != null - && NodeType.BETWEEN.getKey().equals(nodeValue.getNodeType()) - && added.add(nodeValue.getNodeCode())) { - backNodeList.add(nodeValue); - } - } - if (CollUtil.isNotEmpty(backNodeList)) { - Collections.reverse(backNodeList); - return backNodeList; + if (CollUtil.isNotEmpty(nodes)) { + return StreamUtils.filter(nodes, e -> NodeType.BETWEEN.getKey().equals(e.getNodeType())); } return nodes; } + private void getBackTaskNodes(List nodes, Instance instance, List startNodes) { + nodes.addAll(startNodes); + for (Node startNode : startNodes) { + try { + List temp = nodeService.getNextNodeList(instance.getDefinitionId(), startNode.getNodeCode(), null, SkipType.PASS.getKey(), instance.getVariableMap()); + getBackTaskNodes(nodes, instance, temp); + }catch(Exception e){ +// log.info(); + } + } + } + /** * 终止任务 *