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