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
package io.hmit.modules.activiti.service;
import io.hmit.common.constant.Constant;
import io.hmit.common.exception.ErrorCode;
import io.hmit.common.exception.HmitException;
import io.hmit.common.page.PageData;
import io.hmit.modules.activiti.dto.ProcessInstanceDTO;
import io.hmit.modules.activiti.dto.ProcessStartDTO;
import io.hmit.modules.security.user.SecurityUser;
import org.activiti.engine.IdentityService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceQuery;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 运行中的流程
*
* @author zsh 408538940@qq.com
*/
@Service
public class ActRunningService {
@Autowired
private RuntimeService runtimeService;
@Autowired
private IdentityService identityService;
@Autowired
protected RepositoryService repositoryService;
/**
* 流程定义列表
*/
public PageData<Map<String, Object>> page(Map<String, Object> params) {
String id = (String) params.get("id");
String definitionKey = (String) params.get("definitionKey");
//分页参数
int curPage = 1;
int limit = 10;
if (params.get(Constant.PAGE) != null) {
curPage = Integer.parseInt((String) params.get(Constant.PAGE));
}
if (params.get(Constant.LIMIT) != null) {
limit = Integer.parseInt((String) params.get(Constant.LIMIT));
}
ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
if (StringUtils.isNotBlank(id)) {
processInstanceQuery.processInstanceId(id);
}
if (StringUtils.isNotBlank(definitionKey)) {
processInstanceQuery.processDefinitionKey(definitionKey);
}
List<ProcessInstance> processInstanceList = processInstanceQuery.listPage((curPage - 1) * limit, limit);
List<Map<String, Object>> objectList = new ArrayList<>();
for (ProcessInstance processInstance : processInstanceList) {
objectList.add(processInstanceConvert(processInstance));
}
return new PageData<>(objectList, (int) processInstanceQuery.count());
}
/**
* 流程实例信息
*/
private Map<String, Object> processInstanceConvert(ProcessInstance processInstance) {
Map<String, Object> map = new HashMap<>(9);
map.put("id", processInstance.getId());
map.put("processInstanceId", processInstance.getProcessInstanceId());
map.put("processDefinitionId", processInstance.getProcessDefinitionId());
map.put("processDefinitionName", processInstance.getProcessDefinitionName());
map.put("processDefinitionKey", processInstance.getProcessDefinitionKey());
map.put("businessKey", processInstance.getBusinessKey());
map.put("activityId", processInstance.getActivityId());
ProcessDefinitionEntity definition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processInstance.getProcessDefinitionId());
ActivityImpl activity = definition.findActivity(processInstance.getActivityId());
map.put("activityName", activity.getProperty("name"));
map.put("suspended", processInstance.isSuspended());
return map;
}
/**
* 删除实例
*
* @param id 实例ID
*/
public void delete(String id) {
runtimeService.deleteProcessInstance(id, null);
}
/**
* 启动流程实例
*
* @param key 流程定义标识key
*/
public ProcessInstanceDTO startProcess(String key) {
String userId = SecurityUser.getUserId().toString();
identityService.setAuthenticatedUserId(userId);
ProcessDefinitionEntity definition = (ProcessDefinitionEntity) repositoryService.createProcessDefinitionQuery().processDefinitionKey(key).latestVersion().singleResult();
if (definition.isSuspended()) {
throw new HmitException(ErrorCode.PROCESS_START_ERROR);
}
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key);
ProcessInstanceDTO dto = new ProcessInstanceDTO();
this.convertInstance(processInstance, dto);
return dto;
}
private void convertInstance(ProcessInstance processInstance, ProcessInstanceDTO dto) {
dto.setBusinessKey(processInstance.getBusinessKey());
dto.setDeploymentId(processInstance.getDeploymentId());
dto.setDescription(processInstance.getDescription());
dto.setName(processInstance.getName());
dto.setEnded(processInstance.isEnded());
dto.setSuspended(processInstance.isSuspended());
dto.setProcessDefinitionId(processInstance.getProcessDefinitionId());
dto.setProcessDefinitionKey(processInstance.getProcessDefinitionKey());
dto.setProcessDefinitionName(processInstance.getProcessDefinitionName());
dto.setProcessDefinitionVersion(processInstance.getProcessDefinitionVersion());
dto.setProcessInstanceId(processInstance.getProcessInstanceId());
}
/**
* 根据流程Key,启动实例
*
* @param processStartDTO
* @return
*/
public ProcessInstanceDTO startOfBusinessKey(ProcessStartDTO processStartDTO) {
String userId = SecurityUser.getUserId().toString();
identityService.setAuthenticatedUserId(userId);
ProcessDefinitionEntity definition = (ProcessDefinitionEntity) repositoryService.createProcessDefinitionQuery().processDefinitionKey(processStartDTO.getProcessDefinitionKey()).latestVersion().singleResult();
if (definition.isSuspended()) {
throw new HmitException(ErrorCode.PROCESS_START_ERROR);
}
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processStartDTO.getProcessDefinitionKey(), processStartDTO.getBusinessKey(), processStartDTO.getVariables());
ProcessInstanceDTO dto = new ProcessInstanceDTO();
this.convertInstance(processInstance, dto);
return dto;
}
}