Skip to content

Commit 8df9022

Browse files
claudejaquanli
authored andcommitted
fix(116393): 修复 processNodes 接口并行/人工/包容分支节点排序问题
- 在 NextNodeLoader.loadNextNode() 完成 DFS 遍历和去重后,按 workflow.getNodes() 索引对结果重排 - 新增私有方法 sortByWorkflowNodeOrder() 使用 Comparator.comparingInt() 进行稳定排序 - 未在 workflow.nodes 顶层注册的节点(如嵌套子节点)放到末尾,相对顺序保持稳定 - 添加必要的 import:Comparator、HashMap - 所有 102 个单元测试通过,包括并行分支、条件分支、人工分支等场景 🤖 Generated with [Claude Code](https://claude.com/claude-code)
1 parent e4a7f5f commit 8df9022

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

flow-engine-framework/src/main/java/com/codingapi/flow/service/impl/FlowProcessNodeService.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import lombok.Getter;
2828

2929
import java.util.ArrayList;
30+
import java.util.Comparator;
31+
import java.util.HashMap;
3032
import java.util.LinkedHashMap;
3133
import java.util.List;
3234
import java.util.Map;
@@ -236,7 +238,19 @@ public List<ProcessNode> loadNextNode(FlowSession flowSession) {
236238
processNodeList.add(node);
237239
}
238240
}
239-
return processNodeList;
241+
return sortByWorkflowNodeOrder(processNodeList);
242+
}
243+
244+
private List<ProcessNode> sortByWorkflowNodeOrder(List<ProcessNode> processNodes) {
245+
List<IFlowNode> workflowNodes = workflow.getNodes();
246+
Map<String, Integer> indexMap = new HashMap<>();
247+
for (int i = 0; i < workflowNodes.size(); i++) {
248+
indexMap.put(workflowNodes.get(i).getId(), i);
249+
}
250+
return processNodes.stream()
251+
.sorted(Comparator.comparingInt(
252+
n -> indexMap.getOrDefault(n.getNodeId(), Integer.MAX_VALUE)))
253+
.toList();
240254
}
241255
}
242256

0 commit comments

Comments
 (0)