| | |
| | | import com.ycl.domain.entity.*; |
| | | import com.ycl.domain.form.*; |
| | | import com.ycl.domain.json.*; |
| | | import com.ycl.domain.query.ProcessLogQuery; |
| | | import com.ycl.domain.vo.*; |
| | | import com.ycl.event.event.TaskLogEvent; |
| | | import com.ycl.mapper.ProjectEngineeringMapper; |
| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ycl.domain.query.ProjectProcessQuery; |
| | | import com.ycl.service.common.TaskCommonService; |
| | | import com.ycl.system.domain.base.AbsQuery; |
| | | import com.ycl.system.service.ISysDeptService; |
| | | import com.ycl.system.service.ISysDictTypeService; |
| | | import com.ycl.system.service.ISysRoleService; |
| | |
| | | taskStatistics.setTimelyFinishedTaskNum(this.getTimelyTaskNum(projectProcess.getProcessInsId())); |
| | | taskStatistics.setOvertimeTaskNum(this.getOvertimeTaskNum(projectProcess.getProcessInsId())); |
| | | taskStatistics.setWillOvertimeTaskNum(this.getWillOvertimeTaskNum(projectProcess.getProcessInsId())); |
| | | taskStatistics.setToleranceNum(this.getToleranceTask(projectProcess.getProcessInsId())); |
| | | // taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId())); |
| | | detail.setStatistics(taskStatistics); |
| | | |
| | |
| | | // 代办任务 |
| | | this.getTodoTaskList(projectProcess.getProjectId(), projectProcess.getProcessInsId(), "", 5, 1, result); |
| | | return result.data(detail); |
| | | } |
| | | |
| | | /** |
| | | * 容缺任务计数 |
| | | * @param processInsId |
| | | * @return |
| | | */ |
| | | private Long getToleranceTask(String processInsId){ |
| | | // 查出容缺过的任务 |
| | | List<ProcessLog> allWaitTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) |
| | | .eq(ProcessLog::getProcessInsId, processInsId) |
| | | .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.WAIT) |
| | | .orderByDesc(ProcessLog::getGmtCreate) |
| | | .list(); |
| | | // 排除容缺后又完成的任务 |
| | | List<ProcessLog> finishedTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) |
| | | .eq(ProcessLog::getProcessInsId, processInsId) |
| | | .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.FINISHED) |
| | | .list(); |
| | | List<String> finishedTaskIds = finishedTaskList.stream().map(ProcessLog::getTaskId).distinct().collect(Collectors.toList()); |
| | | // 得到未完成的容缺任务 |
| | | List<String> waitTaskIds = allWaitTaskList.stream().filter(log -> !finishedTaskIds.contains(log.getTaskId())).map(ProcessLog::getTaskId).collect(Collectors.toList()); |
| | | if (CollectionUtils.isEmpty(waitTaskIds)) { |
| | | return 0L; |
| | | } |
| | | return Long.valueOf(waitTaskIds.size()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | .endOr(); |
| | | } |
| | | result.total(taskQuery.count()); |
| | | List<Task> taskList = taskQuery.listPage(pageSize * (pageNum - 1), pageSize); |
| | | List<Task> allTodoList = taskQuery.list(); |
| | | List<TaskOrderVO> orderList = new ArrayList<>(); |
| | | allTodoList.stream().forEach(task -> { |
| | | TaskOrderVO order = new TaskOrderVO(); |
| | | order.setTaskId(task.getId()); |
| | | // 计算办理时间,超时的排前面,没超时的由低到高排序,没超时时间的排最后 |
| | | ProcessCoding processCoding = processCodingService.getByTaskId(task.getId(), task.getProcessInstanceId()); |
| | | if (Objects.nonNull(processCoding)) { |
| | | if (StringUtils.isNotBlank(processCoding.getRedTime())) { |
| | | Long overtime = getTime(processCoding.getRedTime()); |
| | | long durationTime = 0l; |
| | | if (Objects.nonNull(processCoding.getStartTaskTime())) { |
| | | durationTime = ((new Date()).getTime() - processCoding.getStartTaskTime().getTime()) / 1000; |
| | | } |
| | | if (overtime > durationTime) { |
| | | order.setNum((overtime - durationTime) / 3600); |
| | | } else { |
| | | order.setNum(-2000000L); |
| | | } |
| | | } else { |
| | | order.setNum(2000000L); |
| | | } |
| | | } else { |
| | | order.setNum(2000000L); |
| | | } |
| | | orderList.add(order); |
| | | }); |
| | | // 升序排列 |
| | | Collections.sort(orderList, Comparator.comparingLong(TaskOrderVO::getNum)); |
| | | int startNum = pageSize * (pageNum - 1); |
| | | int endNum = startNum + pageSize; |
| | | if (startNum >= orderList.size()) { |
| | | result.data(new ArrayList<>()).total(0L); |
| | | return; |
| | | } |
| | | int end = Math.min(endNum, orderList.size()); |
| | | List<String> targetTaskIds = orderList.subList(startNum, end).stream().map(TaskOrderVO::getTaskId).collect(Collectors.toList()); |
| | | List<Task> taskList = targetTaskIds.stream().map(taskId -> { |
| | | List<Task> list = allTodoList.stream().filter(task -> task.getId().equals(taskId)).collect(Collectors.toList()); |
| | | if (CollectionUtils.isEmpty(list)) { |
| | | return null; |
| | | } |
| | | return list.get(0); |
| | | }).filter(Objects::nonNull).collect(Collectors.toList()); |
| | | List<IndexCustomerTaskVO> vos = new ArrayList<>(); |
| | | for (Task task : taskList) { |
| | | IndexCustomerTaskVO taskVO = new IndexCustomerTaskVO(); |
| | |
| | | return Result.ok("操作成功"); |
| | | } |
| | | |
| | | @Override |
| | | public Result getProcessMsg(AbsQuery q) { |
| | | // 查自己的日志 |
| | | ProcessLogQuery query = new ProcessLogQuery(); |
| | | if (! SecurityUtils.isAdmin(SecurityUtils.getUserId())) { |
| | | query.setUserId(SecurityUtils.getUserId()); |
| | | } |
| | | query.setEventTypeList(Arrays.asList(ProcessLogEventTypeEnum.DELEGATE.getValue(), |
| | | ProcessLogEventTypeEnum.REJECT.getValue(), |
| | | ProcessLogEventTypeEnum.JUMP.getValue(), |
| | | ProcessLogEventTypeEnum.FINISHED.getValue(), |
| | | ProcessLogEventTypeEnum.WAIT.getValue())); |
| | | query.setCurrentPage(q.getCurrentPage()); |
| | | query.setPageSize(q.getPageSize()); |
| | | Result result = processLogService.projectProcessLogPage(query); |
| | | List<ProcessLogVO> logs = (List<ProcessLogVO>) result.get("data"); |
| | | |
| | | logs.stream().forEach(log -> { |
| | | if (ProcessLogEventTypeEnum.FINISHED.equals(log.getEventType())) { |
| | | log.setContent("您完成了任务:" + log.getTaskName()); |
| | | } else if (ProcessLogEventTypeEnum.REJECT.equals(log.getEventType())) { |
| | | log.setContent("您驳回了任务:" + log.getTaskName()); |
| | | } else if (ProcessLogEventTypeEnum.WAIT.equals(log.getEventType())) { |
| | | log.setContent("您容缺了任务:" + log.getTaskName()); |
| | | } else if (ProcessLogEventTypeEnum.JUMP.equals(log.getEventType())) { |
| | | log.setContent("您跳过了任务:" + log.getTaskName()); |
| | | } |
| | | }); |
| | | return Result.ok().data(logs).total((Long) result.get("total")); |
| | | } |
| | | |
| | | /** |
| | | * 查询待办任务 |
| | | * |
| | |
| | | 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.setActualHandlerUserId(hisTaskList.get(0).getAssignee()); |
| | | vo.setActualHandlerUserName(handlerUser.getNickName()); |
| | | if (StringUtils.isNotBlank(hisTaskList.get(0).getAssignee())) { |
| | | long handlerUserId = Long.parseLong(hisTaskList.get(0).getAssignee()); |
| | | SysUser handlerUser = sysUserService.selectUserById(handlerUserId); |
| | | if (Objects.nonNull(handlerUser)) { |
| | | vo.setActualHandlerUserId(hisTaskList.get(0).getAssignee()); |
| | | vo.setActualHandlerUserName(handlerUser.getNickName()); |
| | | } |
| | | } |
| | | vo.setTaskDefinitionKey(hisTaskList.get(0).getTaskDefinitionKey()); |
| | | this.setHandler(vo, hisTaskList.get(0).getIdentityLinks()); |
| | |
| | | taskVO.getHandlerUnitId().add(dept.getDeptId()); |
| | | taskVO.getHandlerUnitName().add(dept.getDeptName()); |
| | | taskVO.getPromoterName().add(this.getDeptLeaderShowName(dept)); |
| | | String[] str = dept.getAncestors().split(","); |
| | | if (str.length >= 4){ |
| | | taskVO.getPromoterUnitName().add(dept.getParentName() +"-"+dept.getDeptName()); |
| | | }else { |
| | | taskVO.getPromoterUnitName().add(dept.getDeptName()); |
| | | } |
| | | |
| | | taskVO.getPromoterUnitName().add(this.setDeptNameWithParentName(dept)); |
| | | } |
| | | } |
| | | } else { |
| | |
| | | vo.setCreateTime(hisTask.getStartTime()); |
| | | |
| | | // 查询实际处理人 |
| | | long handlerUserId = Long.parseLong(hisTask.getAssignee()); |
| | | SysUser handlerUser = sysUserService.selectUserById(handlerUserId); |
| | | if (Objects.nonNull(handlerUser)) { |
| | | vo.getHandlerId().add(handlerUserId); |
| | | vo.getHandlerName().add(this.getUserShowName(handlerUser)); |
| | | if (Objects.nonNull(handlerUser.getDept())) { |
| | | vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId()); |
| | | vo.getHandlerUnitName().add(handlerUser.getDept().getDeptName()); |
| | | if (StringUtils.isNotBlank(hisTask.getAssignee())) { |
| | | long handlerUserId = Long.parseLong(hisTask.getAssignee()); |
| | | SysUser handlerUser = sysUserService.selectUserById(handlerUserId); |
| | | if (Objects.nonNull(handlerUser)) { |
| | | vo.getHandlerId().add(handlerUserId); |
| | | vo.getHandlerName().add(this.getUserShowName(handlerUser)); |
| | | if (Objects.nonNull(handlerUser.getDept())) { |
| | | vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId()); |
| | | vo.getHandlerUnitName().add(handlerUser.getDept().getDeptName()); |
| | | } |
| | | } |
| | | } |
| | | vo.setTaskDefinitionKey(hisTask.getTaskDefinitionKey()); |
| | |
| | | return Long.valueOf(tList.size()); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 查询即将超时的任务 |
| | | * |
| | |
| | | Integer pageNum, |
| | | Integer pageSize, |
| | | Result result) { |
| | | |
| | | // 查出容缺过的任务 |
| | | List<ProcessLog> allWaitTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) |
| | | .eq(ProcessLog::getProcessInsId, processInsId) |
| | |
| | | vo.setCreateTime(hisTask.getStartTime()); |
| | | |
| | | // 查询实际处理人 |
| | | long handlerUserId = Long.parseLong(hisTask.getAssignee()); |
| | | SysUser handlerUser = sysUserService.selectUserById(handlerUserId); |
| | | if (Objects.nonNull(handlerUser)) { |
| | | vo.getHandlerId().add(handlerUserId); |
| | | if (Objects.nonNull(handlerUser.getDept())) { |
| | | vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId()); |
| | | if (StringUtils.isNotBlank(hisTask.getAssignee())) { |
| | | long handlerUserId = Long.parseLong(hisTask.getAssignee()); |
| | | SysUser handlerUser = sysUserService.selectUserById(handlerUserId); |
| | | if (Objects.nonNull(handlerUser)) { |
| | | vo.getHandlerId().add(handlerUserId); |
| | | if (Objects.nonNull(handlerUser.getDept())) { |
| | | vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId()); |
| | | } |
| | | } |
| | | } |
| | | this.setHandler(vo, hisTask.getIdentityLinks()); |
| | |
| | | // 部门 |
| | | SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1])); |
| | | if (Objects.nonNull(dept)) { |
| | | vo.getPromoterUnitName().add(dept.getDeptName()); |
| | | vo.getPromoterUnitName().add(this.setDeptNameWithParentName(dept)); |
| | | vo.getPromoterName().add(this.getDeptLeaderShowName(dept)); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置部门名称时带上上级部门名称 |
| | | * @param dept |
| | | */ |
| | | private String setDeptNameWithParentName(SysDept dept) { |
| | | String[] str = dept.getAncestors().split(","); |
| | | if (str.length >= 4){ |
| | | return dept.getParentName() + " / " + dept.getDeptName(); |
| | | }else { |
| | | return dept.getDeptName(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设置任务的发起人&处理人 只有待办任务和已完成任务才会掉这个方法 |
| | | * |
| | | * @param taskVO |