Skip to content

Commit 3af7d1b

Browse files
committed
add #82
1 parent cc0e2ff commit 3af7d1b

23 files changed

Lines changed: 297 additions & 161 deletions

File tree

flow-engine-framework/src/main/java/com/codingapi/flow/action/actions/AddAuditAction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.codingapi.flow.exception.FlowExecutionException;
1010
import com.codingapi.flow.manager.NodeStrategyManager;
1111
import com.codingapi.flow.manager.OperatorManager;
12-
import com.codingapi.flow.mock.MockRepositoryHolder;
1312
import com.codingapi.flow.node.IFlowNode;
1413
import com.codingapi.flow.operator.IFlowOperator;
1514
import com.codingapi.flow.record.FlowRecord;
@@ -108,7 +107,7 @@ public void run(FlowSession flowSession) {
108107

109108
for (FlowRecord record : flowRecords) {
110109
if (record.isShow()) {
111-
flowEvents.add(new FlowRecordTodoEvent(record,repositoryHolder instanceof MockRepositoryHolder));
110+
flowEvents.add(new FlowRecordTodoEvent(record, flowSession.isMock()));
112111
}
113112
}
114113

flow-engine-framework/src/main/java/com/codingapi/flow/action/actions/DelegateAction.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.codingapi.flow.event.IFlowEvent;
1010
import com.codingapi.flow.exception.FlowExecutionException;
1111
import com.codingapi.flow.manager.OperatorManager;
12-
import com.codingapi.flow.mock.MockRepositoryHolder;
1312
import com.codingapi.flow.operator.IFlowOperator;
1413
import com.codingapi.flow.record.FlowRecord;
1514
import com.codingapi.flow.script.node.OperatorLoadScript;
@@ -60,7 +59,7 @@ public void run(FlowSession flowSession) {
6059
currentRecord.update(flowSession, true);
6160

6261
recordList.add(currentRecord);
63-
flowEvents.add(new FlowRecordDoneEvent(currentRecord,repositoryHolder instanceof MockRepositoryHolder));
62+
flowEvents.add(new FlowRecordDoneEvent(currentRecord, flowSession.isMock()));
6463

6564
List<IFlowOperator> operators = flowSession.getAdvice().getForwardOperators();
6665

@@ -77,7 +76,7 @@ public void run(FlowSession flowSession) {
7776
FlowRecord flowRecord = currentRecord.create(flowSession.updateSession(operator));
7877
flowRecord.resetDelegate(currentRecord);
7978
recordList.add(flowRecord);
80-
flowEvents.add(new FlowRecordTodoEvent(flowRecord,repositoryHolder instanceof MockRepositoryHolder));
79+
flowEvents.add(new FlowRecordTodoEvent(flowRecord, flowSession.isMock()));
8180
}
8281

8382
repositoryHolder.saveRecords(recordList);

flow-engine-framework/src/main/java/com/codingapi/flow/action/actions/PassAction.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import com.codingapi.flow.event.FlowRecordTodoEvent;
88
import com.codingapi.flow.event.IFlowEvent;
99
import com.codingapi.flow.manager.NodeStrategyManager;
10-
import com.codingapi.flow.mock.MockRepositoryHolder;
1110
import com.codingapi.flow.node.BaseAuditNode;
1211
import com.codingapi.flow.node.IFlowNode;
1312
import com.codingapi.flow.operator.IFlowOperator;
@@ -75,7 +74,7 @@ public void run(FlowSession flowSession) {
7574
boolean isFinish = currentNode.isFinish(flowSession);
7675
currentRecord.update(flowSession, true);
7776
// 添加流程结束事件
78-
flowEvents.add(new FlowRecordDoneEvent(currentRecord,repositoryHolder instanceof MockRepositoryHolder));
77+
flowEvents.add(new FlowRecordDoneEvent(currentRecord,flowSession.isMock()));
7978
recordList.add(currentRecord);
8079

8180
// 激活下一个按顺序审批的记录数据
@@ -86,7 +85,7 @@ public void run(FlowSession flowSession) {
8685
if (record.getNodeOrder() == currentRecord.getNodeOrder() + 1) {
8786
record.show();
8887
recordList.add(record);
89-
flowEvents.add(new FlowRecordTodoEvent(record,repositoryHolder instanceof MockRepositoryHolder));
88+
flowEvents.add(new FlowRecordTodoEvent(record,flowSession.isMock()));
9089
}
9190
}
9291
}
@@ -99,7 +98,7 @@ public void run(FlowSession flowSession) {
9998
notifyRecord.notifyRecord(flowSession.updateSession(forwardOperator));
10099
// 如果不存储这个记录,若下一流程是结束流程时,无法更新流程状态为结束状态。
101100
repositoryHolder.saveRecord(notifyRecord);
102-
flowEvents.add(new FlowRecordDoneEvent(notifyRecord,repositoryHolder instanceof MockRepositoryHolder));
101+
flowEvents.add(new FlowRecordDoneEvent(notifyRecord,flowSession.isMock()));
103102
}
104103

105104
// 是否委托记录
@@ -110,17 +109,17 @@ public void run(FlowSession flowSession) {
110109
rebackRecord.clearDelegate();
111110

112111
recordList.add(rebackRecord);
113-
flowEvents.add(new FlowRecordTodoEvent(rebackRecord,repositoryHolder instanceof MockRepositoryHolder));
112+
flowEvents.add(new FlowRecordTodoEvent(rebackRecord,flowSession.isMock()));
114113
} else {
115114
this.triggerNode(flowSession, (triggerSession) -> {
116115
List<FlowRecord> records = this.generateRecords(triggerSession);
117116
if (!records.isEmpty()) {
118117
for (FlowRecord record : records) {
119118
if (record.isShow()) {
120119
if (record.isNotify()) {
121-
flowEvents.add(new FlowRecordDoneEvent(record,repositoryHolder instanceof MockRepositoryHolder));
120+
flowEvents.add(new FlowRecordDoneEvent(record,flowSession.isMock()));
122121
} else {
123-
flowEvents.add(new FlowRecordTodoEvent(record,repositoryHolder instanceof MockRepositoryHolder));
122+
flowEvents.add(new FlowRecordTodoEvent(record,flowSession.isMock()));
124123
}
125124
}
126125
}

flow-engine-framework/src/main/java/com/codingapi/flow/action/actions/RejectAction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import com.codingapi.flow.event.FlowRecordTodoEvent;
88
import com.codingapi.flow.event.IFlowEvent;
99
import com.codingapi.flow.exception.FlowStateException;
10-
import com.codingapi.flow.mock.MockRepositoryHolder;
1110
import com.codingapi.flow.node.IFlowNode;
1211
import com.codingapi.flow.record.FlowRecord;
1312
import com.codingapi.flow.script.action.RejectActionScript;
@@ -98,7 +97,7 @@ public void run(FlowSession flowSession) {
9897
recordList.addAll(records);
9998
for (FlowRecord record : records) {
10099
if (record.isShow()) {
101-
flowEvents.add(new FlowRecordTodoEvent(record,repositoryHolder instanceof MockRepositoryHolder));
100+
flowEvents.add(new FlowRecordTodoEvent(record, flowSession.isMock()));
102101
}
103102
}
104103
}

flow-engine-framework/src/main/java/com/codingapi/flow/action/actions/ReturnAction.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.codingapi.flow.event.FlowRecordDoneEvent;
77
import com.codingapi.flow.event.FlowRecordTodoEvent;
88
import com.codingapi.flow.event.IFlowEvent;
9-
import com.codingapi.flow.mock.MockRepositoryHolder;
109
import com.codingapi.flow.node.IFlowNode;
1110
import com.codingapi.flow.record.FlowRecord;
1211
import com.codingapi.flow.session.FlowSession;
@@ -48,14 +47,14 @@ public void run(FlowSession flowSession) {
4847
currentRecord.update(flowSession, true);
4948
recordList.add(currentRecord);
5049

51-
flowEvents.add(new FlowRecordDoneEvent(currentRecord,repositoryHolder instanceof MockRepositoryHolder));
50+
flowEvents.add(new FlowRecordDoneEvent(currentRecord,flowSession.isMock()));
5251

5352
List<FlowRecord> flowRecords = backNode.generateCurrentRecords(flowSession.updateSession(backNode));
5453
recordList.addAll(flowRecords);
5554

5655
for (FlowRecord record : flowRecords) {
5756
if (record.isShow()) {
58-
flowEvents.add(new FlowRecordTodoEvent(record,repositoryHolder instanceof MockRepositoryHolder));
57+
flowEvents.add(new FlowRecordTodoEvent(record,flowSession.isMock()));
5958
}
6059
}
6160

flow-engine-framework/src/main/java/com/codingapi/flow/action/actions/TransferAction.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.codingapi.flow.event.IFlowEvent;
1010
import com.codingapi.flow.exception.FlowExecutionException;
1111
import com.codingapi.flow.manager.OperatorManager;
12-
import com.codingapi.flow.mock.MockRepositoryHolder;
1312
import com.codingapi.flow.operator.IFlowOperator;
1413
import com.codingapi.flow.record.FlowRecord;
1514
import com.codingapi.flow.script.node.OperatorLoadScript;
@@ -67,7 +66,7 @@ public void run(FlowSession flowSession) {
6766

6867
currentRecord.update(flowSession, true);
6968
recordList.add(currentRecord);
70-
flowEvents.add(new FlowRecordDoneEvent(currentRecord,repositoryHolder instanceof MockRepositoryHolder));
69+
flowEvents.add(new FlowRecordDoneEvent(currentRecord,flowSession.isMock()));
7170

7271
List<IFlowOperator> operators = flowSession.getAdvice().getForwardOperators();
7372
if (script != null) {
@@ -82,7 +81,7 @@ public void run(FlowSession flowSession) {
8281
for (IFlowOperator operator : operators) {
8382
FlowRecord flowRecord = currentRecord.create(flowSession.updateSession(operator));
8483
recordList.add(flowRecord);
85-
flowEvents.add(new FlowRecordTodoEvent(flowRecord,repositoryHolder instanceof MockRepositoryHolder));
84+
flowEvents.add(new FlowRecordTodoEvent(flowRecord,flowSession.isMock()));
8685
}
8786

8887
repositoryHolder.saveRecords(recordList);

flow-engine-framework/src/main/java/com/codingapi/flow/mock/FlowServiceMockFactory.java

Lines changed: 0 additions & 47 deletions
This file was deleted.
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.codingapi.flow.mock;
2+
3+
import com.codingapi.flow.query.FlowRecordQueryService;
4+
import com.codingapi.flow.service.FlowService;
5+
import lombok.Getter;
6+
import lombok.extern.slf4j.Slf4j;
7+
8+
import java.util.Timer;
9+
import java.util.TimerTask;
10+
11+
12+
@Slf4j
13+
public class MockInstance {
14+
15+
@Getter
16+
private final String mockKey;
17+
@Getter
18+
private final MockRepositoryHolder repositoryHolder;
19+
@Getter
20+
private final FlowService flowService;
21+
@Getter
22+
private final FlowRecordQueryService flowRecordQueryService;
23+
24+
private final Timer timer;
25+
26+
private final long createTime;
27+
28+
private long expiredTime;
29+
30+
private static final long MAX_KEEP_TIME = 1000 * 60 * 30;
31+
32+
public MockInstance(String mockKey, MockRepositoryHolder repositoryHolder, FlowService flowService, FlowRecordQueryService flowRecordQueryService) {
33+
this.mockKey = mockKey;
34+
this.repositoryHolder = repositoryHolder;
35+
this.flowService = flowService;
36+
this.flowRecordQueryService = flowRecordQueryService;
37+
this.timer = new Timer();
38+
this.createTime = System.currentTimeMillis();
39+
this.expiredTime = this.createTime + MAX_KEEP_TIME;
40+
this.initTimer();
41+
}
42+
43+
public void updateExpiredTime(){
44+
this.expiredTime = System.currentTimeMillis() + MAX_KEEP_TIME;
45+
}
46+
47+
private void initTimer() {
48+
this.timer.scheduleAtFixedRate(new TimerTask() {
49+
@Override
50+
public void run() {
51+
long currentTime = System.currentTimeMillis();
52+
if (expiredTime > currentTime) {
53+
MockInstanceFactory.getInstance().clear(mockKey);
54+
timer.cancel();
55+
return;
56+
}
57+
}
58+
}, 0, 1000);
59+
}
60+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.codingapi.flow.mock;
2+
3+
import com.codingapi.flow.gateway.FlowOperatorGateway;
4+
import com.codingapi.flow.mock.server.FlowRecordQueryMockService;
5+
import com.codingapi.flow.service.FlowService;
6+
import com.codingapi.flow.utils.RandomUtils;
7+
import lombok.Getter;
8+
9+
import java.util.Map;
10+
import java.util.concurrent.ConcurrentHashMap;
11+
12+
public class MockInstanceFactory {
13+
14+
private final Map<String, MockInstance> cache;
15+
16+
@Getter
17+
private final static MockInstanceFactory instance = new MockInstanceFactory();
18+
19+
private MockInstanceFactory() {
20+
this.cache = new ConcurrentHashMap<>();
21+
}
22+
23+
public MockInstance create(FlowOperatorGateway flowOperatorGateway) {
24+
String key = RandomUtils.generateStringId();
25+
MockRepositoryHolder mockRepositoryHolder = new MockRepositoryHolder(flowOperatorGateway);
26+
FlowService flowService = new FlowService(mockRepositoryHolder);
27+
FlowRecordQueryMockService flowRecordQueryMockService = new FlowRecordQueryMockService(mockRepositoryHolder);
28+
MockInstance mockInstance = new MockInstance(key, mockRepositoryHolder, flowService, flowRecordQueryMockService);
29+
this.cache.put(key, mockInstance);
30+
return mockInstance;
31+
}
32+
33+
public MockInstance getMockInstance(String key) {
34+
MockInstance mockInstance = this.cache.get(key);
35+
if (mockInstance != null) {
36+
mockInstance.updateExpiredTime();
37+
}
38+
return mockInstance;
39+
}
40+
41+
42+
public void clear(String key) {
43+
this.cache.remove(key);
44+
}
45+
46+
}

flow-engine-framework/src/main/java/com/codingapi/flow/mock/MockRepositoryHolder.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,8 @@ public class MockRepositoryHolder implements IRepositoryHolder {
3333
private final FlowRecordService flowRecordService;
3434
private final WorkflowService workflowService;
3535
private final FlowOperatorGateway flowOperatorGateway;
36-
private final String mockKey;
3736

38-
public MockRepositoryHolder(String mockKey, FlowOperatorGateway flowOperatorGateway) {
39-
this.mockKey = mockKey;
37+
public MockRepositoryHolder(FlowOperatorGateway flowOperatorGateway) {
4038
this.flowOperatorGateway = flowOperatorGateway;
4139
this.delayTaskRepository = new DelayTaskRepositoryMockImpl();
4240
this.flowRecordRepository = new FlowRecordRepositoryMockImpl();

0 commit comments

Comments
 (0)