# 功能描述

实现工作流服务。

重要提示

该组件待完善。

# Service接口

提示

需在application.yml中设置sei.cloud.workflow.enabled为true才能开启workflow服务

# 第一步 引入包

<dependency>
    <groupId>sei-cloud</groupId>
    <artifactId>workflow</artifactId>
</dependency>
1
2
3
4

# 第二步 引入接口

@Resource
    WorkflowService workflowService;
1
2

# 第三步 使用接口

public interface WorkFlowService {

    /**
     * 获得工作流引擎
     * @return
     */
    ProcessEngine getProcessEngine();

    /**
     * 查询该模块的工作流是否已经部署
     * @param moduleId: 模块id
     * @return boolean
     * @throws SQLException 异常
     */
    boolean isDeployment(@NonNull String moduleId) throws SQLException;

    /**
     * 部署流程实例
     * @param id: 流程定义的id
     * @return boolean
     * @throws SQLException 异常
     */
    boolean deployment(@NonNull String id) throws SQLException;

    /**
     * 撤销部署
     * @param deploymentId
     * @return ResMsg
     * @throws SQLException 异常
     */
    ResMsg unDeployment(@NonNull String deploymentId) throws SQLException;

    /**
     * 获得所有已经部署的流程
     * @param firstResult: 开始
     * @param maxResults: 最大
     * @return ResultVo
     */
    ResultVo<Deployment> getDeploymentList(String name, int firstResult, int maxResults);

    /**
     * 根据模块编号启动流程实例,按照流程最新版本启动,返回流程实例id
     * @param moduleId: 模块id
     * @param tableName: 表名
     * @param variables: 附加数据
     * @return String | null
     * @throws SQLException 异常
     */
    String startProcessByModule(String moduleId, String tableName, String keyFieldName, Object keyFieldValue, Map<String, Object> variables) throws SQLException;

    /**
     * 获得流程实例
     * @param processInstanceId: 流程实例id
     * @return ProcessInstance
     */
    ProcessInstance getProcessInstance(String processInstanceId);

    /**
     * 终止流程(删除流程实例)
     * @param processInstanceId: 流程实例id
     * @param deleteReason: 终止(删除)原因
     */
    void stopProcessInstance(@NonNull String processInstanceId, @Nullable String deleteReason);

    /**
     * 暂停工作流(挂起)
     * @param processDefinitionId: 流程实例id
     */
    void suspendProcessDefinition(String processDefinitionId);

    /**
     * 激活暂停(挂起)的工作流
     * @param processDefinitionId: 流程实例id
     */
    void activateProcessDefinition(String processDefinitionId);

    /**
     * 获得流程实例列表
     * @param parm: 参数
     * @return List
     */
    List<Map<String, Object>> getProcessList(JSONObject parm);

    /**
     * 根据模块编号或者实例编号获得流程图及执行历史(注意模块编号或者实例编号至少有一个)
     * @param mid: 模块编号
     * @param processInstanceId: 实例编号
     * @return Map
     * @throws IOException 异常
     * @throws SQLException 异常
     */
    Map<String, Object> getProcessDiagram(@Nullable String mid, @Nullable String processInstanceId) throws IOException, SQLException;

    /**
     * 获得高亮节点和线
     * @param processInstanceId: 流程实例id
     * @return Map
     */
    Map<String, List> getProcessHighlightNode(@NonNull String processInstanceId);

    /**
     * 获得流程历史记录
     * @param processInstanceId: 流程实例id
     * @return List
     */
    List<HistoricTaskInstance> getProcessHistories(@NonNull String processInstanceId);

    /**
     * 待办任务列表(不包括已经认领但未完成的任务)
     * @param userId: 用户id
     * @return List
     */
    List<Task> getToDoList(@NonNull String userId);

    /**
     * 在办任务列表(已经认领但未完成的任务)
     * @param userId: 用户id
     * @return List
     */
    List<HistoricTaskInstance> getDoList(@NonNull String userId);

    /**
     * 查询用户处理过的历史任务(包括所有流程)
     * @param userId: 用户id
     * @return List
     */
    List<HistoricTaskInstance> getHistoryTasksByUser(@NonNull String userId);

    /**
     * 查询某个流程下任务处理记录
     * @param processInstanceId: 流程实例id
     * @return List
     */
    List<Map<String, Object>> getHistoryTasksByInstanceId(@NonNull String processInstanceId);

    /**
     * 流程是否完成
     * @param processInstanceId: 流程实例id
     * @return boolean
     */
    boolean isFinished(@NonNull String processInstanceId);

    /**
     * 查询需要认领的任务(所有流程)
     * @param userId: 用户id
     * @return List
     */
    List<Task> getTasks(@NonNull String userId);

    /**
     * 查询某个流程当前任务
     * @param processInstanceId: 流程实例id
     * @return List
     */
    List<Task> getTasksByProcessId(@NonNull String processInstanceId);

    /**
     * 获得指定流程下指定用户的任务
     * @param processInstanceId: 流程实例id
     * @param userId: 用户id
     * @return Task
     */
    Task getTask(@NonNull String processInstanceId, @NonNull String userId);

