From a8c5e3a00e6654b7cd2d92aa67fdb05404b32f21 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 22 一月 2026 11:56:01 +0800
Subject: [PATCH] 大屏项目接口

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java        |    8 ++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectDangerousTrendVo.java          |   22 +++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectCategoryCalculator.java   |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java      |    6 +-
 ruoyi-system/src/main/java/com/ruoyi/system/query/ProjectDangerousTrendQuery.java    |   23 +++++++
 ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml                  |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProjectInfoServiceImpl.java |   93 ++++++++++++++++++++++++++++---
 ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectInfoService.java          |    5 +
 8 files changed, 147 insertions(+), 14 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java
index 34c6365..c39fc80 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java
@@ -308,4 +308,12 @@
         return  R.ok(list);
     }
 
+
+    @ApiOperation(value = "大屏风险趋势")
+    @PostMapping("/getProjectDangerousTrend")
+    public R<List<ProjectDangerousTrendVo>> getProjectDangerousTrend(@RequestBody @Valid ProjectDangerousTrendQuery query) {
+        List<ProjectDangerousTrendVo> list = projectInfoService.getProjectDangerousTrend(query);
+        return R.ok(list);
+    }
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/ProjectDangerousTrendQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/ProjectDangerousTrendQuery.java
new file mode 100644
index 0000000..8db674e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/ProjectDangerousTrendQuery.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel("项目危险趋势查询参数")
+public class ProjectDangerousTrendQuery {
+    @ApiModelProperty("项目id")
+    @NotNull(message = "项目id不能为空")
+    private Integer projectId;
+
+    @ApiModelProperty("开始时间")
+    @NotNull(message = "开始时间不能为空")
+    private String startTime;
+
+    @ApiModelProperty("结束时间")
+    @NotNull(message = "结束时间不能为空")
+    private String endTime;
+}
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 1866bcf..a594f0d 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
@@ -501,7 +501,7 @@
         } else if (finalScore >= thresholdA) {
             return "C";
         } else {
-            return null; // 不满足任何类别
+            return "C"; // 不满足任何类别
         }
     }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectInfoService.java
index 91ce556..75d7659 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectInfoService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectInfoService.java
@@ -2,7 +2,9 @@
 
 import com.ruoyi.system.model.ProjectInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.query.ProjectDangerousTrendQuery;
 import com.ruoyi.system.query.ProjectHiddenDangerTrendListQuery;
+import com.ruoyi.system.vo.ProjectDangerousTrendVo;
 import com.ruoyi.system.vo.ProjectHiddenDangerList;
 import com.ruoyi.system.vo.ProjectHiddenDangerTrendVo;
 
@@ -23,4 +25,7 @@
 
     List<ProjectHiddenDangerList> getProjectHiddenDangerTrendList(@Valid ProjectHiddenDangerTrendListQuery query);
 
