| | |
| | | import com.ycl.common.core.domain.entity.SysRole; |
| | | import com.ycl.common.core.domain.entity.SysUser; |
| | | import com.ycl.common.enums.FlowComment; |
| | | import com.ycl.common.enums.business.FlowLogEventTypeEnum; |
| | | import com.ycl.common.enums.business.HandlerTypeEnum; |
| | | import com.ycl.common.enums.business.TaskStatusEnum; |
| | | import com.ycl.common.utils.SecurityUtils; |
| | | import com.ycl.constant.TaskTypeConstant; |
| | | import com.ycl.domain.dto.FlowTaskDto; |
| | | import com.ycl.domain.entity.FlowLog; |
| | | import com.ycl.domain.entity.ProjectInfo; |
| | | import com.ycl.domain.entity.ProjectProcess; |
| | | import com.ycl.domain.form.RejectTaskForm; |
| | | import com.ycl.domain.form.TaskDelegationForm; |
| | | import com.ycl.domain.json.TaskDelegateData; |
| | | import com.ycl.domain.vo.CustomerTaskVO; |
| | | import com.ycl.domain.vo.IndexCustomerTaskVO; |
| | | import com.ycl.domain.vo.ProjectProcessDetailVO; |
| | | import com.ycl.mapper.ProjectInfoMapper; |
| | | import com.ycl.mapper.ProjectProcessMapper; |
| | | import com.ycl.service.FlowLogService; |
| | | import com.ycl.service.ProjectProcessService; |
| | | import com.ycl.common.base.Result; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | 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; |
| | |
| | | import org.flowable.engine.runtime.ProcessInstance; |
| | | import org.flowable.identitylink.api.IdentityLink; |
| | | import org.flowable.identitylink.api.IdentityLinkInfo; |
| | | import org.flowable.identitylink.api.IdentityLinkType; |
| | | import org.flowable.identitylink.api.history.HistoricIdentityLink; |
| | | import org.flowable.task.api.Task; |
| | | import org.flowable.task.api.TaskQuery; |
| | |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.Assert; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | |
| | | private final ISysUserService sysUserService; |
| | | private final ISysRoleService sysRoleService; |
| | | private final ISysDeptService sysDeptService; |
| | | private final TaskCommonService taskCommonService; |
| | | private final FlowLogService flowLogService; |
| | | |
| | | /** |
| | | * 分页查询 |
| | |
| | | ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(vo.getProcessDefId()).singleResult(); |
| | | if (Objects.nonNull(processDefinition)) { |
| | | vo.setSuspended(processDefinition.isSuspended()); |
| | | vo.setFlowableProcessName(processDefinition.getName() + "(v" + processDefinition.getVersion() + ")"); |
| | | } |
| | | } |
| | | } |
| | |
| | | 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.setTotalTaskNum(this.getTotalTaskNum(processDefId)); |
| | | taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInsId())); |
| | | taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(processDefId, projectProcess.getProcessInsId())); |
| | | taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(processDefId, projectProcess.getProcessInsId(), taskStatistics.getTotalTaskNum())); |
| | | // taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId())); |
| | | taskStatistics.setRemainingTaskNum(this.getNotFinishedTaskNum(projectProcess.getProcessInsId())); |
| | | detail.setStatistics(taskStatistics); |
| | | |
| | | Result result = Result.ok(); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void getIndexTodoTask(String taskName, int pageSize, int pageNum, Result result) { |
| | | TaskQuery taskQuery = taskService.createTaskQuery() |
| | | .active() |
| | | .includeProcessVariables() |
| | | .includeIdentityLinks() |
| | | .orderByTaskCreateTime().desc(); |
| | | |
| | | if (StringUtils.isNotBlank(taskName)) { |
| | | taskQuery.processDefinitionNameLike(taskName); |
| | | } |
| | | result.total(taskQuery.count()); |
| | | List<Task> taskList = taskQuery.listPage(pageSize * (pageNum - 1), pageSize); |
| | | List<IndexCustomerTaskVO> vos = new ArrayList<>(); |
| | | for (Task task : taskList) { |
| | | IndexCustomerTaskVO taskVO = new IndexCustomerTaskVO(); |
| | | // 当前流程信息 |
| | | 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()); |
| | | |
| | | // 流程项目信息 |
| | | ProjectInfo project = baseMapper.getProjectInfo(task.getProcessInstanceId()); |
| | | if (Objects.nonNull(project)) { |
| | | taskVO.setProjectId(project.getId()); |
| | | taskVO.setProjectName(project.getProjectName()); |
| | | } |
| | | |
| | | // 流程发起人信息 |
| | | 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<? extends IdentityLinkInfo> identityLinks = task.getIdentityLinks(); |
| | | for (IdentityLinkInfo identityLink : identityLinks) { |
| | | // 绑定的是用户,查出用户姓名、部门 |
| | | 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(role.getRoleId()); |
| | | handlerUnitNames.add(role.getRoleName()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | taskVO.setHandlerId(handlerIds); |
| | | taskVO.setHandlerName(handlerNames); |
| | | taskVO.setHandlerUnitId(handlerUnitIds); |
| | | taskVO.setHandlerUnitName(handlerUnitNames); |
| | | vos.add(taskVO); |
| | | } |
| | | result.put("taskList", vos); |
| | | } |
| | | |
| | | @Override |
| | | public void getAllTodoTask(String taskName, int pageSize, int pageNum, Result result) { |
| | | TaskQuery taskQuery = taskService.createTaskQuery() |
| | | .active() |
| | | .includeProcessVariables() |
| | | .includeIdentityLinks() |
| | | .orderByTaskCreateTime().desc(); |
| | | |
| | | if (StringUtils.isNotBlank(taskName)) { |
| | |
| | | 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 |
| | | 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) { |
| | | List<? extends IdentityLinkInfo> identityLinks = task.getIdentityLinks(); |
| | | for (IdentityLinkInfo identityLink : identityLinks) { |
| | | // 绑定的是用户,查出用户姓名、部门 |
| | | 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()); |
| | | handlerIds.add(sysUser.getUserId()); |
| | | handlerNames.add(sysUser.getNickName()); |
| | | if (Objects.nonNull(sysUser.getDept())) { |
| | | taskVO.setHandlerUnitId(sysUser.getDept().getDeptId()); |
| | | taskVO.setHandlerUnitName(sysUser.getDept().getDeptName()); |
| | | handlerUnitIds.add(sysUser.getDept().getDeptId()); |
| | | handlerUnitNames.add(sysUser.getDept().getDeptName()); |
| | | } |
| | | taskVO.setHandlerName(sysUser.getNickName()); |
| | | } |
| | | // 绑定的是角色或者部门 |
| | | } 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)) { |
| | | taskVO.setHandlerUnitId(dept.getDeptId()); |
| | | taskVO.setHandlerUnitName(dept.getDeptName()); |
| | | taskVO.setHandlerName("暂未处理"); |
| | | taskVO.setHandlerId(null); |
| | | 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)) { |
| | | taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId())); |
| | | taskVO.setHandlerUnitName("由拥有角色:【" + role.getRoleName() + "】的人处理"); |
| | | taskVO.setHandlerName("暂未处理"); |
| | | taskVO.setHandlerId(null); |
| | | handlerUnitIds.add(role.getRoleId()); |
| | | handlerUnitNames.add(role.getRoleName()); |
| | | } |
| | | } |
| | | } |
| | |
| | | .eq(ProjectProcess::getProcessDefId, query.getProcessDefId()) |
| | | .list(); |
| | | return Result.ok().data(list); |
| | | } |
| | | |
| | | @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 && flowElement.getId().equals(task.getTaskDefinitionKey())) { |
| | | UserTask userTask = (UserTask) flowElement; |
| | | needAuditing = taskCommonService.checkTaskNeedAuditing(userTask.getExtensionElements().get("properties")); |
| | | break; |
| | | } |
| | | |
| | | } |
| | | } |
| | | return Result.ok().data(needAuditing); |
| | | } |
| | | |
| | | @Override |
| | | public Result taskDelegation(TaskDelegationForm form) { |
| | | Task task = taskService.createTaskQuery().taskId(form.getTaskId()).includeIdentityLinks().singleResult(); |
| | | if (Objects.isNull(task)) { |
| | | throw new RuntimeException("未在运行任务中找到该任务,无法执行转办操作"); |
| | | } |
| | | // 转办之前的处理人 |
| | | List<String> beforeHandlerIds = new ArrayList<>(2); |
| | | // 转办之前的处理人类型 |
| | | HandlerTypeEnum beforeHandlerType = null; |
| | | // 需要先移除之前的处理人 |
| | | for (IdentityLinkInfo identityLink : task.getIdentityLinks()) { |
| | | if (StringUtils.isNotBlank(identityLink.getUserId())) { |
| | | beforeHandlerIds.add(identityLink.getUserId()); |
| | | beforeHandlerType = HandlerTypeEnum.USER; |
| | | taskService.deleteCandidateUser(task.getId(), identityLink.getUserId()); |
| | | } else if (StringUtils.isNotBlank(identityLink.getGroupId())) { |
| | | beforeHandlerIds.add(identityLink.getGroupId()); |
| | | if (identityLink.getGroupId().contains("dept")) { |
| | | beforeHandlerType = HandlerTypeEnum.DEPT; |
| | | } else { |
| | | beforeHandlerType = HandlerTypeEnum.ROLE; |
| | | } |
| | | // 从候选组中删除这个组,便不能申领执行任务了 |
| | | taskService.deleteCandidateGroup(task.getId(), identityLink.getGroupId()); |
| | | } |
| | | } |
| | | TaskDelegateData jsonData = new TaskDelegateData(); |
| | | jsonData.setBeforeHandlerIds(beforeHandlerIds); |
| | | jsonData.setBeforeHandlerType(beforeHandlerType); |
| | | |
| | | List<String> afterHandlerIds = new ArrayList<>(2); |
| | | // 再新增处理人 |
| | | switch (form.getPeopleType()) { |
| | | case FIX_USER: |
| | | // 指定用户的话,只能选一个用户 |
| | | taskService.setAssignee(task.getId(), form.getTargetId()); |
| | | afterHandlerIds.add(form.getTargetId()); |
| | | break; |
| | | case USER: |
| | | // 用户组的话,可以选多个用户 |
| | | String[] userList = form.getTargetId().split(","); |
| | | for (String userId : userList) { |
| | | taskService.addCandidateUser(task.getId(), userId); |
| | | } |
| | | afterHandlerIds.addAll(List.of(userList)); |
| | | break; |
| | | case DEPT: |
| | | String[] deptList = form.getTargetId().split(","); |
| | | for (String deptId : deptList) { |
| | | // 添加候选组,便可以申领执行任务了 |
| | | taskService.addCandidateGroup(task.getId(), deptId); |
| | | } |
| | | List<String> deptIds = Arrays.stream(deptList).map(id -> { |
| | | // 因为部门的id是加了 dept:前缀的,用于区分部门和角色这两个组的概念 |
| | | String[] split = id.split(":"); |
| | | return split[1]; |
| | | }).collect(Collectors.toList()); |
| | | afterHandlerIds.addAll(deptIds); |
| | | break; |
| | | case ROLE: |
| | | String[] roleList = form.getTargetId().split(","); |
| | | for (String roleId : roleList) { |
| | | taskService.addCandidateGroup(task.getId(), roleId); |
| | | } |
| | | afterHandlerIds.addAll(List.of(roleList)); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | jsonData.setAfterHandlerIds(afterHandlerIds); |
| | | jsonData.setAfterHandlerType(form.getPeopleType()); |
| | | // 添加日志 |
| | | flowLogService.add(task.getId(), task.getProcessInstanceId(), FlowLogEventTypeEnum.DELEGATE, form.getProjectId(), JSON.toJSONString(jsonData)); |
| | | |
| | | 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 |
| | | 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)) { |
| | | taskVO.setHandlerId(sysUser.getUserId()); |
| | | handlerIds.add(sysUser.getUserId()); |
| | | handlerNames.add(sysUser.getNickName()); |
| | | if (Objects.nonNull(sysUser.getDept())) { |
| | | taskVO.setHandlerUnitId(sysUser.getDept().getDeptId()); |
| | | taskVO.setHandlerUnitName(sysUser.getDept().getDeptName()); |
| | | handlerUnitIds.add(sysUser.getDept().getDeptId()); |
| | | handlerUnitNames.add(sysUser.getDept().getDeptName()); |
| | | } |
| | | taskVO.setHandlerName(sysUser.getNickName()); |
| | | } |
| | | // 绑定的是角色或者部门 |
| | | } 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)) { |
| | | taskVO.setHandlerUnitId(dept.getDeptId()); |
| | | taskVO.setHandlerUnitName(dept.getDeptName()); |
| | | taskVO.setHandlerName("暂未处理"); |
| | | taskVO.setHandlerId(null); |
| | | 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)) { |
| | | taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId())); |
| | | taskVO.setHandlerUnitName("由拥有角色:【" + role.getRoleName() + "】的人处理"); |
| | | taskVO.setHandlerName("暂未处理"); |
| | | taskVO.setHandlerId(null); |
| | | handlerUnitIds.add(Long.parseLong(identityLink.getGroupId())); |
| | | handlerUnitNames.add(role.getRoleName()); |
| | | } |
| | | } |
| | | } |
| | | taskVO.setHandlerId(handlerIds); |
| | | taskVO.setHandlerName(handlerNames); |
| | | taskVO.setHandlerUnitId(handlerUnitIds); |
| | | taskVO.setHandlerUnitName(handlerUnitNames); |
| | | } |
| | | vos.add(taskVO); |
| | | } |
| | |
| | | int startNum = pageSize * (pageNum - 1); |
| | | int endNum = startNum + pageSize; |
| | | List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId); |
| | | result.total(allUserTaskElement.size()); |
| | | if (startNum >= allUserTaskElement.size()) { |
| | | // 如果起始索引超出了列表的大小,返回一个空列表 |
| | | return new ArrayList<>(); |
| | |
| | | // 模拟模糊查询 |
| | | allUserTaskElement = allUserTaskElement.stream().filter(taskEl -> taskEl.getName().contains(taskName)).collect(Collectors.toList()); |
| | | } |
| | | result.total(allUserTaskElement.size()); |
| | | int end = Math.min(endNum, allUserTaskElement.size()); |
| | | 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(); |
| | |
| | | vo.setTaskName(userTask.getName()); |
| | | vo.setProcessName(process.getProcessDefinitionName()); |
| | | Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult(); |
| | | |
| | | // 一个任务可能有多个候选人/组,所以需要使用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); |
| | | |
| | | 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); |
| | | SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee())); |
| | | if (Objects.nonNull(sysUser)) { |
| | | vo.setHandlerId(sysUser.getUserId()); |
| | | vo.setHandlerName(sysUser.getNickName()); |
| | | vo.setHandlerUnitId(Objects.nonNull(sysUser.getDept()) ? sysUser.getDept().getDeptId() : null); |
| | | vo.setHandlerUnitName(Objects.nonNull(sysUser.getDept()) ? sysUser.getDept().getDeptName() : null); |
| | | 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 (CollectionUtil.isNotEmpty(userTask.getCandidateGroups())) { |
| | | String groupId = userTask.getCandidateGroups().get(0); |
| | | if (groupId.startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 |
| | | String[] split = groupId.split(":"); |
| | | if (split.length > 1) { |
| | | // 部门 |
| | | SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1])); |
| | | if (Objects.nonNull(dept)) { |
| | | vo.setHandlerUnitId(dept.getDeptId()); |
| | | vo.setHandlerUnitName(dept.getDeptName()); |
| | | vo.setHandlerName("未开始"); |
| | | vo.setHandlerId(null); |
| | | List<String> groupIds = userTask.getCandidateGroups(); |
| | | for (String groupId : groupIds) { |
| | | if (groupId.startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 |
| | | vo.setHandlerType(HandlerTypeEnum.DEPT); |
| | | String[] split = groupId.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 { |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(groupId)); |
| | | if (Objects.nonNull(role)) { |
| | | vo.setHandlerUnitId(Long.parseLong(groupId)); |
| | | vo.setHandlerUnitName("由拥有角色:【" + role.getRoleName() + "】的人处理"); |
| | | vo.setHandlerName("未开始"); |
| | | vo.setHandlerId(null); |
| | | } else { |
| | | vo.setHandlerType(HandlerTypeEnum.ROLE); |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(groupId)); |
| | | if (Objects.nonNull(role)) { |
| | | handlerUnitIds.add(role.getRoleId()); |
| | | handlerUnitNames.add(role.getRoleName()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } 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()); |
| | | handlerIds.add(handlerUserId); |
| | | handlerNames.add(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); |
| | | } |
| | | vo.setHandlerId(handlerIds); |
| | | vo.setHandlerName(handlerNames); |
| | | vo.setHandlerUnitId(handlerUnitIds); |
| | | vo.setHandlerUnitName(handlerUnitNames); |
| | | 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(Arrays.asList(handlerUserId)); |
| | | vo.setHandlerName(Arrays.asList(handlerUser.getNickName())); |
| | | } |
| | | vo.setTaskDefinitionKey(hisTaskList.get(0).getTaskDefinitionKey()); |
| | | this.setPromoterAndHandler(vo, hisTaskList.get(0).getIdentityLinks()); |
| | | |
| | | return vo; |
| | | }).collect(Collectors.toList()); |
| | | return vos; |
| | | } |
| | | |
| | |
| | | int startNum = pageSize * (pageNum - 1); |
| | | int endNum = startNum + pageSize; |
| | | List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId); |
| | | result.total(allUserTaskElement.size()); |
| | | |
| | | if (startNum >= allUserTaskElement.size()) { |
| | | // 如果起始索引超出了列表的大小,返回一个空列表 |
| | | return new ArrayList<>(); |
| | |
| | | // 模拟模糊查询 |
| | | allUserTaskElement = allUserTaskElement.stream().filter(taskEl -> taskEl.getName().contains(taskName)).collect(Collectors.toList()); |
| | | } |
| | | result.total(allUserTaskElement.size()); |
| | | int end = Math.min(endNum, allUserTaskElement.size()); |
| | | List<UserTask> userTasks = allUserTaskElement.subList(startNum, end); |
| | | // 查出流程 |
| | | ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); |
| | | // 判断任务状态 |
| | | List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> { |
| | | if (Objects.isNull(process)) { |
| | | // 如果流程已经完成,那么没有剩余事项了 |
| | | List<CustomerTaskVO> vos = new ArrayList<>(1); |
| | | result.data(vos); |
| | | return vos; |
| | | } |
| | | |
| | | // 一个任务可能有多个候选人/组,所以需要使用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); |
| | | |
| | | // 判断任务状态,构建vo |
| | | List<CustomerTaskVO> vos = new ArrayList<>(48); |
| | | for (UserTask userTask : userTasks) { |
| | | CustomerTaskVO vo = new CustomerTaskVO(); |
| | | vo.setProcessInsId(process.getId()); |
| | | vo.setProcessDefId(processDefinitionId); |
| | |
| | | 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); |
| | | SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee())); |
| | | if (Objects.nonNull(sysUser)) { |
| | | vo.setHandlerId(sysUser.getUserId()); |
| | | vo.setHandlerName(sysUser.getNickName()); |
| | | vo.setHandlerUnitId(Objects.nonNull(sysUser.getDept()) ? sysUser.getDept().getDeptId() : null); |
| | | vo.setHandlerUnitName(Objects.nonNull(sysUser.getDept()) ? sysUser.getDept().getDeptName() : null); |
| | | 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 (CollectionUtil.isNotEmpty(userTask.getCandidateGroups())) { |
| | | String groupId = userTask.getCandidateGroups().get(0); |
| | | if (groupId.startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 |
| | | String[] split = groupId.split(":"); |
| | | if (split.length > 1) { |
| | | // 部门 |
| | | SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1])); |
| | | if (Objects.nonNull(dept)) { |
| | | vo.setHandlerUnitId(dept.getDeptId()); |
| | | vo.setHandlerUnitName(dept.getDeptName()); |
| | | vo.setHandlerName("未开始"); |
| | | vo.setHandlerId(null); |
| | | List<String> groupIds = userTask.getCandidateGroups(); |
| | | for (String groupId : groupIds) { |
| | | if (groupId.startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 |
| | | vo.setHandlerType(HandlerTypeEnum.DEPT); |
| | | String[] split = groupId.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 { |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(groupId)); |
| | | if (Objects.nonNull(role)) { |
| | | vo.setHandlerUnitId(Long.parseLong(groupId)); |
| | | vo.setHandlerUnitName("由拥有角色:【" + role.getRoleName() + "】的人处理"); |
| | | vo.setHandlerName("未开始"); |
| | | vo.setHandlerId(null); |
| | | } else { |
| | | vo.setHandlerType(HandlerTypeEnum.ROLE); |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(groupId)); |
| | | if (Objects.nonNull(role)) { |
| | | handlerUnitIds.add(role.getRoleId()); |
| | | handlerUnitNames.add(role.getRoleName()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | vo.setTaskStatus(TaskStatusEnum.NOT_START); |
| | | return vo; |
| | | vo.setHandlerId(handlerIds); |
| | | vo.setHandlerName(handlerNames); |
| | | vo.setHandlerUnitId(handlerUnitIds); |
| | | vo.setHandlerUnitName(handlerUnitNames); |
| | | } else { |
| | | return null; |
| | | continue; |
| | | } |
| | | } else { |
| | | return null; |
| | | } |
| | | }).filter(Objects::nonNull).collect(Collectors.toList()); |
| | | vos.add(vo); |
| | | } |
| | | result.data(vos); |
| | | return vos; |
| | | } |
| | |
| | | * @param processInsId 流程实例id |
| | | * @return |
| | | */ |
| | | private Long getRemainingTaskNum(String processDefinitionId, String processInsId) { |
| | | private Long getRemainingTaskNum(String processDefinitionId, String processInsId, long totalNum) { |
| | | |
| | | List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId); |
| | | // 查出流程 |
| | | ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); |
| | | 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() |
| | | .processInstanceId(process.getProcessInstanceId()) |
| | | .taskDefinitionKey(userTask.getId()) |
| | | .includeIdentityLinks() |
| | | .singleResult(); |
| | | if (Objects.isNull(historicTask)) { |
| | | num++; |
| | | } |
| | | } |
| | | if (Objects.isNull(process)) { |
| | | // 运行时未找到流程,说明流程已经结束了 |
| | | return 0L; |
| | | } |
| | | return num; |
| | | // 查出已完成的任务,用总任务数-已完成的就得到剩余事项 |
| | | List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery() |
| | | .processInstanceId(process.getProcessInstanceId()) |
| | | .finished() |
| | | .list(); |
| | | long num = list.stream().map(HistoricTaskInstance::getTaskDefinitionId).distinct().count(); |
| | | |
| | | return totalNum - 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); |
| | | |
| | | // 一个任务可能有多个候选人/组,所以需要使用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); |
| | | |
| | | // 流程处理人信息 |
| | | 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.setHandlerId(sysUser.getUserId()); |
| | | taskVO.setHandlerType(HandlerTypeEnum.USER); |
| | | handlerIds.add(sysUser.getUserId()); |
| | | handlerNames.add(sysUser.getNickName()); |
| | | if (Objects.nonNull(sysUser.getDept())) { |
| | | taskVO.setHandlerUnitId(sysUser.getDept().getDeptId()); |
| | | taskVO.setHandlerUnitName(sysUser.getDept().getDeptName()); |
| | | handlerUnitIds.add(sysUser.getDept().getDeptId()); |
| | | handlerUnitNames.add(sysUser.getDept().getDeptName()); |
| | | } |
| | | taskVO.setHandlerName(sysUser.getNickName()); |
| | | } |
| | | // 绑定的是角色或者是部门,需要根据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) { |
| | | // 部门 |
| | | SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1])); |
| | | if (Objects.nonNull(dept)) { |
| | | taskVO.setHandlerUnitId(dept.getDeptId()); |
| | | taskVO.setHandlerUnitName(dept.getDeptName()); |
| | | taskVO.setHandlerName("暂未处理"); |
| | | taskVO.setHandlerId(null); |
| | | 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)) { |
| | | taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId())); |
| | | taskVO.setHandlerUnitName("由拥有角色:【" + role.getRoleName() + "】的人处理"); |
| | | taskVO.setHandlerName("暂未处理"); |
| | | taskVO.setHandlerId(null); |
| | | handlerUnitIds.add(role.getRoleId()); |
| | | handlerUnitNames.add(role.getRoleName()); |
| | | } |
| | | } |
| | | } |
| | |
| | | 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()); |
| | | if (Objects.nonNull(sysUser.getDept())) { |
| | | taskVO.setHandlerUnitId(sysUser.getDept().getDeptId()); |
| | | taskVO.setHandlerUnitName(sysUser.getDept().getDeptName()); |
| | | handlerUnitIds.add(sysUser.getDept().getDeptId()); |
| | | handlerUnitNames.add(sysUser.getDept().getDeptName()); |
| | | } |
| | | // taskVO.setHandlerName(sysUser.getNickName()); |
| | | } |
| | | // 绑定的是角色,查出角色名称 |
| | | } else if (StringUtils.isNotBlank(identityLink.getGroupId())) { |
| | | if (identityLink.getGroupId().startsWith("dept")) { |
| | | 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)) { |
| | | taskVO.setHandlerUnitId(dept.getDeptId()); |
| | | taskVO.setHandlerUnitName(dept.getDeptName()); |
| | | handlerUnitIds.add(dept.getDeptId()); |
| | | handlerUnitNames.add(dept.getDeptName()); |
| | | } |
| | | } |
| | | } |
| | | 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); |
| | | } else { |
| | | taskVO.setHandlerType(HandlerTypeEnum.ROLE); |
| | | SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); |
| | | if (Objects.nonNull(role)) { |
| | | handlerUnitIds.add(role.getRoleId()); |
| | | handlerUnitNames.add(role.getRoleName()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | taskVO.setHandlerId(handlerIds); |
| | | taskVO.setHandlerName(handlerNames); |
| | | taskVO.setHandlerUnitId(handlerUnitIds); |
| | | taskVO.setHandlerUnitName(handlerUnitNames); |
| | | } |
| | | |
| | | /** |
| | | * 设置任务发起人 |
| | | * |
| | | * @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("、"))); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | 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(); |
| | | } |
| | | |
| | | /** |