优化动态获取下一个节点方法
This commit is contained in:
parent
0a835213a6
commit
6d0ca7cb67
@ -59,19 +59,19 @@ public class ModelHelper {
|
||||
// 条件节点
|
||||
flowLongContext.getFlowConditionHandler().getConditionNode(flowLongContext, execution, childNode)
|
||||
// 添加执行条件节点
|
||||
.ifPresent(t -> nextNodes.addAll(getChildNode(flowLongContext, execution, rootNodeModel, t.getChildNode())));
|
||||
.ifPresent(t -> nextNodes.add(t.getChildNode()));
|
||||
} else if (childNode.parallelNode()) {
|
||||
// 并行节点
|
||||
childNode.getParallelNodes().forEach(t -> nextNodes.add(t.getChildNode()));
|
||||
} else if (childNode.inclusiveNode()) {
|
||||
// 包容节点
|
||||
flowLongContext.getFlowConditionHandler().getInclusiveNodes(flowLongContext, execution, childNode).ifPresent(optList -> {
|
||||
if (Objects.equals(1, optList.size()) && null != childNode.getChildNode()) {
|
||||
if (Objects.equals(1, optList.size()) && null == optList.get(0).getChildNode()) {
|
||||
// 获取包容分支子节点
|
||||
nextNodes.add(childNode.getChildNode());
|
||||
} else {
|
||||
// 添加执行条件节点
|
||||
optList.forEach(t -> nextNodes.addAll(getChildNode(flowLongContext, execution, rootNodeModel, t.getChildNode())));
|
||||
optList.forEach(t -> nextNodes.add(t.getChildNode()));
|
||||
}
|
||||
});
|
||||
} else if (childNode.routeNode()) {
|
||||
@ -112,10 +112,7 @@ public class ModelHelper {
|
||||
nextNodes.add(parentNode.getChildNode());
|
||||
} else if (parentNode.inclusiveNode()) {
|
||||
// 包容分支
|
||||
flowLongContext.getFlowConditionHandler().getInclusiveNodes(flowLongContext, execution, parentNode)
|
||||
// 添加执行条件节点
|
||||
.ifPresent(inclusiveNodes -> inclusiveNodes.forEach(t ->
|
||||
nextNodes.addAll(getChildNode(flowLongContext, execution, rootNodeModel, t.getChildNode()))));
|
||||
nextNodes.add(parentNode.getChildNode());
|
||||
} else if (parentNode.routeNode()) {
|
||||
// 路由分支
|
||||
flowLongContext.getFlowConditionHandler().getRouteNode(flowLongContext, execution, parentNode)
|
||||
|
@ -3,12 +3,16 @@ package test.mysql;
|
||||
import com.aizuda.bpm.engine.FlowLongEngine;
|
||||
import com.aizuda.bpm.engine.core.Execution;
|
||||
import com.aizuda.bpm.engine.model.ModelHelper;
|
||||
import com.aizuda.bpm.engine.model.NodeModel;
|
||||
import com.aizuda.bpm.engine.model.ProcessModel;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class TestNextChildNodes extends TestModel {
|
||||
|
||||
@ -17,45 +21,51 @@ public class TestNextChildNodes extends TestModel {
|
||||
|
||||
@Test
|
||||
public void testNextChildNodes() {
|
||||
ProcessModel processModel = getProcessModel("test/TestNextChildNodes.json");
|
||||
ProcessModel processModel = getProcessModel("test/testNextChildNodes.json");
|
||||
processModel.buildParentNode(processModel.getNodeConfig());
|
||||
|
||||
Assertions.assertEquals("flk1733396309547", ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, null),
|
||||
processModel.getNodeConfig(), "flk1733380944015").get(0).getNodeKey());
|
||||
assertEquals("flk1733396309547", "flk1733380944015", processModel);
|
||||
assertEquals("flk1733380972879", "flk1733396309547", processModel);
|
||||
assertEquals("flk1733446929109", "flk1733380972879", processModel);
|
||||
|
||||
Assertions.assertEquals("flk1733380972879", ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, null),
|
||||
processModel.getNodeConfig(), "flk1733396309547").get(0).getNodeKey());
|
||||
|
||||
Assertions.assertEquals("flk1733446929109", ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, null),
|
||||
processModel.getNodeConfig(), "flk1733380972879").get(0).getNodeKey());
|
||||
|
||||
Assertions.assertEquals("flk1733446923640", ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, new HashMap<String, Object>(){{
|
||||
assertEquals("flk1733446923640", "flk1733380972879", processModel, new HashMap<String, Object>() {{
|
||||
put("aaa", "11");
|
||||
}}), processModel.getNodeConfig(), "flk1733380972879").get(0).getNodeKey());
|
||||
}});
|
||||
|
||||
// 下一步执行到并行分支
|
||||
Assertions.assertEquals(2, ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, null),
|
||||
processModel.getNodeConfig(), "flk1733446929109").size());
|
||||
assertConsumer("flk1733446929109", processModel, null, nodeModels -> Assertions.assertEquals(2, nodeModels.size()));
|
||||
|
||||
Assertions.assertEquals("flk1733446917296", ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, null),
|
||||
processModel.getNodeConfig(), "flk1733446912655").get(0).getNodeKey());
|
||||
assertEquals("flk1733446917296", "flk1733446912655", processModel);
|
||||
|
||||
// 路由分支
|
||||
Assertions.assertEquals("flk1733446923640", ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, new HashMap<String, Object>() {{
|
||||
assertEquals("flk1733446923640", "flk1733446917296", processModel, new HashMap<String, Object>() {{
|
||||
put("aaa", "11");
|
||||
}}), processModel.getNodeConfig(), "flk1733446917296").get(0).getNodeKey());
|
||||
}});
|
||||
|
||||
// 跳过路由分支,包容分支执行默认条件
|
||||
Assertions.assertEquals("flk1733658019276", ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, null),
|
||||
processModel.getNodeConfig(), "flk1733446917296").get(0).getNodeKey());
|
||||
assertEquals("flk1733658019276", "flk1733446917296", processModel);
|
||||
|
||||
// 包容分支
|
||||
Assertions.assertEquals("flk1733658095760", ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, new HashMap<String, Object>() {{
|
||||
assertEquals("flk1733658095760", "flk1733446917296", processModel, new HashMap<String, Object>() {{
|
||||
put("bbb", "11");
|
||||
}}), processModel.getNodeConfig(), "flk1733446917296").get(0).getNodeKey());
|
||||
}});
|
||||
|
||||
Assertions.assertEquals("flk1733658019276", ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, null),
|
||||
processModel.getNodeConfig(), "flk1733658095760").get(0).getNodeKey());
|
||||
assertEquals("flk1733658019276", "flk1733658095760", processModel);
|
||||
}
|
||||
|
||||
private void assertEquals(String nextNodeKey, String nodeKey, ProcessModel processModel) {
|
||||
assertEquals(nextNodeKey, nodeKey, processModel, null);
|
||||
}
|
||||
|
||||
private void assertEquals(String nextNodeKey, String nodeKey, ProcessModel processModel, Map<String, Object> args) {
|
||||
assertConsumer(nodeKey, processModel, args, nodeModels -> Assertions.assertEquals(nextNodeKey, nodeModels.get(0).getNodeKey()));
|
||||
}
|
||||
|
||||
private void assertConsumer(String nodeKey, ProcessModel processModel, Map<String, Object> args, Consumer<List<NodeModel>> consumer) {
|
||||
List<NodeModel> nodeModels = ModelHelper.getNextChildNodes(flowLongEngine.getContext(), new Execution(testCreator, args),
|
||||
processModel.getNodeConfig(), nodeKey);
|
||||
if (null != consumer) {
|
||||
consumer.accept(nodeModels);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user