我理解的是 :一个流程 当到了一个节点 是张三审批 张三有事顾不上 张三直接委派给李四。 然后这个待办任务就去到李四用户上 当李四给审批通过后 这个待办任务会变成已办任务 这个已办任务会跑到张三的已办表中 所以说李四待办已办都不会有记录
下面所有代码 根据我自己的需求
DelegateTaskVO
@Data
public class DelegateTaskVO {
/**
* activiti代办节点号
**/
private String taskId;
/**
* 委托人id
**/
private String userId;
/**
* 被委托人id
**/
private String consignee;
/**
* 委托说明
**/
private String description;
}
Controller
@PostMapping("/delegateTask")
@ApiOperation(value = "任务委派", httpMethod = "POST", notes = "任务委派")
public ResponseVo delegateTask(@RequestBody DelegateTaskVO delegateTaskVO){
jbpmProcessinstanceService.delegateTask(delegateTaskVO);
return ResponseVo.ok();
}
Service
@Transactional(rollbackFor = Exception.class)
public void delegateTask(DelegateTaskVO delegateTaskVO) {
activitiInstanceService.claimTask(BaseContextHandler.getUserId(), delegateTaskVO.getTaskId());
//获取用户id
String userId = delegateTaskVO.getUserId();
JbpmUserInfo jbpmUserInfo = null;
if (null != userId && 0 < userId.trim().length()) {
// 先查userId
jbpmUserInfo = jbpmUserService.getUserByUserId(userId.trim());
}
//查找task任务
Task task = activitiInstanceService.getTaskByTaskId(delegateTaskVO.getTaskId());
QueryWrapper<JbpmProcessinstance> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("process_instance_id", task.getProcessInstanceId());
//查找实例
JbpmProcessinstance jbpmProcessinstance = this.getOne(queryWrapper, true);
if (null == task) {
throw new JbpmProcessinstanceException(
JbpmProcessinstanceErrorCode.JbpmProcessinstance_NOT_EXIST_ERROR.getCode());
}
// 保存审批记录
JbpmWfApprove jbpmWfApprove = new JbpmWfApprove();
jbpmWfApprove.setApproveDate(new Date());
jbpmWfApprove.setApproverId(userId);
if (null != jbpmUserInfo) {
jbpmWfApprove.setApproverLoginname(jbpmUserInfo.getLoginName());
jbpmWfApprove.setApproverName(jbpmUserInfo.getName());
}
jbpmWfApprove.setInstanceId(jbpmProcessinstance.getId());
jbpmWfApprove.setActivitiInstanceId(jbpmProcessinstance.getProcessInstanceId());
jbpmWfApprove.setTaskId(delegateTaskVO.getTaskId());
jbpmWfApprove.setNodeId(task.getTaskDefinitionKey());
jbpmWfApprove.setResult("委派");
jbpmWfApprove.setOption(delegateTaskVO.getDescription());
jbpmWfApproveService.save(jbpmWfApprove);
taskService.delegateTask(delegateTaskVO.getTaskId(), delegateTaskVO.getConsignee());
}