From de462cca87a041cc73889be62986db8446a24ef2 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 02 四月 2026 17:12:01 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProjectInfoServiceImpl.java |  180 +++++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 135 insertions(+), 45 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProjectInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProjectInfoServiceImpl.java
index a9fb47b..7c0b575 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProjectInfoServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProjectInfoServiceImpl.java
@@ -1,16 +1,16 @@
 package com.ruoyi.system.service.impl;
 
 import com.alibaba.fastjson2.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.system.mapper.ProjectInfoMapper;
 import com.ruoyi.system.model.Project;
 import com.ruoyi.system.model.ProjectInfo;
 import com.ruoyi.system.model.Record;
+import com.ruoyi.system.model.Task;
 import com.ruoyi.system.query.ProjectDangerousTrendQuery;
 import com.ruoyi.system.query.ProjectHiddenDangerTrendListQuery;
-import com.ruoyi.system.service.ProjectCategoryCalculator;
-import com.ruoyi.system.service.ProjectInfoService;
-import com.ruoyi.system.service.ProjectService;
+import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.ProjectDangerousTrendVo;
 import com.ruoyi.system.vo.ProjectHiddenDangerList;
 import com.ruoyi.system.vo.ProjectHiddenDangerNextList;
@@ -26,10 +26,7 @@
 import java.time.YearMonth;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import static java.util.stream.Collectors.groupingBy;
 
