activiti6直接跳转到发起人
下面是我的图
把1和2完成待办直到3的时候 执行方法会跳转到1
多实例没有试过
自己记录笔记
Controller
@PostMapping("/jumpToStart")
@ApiOperation(value = "退回发起人", httpMethod = "POST", notes = "退回发起人")
@ResponseBody
public ResponseVo jumpToStart(String processInstanceId) {
jbpmProcessinstanceService.jumpToStart(processInstanceId);
return new ResponseVo<>();
}
service
public void jumpToStart(String processInstanceId) {
Task task = ProcessEngines.getDefaultProcessEngine().getTaskService()
.createTaskQuery().processInstanceId(processInstanceId).singleResult();
//String processInstanceId = task.getProcessInstanceId();
// 获取所有历史任务(按创建时间升序)
List<HistoricTaskInstance> hisTaskList = ProcessEngines.getDefaultProcessEngine().getHistoryService().createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId)
.orderByTaskCreateTime()
.asc()
.list();
if (CollectionUtils.isEmpty(hisTaskList) || hisTaskList.size() < 2) {
return;
}
// 第一个任务
HistoricTaskInstance startTask = hisTaskList.get(0);
// 当前任务
HistoricTaskInstance currentTask = hisTaskList.get(hisTaskList.size() - 1);
BpmnModel bpmnModel = ProcessEngines.getDefaultProcessEngine().getRepositoryService().getBpmnModel(task.getProcessDefinitionId());
// 获取第一个活动节点
FlowNode startFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(startTask.getTaskDefinitionKey());
// 获取当前活动节点
FlowNode currentFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currentTask.getTaskDefinitionKey());
// 临时保存当前活动的原始方向
List<SequenceFlow> originalSequenceFlowList = new ArrayList<>();
originalSequenceFlowList.addAll(currentFlowNode.getOutgoingFlows());
// 清理活动方向
currentFlowNode.getOutgoingFlows().clear();
// 建立新方向
SequenceFlow newSequenceFlow = new SequenceFlow();
newSequenceFlow.setId("newSequenceFlowId");
newSequenceFlow.setSourceFlowElement(currentFlowNode);
newSequenceFlow.setTargetFlowElement(startFlowNode);
List<SequenceFlow> newSequenceFlowList = new ArrayList<>();
newSequenceFlowList.add(newSequenceFlow);
// 当前节点指向新的方向
currentFlowNode.setOutgoingFlows(newSequenceFlowList);
// 完成当前任务
ProcessEngines.getDefaultProcessEngine().getTaskService().complete(task.getId());
// 重新查询当前任务
Task nextTask = ProcessEngines.getDefaultProcessEngine().getTaskService().createTaskQuery().processInstanceId(processInstanceId).singleResult();
if (null != nextTask) {
ProcessEngines.getDefaultProcessEngine().getTaskService().setAssignee(nextTask.getId(), startTask.getAssignee());
}
// 恢复原始方向
currentFlowNode.setOutgoingFlows(originalSequenceFlowList);
}