| | |
| | | import com.ycl.domain.dto.FlowTaskDto; |
| | | import com.ycl.domain.entity.ProjectInfo; |
| | | import com.ycl.domain.entity.ProjectProcess; |
| | | import com.ycl.domain.form.RejectTaskForm; |
| | | import com.ycl.domain.vo.CustomerTaskVO; |
| | | import com.ycl.domain.vo.ProjectProcessDetailVO; |
| | | import com.ycl.mapper.ProjectInfoMapper; |
| | |
| | | taskVO.setDeployId(pd.getDeploymentId()); |
| | | taskVO.setProcessName(pd.getName()); |
| | | taskVO.setProcessInsId(task.getProcessInstanceId()); |
| | | taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey()); |
| | | |
| | | // 流程发起人信息 |
| | | HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() |
| | | .processInstanceId(task.getProcessInstanceId()) |
| | | .singleResult(); |
| | | SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId())); |
| | | taskVO.setPromoterId(startUser.getUserId()); |
| | | taskVO.setPromoterName(startUser.getNickName()); |
| | | taskVO.setPromoterUnitName(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptName() : ""); |
| | | taskVO.setPromoterUnitId(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptId() : null); |
| | | this.setPromoterInfo(taskVO); |
| | | |
| | | // 流程处理人信息 |
| | | List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId()); |
| | | for (IdentityLink identityLink : identityLinksForTask) { |
| | |
| | | return Result.ok().data(needAuditing); |
| | | } |
| | | |
| | | @Override |
| | | public Result rejectTask(RejectTaskForm form) { |
| | | Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult(); |
| | | taskCommonService.reject(form.getRejectedTaskDefKey(), task.getTaskDefinitionKey(), task.getProcessInstanceId(), form.getTaskId(), form.getAuditOpinion()); |
| | | return Result.ok("驳回成功"); |
| | | } |
| | | |
| | | /** |
| | | * 查询待办任务 |
| | | * |
| | |
| | | taskVO.setDeployId(pd.getDeploymentId()); |
| | | taskVO.setProcessName(pd.getName()); |
| | | taskVO.setProcessInsId(task.getProcessInstanceId()); |
| | | taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey()); |
| | | |
| | | // 流程发起人信息 |
| | | HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() |
| | | .processInstanceId(task.getProcessInstanceId()) |
| | | .singleResult(); |
| | | SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId())); |
| | | taskVO.setPromoterId(startUser.getUserId()); |
| | | taskVO.setPromoterName(startUser.getNickName()); |
| | | taskVO.setPromoterUnitName(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptName() : ""); |
| | | taskVO.setPromoterUnitId(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptId() : null); |
| | | this.setPromoterInfo(taskVO); |
| | | |
| | | // 流程处理人信息 |
| | | List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId()); |
| | | for (IdentityLink identityLink : identityLinksForTask) { |
| | |
| | | List<UserTask> userTasks = allUserTaskElement.subList(startNum, end); |
| | | // 查出流程 |
| | | ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); |
| | | if (Objects.isNull(process)) { |
| | | // 如果运行时找不到说明是已完成的流程,直接查历史任务 |
| | | List<CustomerTaskVO> vos = this.getFinishedProcessTaskInfo(userTasks, processInsId, processDefinitionId); |
| | | result.data(vos); |
| | | return vos; |
| | | } |
| | | // 判断任务状态 |
| | | List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> { |
| | | CustomerTaskVO vo = new CustomerTaskVO(); |
| | |
| | | Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult(); |
| | | if (Objects.isNull(task)) { |
| | | // 如果任务在运行时没找到,那么可能为未开始或者已完成,需要从历史任务中再找一下 |
| | | HistoricTaskInstance historicTask = historyService.createHistoricTaskInstanceQuery() |
| | | List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery() |
| | | .processInstanceId(process.getProcessInstanceId()) |
| | | .taskDefinitionKey(userTask.getId()) |
| | | .includeIdentityLinks() |
| | | .singleResult(); |
| | | if (Objects.isNull(historicTask)) { |
| | | .orderByHistoricTaskInstanceStartTime() |
| | | .desc() |
| | | .list(); |
| | | if (CollectionUtils.isEmpty(historicTasks)) { |
| | | vo.setPromoterName("暂无"); |
| | | vo.setPromoterUnitName("暂无"); |
| | | // 未开始的任务,其关联的用户组这些都可以从UserTask中拿到,因为本身未开始的任务是没有task的,所以这里直接查 |
| | | if (StringUtils.isNotBlank(userTask.getAssignee())) { |
| | | vo.setHandlerType(HandlerTypeEnum.USER); |
| | |
| | | } else { |
| | | vo.setTaskStatus(TaskStatusEnum.FINISHED); |
| | | // 如果是已完成的,信息需要单独赋值 |
| | | vo.setTaskId(historicTask.getId()); |
| | | vo.setExecutionId(historicTask.getExecutionId()); |
| | | vo.setCreateTime(historicTask.getStartTime()); |
| | | vo.setTaskId(historicTasks.get(0).getId()); |
| | | vo.setExecutionId(historicTasks.get(0).getExecutionId()); |
| | | vo.setCreateTime(historicTasks.get(0).getStartTime()); |
| | | // 查询实际处理人 |
| | | long handlerUserId = Long.parseLong(historicTask.getAssignee()); |
| | | long handlerUserId = Long.parseLong(historicTasks.get(0).getAssignee()); |
| | | SysUser handlerUser = sysUserService.selectUserById(handlerUserId); |
| | | if (Objects.nonNull(handlerUser)) { |
| | | vo.setHandlerId(handlerUserId); |
| | | vo.setHandlerName(handlerUser.getNickName()); |
| | | } |
| | | this.setPromoterAndHandler(vo, historicTask.getIdentityLinks()); |
| | | vo.setTaskDefinitionKey(historicTasks.get(0).getTaskDefinitionKey()); |
| | | this.setPromoterAndHandler(vo, historicTasks.get(0).getIdentityLinks()); |
| | | } |
| | | } else { |
| | | vo.setTaskStatus(TaskStatusEnum.TODO); |
| | | vo.setTaskId(task.getId()); |
| | | vo.setExecutionId(task.getExecutionId()); |
| | | vo.setCreateTime(task.getCreateTime()); |
| | | vo.setTaskDefinitionKey(task.getTaskDefinitionKey()); |
| | | |
| | | this.setPromoterAndHandler(vo, null); |
| | | } |
| | | return vo; |
| | | }).collect(Collectors.toList()); |
| | | result.data(vos); |
| | | return vos; |
| | | } |
| | | |
| | | /** |
| | | * 查询已完成的流程的任务信息 |
| | | * |
| | | * @param userTasks 任务节点列表 |
| | | * @param processInsId 流程实例id |
| | | * @param processDefId 流程定义id |
| | | * @return |
| | | */ |
| | | private List<CustomerTaskVO> getFinishedProcessTaskInfo(List<UserTask> userTasks, String processInsId, String processDefId) { |
| | | HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult(); |
| | | List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> { |
| | | CustomerTaskVO vo = new CustomerTaskVO(); |
| | | vo.setProcessInsId(hisProcess.getId()); |
| | | vo.setProcessDefId(processDefId); |
| | | vo.setDeployId(hisProcess.getDeploymentId()); |
| | | vo.setTaskName(userTask.getName()); |
| | | vo.setProcessName(hisProcess.getProcessDefinitionName()); |
| | | |
| | | // 查多个是因为驳回后会查出两条及以上,取最新一条 |
| | | List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() |
| | | .processInstanceId(hisProcess.getId()) |
| | | .taskDefinitionKey(userTask.getId()).includeIdentityLinks() |
| | | .orderByHistoricTaskInstanceStartTime() |
| | | .desc() |
| | | .list(); |
| | | |
| | | vo.setTaskStatus(TaskStatusEnum.FINISHED); |
| | | // 如果是已完成的,信息需要单独赋值 |
| | | vo.setTaskId(hisTaskList.get(0).getId()); |
| | | vo.setExecutionId(hisTaskList.get(0).getExecutionId()); |
| | | vo.setCreateTime(hisTaskList.get(0).getStartTime()); |
| | | // 查询实际处理人 |
| | | long handlerUserId = Long.parseLong(hisTaskList.get(0).getAssignee()); |
| | | SysUser handlerUser = sysUserService.selectUserById(handlerUserId); |
| | | if (Objects.nonNull(handlerUser)) { |
| | | vo.setHandlerId(handlerUserId); |
| | | vo.setHandlerName(handlerUser.getNickName()); |
| | | } |
| | | vo.setTaskDefinitionKey(hisTaskList.get(0).getTaskDefinitionKey()); |
| | | this.setPromoterAndHandler(vo, hisTaskList.get(0).getIdentityLinks()); |
| | | |
| | | return vo; |
| | | }).collect(Collectors.toList()); |
| | | return vos; |
| | | } |
| | | |
| | |
| | | List<UserTask> userTasks = allUserTaskElement.subList(startNum, end); |
| | | // 查出流程 |
| | | ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); |
| | | if (Objects.isNull(process)) { |
| | | // 如果流程已经完成,那么没有剩余事项了 |
| | | List<CustomerTaskVO> vos = new ArrayList<>(1); |
| | | result.data(vos); |
| | | return vos; |
| | | } |
| | | // 判断任务状态 |
| | | List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> { |
| | | CustomerTaskVO vo = new CustomerTaskVO(); |
| | |
| | | Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult(); |
| | | if (Objects.isNull(task)) { |
| | | // 如果任务在运行时没找到,那么可能为未开始或者已完成,只查询未开始的 |
| | | HistoricTaskInstance historicTask = historyService.createHistoricTaskInstanceQuery() |
| | | List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery() |
| | | .processInstanceId(process.getProcessInstanceId()) |
| | | .taskDefinitionKey(userTask.getId()) |
| | | .includeIdentityLinks() |
| | | .singleResult(); |
| | | if (Objects.isNull(historicTask)) { |
| | | .orderByHistoricTaskInstanceStartTime() |
| | | .desc() |
| | | .list(); |
| | | if (CollectionUtils.isEmpty(historicTasks)) { |
| | | // 未开始的任务,其关联的用户组这些都可以从UserTask中拿到,因为本身未开始的任务是没有task的,所以这里直接查 |
| | | if (StringUtils.isNotBlank(userTask.getAssignee())) { |
| | | vo.setHandlerType(HandlerTypeEnum.USER); |
| | |
| | | List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId); |
| | | // 查出流程 |
| | | ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); |
| | | if (Objects.isNull(process)) { |
| | | // 运行时未找到流程,说明流程已经结束了 |
| | | return 0L; |
| | | } |
| | | long num = 0L; |
| | | // 判断任务状态 |
| | | for (UserTask userTask : allUserTaskElement) { |
| | | Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult(); |
| | | if (Objects.isNull(task)) { |
| | | // 如果任务在运行时没找到,那么可能为未开始或者已完成,只查询未开始的 |
| | | HistoricTaskInstance historicTask = historyService.createHistoricTaskInstanceQuery() |
| | | List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery() |
| | | .processInstanceId(process.getProcessInstanceId()) |
| | | .taskDefinitionKey(userTask.getId()) |
| | | .includeIdentityLinks() |
| | | .singleResult(); |
| | | if (Objects.isNull(historicTask)) { |
| | | .orderByHistoricTaskInstanceStartTime() |
| | | .desc() |
| | | .list(); |
| | | if (CollectionUtils.isEmpty(historicTasks)) { |
| | | num++; |
| | | } |
| | | } |
| | |
| | | |
| | | |
| | | /** |
| | | * 设置任务的发起人&处理人 |
| | | * 设置任务的发起人&处理人 只有待办任务和已完成任务才会掉这个方法 |
| | | * |
| | | * @param taskVO |
| | | * @param identityLinkInfos 如果是已完成的任务,用这个去取关联的用户/用户组 |
| | | */ |
| | | private void setPromoterAndHandler(CustomerTaskVO taskVO, List<? extends IdentityLinkInfo> identityLinkInfos) { |
| | | // TODO 发起人是否应为上一节点的处理人 |
| | | // 流程发起人信息 |
| | | HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() |
| | | .processInstanceId(taskVO.getProcessInsId()) |
| | | .singleResult(); |
| | | SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId())); |
| | | taskVO.setPromoterId(startUser.getUserId()); |
| | | taskVO.setPromoterName(startUser.getNickName()); |
| | | taskVO.setPromoterUnitId(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptId() : null); |
| | | taskVO.setPromoterUnitName(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptName() : ""); |
| | | this.setPromoterInfo(taskVO); |
| | | // 流程处理人信息 |
| | | if (TaskStatusEnum.TODO.equals(taskVO.getTaskStatus())) { |
| | | List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(taskVO.getTaskId()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置任务发起人 |
| | | * |
| | | * @param taskVO |
| | | */ |
| | | private void setPromoterInfo(CustomerTaskVO taskVO) { |
| | | // 发起人应为上一节点的处理人 |
| | | List<String> beforeNodeKey = taskCommonService.getBeforeNodeInfo(taskVO.getProcessDefId(), taskVO.getTaskDefinitionKey()); |
| | | List<SysUser> userList = beforeNodeKey.stream().map(key -> { |
| | | List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery() |
| | | .processInstanceId(taskVO.getProcessInsId()) |
| | | .taskDefinitionKey(key) |
| | | .orderByHistoricTaskInstanceStartTime() |
| | | .desc() |
| | | .list(); // 之所以用list是因为如果某个任务被驳回过,且如果该任务再次执行时会有多条数据,取最新的一条 |
| | | if (! CollectionUtils.isEmpty(historicTaskInstances)) { |
| | | // 实际领取这个任务的人,也就是处理人 |
| | | String assignee = historicTaskInstances.get(0).getAssignee(); |
| | | SysUser startUser = sysUserService.selectUserById(Long.parseLong(assignee)); |
| | | return startUser; |
| | | } else { |
| | | return null; |
| | | } |
| | | }).filter(user -> Objects.nonNull(user)).collect(Collectors.toList()); |
| | | if (CollectionUtils.isEmpty(userList)) { |
| | | taskVO.setPromoterName("暂无"); |
| | | taskVO.setPromoterUnitName("暂无"); |
| | | } else { |
| | | taskVO.setPromoterId(userList.stream().map(user -> { return user.getUserId() + ""; }).collect(Collectors.joining("、"))); |
| | | taskVO.setPromoterName(userList.stream().map(user -> { return user.getNickName(); }).collect(Collectors.joining("、"))); |
| | | taskVO.setPromoterUnitId(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { return user.getDept().getDeptId() + "";}).collect(Collectors.joining("、"))); |
| | | taskVO.setPromoterUnitName(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { return user.getDept().getDeptName() + "";}).collect(Collectors.joining("、"))); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取某个流程的所有任务节点 |
| | | * |
| | | * @param processDefinitionId |