Skip to content

Commit c1500e0

Browse files
authored
Merge pull request #81 from codingapi/dev
Dev
2 parents 5ff213a + 8542346 commit c1500e0

22 files changed

Lines changed: 130 additions & 40 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.codingapi.example.handler;
2+
3+
import com.codingapi.flow.event.FlowRecordUrgeEvent;
4+
import com.codingapi.springboot.framework.event.IHandler;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.stereotype.Component;
7+
8+
@Slf4j
9+
@Component
10+
public class MyFlowRecordUrgeEventHandler implements IHandler<FlowRecordUrgeEvent> {
11+
12+
@Override
13+
public void handler(FlowRecordUrgeEvent event) {
14+
log.info("催办 event:{}",event);
15+
}
16+
}

flow-engine-framework/src/main/java/com/codingapi/flow/domain/UrgeInterval.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ public class UrgeInterval {
2121
public UrgeInterval(FlowRecord flowRecord) {
2222
this.processId = flowRecord.getProcessId();
2323
this.recordId = flowRecord.getId();
24-
this.createTime = flowRecord.getCreateTime();
24+
this.createTime = System.currentTimeMillis();
2525
}
2626
}

flow-engine-framework/src/main/java/com/codingapi/flow/exception/FlowStateException.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public static FlowStateException nodeNotSupportRevoke() {
114114
*
115115
* @return exception
116116
*/
117-
public static FlowStateException recordNotSupportUrge() {
118-
return new FlowStateException("record.notSupportUrge", "record not support urge");
117+
public static FlowStateException recordLimitUrgeError() {
118+
return new FlowStateException("record.urge.limit", "record urge limit error");
119119
}
120120
}

flow-engine-framework/src/main/java/com/codingapi/flow/manager/NodeStrategyManager.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public long getTimeoutTime() {
3838
/**
3939
* 是否可合并
4040
*/
41-
public boolean isMergeable() {
41+
public boolean isEnableMergeable() {
4242
List<INodeStrategy> strategies = this.strategies;
4343
for (INodeStrategy strategy : strategies) {
4444
if (strategy instanceof RecordMergeStrategy) {
@@ -48,6 +48,19 @@ public boolean isMergeable() {
4848
return false;
4949
}
5050

51+
/**
52+
* 是否支持撤回
53+
*/
54+
public boolean isEnableRevoke(){
55+
List<INodeStrategy> strategies = this.strategies;
56+
for (INodeStrategy strategy : strategies) {
57+
if (strategy instanceof RevokeStrategy) {
58+
return ((RevokeStrategy) strategy).isEnable();
59+
}
60+
}
61+
return false;
62+
}
63+
5164
/**
5265
* 是否按顺序执行的审批策略
5366
*/

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public void fillNewRecord(FlowSession session, FlowRecord flowRecord) {
6464
NodeStrategyManager nodeStrategyManager = this.strategyManager();
6565
flowRecord.setTitle(nodeStrategyManager.generateTitle(session));
6666
flowRecord.setTimeoutTime(nodeStrategyManager.getTimeoutTime());
67-
flowRecord.setMergeable(nodeStrategyManager.isMergeable());
67+
flowRecord.setMergeable(nodeStrategyManager.isEnableMergeable());
6868
flowRecord.newRecord();
6969
}
7070

flow-engine-framework/src/main/java/com/codingapi/flow/pojo/response/FlowContent.java

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public class FlowContent {
9393
/**
9494
* 流程按钮
9595
*/
96-
private List<Map<String,Object>> actions;
96+
private List<Map<String, Object>> actions;
9797

9898
/**
9999
* 是否可合并
@@ -130,6 +130,44 @@ public class FlowContent {
130130
*/
131131
private List<NodeOption> nodes;
132132

133+
/**
134+
* 支持撤销
135+
*/
136+
private boolean revoke;
137+
138+
/**
139+
* 支持催办
140+
*/
141+
private boolean urge;
142+
143+
144+
/**
145+
* 设置操作动作按钮
146+
*
147+
*/
148+
public void setOperationAction(Workflow workflow, FlowRecord flowRecord) {
149+
if (flowRecord == null) {
150+
this.revoke = false;
151+
this.urge = false;
152+
} else {
153+
if (flowRecord.isFinish()) {
154+
this.revoke = false;
155+
this.urge = false;
156+
}
157+
158+
if (flowRecord.isTodo()) {
159+
this.revoke = false;
160+
this.urge = false;
161+
}
162+
163+
if (flowRecord.isDone() && !flowRecord.isFinish()) {
164+
IFlowNode node = workflow.getFlowNode(flowRecord.getNodeId());
165+
this.revoke = node.strategyManager().isEnableRevoke();
166+
this.urge = workflow.strategyManager().isEnableUrge();
167+
}
168+
}
169+
}
170+
133171

134172
public void pushCurrentNode(IFlowNode currentNode) {
135173
ActionManager actionManager = currentNode.actionManager();
@@ -141,7 +179,7 @@ public void pushCurrentNode(IFlowNode currentNode) {
141179
this.nodeName = currentNode.getName();
142180
this.nodeType = currentNode.getType();
143181
this.fieldPermissions = strategyManager.getFieldPermissions();
144-
Map<String,Object> nodeData = currentNode.toMap();
182+
Map<String, Object> nodeData = currentNode.toMap();
145183
this.view = (String) nodeData.get("view");
146184
}
147185

@@ -162,7 +200,7 @@ public void pushRecords(FlowRecord record, List<FlowRecord> mergeRecords) {
162200
this.title = record.getTitle();
163201

164202
this.todos = new ArrayList<>();
165-
for (FlowRecord item : mergeRecords){
203+
for (FlowRecord item : mergeRecords) {
166204
Body body = new Body();
167205
body.setRecordId(item.getId());
168206
body.setTitle(item.getTitle());
@@ -173,9 +211,9 @@ public void pushRecords(FlowRecord record, List<FlowRecord> mergeRecords) {
173211
}
174212
}
175213

176-
public void pushHistory(Workflow workflow,List<FlowRecord> historyRecords) {
214+
public void pushHistory(Workflow workflow, List<FlowRecord> historyRecords) {
177215
this.histories = new ArrayList<>();
178-
for (FlowRecord item : historyRecords){
216+
for (FlowRecord item : historyRecords) {
179217
IFlowNode node = workflow.getFlowNode(item.getNodeId());
180218
History history = new History();
181219
history.setRecordId(item.getId());
@@ -193,18 +231,18 @@ public void pushHistory(Workflow workflow,List<FlowRecord> historyRecords) {
193231

194232
public void pushCurrentOperator(IFlowOperator currentOperator) {
195233
this.currentOperator = new FlowOperator(currentOperator);
196-
this.createOperator = new FlowOperator(currentOperator);
234+
this.createOperator = new FlowOperator(currentOperator);
197235
}
198236

199237

200238
@Data
201-
public static class History{
239+
public static class History {
202240
/**
203241
* 流程编号
204242
*/
205243
private long recordId;
206244
/**
207-
* 流程标题
245+
* 流程标题
208246
*/
209247
private String title;
210248

@@ -246,15 +284,15 @@ public static class History{
246284
@Data
247285
public static class Body {
248286
/**
249-
* 流程记录编号
287+
* 流程记录编号
250288
*/
251289
private long recordId;
252290
/**
253-
* 流程标题
291+
* 流程标题
254292
*/
255293
private String title;
256294
/**
257-
* 表单数据
295+
* 表单数据
258296
*/
259297
private Map<String, Object> data;
260298

flow-engine-framework/src/main/java/com/codingapi/flow/record/FlowRecord.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ public class FlowRecord {
210210
private long timeoutTime;
211211
/**
212212
* 是否可合并
213-
* {@link FlowRecord#getMergeKey()}
213+
* {@link FlowRecord#getTodoKey()}
214214
*/
215215
private boolean mergeable;
216216
/**
@@ -247,7 +247,7 @@ public class FlowRecord {
247247
* 数据合并的依据,当开启时值为固定值,否则为随机数据
248248
* 相同的 {@link FlowRecord#currentOperatorId} {@link FlowRecord#workRuntimeId} {@link FlowRecord#nodeId}字段的数据合并到一条记录上。
249249
*/
250-
public String getMergeKey() {
250+
public String getTodoKey() {
251251
if (mergeable) {
252252
return String.format("%s-%s-%s", currentOperatorId, workRuntimeId, nodeId);
253253
} else {
@@ -461,7 +461,7 @@ public void notifyRecord(FlowSession flowSession) {
461461
NodeStrategyManager nodeStrategyManager = currentNode.strategyManager();
462462
this.setTitle(nodeStrategyManager.generateTitle(flowSession));
463463
this.setTimeoutTime(nodeStrategyManager.getTimeoutTime());
464-
this.setMergeable(nodeStrategyManager.isMergeable());
464+
this.setMergeable(nodeStrategyManager.isEnableMergeable());
465465
this.update(flowSession, true);
466466
this.notify = true;
467467
this.forwardOperatorId = 0;

flow-engine-framework/src/main/java/com/codingapi/flow/record/FlowTodoRecord.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public class FlowTodoRecord {
8080

8181
/**
8282
* 合并记录id,当存在合并记录数据时待办记录数量不会增加,内容会更新至最新的待办数据信息。
83-
* {@link FlowRecord#getMergeKey()}
83+
* {@link FlowRecord#getTodoKey()}
8484
*/
8585
private String mergeKey;
8686

@@ -126,7 +126,7 @@ public void update(FlowRecord flowRecord) {
126126
this.createTime = flowRecord.getCreateTime();
127127
this.createOperatorId = flowRecord.getCreateOperatorId();
128128
this.createOperatorName = flowRecord.getCreateOperatorName();
129-
this.mergeKey = flowRecord.getMergeKey();
129+
this.mergeKey = flowRecord.getTodoKey();
130130
this.mergeable = flowRecord.isMergeable();
131131
this.recordId = flowRecord.getId();
132132
this.timeoutTime = flowRecord.getTimeoutTime();

flow-engine-framework/src/main/java/com/codingapi/flow/repository/FlowTodoRecordRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public interface FlowTodoRecordRepository {
88

99
void saveAll(List<FlowTodoRecord> margeRecords);
1010

11-
FlowTodoRecord getByMergeKey(String key);
11+
FlowTodoRecord getByTodoKey(String key);
1212

1313
void delete(FlowTodoRecord margeRecord);
1414

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ private void saveTodoMargeRecords() {
4444
List<FlowTodoRecord> flowTodoRecords = new ArrayList<>();
4545
for (FlowRecord flowRecord : flowRecords) {
4646
if (flowRecord.isTodo()) {
47-
FlowTodoRecord todoMargeRecord = flowTodoRecordRepository.getByMergeKey(flowRecord.getMergeKey());
47+
FlowTodoRecord todoMargeRecord = flowTodoRecordRepository.getByTodoKey(flowRecord.getTodoKey());
4848
if (todoMargeRecord == null) {
4949
todoMargeRecord = new FlowTodoRecord(flowRecord);
5050
} else {
@@ -83,7 +83,7 @@ private void removeTodoMergeRecords() {
8383
for (FlowRecord flowRecord : flowRecords) {
8484
if (flowRecord.isDone()) {
8585
if (flowRecord.isMergeable()) {
86-
FlowTodoRecord todoMargeRecord = flowTodoRecordRepository.getByMergeKey(flowRecord.getMergeKey());
86+
FlowTodoRecord todoMargeRecord = flowTodoRecordRepository.getByTodoKey(flowRecord.getTodoKey());
8787
if (todoMargeRecord != null) {
8888
List<FlowTodoMerge> margeRelations = flowTodoMergeRepository.findByTodoId(todoMargeRecord.getId());
8989
if (margeRelations != null && !margeRelations.isEmpty()) {
@@ -101,7 +101,14 @@ private void removeTodoMergeRecords() {
101101
}
102102
}
103103
} else {
104-
FlowTodoRecord flowTodoRecord = flowTodoRecordRepository.getByMergeKey(flowRecord.getMergeKey());
104+
FlowTodoRecord flowTodoRecord = flowTodoRecordRepository.getByTodoKey(flowRecord.getTodoKey());
105+
if (flowTodoRecord != null) {
106+
flowTodoRecordRepository.delete(flowTodoRecord);
107+
}
108+
}
109+
}else {
110+
if(flowRecord.isRevoked()){
111+
FlowTodoRecord flowTodoRecord = flowTodoRecordRepository.getByTodoKey(flowRecord.getTodoKey());
105112
if (flowTodoRecord != null) {
106113
flowTodoRecordRepository.delete(flowTodoRecord);
107114
}

0 commit comments

Comments
 (0)