+    List<ProjectDangerousTrendVo> getProjectDangerousTrend(@Valid ProjectDangerousTrendQuery query);
+
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
index fc9a0fb..51b2959 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
@@ -439,12 +439,12 @@
         Map<Integer, String> categoryMap;
         if (!projects.isEmpty()) {
             // 判断项目类型:在建工程 or 固定资产
-            Integer usageType = projects.get(0).getUsageType();
-            if (usageType != null && usageType == 0) {
+            Integer usageType = projects.get(0).getType();
+            if (usageType != null && usageType != 2) {
                 // 在建工程
                 categoryMap = projectCategoryCalculator.calculateOngoingProjectCategories(
                         projects, clientId, startDate, endDate);
-            } else if (usageType != null && usageType == 1) {
+            } else if (usageType != null && usageType == 2) {
                 // 固定资产
                 categoryMap = projectCategoryCalculator.calculateFixedAssetCategories(
                         projects, clientId, startDate, endDate);
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 ae0efc4..e1db0fa 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
@@ -4,13 +4,18 @@
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson2.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.system.model.Project;
 import com.ruoyi.system.model.ProjectInfo;
 import com.ruoyi.system.mapper.ProjectInfoMapper;
 import com.ruoyi.system.model.Record;
+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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.service.ProjectService;
 import com.ruoyi.system.service.RecordService;
+import com.ruoyi.system.vo.ProjectDangerousTrendVo;
 import com.ruoyi.system.vo.ProjectHiddenDangerList;
 import com.ruoyi.system.vo.ProjectHiddenDangerNextList;
 import com.ruoyi.system.vo.ProjectHiddenDangerTrendVo;
@@ -19,13 +24,13 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.YearMonth;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import static java.util.stream.Collectors.groupingBy;
 
@@ -41,6 +46,12 @@
 public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfo> implements ProjectInfoService {
 
 
+    @Autowired
+    private ProjectCategoryCalculator projectCategoryCalculator;
+
+    @Autowired
+    private ProjectService projectService;
+
     @Override
     public List<ProjectHiddenDangerTrendVo> getProjectHiddenDangerTrend(Integer projectId) {
         // 获取上月第一天的时间
@@ -49,9 +60,19 @@
         for (Record record : list) {
             String hierarchyNames = record.getHierarchyNames();
             JSONArray jsonArray = JSONArray.parseArray(hierarchyNames);
-            // 取出倒数第4个
-            String name = jsonArray.getString(jsonArray.size()-4);
-            record.setHierarchyName( name);
+            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());
@@ -89,9 +110,18 @@
         for (Record record : list) {
             String hierarchyNames = record.getHierarchyNames();
             JSONArray jsonArray = JSONArray.parseArray(hierarchyNames);
-            // 取出倒数第4个
-            String name = jsonArray.getString(jsonArray.size()-4);
-            record.setHierarchyName( name);
+            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);
+            }
+
         }
 
         // 算出跨度几个月
@@ -132,6 +162,51 @@
 
     }
 
+    @Override
+    public List<ProjectDangerousTrendVo> getProjectDangerousTrend(ProjectDangerousTrendQuery query) {
+        List<ProjectDangerousTrendVo> list = new ArrayList<>();
+        Project project = projectService.getById(query.getProjectId());
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        // 算出跨度几个月
+        int months = calculateMonthsBetween(query.getStartTime(),query.getEndTime());
+        ArrayList<Project> projects = new ArrayList<>();
+        projects.add( project);
+        String temp=null;
+        try {
+            for (int i = 0; i < months; i++) {
+                ProjectDangerousTrendVo vo = new ProjectDangerousTrendVo();
+                LocalDate localDate = getMonthBoundaries(query.getStartTime(), true).plusMonths(i);
+                String dateStr = localDate.toString().substring(0, 7);
+                String start = localDate+" 00:00:00";
+                String end = getMonthBoundaries(query.getStartTime(), false).plusMonths(i)+" 23:59:59";
+                Date startDate = simpleDateFormat.parse(start);
+                Date endDate = simpleDateFormat.parse(end);
+                vo.setTime(dateStr);
+
+                if(project.getType()==2){
+                    Map<Integer, String> integerStringMap = projectCategoryCalculator.calculateFixedAssetCategories(projects, Long.valueOf(project.getClientId()), startDate, endDate);
+                    String s = integerStringMap.get(query.getProjectId());
+                    vo.setLevel(s);
+                }else {
+                    Map<Integer, String> integerStringMap = projectCategoryCalculator.calculateOngoingProjectCategories(projects, Long.valueOf(project.getClientId()), startDate, endDate);
+                    String s = integerStringMap.get(query.getProjectId());
+                    vo.setLevel(s);
+                }
+                // 如果没有则沿用上次的
+                if(vo.getLevel()!=null){
+                    temp=vo.getLevel();
+                }else {
+                    vo.setLevel(temp);
+                }
+                list.add( vo);
+            }
+        }catch (ParseException e){
+            e.printStackTrace();
+        }
+
+        return list;
+    }
+
 
     public static LocalDate getMonthBoundaries(String yearMonthStr,boolean isInclusive) {
         // 解析字符串为YearMonth
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectDangerousTrendVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectDangerousTrendVo.java
new file mode 100644
index 0000000..a93647d
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectDangerousTrendVo.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel("大屏项目危险趋势")
+public class ProjectDangerousTrendVo {
+
+
+
+    @ApiModelProperty("等级")
+    private String level;
+
+    @ApiModelProperty("结束时间")
+    private String time;
+
+
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml
index 66b87da..d950306 100644
--- a/ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml
@@ -28,7 +28,7 @@
     </sql>
     <select id="getProjectHiddenDangerTrend" resultType="com.ruoyi.system.model.Record"
           >
-        select t2.id,t2.hierarchy_names,t2.create_time from task t1
+        select t2.id,t2.hierarchy_names,t2.create_time,t2.device_id from task t1
         left join record t2 on t1.id=t2.check_task_id
         where t1.project_id=#{projectId} and t1.deleted=0
         and t2.create_time between #{startTime} and #{endTime}

--
Gitblit v1.7.1