liujie
2026-04-02 de462cca87a041cc73889be62986db8446a24ef2
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);
                }