Skip to content

Commit 3df4892

Browse files
committed
fix bug
1 parent da8c11c commit 3df4892

File tree

8 files changed

+458
-450
lines changed

8 files changed

+458
-450
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.codingapi.springboot.flow.service;
2+
3+
import com.codingapi.springboot.flow.bind.BindDataSnapshot;
4+
import com.codingapi.springboot.flow.bind.IBindData;
5+
import com.codingapi.springboot.flow.domain.FlowNode;
6+
import com.codingapi.springboot.flow.record.FlowRecord;
7+
import com.codingapi.springboot.flow.repository.FlowBindDataRepository;
8+
9+
class FlowBindDataService {
10+
11+
private final FlowBindDataRepository flowBindDataRepository;
12+
private final IBindData bindData;
13+
private final FlowNode flowNode;
14+
15+
16+
public FlowBindDataService(FlowBindDataRepository flowBindDataRepository, FlowNode flowNode, IBindData bindData) {
17+
this.flowBindDataRepository = flowBindDataRepository;
18+
this.bindData = bindData;
19+
this.flowNode = flowNode;
20+
}
21+
22+
/**
23+
* 加载快照数据
24+
*/
25+
public BindDataSnapshot loadOrCreateSnapshot(FlowRecord flowRecord) {
26+
// 保存绑定数据
27+
if (flowNode.isEditable()) {
28+
BindDataSnapshot snapshot = new BindDataSnapshot(bindData);
29+
flowBindDataRepository.save(snapshot);
30+
return snapshot;
31+
} else {
32+
return flowBindDataRepository.getBindDataSnapshotById(flowRecord.getSnapshotId());
33+
}
34+
}
35+
}
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package com.codingapi.springboot.flow.service;
2+
3+
import com.codingapi.springboot.flow.domain.FlowNode;
4+
import com.codingapi.springboot.flow.domain.FlowWork;
5+
import com.codingapi.springboot.flow.domain.Opinion;
6+
import com.codingapi.springboot.flow.em.FlowSourceDirection;
7+
import com.codingapi.springboot.flow.record.FlowRecord;
8+
import lombok.Getter;
9+
10+
import java.util.List;
11+
12+
class FlowDirectionService {
13+
14+
private final FlowWork flowWork;
15+
private final FlowNode flowNode;
16+
private final Opinion opinion;
17+
18+
@Getter
19+
private FlowSourceDirection flowSourceDirection;
20+
21+
22+
private List<FlowRecord> historyRecords;
23+
24+
public FlowDirectionService(FlowNode flowNode,FlowWork flowWork, Opinion opinion) {
25+
this.flowNode = flowNode;
26+
this.opinion = opinion;
27+
this.flowWork = flowWork;
28+
}
29+
30+
31+
public void bindHistoryRecords(List<FlowRecord> historyRecords) {
32+
this.historyRecords = historyRecords;
33+
}
34+
35+
36+
37+
/**
38+
* 解析当前的审批方向
39+
*/
40+
public void loadFlowSourceDirection() {
41+
if (opinion.isSuccess()) {
42+
flowSourceDirection = FlowSourceDirection.PASS;
43+
}
44+
if (opinion.isReject()) {
45+
flowSourceDirection = FlowSourceDirection.REJECT;
46+
}
47+
}
48+
49+
50+
51+
/**
52+
* 重新加载审批方向
53+
* 根据会签结果判断是否需要重新设置审批方向
54+
*/
55+
public FlowSourceDirection reloadFlowSourceDirection() {
56+
if (flowNode.isSign()) {
57+
boolean allPass = historyRecords.stream().filter(item -> !item.isTransfer()).allMatch(FlowRecord::isPass);
58+
if (!allPass) {
59+
flowSourceDirection = FlowSourceDirection.REJECT;
60+
}
61+
}
62+
return flowSourceDirection;
63+
}
64+
65+
66+
/**
67+
* 校验流程的审批方向
68+
*/
69+
public void verifyFlowSourceDirection() {
70+
if (flowSourceDirection == null) {
71+
throw new IllegalArgumentException("flow source direction is null");
72+
}
73+
if (flowNode.isStartNode() && flowSourceDirection == FlowSourceDirection.REJECT) {
74+
throw new IllegalArgumentException("flow node is start node");
75+
}
76+
}
77+
78+
/**
79+
* 判断当前流程节点是否已经完成,是否可以继续流转
80+
*/
81+
public boolean hasCurrentFlowNodeIsDone() {
82+
// 会签处理流程
83+
if (flowNode.isSign()) {
84+
// 会签下所有人尚未提交时,不执行下一节点
85+
boolean allDone = historyRecords.stream().filter(item -> !item.isTransfer()).allMatch(FlowRecord::isDone);
86+
if (!allDone) {
87+
// 流程尚未审批结束直接退出
88+
return true;
89+
}
90+
}
91+
return false;
92+
}
93+
94+
95+
96+
97+
/**
98+
* 检测当前流程是否已经完成
99+
* 即流程已经进行到了最终节点且审批意见为同意
100+
*/
101+
public boolean hasCurrentFlowIsFinish() {
102+
if (flowSourceDirection == FlowSourceDirection.PASS && flowNode.isOverNode()) {
103+
return true;
104+
}
105+
return false;
106+
}
107+
108+
109+
public boolean isDefaultBackRecord() {
110+
return flowSourceDirection == FlowSourceDirection.REJECT && !flowWork.hasBackRelation();
111+
}
112+
113+
public boolean isPassBackRecord() {
114+
return flowSourceDirection == FlowSourceDirection.PASS;
115+
}
116+
117+
public boolean isCustomBackRecord() {
118+
return flowSourceDirection == FlowSourceDirection.REJECT && flowWork.hasBackRelation();
119+
}
120+
121+
}

0 commit comments

Comments
 (0)