xiangpei
2025-02-11 cd6de797868cd3ba10b4bd7fad0d3fdea208b2d5
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -649,7 +649,8 @@
                .active()
                .processInstanceId(processInsId)
                .includeProcessVariables()
                .orderByTaskCreateTime().desc();
                .orderByTaskCreateTime()
                .desc();
        if (StringUtils.isNotBlank(taskName)) {
            taskQuery.processDefinitionNameLike(taskName);
@@ -962,24 +963,36 @@
     * @return
     */
    private Long getTimelyTaskNum(String processInsId) {
        // 查出时间正常的任务id
        List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .select(ProcessCoding::getTaskDefKey)
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.NORMAL)
                .list()
                .stream()
                .map(ProcessCoding::getTaskDefKey)
                .collect(Collectors.toList());
        if (CollectionUtils.isEmpty(taskKeyList)) {
            return 0L;
        }
        // 查出所有已完成的任务
        return historyService.createHistoricTaskInstanceQuery()
        // 查出已完成的任务key
        List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery()
                .processInstanceId(processInsId)
                .finished()
                .caseDefinitionKeyIn(taskKeyList)
                .count();
                .includeIdentityLinks()
                .list();
        if (CollectionUtils.isEmpty(hisTaskList)) {
            return 0L;
        }
        List<String> hisTaskKeys = hisTaskList.stream().map(HistoricTaskInstance::getTaskDefinitionKey).distinct().collect(Collectors.toList());
        Map<String, HistoricTaskInstance> hisTaskMap = hisTaskList.stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his));
        // 查出时间正常的任务key
        List<ProcessCoding> taskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .in(ProcessCoding::getTaskDefKey, hisTaskKeys)
                .list();
        Map<String, ProcessCoding> codingMap = taskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro));
        List<HistoricTaskInstance> finishedTaskList = new ArrayList<>();
        // 判断
        for (String key : hisTaskMap.keySet()) {
            ProcessCoding processCoding = codingMap.get(key);
            // 如果已完成的任务没从数据库查找出来,说明该任务没配置赋码等时间,直接设置为按时完成
            if (Objects.isNull(processCoding)) {
                finishedTaskList.add(hisTaskMap.get(key));
            } else if (ProcessOverTimeConstants.NORMAL.equals(processCoding.getOvertimeStatus()) || StringUtils.isBlank(processCoding.getOvertimeStatus())) {
                finishedTaskList.add(hisTaskMap.get(key));
            }
        }
        return Long.valueOf(finishedTaskList.size());
    }
    /**
@@ -997,26 +1010,38 @@
        int startNum = pageSize * (pageNum - 1);
        int endNum = startNum + pageSize;
        // 查出时间正常的任务id
        List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .select(ProcessCoding::getTaskDefKey)
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.NORMAL)
                .list()
                .stream()
                .map(ProcessCoding::getTaskDefKey)
                .collect(Collectors.toList());
        // 查出已完成的任务key
        List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery()
                .processInstanceId(processInsId)
                .finished()
                .taskNameLike(taskName)
                .includeIdentityLinks()
                .orderByTaskCreateTime()
                .desc()
                .list();
        if (CollectionUtils.isEmpty(hisTaskList)) {
            result.total(0);
            return new ArrayList<>();
        }
        List<String> hisTaskKeys = hisTaskList.stream().map(HistoricTaskInstance::getTaskDefinitionKey).distinct().collect(Collectors.toList());
        Map<String, HistoricTaskInstance> hisTaskMap = hisTaskList.stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his));
        // 查出时间正常的任务key
        List<ProcessCoding> taskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .in(ProcessCoding::getTaskDefKey, hisTaskKeys)
                .list();
        Map<String, ProcessCoding> codingMap = taskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro));
        List<HistoricTaskInstance> finishedTaskList = new ArrayList<>();
        if (! CollectionUtils.isEmpty(taskKeyList)) {
            // 查出所有已完成的任务
            finishedTaskList = historyService.createHistoricTaskInstanceQuery()
                    .processInstanceId(processInsId)
                    .finished()
                    .taskNameLike(taskName)
                    .caseDefinitionKeyIn(taskKeyList)
                    .includeIdentityLinks()
                    .list();
        // 判断
        for (String key : hisTaskMap.keySet()) {
            ProcessCoding processCoding = codingMap.get(key);
            // 如果已完成的任务没从数据库查找出来,说明该任务没配置赋码等时间,直接设置为按时完成
            if (Objects.isNull(processCoding)) {
                finishedTaskList.add(hisTaskMap.get(key));
            } else if (ProcessOverTimeConstants.NORMAL.equals(processCoding.getOvertimeStatus()) || StringUtils.isBlank(processCoding.getOvertimeStatus())) {
                finishedTaskList.add(hisTaskMap.get(key));
            }
        }
        if (startNum >= finishedTaskList.size()) {
@@ -1101,23 +1126,31 @@
     * @return
     */
    private Long getOvertimeTaskNum(String processInsId) {
        // 查出时间正常的任务id
        List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .select(ProcessCoding::getTaskDefKey)
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.OVERTIME)
                .list()
                .stream()
                .map(ProcessCoding::getTaskDefKey)
                .collect(Collectors.toList());
        if (CollectionUtils.isEmpty(taskKeyList)) {
        // 查出运行在的任务key
        List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).list();
        if (CollectionUtils.isEmpty(taskList)) {
            return 0L;
        }
        // 查出所有已完成的任务
        return taskService.createTaskQuery()
                .processInstanceId(processInsId)
                .caseDefinitionKeyIn(taskKeyList)
                .count();
        List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList());
        Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his));
        // 查出数据库的任务key
        List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .in(ProcessCoding::getTaskDefKey, taskKeys)
                .list();
        Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro));
        List<Task> tList = new ArrayList<>();
        // 判断
        for (String key : taskMap.keySet()) {
            ProcessCoding processCoding = codingMap.get(key);
            // 如果运行中的任务没从数据库查找出来,说明该任务没配置赋码等时间,不算超时
            if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.OVERTIME.equals(processCoding.getOvertimeStatus())) {
                tList.add(taskMap.get(key));
            }
        }
        return Long.valueOf(taskList.size());
    }
    /**
@@ -1136,33 +1169,42 @@
        int startNum = pageSize * (pageNum - 1);
        int endNum = startNum + pageSize;
        // 查出即将超时的任务
        List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .select(ProcessCoding::getTaskDefKey)
        // 查出运行在的任务key
        List<Task> taskList = new ArrayList<>(12);
        if (StringUtils.isNotBlank(taskName)) {
            taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskNameLike(taskName).orderByTaskCreateTime().desc().list();
        } else {
            taskList = taskService.createTaskQuery().processInstanceId(processInsId).orderByTaskCreateTime().desc().list();
        }
        if (CollectionUtils.isEmpty(taskList)) {
            result.total(0);
            return new ArrayList<>();
        }
        List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList());
        Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his));
        // 查出数据库的任务key
        List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.OVERTIME)
                .list()
                .stream()
                .map(ProcessCoding::getTaskDefKey)
                .collect(Collectors.toList());
        List<Task> taskList = new ArrayList<>();
        // 查出所有正在处理(运行时)的任务
        if (! CollectionUtils.isEmpty(taskKeyList)) {
            taskList = taskService.createTaskQuery()
                    .processInstanceId(processInsId)
                    .taskNameLike(taskName)
                    .caseDefinitionKeyIn(taskKeyList)
                    .list();
                .in(ProcessCoding::getTaskDefKey, taskKeys)
                .list();
        Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro));
        List<Task> tList = new ArrayList<>();
        // 判断
        for (String key : taskMap.keySet()) {
            ProcessCoding processCoding = codingMap.get(key);
            // 如果运行中的任务没从数据库查找出来,说明该任务没配置赋码等时间,不算超时
            if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.OVERTIME.equals(processCoding.getOvertimeStatus())) {
                tList.add(taskMap.get(key));
            }
        }
        if (startNum >= taskList.size()) {
        if (startNum >= tList.size()) {
            // 如果起始索引超出了列表的大小,返回一个空列表
            return new ArrayList<>();
        }
        result.total(taskList.size());
        int end = Math.min(endNum, taskList.size());
        List<Task> pageTaskList = taskList.subList(startNum, end);
        result.total(tList.size());
        int end = Math.min(endNum, tList.size());
        List<Task> pageTaskList = tList.subList(startNum, end);
        List<String> taskDefs = pageTaskList.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList());
        Map<String, Task> keyMap = pageTaskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his));
@@ -1187,23 +1229,29 @@
     * @return
     */
    private Long getWillOvertimeTaskNum(String processInsId) {
        // 查出时间正常的任务id
        List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .select(ProcessCoding::getTaskDefKey)
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.WILLOVERTIME)
                .list()
                .stream()
                .map(ProcessCoding::getTaskDefKey)
                .collect(Collectors.toList());
        if (CollectionUtils.isEmpty(taskKeyList)) {
        // 查出运行在的任务key
        List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).list();
        if (CollectionUtils.isEmpty(taskList)) {
            return 0L;
        }
        // 查出所有已完成的任务
        return taskService.createTaskQuery()
                .processInstanceId(processInsId)
                .caseDefinitionKeyIn(taskKeyList)
                .count();
        List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList());
        Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his));
        // 查出数据库的任务key
        List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .in(ProcessCoding::getTaskDefKey, taskKeys)
                .list();
        Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro));
        List<Task> tList = new ArrayList<>();
        // 判断
        for (String key : taskMap.keySet()) {
            ProcessCoding processCoding = codingMap.get(key);
            // 如果运行中的任务没从数据库查找出来,说明该任务没配置赋码等时间,不算即将超时
            if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.WILLOVERTIME.equals(processCoding.getOvertimeStatus())) {
                tList.add(taskMap.get(key));
            }
        }
        return Long.valueOf(tList.size());
    }
    /**
@@ -1222,33 +1270,42 @@
        int startNum = pageSize * (pageNum - 1);
        int endNum = startNum + pageSize;
        // 查出即将超时的任务
        List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .select(ProcessCoding::getTaskDefKey)
        // 查出运行在的任务key
        List<Task> taskList = new ArrayList<>(12);
        if (StringUtils.isNotBlank(taskName)) {
            taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskNameLike(taskName).orderByTaskCreateTime().desc().list();
        } else {
            taskList = taskService.createTaskQuery().processInstanceId(processInsId).orderByTaskCreateTime().desc().list();
        }
        if (CollectionUtils.isEmpty(taskList)) {
            result.total(0);
            return new ArrayList<>();
        }
        List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList());
        Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his));
        // 查出数据库的任务key
        List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
                .eq(ProcessCoding::getProcessInsId, processInsId)
                .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.WILLOVERTIME)
                .list()
                .stream()
                .map(ProcessCoding::getTaskDefKey)
                .collect(Collectors.toList());
        List<Task> taskList = new ArrayList<>();
        // 查出所有正在处理(运行时)的任务
        if (! CollectionUtils.isEmpty(taskKeyList)) {
            taskList = taskService.createTaskQuery()
                    .processInstanceId(processInsId)
                    .taskNameLike(taskName)
                    .caseDefinitionKeyIn(taskKeyList)
                    .list();
                .in(ProcessCoding::getTaskDefKey, taskKeys)
                .list();
        Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro));
        List<Task> tList = new ArrayList<>();
        // 判断
        for (String key : taskMap.keySet()) {
            ProcessCoding processCoding = codingMap.get(key);
            // 如果运行中的任务没从数据库查找出来,说明该任务没配置赋码等时间,不算即将超时
            if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.WILLOVERTIME.equals(processCoding.getOvertimeStatus())) {
                tList.add(taskMap.get(key));
            }
        }
        if (startNum >= taskList.size()) {
        if (startNum >= tList.size()) {
            // 如果起始索引超出了列表的大小,返回一个空列表
            return new ArrayList<>();
        }
        result.total(taskList.size());
        int end = Math.min(endNum, taskList.size());
        List<Task> pageTaskList = taskList.subList(startNum, end);
        result.total(tList.size());
        int end = Math.min(endNum, tList.size());
        List<Task> pageTaskList = tList.subList(startNum, end);
        List<String> taskDefs = pageTaskList.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList());
        Map<String, Task> keyMap = pageTaskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his));