zxl
8 小时以前 5f14844e81dade9e55725642f42c76568c5ec908
business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java
@@ -507,17 +507,11 @@
        List<Task> allRunningTasks  = taskService.createTaskQuery().active().list();
        //这里 获得 当前用户 所属的 流程实例ids集合中 对应的正在运行的任务。
        List<Task> targetRunningTasks = allRunningTasks.stream()
                // 关键匹配:任务的流程定义ID 存在于 projectProcessList 的流程定义ID列表中
                // 关键匹配:任务的流程实例ID 存在于 targetProcessInsIds 列表中
                .filter(task -> targetProcessInsIds.contains(task.getProcessInstanceId()))
                .filter(task -> {
                    String assignee = task.getAssignee();
                    log.info("assignee:{}",assignee);
                    return assignee == null || userId.toString().equals(assignee);
                })
                .collect(Collectors.toList());
        List<TaskInfoVo> list = new ArrayList<>();
        // 按流程实例id分组
        if (!CollectionUtils.isEmpty(targetRunningTasks)){
@@ -529,6 +523,7 @@
                    .eq(ProcessCoding::getDeleted, Boolean.FALSE)
                    .in(ProcessCoding::getTaskId, taskIds)
                    .list();
            log.info("processCodingList.size():{}", processCodingList.size()); // 看日志是否为0
            Map<String, ProcessCoding> processCodingMap = new HashMap<>();
            //按taskId转换为map方面下面获取
@@ -554,6 +549,25 @@
                                }
                        ));
            }
            //为targetRunningTasks进行一次排序 按存在超时时间 由搞到低排序
            Map<String, ProcessCoding> finalProcessCodingMap = processCodingMap;
            targetRunningTasks.sort((t1, t2) -> {
                ProcessCoding pc1 = finalProcessCodingMap.get(t1.getId());
                ProcessCoding pc2 = finalProcessCodingMap.get(t2.getId());
                String status1 = (pc1 != null && pc1.getOvertimeStatus() != null) ? pc1.getOvertimeStatus() : ProcessOverTimeConstants.NORMAL;
                String status2 = (pc2 != null && pc2.getOvertimeStatus() != null) ? pc2.getOvertimeStatus() : ProcessOverTimeConstants.NORMAL;
                // 定义权重:overtime=3, willOvertime=2, normal=1
                int weight1 = ProcessOverTimeConstants.OVERTIME.equals(status1) ? 3 :
                        (ProcessOverTimeConstants.WILLOVERTIME.equals(status1) ? 2 : 1);
                int weight2 = ProcessOverTimeConstants.OVERTIME.equals(status2) ? 3 :
                        (ProcessOverTimeConstants.WILLOVERTIME.equals(status2) ? 2 : 1);
                return Integer.compare(weight2, weight1); // 由高到低排序
            });
            for (Task task : targetRunningTasks) {
                TaskInfoVo taskVo = new TaskInfoVo();
@@ -637,16 +651,33 @@
                }
                //超时时间和次数在 processCodingList中  这里需要更具taskId来获得对应信息
                ProcessCoding processCoding = processCodingMap.get(task.getId());
                //设置超时信息
                if (processCoding != null) {
                    log.error("当前处理processCoding的id:{}",processCoding.getId());
                    String overTimeTotalStr = processCoding.getOverTimeTotal();
                    long overTimeTotal = 0L;
                    log.error("当前处理超时时间:{}",overTimeTotalStr);
                    if (StringUtils.isNotBlank(overTimeTotalStr)) {
                        try {
                            overTimeTotal = Long.parseLong(overTimeTotalStr.trim());
                        } catch (NumberFormatException e) {
                        try {
                            // 第一步:先去除字符串两端空白
                            String trimStr = overTimeTotalStr.trim();
                            // 第二步:先转成Double处理小数,再转Long(可选择四舍五入或直接取整)
                            double doubleValue = Double.parseDouble(trimStr);
                            // 方式1:直接取整数部分(4778.3 → 4778)
                            overTimeTotal = (long) doubleValue;
                            // 方式2:四舍五入(4778.3 → 4778,4778.6 → 4779)
                            // overTimeTotal = Math.round(doubleValue);
                            log.error("打印超时总时长不为null的id:{},对应值{}(原始值:{})",
                                    processCoding.getId(), overTimeTotal, trimStr);
                        } catch (NumberFormatException e) {
                            // 关键:打印异常详情和原始值,方便排查
                            log.error("转换超时时间失败!id:{},原始值:{}",
                                    processCoding.getId(), overTimeTotalStr, e);
                            // 可选:给默认值,避免后续使用overTimeTotal时出现空指针
                            overTimeTotal = 0L; // 或根据业务设置默认值,比如60000L(1分钟)
                        }
                    }
                    String overTimeDesc = convertHoursToDayHourStr(overTimeTotal);
@@ -674,8 +705,6 @@
                }
                list.add(taskVo);
            }
        }
        return Result.ok().data(list);