From 481834bc79cf62cd1c4daef21a71b837d78f9855 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期四, 22 一月 2026 09:57:43 +0800
Subject: [PATCH] fix:项目类别计算工具类修改

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectCategoryCalculator.java |   71 ++++++++++++++++++++---------------
 1 files changed, 41 insertions(+), 30 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectCategoryCalculator.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectCategoryCalculator.java
index 9d63705..1866bcf 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectCategoryCalculator.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectCategoryCalculator.java
@@ -15,6 +15,8 @@
 
 import java.util.*;
 import java.util.stream.Collectors;
+import java.time.LocalDate;
+import java.time.ZoneId;
 
 /**
  * 项目类别计算服务
@@ -30,6 +32,7 @@
     private final EvalResultMapper evalResultMapper;
     private final ClientParamMapper clientParamMapper;
     private final CheckMapper checkMapper;
+    private final TaskMapper taskMapper;
     private final RecordMapper recordMapper;
 
     /**
@@ -65,24 +68,28 @@
                 return categoryMap;
             }
 
-            // 3. 查询项目关联的检查任务
+            // 3. 查询项目关联的任务
             List<Integer> projectIds = projects.stream()
                     .map(Project::getId)
                     .collect(Collectors.toList());
 
-            LambdaQueryWrapper<Check> checkWrapper = new LambdaQueryWrapper<>();
-            checkWrapper.in(Check::getProjectId, projectIds)
-                    .ge(Check::getTime, startDate)
-                    .le(Check::getTime, endDate);
-            List<Check> checks = checkMapper.selectList(checkWrapper);
+            // 将 Date 转换为 LocalDate
+            LocalDate startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            LocalDate endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 
-            if (checks.isEmpty()) {
-                log.info("项目没有检查记录,projectIds: {}", projectIds);
+            LambdaQueryWrapper<Task> taskWrapper = new LambdaQueryWrapper<>();
+            taskWrapper.in(Task::getProjectId, projectIds)
+                    .ge(Task::getDate, startLocalDate)
+                    .le(Task::getDate, endLocalDate);
+            List<Task> tasks = taskMapper.selectList(taskWrapper);
+
+            if (tasks.isEmpty()) {
+                log.info("项目没有任务记录,projectIds: {}", projectIds);
                 return categoryMap;
             }
 
-            List<Integer> checkTaskIds = checks.stream()
-                    .map(Check::getId)
+            List<Integer> checkTaskIds = tasks.stream()
+                    .map(Task::getId)
                     .collect(Collectors.toList());
 
             // 4. 根据评价类型查询评估结果
@@ -102,7 +109,7 @@
 
             // 5. 计算项目平均分
             Map<Integer, ProjectScoreData> projectScoreMap = calculateProjectScores(
-                    checks, evalResults);
+                    tasks, evalResults);
 
             // 6. 根据配置判断项目类别
             for (Map.Entry<Integer, ProjectScoreData> entry : projectScoreMap.entrySet()) {
@@ -159,24 +166,28 @@
                 return categoryMap;
             }
 
-            // 3. 查询项目关联的检查任务
+            // 3. 查询项目关联的任务
             List<Integer> projectIds = projects.stream()
                     .map(Project::getId)
                     .collect(Collectors.toList());
 
-            LambdaQueryWrapper<Check> checkWrapper = new LambdaQueryWrapper<>();
-            checkWrapper.in(Check::getProjectId, projectIds)
-                    .ge(Check::getTime, startDate)
-                    .le(Check::getTime, endDate);
-            List<Check> checks = checkMapper.selectList(checkWrapper);
+            // 将 Date 转换为 LocalDate
+            LocalDate startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            LocalDate endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 
-            if (checks.isEmpty()) {
-                log.info("项目没有检查记录,projectIds: {}", projectIds);
+            LambdaQueryWrapper<Task> taskWrapper = new LambdaQueryWrapper<>();
+            taskWrapper.in(Task::getProjectId, projectIds)
+                    .ge(Task::getDate, startLocalDate)
+                    .le(Task::getDate, endLocalDate);
+            List<Task> tasks = taskMapper.selectList(taskWrapper);
+
+            if (tasks.isEmpty()) {
+                log.info("项目没有任务记录,projectIds: {}", projectIds);
                 return categoryMap;
             }
 
-            List<Integer> checkTaskIds = checks.stream()
-                    .map(Check::getId)
+            List<Integer> checkTaskIds = tasks.stream()
+                    .map(Task::getId)
                     .collect(Collectors.toList());
 
             // 4. 查询隐患记录(record_type='error')
@@ -192,13 +203,13 @@
             }
 
             // 5. 按项目分组统计隐患等级数量
-            Map<Integer, Integer> checkToProjectMap = checks.stream()
-                    .collect(Collectors.toMap(Check::getId, Check::getProjectId));
+            Map<Integer, Integer> taskToProjectMap = tasks.stream()
+                    .collect(Collectors.toMap(Task::getId, Task::getProjectId));
 
             Map<Integer, Map<Integer, Integer>> projectHazardMap = new HashMap<>();
 
             for (Record record : hazardRecords) {
-                Integer projectId = checkToProjectMap.get(record.getCheckTaskId());
+                Integer projectId = taskToProjectMap.get(record.getCheckTaskId());
                 if (projectId == null) {
                     continue;
                 }
@@ -275,18 +286,18 @@
     /**
      * 计算项目评分数据
      *
-     * @param checks      检查任务列表
+     * @param tasks       任务列表
      * @param evalResults 评估结果列表
      * @return 项目ID -> 评分数据的映射
      */
     private Map<Integer, ProjectScoreData> calculateProjectScores(
-            List<Check> checks, List<EvalResult> evalResults) {
+            List<Task> tasks, List<EvalResult> evalResults) {
 
         Map<Integer, ProjectScoreData> projectScoreMap = new HashMap<>();
 
         // 按 check_task_id 关联到 project_id
-        Map<Integer, Integer> checkToProjectMap = checks.stream()
-                .collect(Collectors.toMap(Check::getId, Check::getProjectId));
+        Map<Integer, Integer> checkToProjectMap = tasks.stream()
+                .collect(Collectors.toMap(Task::getId, Task::getProjectId));
 
         // 按项目分组评估结果
         Map<Integer, List<EvalResult>> projectEvalMap = evalResults.stream()
@@ -308,9 +319,9 @@
             // 计算设备检查平均分(需要解析 device_res_map)
             List<Float> deviceScores = results.stream()
                     .filter(e -> StringUtils.hasText(e.getDeviceResMap()))
-                    .map(e -> this.calculateDeviceScore(e.getDeviceResMap()))
+                    .map(e -> calculateDeviceScore(e.getDeviceResMap()))
                     .filter(score -> score != null && score > 0)
-                    .collect(Collectors.toList());
+                    .toList();
 
             ProjectScoreData scoreData = new ProjectScoreData();
             scoreData.setProjectId(projectId);

--
Gitblit v1.7.1