Skip to content

Commit 42e1579

Browse files
authored
Merge pull request #137 from codingapi/dev
fix ProcessNode search
2 parents 2488687 + 7fc16fc commit 42e1579

4 files changed

Lines changed: 221 additions & 213 deletions

File tree

flow-engine-framework/src/main/java/com/codingapi/flow/pojo/request/FlowProcessNodeRequest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class FlowProcessNodeRequest {
2626
*/
2727
private Map<String, Object> formData;
2828

29+
2930
public FlowProcessNodeRequest(long id, long operatorId, Map<String, Object> formData) {
3031
this.id = String.valueOf(id);
3132
this.operatorId = operatorId;
@@ -38,7 +39,4 @@ public FlowProcessNodeRequest(String id, long operatorId, Map<String, Object> fo
3839
this.formData = formData;
3940
}
4041

41-
public boolean isCreateWorkflow() {
42-
return !id.matches("^[0-9]+$");
43-
}
4442
}

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

Lines changed: 121 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package com.codingapi.flow.pojo.response;
22

3-
import com.codingapi.flow.node.IDisplayNode;
43
import com.codingapi.flow.node.IFlowNode;
54
import com.codingapi.flow.operator.IFlowOperator;
65
import com.codingapi.flow.record.FlowRecord;
6+
import com.codingapi.flow.strategy.node.MultiOperatorAuditStrategy;
7+
import com.codingapi.flow.strategy.node.OperatorSelectType;
78
import com.codingapi.flow.workflow.Workflow;
89
import lombok.Data;
910
import lombok.NoArgsConstructor;
1011

1112
import java.util.ArrayList;
1213
import java.util.List;
13-
import java.util.Objects;
1414

1515
/**
1616
* 流程审批节点
@@ -19,9 +19,10 @@
1919
@NoArgsConstructor
2020
public class ProcessNode {
2121

22-
public final static int STATE_HISTORY = -1;
23-
public final static int STATE_CURRENT = 0;
24-
public final static int STATE_NEXT = 1;
22+
/**
23+
* 记录id
24+
*/
25+
private String id;
2526

2627
/**
2728
* 节点名称
@@ -39,87 +40,147 @@ public class ProcessNode {
3940
/**
4041
* 是否呈现节点
4142
*/
42-
private boolean display;
43+
private MultiOperatorAuditStrategy.Type approveStrategy;
4344

4445
/**
45-
* 记录状态
46-
* -1 为历史状态
47-
* 0 为当前状态
48-
* 1 为后续状态
46+
* 审批状态
4947
*/
50-
private int state;
48+
private ApproveState approveState;
5149

50+
/**
51+
* 人员模式
52+
*/
53+
private OperatorStrategy operatorStrategy;
5254

5355
/**
5456
* 节点审批人
5557
*/
5658
private List<FlowOperatorBody> operators;
5759

58-
5960
public boolean isHistory() {
60-
return this.state == STATE_HISTORY;
61+
return this.approveState == ApproveState.PASS || this.approveState == ApproveState.ERROR;
6162
}
6263

63-
private ProcessNode(IFlowNode flowNode) {
64-
this.state = STATE_HISTORY;
65-
this.operators = new ArrayList<>();
66-
this.nodeType = flowNode.getType();
67-
this.nodeName = flowNode.getName();
68-
this.nodeId = flowNode.getId();
64+
public void addFlowRecordOperator(FlowRecord record) {
65+
if (this.operators == null) {
66+
this.operators = new ArrayList<>();
67+
}
68+
this.operators.add(new FlowOperatorBody(record));
6969
}
7070

71-
public static ProcessNode createEndNode(Workflow workflow) {
72-
IFlowNode endNode = workflow.getEndNode();
73-
return new ProcessNode(endNode);
71+
public enum OperatorStrategy {
72+
/**
73+
* 指定人员
74+
*/
75+
OPERATOR_LIST,
76+
/**
77+
* 发起人设定:流程创建时由发起人为该节点指定操作人
78+
*/
79+
INITIATOR_SELECT,
80+
81+
/**
82+
* 审批人设定:当前节点审批时,审批人为下游该节点指定操作人
83+
*/
84+
APPROVER_SELECT
7485
}
7586

76-
public ProcessNode(FlowRecord flowRecord, Workflow workflow) {
77-
this.nodeId = flowRecord.getNodeId();
78-
IFlowNode flowNode = workflow.getFlowNode(this.nodeId);
79-
this.nodeName = flowNode.getName();
80-
this.nodeType = flowNode.getType();
81-
this.operators = new ArrayList<>();
82-
this.display = true;
83-
this.state = STATE_HISTORY;
84-
this.operators.add(new FlowOperatorBody(flowRecord));
87+
public enum ApproveState {
88+
// 审批通过
89+
PASS,
90+
// 审批中
91+
PROCESSING,
92+
// 未审批
93+
PENDING,
94+
// 审批错误
95+
ERROR
8596
}
8697

98+
public void resetApproveState(FlowRecord flowRecord) {
99+
if (flowRecord.isDone()) {
100+
this.approveState = ApproveState.PASS;
101+
}
87102

88-
public ProcessNode(IFlowNode flowNode, List<IFlowOperator> operators) {
89-
this.nodeId = flowNode.getId();
90-
this.nodeName = flowNode.getName();
91-
this.nodeType = flowNode.getType();
92-
this.operators = operators.stream().map(FlowOperatorBody::new).toList();
93-
this.state = STATE_NEXT;
94-
this.display = flowNode instanceof IDisplayNode;
95-
}
103+
if (flowRecord.isError()) {
104+
this.approveState = ApproveState.ERROR;
105+
}
96106

107+
if (flowRecord.isHidden()) {
108+
this.approveState = ApproveState.PROCESSING;
109+
}
97110

98-
public boolean isFlowNode(IFlowNode currentNode) {
99-
return this.nodeId.equals(currentNode.getId());
111+
if (flowRecord.isTodo()) {
112+
this.approveState = ApproveState.PROCESSING;
113+
}
100114
}
101115

102-
public void setCurrentState() {
103-
this.state = STATE_CURRENT;
116+
private void resetApproveStrategy(IFlowNode flowNode) {
117+
MultiOperatorAuditStrategy.Type type = flowNode.strategyManager().getMultiOperatorAuditStrategyType();
118+
if (type != null) {
119+
this.setApproveStrategy(type);
120+
} else {
121+
this.setApproveStrategy(MultiOperatorAuditStrategy.Type.SEQUENCE);
122+
}
104123
}
105124

106125

107-
@Override
108-
public boolean equals(Object target) {
109-
if (target instanceof ProcessNode) {
110-
ProcessNode targetNode = (ProcessNode) target;
111-
return targetNode.getNodeId().equals(this.getNodeId());
112-
}
113-
return super.equals(target);
126+
public static ProcessNode createByRecord(FlowRecord flowRecord, Workflow workflow) {
127+
IFlowNode flowNode = workflow.getFlowNode(flowRecord.getNodeId());
128+
129+
ProcessNode processNode = new ProcessNode();
130+
processNode.setId(String.valueOf(flowRecord.getId()));
131+
processNode.setNodeId(flowNode.getId());
132+
processNode.setNodeName(flowNode.getName());
133+
processNode.setNodeType(flowNode.getType());
134+
processNode.resetApproveState(flowRecord);
135+
processNode.resetApproveStrategy(flowNode);
136+
processNode.setOperatorStrategy(OperatorStrategy.OPERATOR_LIST);
137+
138+
List<FlowOperatorBody> flowOperatorBodyList = new ArrayList<>();
139+
flowOperatorBodyList.add(new FlowOperatorBody(flowRecord));
140+
processNode.setOperators(flowOperatorBodyList);
141+
142+
return processNode;
114143
}
115144

116-
@Override
117-
public int hashCode() {
118-
return Objects.hash(nodeId);
145+
146+
public static ProcessNode createByEndNode(IFlowNode flowNode, boolean finish) {
147+
ProcessNode processNode = new ProcessNode();
148+
processNode.setId(flowNode.getId());
149+
processNode.setNodeId(flowNode.getId());
150+
processNode.setNodeName(flowNode.getName());
151+
processNode.setNodeType(flowNode.getType());
152+
processNode.setApproveState(finish ? ApproveState.PASS : ApproveState.PENDING);
153+
processNode.setApproveStrategy(MultiOperatorAuditStrategy.Type.SEQUENCE);
154+
processNode.setOperatorStrategy(OperatorStrategy.OPERATOR_LIST);
155+
return processNode;
119156
}
120157

121-
public void addOperator(FlowOperatorBody operator) {
122-
this.operators.add(operator);
158+
public static ProcessNode createByNode(IFlowNode flowNode, OperatorSelectType operatorSelectType, List<IFlowOperator> operators) {
159+
ProcessNode processNode = new ProcessNode();
160+
processNode.setId(flowNode.getId());
161+
processNode.setNodeId(flowNode.getId());
162+
processNode.setNodeName(flowNode.getName());
163+
processNode.setNodeType(flowNode.getType());
164+
processNode.setApproveState(ApproveState.PENDING);
165+
processNode.resetApproveStrategy(flowNode);
166+
167+
if (operators != null && !operators.isEmpty()) {
168+
List<FlowOperatorBody> flowOperatorBodyList = new ArrayList<>();
169+
for (IFlowOperator operator : operators) {
170+
flowOperatorBodyList.add(new FlowOperatorBody(operator));
171+
}
172+
processNode.setOperators(flowOperatorBodyList);
173+
processNode.setOperatorStrategy(OperatorStrategy.OPERATOR_LIST);
174+
} else {
175+
if (operatorSelectType == OperatorSelectType.APPROVER_SELECT) {
176+
processNode.setOperatorStrategy(OperatorStrategy.APPROVER_SELECT);
177+
}
178+
if (operatorSelectType == OperatorSelectType.INITIATOR_SELECT) {
179+
processNode.setOperatorStrategy(OperatorStrategy.INITIATOR_SELECT);
180+
}
181+
}
182+
183+
return processNode;
123184
}
124185

125186
/**
@@ -139,6 +200,11 @@ public static class FlowOperatorBody {
139200
*/
140201
private String signKey;
141202

203+
/**
204+
* 审批类型
205+
*/
206+
private String actionType;
207+
142208
/**
143209
* 审批动作
144210
*/

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,13 @@ public void verify() {
399399
}
400400
}
401401

402+
/**
403+
* 是否异常
404+
*/
405+
public boolean isError(){
406+
return StringUtils.hasText(this.errMessage);
407+
}
408+
402409
/**
403410
* 判断是否待办
404411
*

0 commit comments

Comments
 (0)