Appearance
Activiti6.0 无流程线退回(任意流程节点跳转)
跳转 avitivi 任务流程节点
java
//跳转方法
public void jumpTask(String taskId, String nodeKey) {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ManagementService managementService = processEngine.getManagementService();
//当前任务
Task currentTask = taskService.createTaskQuery().taskId(taskId).singleResult();
//获取流程定义
Process process = repositoryService.getBpmnModel(currentTask.getProcessDefinitionId()).getMainProcess();
//获取目标节点定义
FlowNode targetNode = (FlowNode) process.getFlowElement(nodeKey);
//删除当前运行任务
String executionEntityId = managementService.executeCommand(new DeleteTaskCmd(currentTask.getId()));
//流程执行到来源节点
managementService.executeCommand(new SetFLowNodeAndGoCmd(targetNode, executionEntityId));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
获取上个任务的执行人
java
// 获取上个任务的执行人,若传 nodeKey 则查询最近一次的该节点的任务执行人
private String getLastTaskAssignee(String instanceId, String nodeKey){
String retString = null;
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(instanceId).finished()
.orderByHistoricTaskInstanceEndTime().desc()
.list();
if ( list.size() > 0 && StringUtils.isEmpty(nodeKey) ){
retString = list.get(0).getAssignee();
}
if ( StringUtils.isNotEmpty(nodeKey) ){
for (HistoricTaskInstance taskInfo : list) {
if (taskInfo.getTaskDefinitionKey().equals(nodeKey)) {
retString = taskInfo.getAssignee();
break;
}
}
}
return retString;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
举个🌰
java
@Transactional
@Override
public boolean back(Map<String, String> map) {
mapHasKeys(map, new String[]{ "taskId", "lcslid", "userId", "sjsbid", "shyj" });
String taskId = map.get("taskId");
String lcslid = map.get("lcslid");
String userId = map.get("userId");
String sjsbid = map.get("sjsbid");
String shyj = map.get("shyj");
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (!task.getTaskDefinitionKey().equals("jd_qzhzxdf")) {
throw new CustomException("errorInfo_1");
}
String nextUserId = this.getLastTaskAssignee(lcslid, "jd_xznbhs");
SysUser sysUser = sysUserService.selectUserById(Long.valueOf(nextUserId));
if ( sysUser == null ){
throw new CustomException("errorInfo_2");
}
// 跳转流程节点
this.jumpTask(taskId, "jd_xznbhs");
// 设置任务执行人
Task nextTask = taskService.createTaskQuery().processInstanceId(lcslid).singleResult();
taskService.setAssignee(nextTask.getId(), String.valueOf(sysUser.getUserId()));
// 更新当前任务流程记录
this.updNowTaskHis( "退回XXXX", userId, taskId, shyj, lcslid);
// 添加新的任务流程记录
this.addNextTaskHis(lcslid, Long.valueOf(sjsbid));
// 更新主业务表
this.updSjsb(lcslid, Long.valueOf(sjsbid), "06");
return true;
}
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
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