Skip to content

Commit dd281d3

Browse files
authored
Merge pull request #30 from lunasaw/2.6.0
2.6.0 流程引擎单节点扩展
2 parents 50da3f9 + 9823154 commit dd281d3

File tree

9 files changed

+120
-5
lines changed

9 files changed

+120
-5
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<groupId>io.github.lunasaw</groupId>
88
<artifactId>luna-common</artifactId>
99
<name>luna-common</name>
10-
<version>2.5.9</version>
10+
<version>2.6.0</version>
1111
<description>common is project which contains common utils</description>
1212
<url>https://github.com/lunasaw/luna-common</url>
1313

src/main/java/com/luna/common/engine/model/NodeName.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.luna.common.engine.model;
22

3+
import java.util.Objects;
4+
35
import com.luna.common.check.Assert;
4-
import lombok.AllArgsConstructor;
6+
57
import lombok.Data;
68
import lombok.NoArgsConstructor;
79

8-
import java.util.Objects;
9-
1010
/**
1111
* 节点Key
1212
*/
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.luna.common.engine.spi;
2+
3+
import com.luna.common.engine.model.EngineRunData;
4+
5+
public abstract class AbstractBatchNodeNodeSpi<T> implements BatchNodeNodeSpi<T> {
6+
7+
@Override
8+
public boolean isAccept(EngineRunData engineRunData) {
9+
return true;
10+
}
11+
12+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.luna.common.engine.spi;
2+
3+
import com.luna.common.engine.model.EngineRunData;
4+
5+
/**
6+
* 每个流程节点的扩展点
7+
**/
8+
public interface BatchNodeNodeSpi<T> extends NodeSpi {
9+
/**
10+
* 判断该扩展点是否需要执行 true:需要执行; false:不需要执行
11+
*
12+
* @param spiData
13+
* @return
14+
*/
15+
default boolean isAccept(EngineRunData spiData) {
16+
return true;
17+
}
18+
19+
/**
20+
* 封装spi的业务逻辑方法
21+
*
22+
*/
23+
void invoke(EngineRunData spiData);
24+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.luna.common.engine.spi;
2+
3+
/**
4+
* SPI接口
5+
*/
6+
public interface NodeSpi {
7+
8+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,37 @@
11
package com.luna.common.engine.task;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
36
import com.luna.common.engine.model.EngineContext;
7+
import com.luna.common.engine.spi.NodeSpi;
8+
9+
import lombok.Data;
410

511
/**
612
* @author luna
713
*/
14+
@Data
815
public abstract class AbstractEngineNode<T> implements EngineNode<T> {
16+
/**
17+
* SPI列表
18+
*/
19+
private List<NodeSpi> batchNodeNodeList = new ArrayList<>();
20+
921
@Override
1022
public boolean couldContinueExecute(EngineContext engineContext) {
1123
if (engineContext.isStop()) {
1224
return false;
1325
}
1426
return true;
1527
}
28+
29+
@Override
30+
public List<NodeSpi> getSpiList() {
31+
return batchNodeNodeList;
32+
}
33+
34+
public void add(NodeSpi nodeSpi) {
35+
batchNodeNodeList.add(nodeSpi);
36+
}
1637
}

src/main/java/com/luna/common/engine/task/EngineNode.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.luna.common.engine.task;
22

3+
import java.util.List;
4+
35
import com.luna.common.engine.model.EngineContext;
46
import com.luna.common.engine.model.EngineRunData;
7+
import com.luna.common.engine.spi.NodeSpi;
58

69
/**
710
*
@@ -40,4 +43,11 @@ public interface EngineNode<T> {
4043
*/
4144
boolean couldContinueExecute(EngineContext engineContext);
4245

46+
/**
47+
* 获取扩展spi
48+
*
49+
* @return
50+
*/
51+
List<NodeSpi> getSpiList();
52+
4353
}

src/main/java/com/luna/common/engine/task/NodeParallelTask.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package com.luna.common.engine.task;
22

3+
import java.util.List;
4+
5+
import com.luna.common.engine.spi.NodeSpi;
6+
import org.apache.commons.collections4.CollectionUtils;
37
import org.slf4j.Logger;
48
import org.slf4j.LoggerFactory;
59

610
import com.luna.common.engine.model.EngineContext;
711
import com.luna.common.engine.model.EngineRunData;
12+
import com.luna.common.engine.spi.BatchNodeNodeSpi;
813
import com.luna.common.exception.BaseException;
914

1015
/**
@@ -41,6 +46,15 @@ public Object execute() throws BaseException {
4146
try {
4247
// Node前置检查
4348
Object o = engineNode.invokeNode(engineRunData, engineContext);
49+
List<NodeSpi> spiList = engineNode.getSpiList();
50+
if (CollectionUtils.isNotEmpty(spiList)) {
51+
for (NodeSpi nodeSpi : spiList) {
52+
BatchNodeNodeSpi batchNodeNodeSpi = (BatchNodeNodeSpi)nodeSpi;
53+
if (batchNodeNodeSpi.isAccept(engineRunData)) {
54+
batchNodeNodeSpi.invoke(engineRunData);
55+
}
56+
}
57+
}
4458
engineNode.afterInvoke(engineRunData, engineContext);
4559
// 后置处理
4660
return o;

src/test/java/com/luna/common/utils/EngineNodeTest.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package com.luna.common.utils;
22

33
import org.junit.Test;
4+
import org.springframework.beans.factory.InitializingBean;
5+
import org.springframework.beans.factory.annotation.Autowired;
46
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
57
import org.springframework.context.annotation.Bean;
68
import org.springframework.context.annotation.Configuration;
79
import org.springframework.stereotype.Component;
810

11+
import com.alibaba.fastjson2.JSON;
912
import com.luna.common.engine.model.EngineContext;
1013
import com.luna.common.engine.model.EngineRunData;
1114
import com.luna.common.engine.model.NodeChain;
1215
import com.luna.common.engine.model.NodeConf;
16+
import com.luna.common.engine.spi.AbstractBatchNodeNodeSpi;
1317
import com.luna.common.engine.task.AbstractEngineExecute;
1418
import com.luna.common.engine.task.AbstractEngineNode;
1519
import com.luna.common.spring.SpringBeanService;
@@ -49,6 +53,28 @@ public TestEngineNode testEngineNode() {
4953
public SpringBeanService springBeanService() {
5054
return new SpringBeanService();
5155
}
56+
57+
@Bean
58+
public TestBatchNodeNodeSpi testBatchNodeNodeSpi() {
59+
return new TestBatchNodeNodeSpi();
60+
}
61+
}
62+
63+
@Component
64+
public static class TestBatchNodeNodeSpi extends AbstractBatchNodeNodeSpi<TestAdaptor> implements InitializingBean {
65+
66+
@Autowired
67+
private TestEngineNode testEngineNode;
68+
69+
@Override
70+
public void invoke(EngineRunData engineRunData) {
71+
System.out.println(JSON.toJSONString(engineRunData));
72+
}
73+
74+
@Override
75+
public void afterPropertiesSet() {
76+
testEngineNode.add(this);
77+
}
5278
}
5379

5480
@Component
@@ -85,7 +111,7 @@ public static class EngineFlow {
85111
testLink.add("1", TestEngineNode.class, new NodeConf(true, 100));
86112
testLink.add("1", TestEngineNode.class, new NodeConf(true, 100));
87113
testLink.add("2", TestEngineNode.class, new NodeConf(true, 100));
88-
testLink.add("2", TestEngineNode.class, new NodeConf(false, 100));
114+
testLink.add("2", TestEngineNode.class, new NodeConf(true, 100));
89115
}
90116
}
91117

0 commit comments

Comments
 (0)