    /**
     * 根据任务Id获得任务
     * @param taskId: 任务id
     * @return Task
     */
    Task getTask(@NonNull String taskId);

    /**
     * 认领任务
     * @param taskId: 任务id
     * @param userId: 用户id
     */
    void claimTask(@NonNull String taskId, @NonNull String userId);

    /**
     * 取消认领任务
     * @param taskId: 任务id
     * @param userId: 用户id
     */
    void cancelClaimTask(@NonNull String taskId, @NonNull String userId);

    /**
     * 判断用户是否认领过该任务
     * @param taskId: 任务id
     * @param userId: 用户id
     * @return boolean
     */
    boolean isClaimTask(@NonNull String taskId, @NonNull String userId);

    /**
     * 判断最后一个认领该任务的是否是该用户
     * @param taskId: 任务id
     * @param userId: 用户id
     * @return boolean
     */
    boolean isLastTaskUser(@NonNull String taskId, @NonNull String userId);

    /**
     * 完成某个任务
     * @param taskId: 任务id
     * @param variables: 附加数据
     */
    void complete(@NonNull String taskId, @Nullable Map<String, Object> variables);

    /**
     * 通过业务表单完成一个任务
     * @param taskId: 任务id
     * @param variables: 附加数据
     */
    void completeByForm(@NonNull String taskId, @Nullable Map<String, Object> variables);

    /**
     * 分配任务给人员(任务改派)
     * @param taskId: 任务id
     * @param uid: 用户id
     */
    void assignTask(@NonNull String taskId, @NonNull String uid);

    /**
     * 流程驳回(返回上一个节点)
     * @param taskId: 当前任务id
     * @param variables: 变量
     */
    void rejectTask(@NonNull String taskId, @Nullable Map<String, Object> variables);

    /**
     * 获得某个任务的所有附加数据
     * @param taskId: 任务id
     * @return Map
     */
    Map<String, Object> getVariables(String taskId);

    /**
     * 获得某个任务的指定变量名数据
     * @param taskId: 任务id
     * @param variableName: 变量名
     * @return Object
     */
    Object getVariable(String taskId, String variableName);

    /**
     * 校验Bpmn文件
     * @param xml: xml文件内容
     * @return boolean
     */
    boolean validateBpmn(@NonNull String xml);

    /**
     * 跳转到指定任务节点
     * @param targetTaskId: 目标任务id
     */
    void jumpToTask(String targetTaskId);

    /**
     * 跳转到指定任务节点
     * @param processInstanceId: 流程实例id
     * @param targetTaskId: 目标任务id
     */
    void jumpToTask(String processInstanceId, String targetTaskId);
}
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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264

# Controller接口

@ConditionalOnProperty(name = "sei.cloud.workflow.enabled", havingValue = "true")
@Api("工作流服务")
@RequestMapping(value = "/api/workflow")
public class WorkFlowController {

    @ApiOperation(value = "部署流程")
    @RequestMapping(value="/deployment", method = RequestMethod.POST,produces = { MediaType.APPLICATION_JSON_VALUE })
    public @ResponseBody ResMsg deployment(@RequestBody JSONObject parm) throws SQLException;

    @ApiOperation(value = "撤销部署流程")
    @RequestMapping(value="/deleteDeployment", method = RequestMethod.POST,produces = { MediaType.APPLICATION_JSON_VALUE })
    public @ResponseBody ResMsg deleteDeployment(@RequestBody JSONObject parm) throws SQLException;

    @ApiOperation(value = "查询所有部署流程")
    @RequestMapping(value="/getDeploymentList", method = RequestMethod.POST,produces = { MediaType.APPLICATION_JSON_VALUE })
    public @ResponseBody ResMsg getDeploymentList(@RequestBody JSONObject parm);

    @ApiOperation(value = "查询某个流程下的历史记录")
    @RequestMapping(value="/getHistoryTasksByInstanceId", method = RequestMethod.POST,produces = { MediaType.APPLICATION_JSON_VALUE })
    public @ResponseBody ResMsg getHistoryTasksByInstanceId(@RequestBody JSONObject parm);

    @ApiOperation(value = "查看工作流",response = ResMsg.class)
    @RequestMapping(value = "/getProcessDiagram",method = {RequestMethod.POST},produces = { MediaType.APPLICATION_JSON_VALUE })
    public @ResponseBody ResMsg getProcessDiagram(@RequestBody JSONObject parm) throws IOException, SQLException;
    @ApiOperation(value = "待办任务列表")

    @RequestMapping(value="/toDoList", method = RequestMethod.POST,produces = { MediaType.APPLICATION_JSON_VALUE })
    public @ResponseBody ResMsg toDoList(@RequestBody JSONObject parm);
    @ApiOperation(value = "获取实例流程任务id")

    @RequestMapping(value="/getTask", method = RequestMethod.POST,produces = { MediaType.APPLICATION_JSON_VALUE })
    public @ResponseBody ResMsg getTask(@RequestBody JSONObject parm);
}

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