| | |
| | | import com.ycl.domain.form.ProjectProcessForm; |
| | | import com.ycl.domain.vo.ProjectProcessVO; |
| | | import com.ycl.domain.query.ProjectProcessQuery; |
| | | import com.ycl.service.common.TaskCommonService; |
| | | import com.ycl.system.service.ISysDeptService; |
| | | import com.ycl.system.service.ISysRoleService; |
| | | import com.ycl.system.service.ISysUserService; |
| | |
| | | private final ISysUserService sysUserService; |
| | | private final ISysRoleService sysRoleService; |
| | | private final ISysDeptService sysDeptService; |
| | | private final TaskCommonService taskCommonService; |
| | | |
| | | /** |
| | | * 分页查询 |
| | |
| | | if (Objects.nonNull(pp.getProcessInsId())) { |
| | | HistoricProcessInstance historicProcessInstance = |
| | | historyService.createHistoricProcessInstanceQuery().processInstanceId(pp.getProcessInsId()).singleResult(); |
| | | // 删除之前流程的数据 |
| | | if (historicProcessInstance.getEndTime() != null) { |
| | | historyService.deleteHistoricProcessInstance(historicProcessInstance.getId()); |
| | | } else { |
| | | // 删除流程实例 |
| | | runtimeService.deleteProcessInstance(pp.getProcessInsId(), ""); |
| | | // 删除历史流程实例 |
| | | historyService.deleteHistoricProcessInstance(pp.getProcessInsId()); |
| | | if (Objects.nonNull(historicProcessInstance)) { |
| | | // 删除之前流程的数据 |
| | | if (historicProcessInstance.getEndTime() != null) { |
| | | historyService.deleteHistoricProcessInstance(historicProcessInstance.getId()); |
| | | } else { |
| | | // 删除流程实例 |
| | | runtimeService.deleteProcessInstance(pp.getProcessInsId(), ""); |
| | | // 删除历史流程实例 |
| | | historyService.deleteHistoricProcessInstance(pp.getProcessInsId()); |
| | | } |
| | | } |
| | | } |
| | | String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId()); |
| | |
| | | taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInsId())); |
| | | taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(processDefId, projectProcess.getProcessInsId())); |
| | | // taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId())); |
| | | taskStatistics.setRemainingTaskNum(this.getNotFinishedTaskNum(projectProcess.getProcessInsId())); |
| | | taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(projectProcess.getProcessDefId(), projectProcess.getProcessInsId())); |
| | | detail.setStatistics(taskStatistics); |
| | | |
| | | Result result = 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) { |
| | |
| | | |
| | | @Override |
| | | public Result taskIsAuditing(String processDefinitionId, String taskId) { |
| | | Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); |
| | | BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); |
| | | Collection<Process> processes = bpmnModel.getProcesses(); |
| | | Boolean needAuditing = Boolean.FALSE; |
| | | for (Process process : processes) { |
| | | Collection<FlowElement> flowElements = process.getFlowElements(); |
| | | for (FlowElement flowElement : flowElements) { |
| | | if (flowElement instanceof UserTask) { |
| | | if (flowElement instanceof UserTask && flowElement.getId().equals(task.getTaskDefinitionKey())) { |
| | | UserTask userTask = (UserTask) flowElement; |
| | | List<ExtensionElement> extensionElements = userTask.getExtensionElements().get("flowable:properties"); |
| | | if (! CollectionUtils.isEmpty(extensionElements)) { |
| | | for (ExtensionElement extensionElement : extensionElements) { |
| | | String fieldName = extensionElement.getAttributeValue(taskId,"name"); |
| | | String fieldValue = extensionElement.getAttributeValue(taskId,"value"); |
| | | System.out.println("Field Name: " + fieldName + ", Field Value: " + fieldValue); |
| | | } |
| | | } |
| | | needAuditing = taskCommonService.checkTaskNeedAuditing(userTask.getExtensionElements().get("properties")); |
| | | break; |
| | | } |
| | | |
| | | } |
| | | } |
| | | return null; |
| | | return Result.ok().data(needAuditing); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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) { |
| | |
| | | .includeIdentityLinks() |
| | | .singleResult(); |
| | | if (Objects.isNull(historicTask)) { |
| | | vo.setPromoterName("暂无"); |
| | | vo.setPromoterUnitName("暂无"); |
| | | // 未开始的任务,其关联的用户组这些都可以从UserTask中拿到,因为本身未开始的任务是没有task的,所以这里直接查 |
| | | if (StringUtils.isNotBlank(userTask.getAssignee())) { |
| | | vo.setHandlerType(HandlerTypeEnum.USER); |
| | |
| | | vo.setHandlerId(handlerUserId); |
| | | vo.setHandlerName(handlerUser.getNickName()); |
| | | } |
| | | vo.setTaskDefinitionKey(historicTask.getTaskDefinitionKey()); |
| | | this.setPromoterAndHandler(vo, historicTask.getIdentityLinks()); |
| | | } |
| | | } else { |
| | |
| | | vo.setTaskId(task.getId()); |
| | | vo.setExecutionId(task.getExecutionId()); |
| | | vo.setCreateTime(task.getCreateTime()); |
| | | vo.setTaskDefinitionKey(task.getTaskDefinitionKey()); |
| | | |
| | | this.setPromoterAndHandler(vo, null); |
| | | } |
| | | return vo; |
| | |
| | | |
| | | |
| | | /** |
| | | * 设置任务的发起人&处理人 |
| | | * 设置任务的发起人&处理人 只有待办任务和已完成任务才会掉这个方法 |
| | | * |
| | | * @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()); |
| | |
| | | if (StringUtils.isNotBlank(identityLink.getUserId())) { |
| | | SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); |
| | | if (Objects.nonNull(sysUser)) { |
| | | taskVO.setHandlerType(HandlerTypeEnum.USER); |
| | | taskVO.setHandlerId(sysUser.getUserId()); |
| | | if (Objects.nonNull(sysUser.getDept())) { |
| | | taskVO.setHandlerUnitId(sysUser.getDept().getDeptId()); |
| | |
| | | // 绑定的是角色或者是部门,需要根据id判断 |
| | | } 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) { |
| | | // 部门 |
| | |
| | | } |
| | | } |
| | | } else { |
| | | taskVO.setHandlerType(HandlerTypeEnum.ROLE); |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); |
| | | if (Objects.nonNull(role)) { |
| | | taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId())); |
| | |
| | | for (IdentityLinkInfo identityLink : identityLinkInfos) { |
| | | // 绑定的是用户,查出用户姓名、部门 |
| | | if (StringUtils.isNotBlank(identityLink.getUserId())) { |
| | | taskVO.setHandlerType(HandlerTypeEnum.USER); |
| | | SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); |
| | | if (Objects.nonNull(sysUser)) { |
| | | // taskVO.setHandlerId(sysUser.getUserId()); |
| | |
| | | // 绑定的是角色,查出角色名称 |
| | | } else if (StringUtils.isNotBlank(identityLink.getGroupId())) { |
| | | if (identityLink.getGroupId().startsWith("dept")) { |
| | | taskVO.setHandlerType(HandlerTypeEnum.DEPT); |
| | | String[] split = identityLink.getGroupId().split(":"); |
| | | if (split.length > 1) { |
| | | // 部门 |
| | |
| | | taskVO.setHandlerUnitName(dept.getDeptName()); |
| | | } |
| | | } |
| | | } |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); |
| | | if (Objects.nonNull(role)) { |
| | | taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId())); |
| | | taskVO.setHandlerUnitName("由拥有角色:【" + role.getRoleName() + "】的人处理"); |
| | | } else { |
| | | taskVO.setHandlerType(HandlerTypeEnum.ROLE); |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); |
| | | if (Objects.nonNull(role)) { |
| | | taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId())); |
| | | taskVO.setHandlerUnitName("由拥有角色:【" + role.getRoleName() + "】的人处理"); |
| | | // taskVO.setHandlerName(role.getRoleName()); |
| | | // taskVO.setHandlerId(null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 设置任务发起人 |
| | | * |
| | | * @param taskVO |
| | | */ |
| | | private void setPromoterInfo(CustomerTaskVO taskVO) { |
| | | // 发起人应为上一节点的处理人 |
| | | List<String> beforeNodeKey = taskCommonService.getBeforeNodeInfo(taskVO.getProcessDefId(), taskVO.getTaskDefinitionKey()); |
| | | List<SysUser> userList = beforeNodeKey.stream().map(key -> { |
| | | HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().taskDefinitionKey(key).singleResult(); |
| | | if (Objects.nonNull(historicTaskInstance)) { |
| | | // 实际领取这个任务的人,也就是处理人 |
| | | String assignee = historicTaskInstance.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("、"))); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | private Long getTotalTaskNum(String processDefinitionId) { |
| | | return Long.valueOf(this.getAllUserTaskElement(processDefinitionId).size()); |
| | | } |
| | | |
| | | /** |
| | | * 获取流程剩余未完成的任务数 |
| | | * |
| | | * @param processInstanceId |
| | | * @return |
| | | */ |
| | | private Long getNotFinishedTaskNum(String processInstanceId) { |
| | | return historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).processUnfinished().count(); |
| | | } |
| | | |
| | | /** |