Skip to content

Commit e7f1202

Browse files
claudejaquanli
authored andcommitted
fix(116393): 递归扁平化 workflow.nodes 修复嵌套子节点排序问题
之前的修复仅使用 workflow.getNodes() 顶层索引,导致并行/包容/人工分支内的 嵌套子节点(如审批节点)被推到结束节点之后。 修复:新增 buildNodeIndexMap() 递归遍历 workflow.nodes 及各 IBlockNode 的 blocks, 为所有节点(含嵌套子节点)建立完整的索引映射,使分支内部审批节点能正确排列在 父分支控制节点与结束节点之间。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
1 parent d204ee2 commit e7f1202

1 file changed

Lines changed: 15 additions & 4 deletions

File tree

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

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,16 +242,27 @@ public List<ProcessNode> loadNextNode(FlowSession flowSession) {
242242
}
243243

244244
private List<ProcessNode> sortByWorkflowNodeOrder(List<ProcessNode> processNodes) {
245-
List<IFlowNode> workflowNodes = workflow.getNodes();
246245
Map<String, Integer> indexMap = new HashMap<>();
247-
for (int i = 0; i < workflowNodes.size(); i++) {
248-
indexMap.put(workflowNodes.get(i).getId(), i);
249-
}
246+
int[] counter = {0};
247+
buildNodeIndexMap(workflow.getNodes(), indexMap, counter);
250248
return processNodes.stream()
251249
.sorted(Comparator.comparingInt(
252250
n -> indexMap.getOrDefault(n.getNodeId(), Integer.MAX_VALUE)))
253251
.toList();
254252
}
253+
254+
private void buildNodeIndexMap(List<IFlowNode> nodes, Map<String, Integer> indexMap, int[] counter) {
255+
if (nodes == null || nodes.isEmpty()) {
256+
return;
257+
}
258+
for (IFlowNode node : nodes) {
259+
indexMap.put(node.getId(), counter[0]++);
260+
List<IFlowNode> blocks = node.blocks();
261+
if (blocks != null && !blocks.isEmpty()) {
262+
buildNodeIndexMap(blocks, indexMap, counter);
263+
}
264+
}
265+
}
255266
}
256267

257268

0 commit comments

Comments
 (0)