| | |
| | | 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 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 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() |
| | |
| | | |
| | | @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; |
| | | taskService.deleteCandidateUser(task.getId(), identityLink.getUserId()); |
| | | 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")) { |
| | |
| | | jsonData.setAfterHandlerIds(afterHandlerIds); |
| | | jsonData.setAfterHandlerType(form.getPeopleType()); |
| | | // 添加日志 |
| | | flowLogService.add(task.getId(), form.getProcessInsId(), FlowLogEventTypeEnum.DELEGATE, form.getProjectId(), JSON.toJSONString(jsonData)); |
| | | flowLogService.add(task.getId(), task.getProcessInstanceId(), FlowLogEventTypeEnum.DELEGATE, form.getProjectId(), JSON.toJSONString(jsonData)); |
| | | |
| | | return Result.ok("转办成功"); |
| | | } |
| | |
| | | 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())); |
| | | } |
| | | } |
| | | } |
| | | 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())); |