/
LeaveServiceImpl.java
169 lines (141 loc) · 7.38 KB
/
LeaveServiceImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
package com.didiglobal.turbo.demo.service;
import com.didiglobal.turbo.demo.util.Constant;
import com.didiglobal.turbo.demo.util.EntityBuilder;
import com.didiglobal.turbo.engine.engine.ProcessEngine;
import com.didiglobal.turbo.engine.model.InstanceData;
import com.didiglobal.turbo.engine.param.CommitTaskParam;
import com.didiglobal.turbo.engine.param.CreateFlowParam;
import com.didiglobal.turbo.engine.param.DeployFlowParam;
import com.didiglobal.turbo.engine.param.RollbackTaskParam;
import com.didiglobal.turbo.engine.param.StartProcessParam;
import com.didiglobal.turbo.engine.param.UpdateFlowParam;
import com.didiglobal.turbo.engine.result.CommitTaskResult;
import com.didiglobal.turbo.engine.result.CreateFlowResult;
import com.didiglobal.turbo.engine.result.DeployFlowResult;
import com.didiglobal.turbo.engine.result.RollbackTaskResult;
import com.didiglobal.turbo.engine.result.StartProcessResult;
import com.didiglobal.turbo.engine.result.UpdateFlowResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author rick
* @Date 2022/4/6 14:08
* 先来了解一下常见的请假过程:
* 小T是桔厂的员工,本周三有事想请假,提交了一个请假流程,根据公司规定,3天及以内的假期需要直属领导审批,超过3天需要间接领导审批。
* <3
* ---> 用户节点(直属领导审批)--->
* 开始节点 ---> 用户节点(输入请假天数)---> 排他网关 结束节点
* ---> 用户节点(间接领导审批)--->
* >=3
*/
@Service
public class LeaveServiceImpl {
private static final Logger LOGGER = LoggerFactory.getLogger(LeaveServiceImpl.class);
@Resource
private ProcessEngine processEngine;
private CreateFlowParam createFlowParam;
private CreateFlowResult createFlowResult;
private UpdateFlowResult updateFlowResult;
private DeployFlowResult deployFlowResult;
public void run() {
LOGGER.info("LeaveSOP Demo run:");
LOGGER.info("LeaveSOP definition:");
createFlow();
updateFlow();
deployFlow();
LOGGER.info("LeaveSOP runtime:");
startProcessToEnd();
}
private void createFlow() {
createFlowParam = new CreateFlowParam(Constant.tenant, Constant.caller);
createFlowParam.setFlowKey("person_time");
createFlowParam.setFlowName("请假SOP");
createFlowParam.setRemark("demo");
createFlowParam.setOperator(Constant.operator);
createFlowResult = processEngine.createFlow(createFlowParam);
LOGGER.info("createFlow.||createFlowResult={}", createFlowResult);
}
private void updateFlow() {
UpdateFlowParam updateFlowParam = new UpdateFlowParam(Constant.tenant, Constant.caller);
updateFlowParam.setFlowModel(EntityBuilder.buildLeaveFlowModelStr());
updateFlowParam.setFlowModuleId(createFlowResult.getFlowModuleId());
updateFlowResult = processEngine.updateFlow(updateFlowParam);
LOGGER.info("updateFlow.||updateFlowResult={}", updateFlowResult);
}
private void deployFlow() {
DeployFlowParam param = new DeployFlowParam(Constant.tenant, Constant.caller);
param.setFlowModuleId(createFlowResult.getFlowModuleId());
deployFlowResult = processEngine.deployFlow(param);
LOGGER.info("deployFlow.||deployFlowResult={}", deployFlowResult);
}
private void startProcessToEnd() {
StartProcessResult startProcess = startProcess();
CommitTaskResult commitTaskResult = inputTime(startProcess);
RollbackTaskResult rollbackTaskResult = rollbackToInputTime(commitTaskResult);
CommitTaskResult result = inputTimeAgain(rollbackTaskResult);
commitCompleteProcess(result);
}
// 用户拉起请假sop
private StartProcessResult startProcess() {
StartProcessParam startProcessParam = new StartProcessParam();
startProcessParam.setFlowDeployId(deployFlowResult.getFlowDeployId());
List<InstanceData> variables = new ArrayList<>();
variables.add(new InstanceData("user_name", "请假人名字"));
startProcessParam.setVariables(variables);
StartProcessResult startProcessResult = processEngine.startProcess(startProcessParam);
LOGGER.info("startProcess.||startProcessResult={}", startProcessResult);
return startProcessResult;
}
// 输入请假天数
private CommitTaskResult inputTime(StartProcessResult startProcessResult) {
CommitTaskParam commitTaskParam = new CommitTaskParam();
commitTaskParam.setFlowInstanceId(startProcessResult.getFlowInstanceId());
commitTaskParam.setTaskInstanceId(startProcessResult.getActiveTaskInstance().getNodeInstanceId());
List<InstanceData> variables = new ArrayList<>();
variables.add(new InstanceData("user_name", "请假人名字"));
variables.add(new InstanceData("n", 1));
commitTaskParam.setVariables(variables);
CommitTaskResult commitTaskResult = processEngine.commitTask(commitTaskParam);
LOGGER.info("inputTime.||commitTaskResult={}", commitTaskResult);
return commitTaskResult;
}
// 请假撤回
private RollbackTaskResult rollbackToInputTime(CommitTaskResult commitTaskResult) {
RollbackTaskParam rollbackTaskParam = new RollbackTaskParam();
rollbackTaskParam.setFlowInstanceId(commitTaskResult.getFlowInstanceId());
rollbackTaskParam.setTaskInstanceId(commitTaskResult.getActiveTaskInstance().getNodeInstanceId());
RollbackTaskResult rollbackTaskResult = processEngine.rollbackTask(rollbackTaskParam);
LOGGER.info("rollbackToInputTime.||rollbackTaskResult={}", rollbackTaskResult);
return rollbackTaskResult;
}
// 填写请假天数
private CommitTaskResult inputTimeAgain(RollbackTaskResult rollbackTaskResult) {
CommitTaskParam commitTaskParam = new CommitTaskParam();
commitTaskParam.setFlowInstanceId(rollbackTaskResult.getFlowInstanceId());
commitTaskParam.setTaskInstanceId(rollbackTaskResult.getActiveTaskInstance().getNodeInstanceId());
List<InstanceData> variables = new ArrayList<>();
variables.add(new InstanceData("user_name", "请假人名字"));
variables.add(new InstanceData("n", 2));
commitTaskParam.setVariables(variables);
CommitTaskResult commitTaskResult = processEngine.commitTask(commitTaskParam);
LOGGER.info("inputTimeAgain.||commitTaskResult={}", commitTaskResult);
return commitTaskResult;
}
// BadCase:已完成流程,继续执行流程会失败。
private CommitTaskResult commitCompleteProcess(CommitTaskResult commitTaskResult) {
CommitTaskParam commitTaskParam = new CommitTaskParam();
commitTaskParam.setFlowInstanceId(commitTaskResult.getFlowInstanceId());
commitTaskParam.setTaskInstanceId(commitTaskResult.getActiveTaskInstance().getNodeInstanceId());
List<InstanceData> variables = new ArrayList<>();
variables.add(new InstanceData("user_name", "请假人名字"));
variables.add(new InstanceData("n", 4));
commitTaskParam.setVariables(variables);
CommitTaskResult result = processEngine.commitTask(commitTaskParam);
LOGGER.info("inputTimeBadCase.||CommitTaskResult={}", result);
return result;
}
}