@@ -51,56 +48,144 @@
     @Autowired
     private ProjectService projectService;
 
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private RecordService recordService;
+
     @Override
     public List<ProjectHiddenDangerTrendVo> getProjectHiddenDangerTrend(Integer projectId) {
-        // 获取上月第一天的时间
-        LocalDate lastMonth = LocalDate.now().minusMonths(1).with(TemporalAdjusters.firstDayOfMonth());
-        List<Record> list = this.baseMapper.getProjectHiddenDangerTrend(projectId,lastMonth+" 00:00:00",LocalDate.now()+" 23:59:59");
-        for (Record record : list) {
-            String hierarchyNames = record.getHierarchyNames();
-            JSONArray jsonArray = JSONArray.parseArray(hierarchyNames);
-            if(record.getDeviceId()!=null){
-                // 取出倒数第3个
-                String name = jsonArray.getString(jsonArray.size()-3);
-
-                record.setHierarchyName( name);
-            }else {
-                // 取出倒数第4个
-                String name = jsonArray.getString(jsonArray.size()-4);
-
-                record.setHierarchyName( name);
-            }
 
 
-        }
-        LocalDate thisMonth = LocalDate.now().minusMonths(0).with(TemporalAdjusters.firstDayOfMonth());
-        Map<String, List<Record>> map = list.stream().collect(groupingBy(Record::getHierarchyName));
         List<ProjectHiddenDangerTrendVo> resultList = new ArrayList<>();
-        for (Map.Entry<String, List<Record>> entry : map.entrySet()) {
-            ProjectHiddenDangerTrendVo vo = new ProjectHiddenDangerTrendVo();
-            vo.setName(entry.getKey());
-            List<Record> value = entry.getValue();
-            long count = value.stream().filter(record -> record.getCreateTime().isAfter(thisMonth.atStartOfDay())).count();
-            // 根据value集合中的createTime 选出本月的数据
-            vo.setThisMonth((int) count);
-            vo.setLastMonth(value.size()-(int) count);
+        // 找出最近的的2个计划任务
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getProjectId, projectId).in(Task::getState, Arrays.asList(3,7)).orderByDesc(Task::getCreateTime).last("limit 2"));
+        if(tasks.size()==1){
+            Task task = tasks.get(0);
+            List<Record> list0 = recordService.list(new LambdaQueryWrapper<Record>().eq(Record::getCheckTaskId, task.getId()));
+            for (Record record : list0) {
+                String hierarchyNames = record.getHierarchyNames();
+                JSONArray jsonArray = JSONArray.parseArray(hierarchyNames);
+                if(record.getDeviceId()!=null){
+                    // 取出倒数第3个
+                    String name = jsonArray.getString(jsonArray.size()-3);
 
-            int num = vo.getThisMonth() - vo.getLastMonth();
-            if (num != 0) {
-                if(vo.getLastMonth()>0){
-                    Double rate = BigDecimal.valueOf(num).divide(BigDecimal.valueOf(vo.getLastMonth()), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).doubleValue();
-                    vo.setRate(rate);
+                    record.setHierarchyName( name);
                 }else {
-                    vo.setRate(100.00d);
+                    // 取出倒数第4个
+                    String name = jsonArray.getString(jsonArray.size()-4);
+
+                    record.setHierarchyName( name);
+                    record.setCategory(1);
                 }
-            }else {
-                vo.setRate(0.00d);
+
+
             }
-            resultList.add(vo) ;
+
+
+            Map<String, List<Record>> map = list0.stream().collect(groupingBy(Record::getHierarchyName));
+            for (Map.Entry<String, List<Record>> entry : map.entrySet()) {
+                ProjectHiddenDangerTrendVo vo = new ProjectHiddenDangerTrendVo();
+                vo.setName(entry.getKey());
+                List<Record> value = entry.getValue();
+                long count = value.stream().filter(record -> record.getCategory()==1).count();
+                // 根据value集合中的createTime 选出本月的数据
+                vo.setThisMonth((int) count);
+                vo.setLastMonth(0);
+
+                int num = vo.getThisMonth() - vo.getLastMonth();
+                if (num != 0) {
+                    if(vo.getLastMonth()>0){
+                        Double rate = BigDecimal.valueOf(num).divide(BigDecimal.valueOf(vo.getLastMonth()), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).doubleValue();
+                        vo.setRate(rate);
+                    }else {
+                        vo.setRate(100.00d);
+                    }
+                }else {
+                    vo.setRate(0.00d);
+                }
+                resultList.add(vo) ;
+            }
+
         }
+        if(tasks.size()==2){
+            Task task0 = tasks.get(0);
+            List<Record> list0 = recordService.list(new LambdaQueryWrapper<Record>().eq(Record::getCheckTaskId, task0.getId()));
+            for (Record record : list0) {
+                String hierarchyNames = record.getHierarchyNames();
+                JSONArray jsonArray = JSONArray.parseArray(hierarchyNames);
+                if(record.getDeviceId()!=null){
+                    // 取出倒数第3个
+                    String name = jsonArray.getString(jsonArray.size()-3);
+
+                    record.setHierarchyName( name);
+                }else {
+                    // 取出倒数第4个
+                    String name = jsonArray.getString(jsonArray.size()-4);
+
+                    record.setHierarchyName( name);
+                    record.setCategory(1);
+                }
+
+
+            }
+
+
+            Task task1 = tasks.get(1);
+            List<Record> list1 = recordService.list(new LambdaQueryWrapper<Record>().eq(Record::getCheckTaskId, task1.getId()));
+            for (Record record : list1) {
+                String hierarchyNames = record.getHierarchyNames();
+                JSONArray jsonArray = JSONArray.parseArray(hierarchyNames);
+                if(record.getDeviceId()!=null){
+                    // 取出倒数第3个
+                    String name = jsonArray.getString(jsonArray.size()-3);
+
+                    record.setHierarchyName( name);
+                }else {
+                    // 取出倒数第4个
+                    String name = jsonArray.getString(jsonArray.size()-4);
+
+                    record.setHierarchyName( name);
+                    record.setCategory(2);
+                }
+            }
+            list0.addAll(list1);
+
+
+            Map<String, List<Record>> map = list0.stream().collect(groupingBy(Record::getHierarchyName));
+            for (Map.Entry<String, List<Record>> entry : map.entrySet()) {
+                ProjectHiddenDangerTrendVo vo = new ProjectHiddenDangerTrendVo();
+                vo.setName(entry.getKey());
+                List<Record> value = entry.getValue();
+                long count = value.stream().filter(record -> record.getCategory()==1).count();
+                // 根据value集合中的createTime 选出本月的数据
+                vo.setThisMonth((int) count);
+                vo.setLastMonth(value.size()-(int) count);
+
+                int num = vo.getThisMonth() - vo.getLastMonth();
+                if (num != 0) {
+                    if(vo.getLastMonth()>0){
+                        Double rate = BigDecimal.valueOf(num).divide(BigDecimal.valueOf(vo.getLastMonth()), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).doubleValue();
+                        vo.setRate(rate);
+                    }else {
+                        vo.setRate(100.00d);
+                    }
+                }else {
+                    vo.setRate(0.00d);
+                }
+                resultList.add(vo) ;
+            }
+
+        }
+
 
 
         return resultList;
+
+
+
+
     }
 
     @Override
@@ -186,15 +271,20 @@
                     Map<Integer, String> integerStringMap = projectCategoryCalculator.calculateFixedAssetCategories(projects, Long.valueOf(project.getClientId()), startDate, endDate);
                     String s = integerStringMap.get(query.getProjectId());
                     vo.setLevel(s);
+                    if(integerStringMap.isEmpty()){
+                        vo.setStatus(2);
+                    }
                 }else {
                     Map<Integer, String> integerStringMap = projectCategoryCalculator.calculateOngoingProjectCategories(projects, Long.valueOf(project.getClientId()), startDate, endDate);
                     String s = integerStringMap.get(query.getProjectId());
                     vo.setLevel(s);
+                    if(integerStringMap.isEmpty()){
+                        vo.setStatus(2);
+                    }
                 }
                 // 如果没有则沿用上次的
                 if(vo.getLevel()!=null){
                     temp=vo.getLevel();
-                    vo.setStatus(2);
                 }else {
                     vo.setLevel(temp);
                 }

--
Gitblit v1.7.1