| | |
| | | import org.flowable.identitylink.api.IdentityLinkInfo; |
| | | import org.flowable.identitylink.api.IdentityLinkType; |
| | | import org.flowable.identitylink.api.history.HistoricIdentityLink; |
| | | import org.flowable.identitylink.service.impl.persistence.entity.IdentityLinkEntityImpl; |
| | | import org.flowable.task.api.Task; |
| | | import org.flowable.task.api.TaskQuery; |
| | | import org.flowable.task.api.history.HistoricTaskInstance; |
| | |
| | | |
| | | @Override |
| | | public Result taskDelegation(TaskDelegationForm form) { |
| | | Task task = taskService.createTaskQuery().taskId(form.getTaskId()).includeIdentityLinks().singleResult(); |
| | | Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult(); |
| | | if (Objects.isNull(task)) { |
| | | throw new RuntimeException("未在运行任务中找到该任务,无法执行转办操作"); |
| | | } |
| | | List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId()); |
| | | // 转办之前的处理人 |
| | | List<String> beforeHandlerIds = new ArrayList<>(2); |
| | | // 转办之前的处理人类型 |
| | | HandlerTypeEnum beforeHandlerType = null; |
| | | // 需要先移除之前的处理人 |
| | | for (IdentityLinkInfo identityLink : task.getIdentityLinks()) { |
| | | for (IdentityLinkInfo identityLink : identityLinksForTask) { |
| | | if (StringUtils.isNotBlank(identityLink.getUserId())) { |
| | | beforeHandlerIds.add(identityLink.getUserId()); |
| | | beforeHandlerType = HandlerTypeEnum.USER; |
| | | if (IdentityLinkType.ASSIGNEE.equals(identityLink.getType())) { |
| | | taskService.deleteUserIdentityLink(task.getId(), identityLink.getUserId(), IdentityLinkType.ASSIGNEE); |
| | | } else { |
| | | taskService.deleteCandidateUser(task.getId(), identityLink.getUserId()); |
| | | } |
| | | } else if (StringUtils.isNotBlank(identityLink.getGroupId())) { |
| | | beforeHandlerIds.add(identityLink.getGroupId()); |
| | | if (identityLink.getGroupId().contains("dept")) { |
| | |
| | | List<CustomerTaskVO> vos = new ArrayList<>(); |
| | | for (Task task : taskList) { |
| | | CustomerTaskVO taskVO = new CustomerTaskVO(); |
| | | // 当前流程信息 |
| | | taskVO.setTaskId(task.getId()); |
| | | taskVO.setCreateTime(task.getCreateTime()); |
| | | taskVO.setProcessDefId(task.getProcessDefinitionId()); |
| | | taskVO.setExecutionId(task.getExecutionId()); |
| | | taskVO.setTaskName(task.getName()); |
| | | taskVO.setTaskStatus(TaskStatusEnum.TODO); |
| | | // 流程定义信息 |
| | | ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() |
| | | .processDefinitionId(task.getProcessDefinitionId()) |
| | | .singleResult(); |
| | | taskVO.setDeployId(pd.getDeploymentId()); |
| | | taskVO.setProcessName(pd.getName()); |
| | | taskVO.setProcessInsId(task.getProcessInstanceId()); |
| | | taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey()); |
| | | |
| | | // 流程发起人信息 |
| | | this.setPromoterInfo(taskVO); |
| | | |
| | | // 一个任务可能有多个候选人/组,所以需要使用list |
| | | List<Long> handlerIds = new ArrayList<>(2); |
| | | List<String> handlerNames = new ArrayList<>(2); |
| | | List<Long> handlerUnitIds = new ArrayList<>(2); |
| | | List<String> handlerUnitNames = new ArrayList<>(2); |
| | | |
| | | // 流程处理人信息 |
| | | List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId()); |
| | | for (IdentityLink identityLink : identityLinksForTask) { |
| | | // 绑定的是用户,查出用户姓名、部门 |
| | | if (StringUtils.isNotBlank(identityLink.getUserId())) { |
| | | taskVO.setHandlerType(HandlerTypeEnum.USER); |
| | | SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); |
| | | if (Objects.nonNull(sysUser)) { |
| | | handlerIds.add(sysUser.getUserId()); |
| | | handlerNames.add(sysUser.getNickName()); |
| | | if (Objects.nonNull(sysUser.getDept())) { |
| | | handlerUnitIds.add(sysUser.getDept().getDeptId()); |
| | | handlerUnitNames.add(sysUser.getDept().getDeptName()); |
| | | } |
| | | } |
| | | // 绑定的是角色或者部门 |
| | | } else if (StringUtils.isNotBlank(identityLink.getGroupId())) { |
| | | if (identityLink.getGroupId().startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 |
| | | taskVO.setHandlerType(HandlerTypeEnum.DEPT); |
| | | String[] split = identityLink.getGroupId().split(":"); |
| | | if (split.length > 1) { |
| | | // 部门 |
| | | SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1])); |
| | | if (Objects.nonNull(dept)) { |
| | | handlerUnitIds.add(dept.getDeptId()); |
| | | handlerUnitNames.add(dept.getDeptName()); |
| | | } |
| | | } |
| | | } else { |
| | | taskVO.setHandlerType(HandlerTypeEnum.ROLE); |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); |
| | | if (Objects.nonNull(role)) { |
| | | handlerUnitIds.add(Long.parseLong(identityLink.getGroupId())); |
| | | handlerUnitNames.add(role.getRoleName()); |
| | | } |
| | | } |
| | | } |
| | | taskVO.setHandlerId(handlerIds); |
| | | taskVO.setHandlerName(handlerNames); |
| | | taskVO.setHandlerUnitId(handlerUnitIds); |
| | | taskVO.setHandlerUnitName(handlerUnitNames); |
| | | } |
| | | this.setRuntimeTaskInfo(task, taskVO); |
| | | vos.add(taskVO); |
| | | } |
| | | result.put("taskList", vos); |
| | |
| | | vo.setDeployId(process.getDeploymentId()); |
| | | vo.setTaskName(userTask.getName()); |
| | | vo.setProcessName(process.getProcessDefinitionName()); |
| | | Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult(); |
| | | Task task = taskService.createTaskQuery() |
| | | .processInstanceId(process.getId()) |
| | | .taskDefinitionKey(userTask.getId()) |
| | | .singleResult(); |
| | | |
| | | // 一个任务可能有多个候选人/组,所以需要使用list |
| | | List<Long> handlerIds = new ArrayList<>(2); |
| | |
| | | vo.setTaskDefinitionKey(historicTasks.get(0).getTaskDefinitionKey()); |
| | | this.setPromoterAndHandler(vo, historicTasks.get(0).getIdentityLinks()); |
| | | } |
| | | vo.setHandlerId(handlerIds); |
| | | vo.setHandlerName(handlerNames); |
| | | vo.setHandlerUnitId(handlerUnitIds); |
| | | vo.setHandlerUnitName(handlerUnitNames); |
| | | } else { |
| | | vo.setTaskStatus(TaskStatusEnum.TODO); |
| | | vo.setTaskId(task.getId()); |
| | |
| | | vo.setTaskDefinitionKey(task.getTaskDefinitionKey()); |
| | | |
| | | this.setPromoterAndHandler(vo, null); |
| | | this.setRuntimeTaskInfo(task, vo); |
| | | } |
| | | vo.setHandlerId(handlerIds); |
| | | vo.setHandlerName(handlerNames); |
| | | vo.setHandlerUnitId(handlerUnitIds); |
| | | vo.setHandlerUnitName(handlerUnitNames); |
| | | |
| | | return vo; |
| | | }).collect(Collectors.toList()); |
| | | result.data(vos); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置运行时任务的信息 |
| | | * |
| | | * @param task 任务 |
| | | * @param taskVO 任务vo |
| | | */ |
| | | private void setRuntimeTaskInfo(Task task, CustomerTaskVO taskVO) { |
| | | // 当前流程信息 |
| | | taskVO.setTaskId(task.getId()); |
| | | taskVO.setCreateTime(task.getCreateTime()); |
| | | taskVO.setProcessDefId(task.getProcessDefinitionId()); |
| | | taskVO.setExecutionId(task.getExecutionId()); |
| | | taskVO.setTaskName(task.getName()); |
| | | taskVO.setTaskStatus(TaskStatusEnum.TODO); |
| | | // 流程定义信息 |
| | | ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() |
| | | .processDefinitionId(task.getProcessDefinitionId()) |
| | | .singleResult(); |
| | | taskVO.setDeployId(pd.getDeploymentId()); |
| | | taskVO.setProcessName(pd.getName()); |
| | | taskVO.setProcessInsId(task.getProcessInstanceId()); |
| | | taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey()); |
| | | |
| | | // 流程发起人信息 |
| | | this.setPromoterInfo(taskVO); |
| | | |
| | | // 一个任务可能有多个候选人/组,所以需要使用list |
| | | List<Long> handlerIds = new ArrayList<>(2); |
| | | List<String> handlerNames = new ArrayList<>(2); |
| | | List<Long> handlerUnitIds = new ArrayList<>(2); |
| | | List<String> handlerUnitNames = new ArrayList<>(2); |
| | | |
| | | // 流程处理人信息 |
| | | List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId()); |
| | | for (IdentityLinkInfo identityLink : identityLinksForTask) { |
| | | // if (StringUtils.isBlank(((IdentityLinkEntityImpl)identityLink).getId())) { |
| | | // continue; |
| | | // } |
| | | // 绑定的是用户,查出用户姓名、部门 |
| | | if (StringUtils.isNotBlank(identityLink.getUserId())) { |
| | | taskVO.setHandlerType(HandlerTypeEnum.USER); |
| | | SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); |
| | | if (Objects.nonNull(sysUser)) { |
| | | handlerIds.add(sysUser.getUserId()); |
| | | handlerNames.add(sysUser.getNickName()); |
| | | if (Objects.nonNull(sysUser.getDept())) { |
| | | handlerUnitIds.add(sysUser.getDept().getDeptId()); |
| | | handlerUnitNames.add(sysUser.getDept().getDeptName()); |
| | | } |
| | | } |
| | | // 绑定的是角色或者部门 |
| | | } else if (StringUtils.isNotBlank(identityLink.getGroupId())) { |
| | | if (identityLink.getGroupId().startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 |
| | | taskVO.setHandlerType(HandlerTypeEnum.DEPT); |
| | | String[] split = identityLink.getGroupId().split(":"); |
| | | if (split.length > 1) { |
| | | // 部门 |
| | | SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1])); |
| | | if (Objects.nonNull(dept)) { |
| | | handlerUnitIds.add(dept.getDeptId()); |
| | | handlerUnitNames.add(dept.getDeptName()); |
| | | } |
| | | } |
| | | } else { |
| | | taskVO.setHandlerType(HandlerTypeEnum.ROLE); |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); |
| | | if (Objects.nonNull(role)) { |
| | | handlerUnitIds.add(Long.parseLong(identityLink.getGroupId())); |
| | | handlerUnitNames.add(role.getRoleName()); |
| | | } |
| | | } |
| | | } |
| | | taskVO.setHandlerId(handlerIds); |
| | | taskVO.setHandlerName(handlerNames); |
| | | taskVO.setHandlerUnitId(handlerUnitIds); |
| | | taskVO.setHandlerUnitName(handlerUnitNames); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 查询剩余事项(未开始的任务) |
| | | * |
| | | * @param processDefinitionId |
| | |
| | | vo.setDeployId(process.getDeploymentId()); |
| | | vo.setTaskName(userTask.getName()); |
| | | vo.setProcessName(process.getProcessDefinitionName()); |
| | | Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult(); |
| | | Task task = taskService.createTaskQuery() |
| | | .processInstanceId(process.getId()) |
| | | .taskDefinitionKey(userTask.getId()) |
| | | .singleResult(); |
| | | if (Objects.isNull(task)) { |
| | | // 如果任务在运行时没找到,那么可能为未开始或者已完成,只查询未开始的 |
| | | List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery() |
| | |
| | | } else { |
| | | continue; |
| | | } |
| | | } else { |
| | | this.setRuntimeTaskInfo(task, vo); |
| | | } |
| | | vos.add(vo); |
| | | } |
| | |
| | | if (TaskStatusEnum.TODO.equals(taskVO.getTaskStatus())) { |
| | | List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(taskVO.getTaskId()); |
| | | for (IdentityLink identityLink : identityLinksForTask) { |
| | | if (StringUtils.isBlank(((IdentityLinkEntityImpl)identityLink).getId())) { |
| | | continue; |
| | | } |
| | | // 绑定的是用户,查出用户姓名、部门 |
| | | if (StringUtils.isNotBlank(identityLink.getUserId())) { |
| | | SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); |