Skip to content

Commit 3562cdd

Browse files
committed
add manual node
1 parent 2704357 commit 3562cdd

12 files changed

Lines changed: 168 additions & 9 deletions

File tree

flow-engine-example/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.9</version>
9+
<version>0.0.10</version>
1010
<relativePath>../pom.xml</relativePath>
1111
</parent>
1212

flow-engine-framework/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.9</version>
9+
<version>0.0.10</version>
1010
</parent>
1111

1212
<name>flow-engine-framework</name>

flow-engine-framework/src/main/java/com/codingapi/flow/node/NodeType.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ public enum NodeType {
2020
INCLUSIVE,
2121
// 包容分支
2222
INCLUSIVE_BRANCH,
23+
// 人工控制
24+
MANUAL,
25+
// 人工分支
26+
MANUAL_BRANCH,
2327
// 抄送
2428
NOTIFY,
2529
// 并行控制

flow-engine-framework/src/main/java/com/codingapi/flow/node/factory/NodeFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ private void initNodes() {
3030
nodesClasses.put(HandleNode.NODE_TYPE, HandleNode.class);
3131
nodesClasses.put(InclusiveNode.NODE_TYPE, InclusiveNode.class);
3232
nodesClasses.put(InclusiveBranchNode.NODE_TYPE, InclusiveBranchNode.class);
33+
nodesClasses.put(ManualNode.NODE_TYPE, ManualNode.class);
34+
nodesClasses.put(ManualBranchNode.NODE_TYPE, ManualBranchNode.class);
3335
nodesClasses.put(NotifyNode.NODE_TYPE, NotifyNode.class);
3436
nodesClasses.put(RouterNode.NODE_TYPE, RouterNode.class);
3537
nodesClasses.put(ParallelNode.NODE_TYPE, ParallelNode.class);
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.codingapi.flow.node.nodes;
2+
3+
import com.codingapi.flow.builder.BaseNodeBuilder;
4+
import com.codingapi.flow.exception.FlowNotFoundException;
5+
import com.codingapi.flow.node.BaseFlowNode;
6+
import com.codingapi.flow.node.IFlowNode;
7+
import com.codingapi.flow.node.NodeType;
8+
import com.codingapi.flow.node.helper.ParallelNodeRelationHelper;
9+
import com.codingapi.flow.record.FlowRecord;
10+
import com.codingapi.flow.session.FlowSession;
11+
import com.codingapi.flow.utils.RandomUtils;
12+
import com.codingapi.flow.workflow.Workflow;
13+
14+
import java.util.List;
15+
import java.util.Map;
16+
17+
/**
18+
* 人工分支节点
19+
*/
20+
public class ManualBranchNode extends BaseFlowNode {
21+
22+
public static final String NODE_TYPE = NodeType.MANUAL_BRANCH.name();
23+
public static final String DEFAULT_NAME = "人工分支节点";
24+
25+
26+
@Override
27+
public String getType() {
28+
return NODE_TYPE;
29+
}
30+
31+
32+
public ManualBranchNode(String id, String name, int order) {
33+
super(id, name, order);
34+
}
35+
36+
public ManualBranchNode() {
37+
this(RandomUtils.generateStringId(), DEFAULT_NAME, 0);
38+
}
39+
40+
/**
41+
* 匹配条件
42+
*/
43+
@Override
44+
public boolean handle(FlowSession request) {
45+
return true;
46+
}
47+
48+
49+
50+
public static ManualBranchNode formMap(Map<String, Object> map) {
51+
return BaseFlowNode.fromMap(map, ManualBranchNode.class);
52+
}
53+
54+
/**
55+
* 匹配条件分支
56+
*
57+
* @param nodeList 当前节点下的所有条件
58+
* @param flowSession 当前会话
59+
* @return 匹配的节点
60+
*/
61+
public List<IFlowNode> filterBranches(List<IFlowNode> nodeList, FlowSession flowSession) {
62+
Workflow workflow = flowSession.getWorkflow();
63+
IFlowNode currentNode = flowSession.getCurrentNode();
64+
ParallelNodeRelationHelper helper = new ParallelNodeRelationHelper(workflow,currentNode,nodeList);
65+
// 分析并行分支的结束汇聚节点
66+
IFlowNode overNode = helper.fetchMargeNode();
67+
if (overNode == null) {
68+
throw FlowNotFoundException.parallelEndNodeNotNull();
69+
}
70+
71+
// 在流程记录中记录,合并的条件信息。
72+
FlowRecord flowRecord = flowSession.getCurrentRecord();
73+
flowRecord.parallelBranchNode(overNode.getId(), nodeList.size(), RandomUtils.generateStringId());
74+
75+
return nodeList;
76+
}
77+
78+
public static Builder builder() {
79+
return new Builder();
80+
}
81+
82+
public static class Builder extends BaseNodeBuilder<Builder, ManualBranchNode> {
83+
84+
public Builder() {
85+
super(new ManualBranchNode());
86+
}
87+
}
88+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.codingapi.flow.node.nodes;
2+
3+
import com.codingapi.flow.builder.BaseNodeBuilder;
4+
import com.codingapi.flow.node.BaseFlowNode;
5+
import com.codingapi.flow.node.IBlockNode;
6+
import com.codingapi.flow.node.IFlowNode;
7+
import com.codingapi.flow.node.NodeType;
8+
import com.codingapi.flow.utils.RandomUtils;
9+
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
import java.util.Map;
13+
14+
/**
15+
* 人工控制节点
16+
*/
17+
public class ManualNode extends BaseFlowNode implements IBlockNode {
18+
19+
public static final String NODE_TYPE = NodeType.MANUAL.name();
20+
public static final String DEFAULT_NAME = "人工控制节点";
21+
22+
23+
@Override
24+
public String getType() {
25+
return NODE_TYPE;
26+
}
27+
28+
29+
public ManualNode(String id, String name, int order) {
30+
super(id, name, order);
31+
}
32+
33+
public ManualNode() {
34+
this(RandomUtils.generateStringId(), DEFAULT_NAME, 0);
35+
}
36+
37+
38+
@Override
39+
public void addDefaultBranch(int count){
40+
List<IFlowNode> branches = new ArrayList<>();
41+
for (int i=0;i<count;i++){
42+
ManualBranchNode branchNode = new ManualBranchNode();
43+
branchNode.setOrder(i+1);
44+
branches.add(branchNode);
45+
}
46+
this.setBlocks(branches);
47+
}
48+
49+
50+
public static ManualNode formMap(Map<String, Object> map) {
51+
return BaseFlowNode.fromMap(map, ManualNode.class);
52+
}
53+
54+
55+
public static Builder builder() {
56+
return new Builder();
57+
}
58+
59+
public static class Builder extends BaseNodeBuilder<Builder, ManualNode> {
60+
61+
public Builder() {
62+
super(new ManualNode());
63+
}
64+
}
65+
}

flow-engine-starter-api/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.9</version>
9+
<version>0.0.10</version>
1010
</parent>
1111

1212
<name>flow-engine-starter-api</name>

flow-engine-starter-infra/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.9</version>
9+
<version>0.0.10</version>
1010
</parent>
1111

1212
<name>flow-engine-starter-infra</name>

flow-engine-starter-query/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.9</version>
9+
<version>0.0.10</version>
1010
</parent>
1111

1212
<name>flow-engine-starter-query</name>

flow-engine-starter/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.9</version>
9+
<version>0.0.10</version>
1010
</parent>
1111

1212
<name>flow-engine-starter</name>

0 commit comments

Comments
 (0)