From 86c17b1a6af4bcac0b06a3c2f9680bfb4b393210 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 20 一月 2026 18:34:16 +0800
Subject: [PATCH] 大屏项目接口

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java        |   15 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java               |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectHiddenDangerTrendVo.java       |   22 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/enums/DeviceType.java                    |   70 +++++++++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProjectInfoMapper.java            |    6 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/IOptionVo.java                   |   17 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/model/SelectOptionVo.java                |   46 +++++++++++
 ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml                  |    7 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProjectInfoServiceImpl.java |   36 +++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectInfoService.java          |    5 +
 10 files changed, 226 insertions(+), 0 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 41c35aa..e1c896b 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
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.dto.EditHiddenDangerResponsiblePersonDto;
+import com.ruoyi.system.enums.DeviceType;
 import com.ruoyi.system.model.*;
 import com.ruoyi.system.model.Record;
 import com.ruoyi.system.query.*;
@@ -270,4 +271,18 @@
         return R.ok(list);
     }
 
+    @ApiOperation(value = "设备类型")
+    @GetMapping("/deviceTypes")
+    public R<?> deviceTypeOptions(@RequestParam(value = "title", required = false) String title) {
+        return R.ok(SelectOptionVo.buildOptions(title, DeviceType.values()));
+    }
+
+
+    @ApiOperation(value = "各分项隐患趋势")
+    @GetMapping("/getProjectHiddenDangerTrend")
+    public R<List<ProjectHiddenDangerTrendVo>> getProjectHiddenDangerTrend(@RequestParam Integer projectId) {
+        List<ProjectHiddenDangerTrendVo> list = projectInfoService.getProjectHiddenDangerTrend(projectId);
+        return R.ok(list);
+    }
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/enums/DeviceType.java b/ruoyi-system/src/main/java/com/ruoyi/system/enums/DeviceType.java
new file mode 100644
index 0000000..7527076
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/enums/DeviceType.java
@@ -0,0 +1,70 @@
+package com.ruoyi.system.enums;
+
+
+import com.ruoyi.system.service.IOptionVo;
+import lombok.Getter;
+
+@Getter
+public enum DeviceType implements IOptionVo {
+    TOWER_CRANE("塔式起重机"),
+    CONSTRUCTION_LIFT("施工升降机"),
+    MATERIAL_HOIST("物料提升机"),
+    BRIDGE_CRANE("桥式起重机"),
+    SUSPENDED_SCAFFOLDING("附着式升降脚手架"),
+    MOBILE_CRANE("流动式起重机"),
+    HIGH_ALTITUDE_BASKET("高处作业吊篮"),
+    GANTRY_CRANE("门式起重机"),
+    GANTRY_TROLLEY_CRANE("架桥机"),
+    OTHER("其他类型");
+
+    private final String desc;
+
+    DeviceType(String desc) {
+        this.desc = desc;
+    }
+
+    public static DeviceType getByDescription(String description) {
+        for (DeviceType deviceType : DeviceType.values()) {
+            if (deviceType.desc.equals(description)) {
+                return deviceType;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String getOptionCode() {
+        return name();
+    }
+
+    @Override
+    public String getOptionName() {
+        return desc;
+    }
+
+    public String hierarchyPath() {
+        switch (this) {
+            case TOWER_CRANE:
+                return "/0";
+            case CONSTRUCTION_LIFT:
+                return "/1";
+            case MATERIAL_HOIST:
+                return "/5";
+            case BRIDGE_CRANE:
+                return "/3";
+            case SUSPENDED_SCAFFOLDING:
+                return "/7";
+            case MOBILE_CRANE:
+                return "/4";
+            case HIGH_ALTITUDE_BASKET:
+                return "/8";
+            case GANTRY_CRANE:
+                return "/6";
+            case GANTRY_TROLLEY_CRANE:
+                return "/2";
+            case OTHER:
+            default:
+                return "/";
+        }
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProjectInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProjectInfoMapper.java
index 89f331e..35a938d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProjectInfoMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProjectInfoMapper.java
@@ -2,6 +2,10 @@
 
 import com.ruoyi.system.model.ProjectInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.model.Record;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,6 @@
  */
 public interface ProjectInfoMapper extends BaseMapper<ProjectInfo> {
 
+    List<Record> getProjectHiddenDangerTrend(@Param("projectId") Integer projectId, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/SelectOptionVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/SelectOptionVo.java
new file mode 100644
index 0000000..b256780
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/SelectOptionVo.java
@@ -0,0 +1,46 @@
+package com.ruoyi.system.model;
+
+import com.ruoyi.system.service.IOptionVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName SelectOptionBo
+ * @Description
+ * @Author daisyli
+ * @Date 2023/9/11
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "下拉框选项")
+public class SelectOptionVo {
+
+    @ApiModelProperty(value = "编码")
+    String code;
+
+    @ApiModelProperty(value = "名称")
+    String name;
+
+    public static <T> List<SelectOptionVo> buildOptions(String title, T[] list)
+    {
+        return buildOptions(title, Arrays.asList(list));
+    }
+
+    public static <T> List<SelectOptionVo> buildOptions(String title, List<T> list)  {
+        List<SelectOptionVo> data = list.stream().map(item ->
+                new SelectOptionVo(((IOptionVo)item).getOptionCode(),
+                        ((IOptionVo)item).getOptionName())).collect(Collectors.toList());
+        if(StringUtils.isNotBlank(title))
+            data.add(0, new SelectOptionVo("", title));
+        return data;
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IOptionVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IOptionVo.java
new file mode 100644
index 0000000..a45961e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IOptionVo.java
@@ -0,0 +1,17 @@
+package com.ruoyi.system.service;
+
+public interface IOptionVo {
+
+    /**
+     * 获取选项编码
+     * @return
+     */
+    String getOptionCode();
+
+    /**
+     * 获取选项名称
+     * @return
+     */
+    String getOptionName();
+
+}
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 d3b3c76..bc2d67e 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,6 +2,9 @@
 
 import com.ruoyi.system.model.ProjectInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.vo.ProjectHiddenDangerTrendVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,6 @@
  */
 public interface ProjectInfoService extends IService<ProjectInfo> {
 
+    List<ProjectHiddenDangerTrendVo> getProjectHiddenDangerTrend(Integer projectId);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java
index 3607e4e..9272541 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java
@@ -27,4 +27,6 @@
     ProblemVo getHiddenDangerDetail(Integer problemId);
 
 
+
+
 }
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 a285864..b613943 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,10 +1,23 @@
 package com.ruoyi.system.service.impl;
 
+import com.alibaba.fastjson2.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.system.model.ProjectInfo;
 import com.ruoyi.system.mapper.ProjectInfoMapper;
+import com.ruoyi.system.model.Record;
 import com.ruoyi.system.service.ProjectInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.service.RecordService;
+import com.ruoyi.system.vo.ProjectHiddenDangerTrendVo;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
+import java.util.List;
+import java.util.Map;
+
+import static java.util.stream.Collectors.groupingBy;
 
 /**
  * <p>
@@ -17,4 +30,27 @@
 @Service
 public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfo> implements ProjectInfoService {
 
+
+    @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);
+            // 取出倒数第4个
+            String name = jsonArray.getString(jsonArray.size()-4);
+            record.setHierarchyName( name);
+        }
+
+
+
+        return List.of();
+    }
+
+    public static void main(String[] args) {
+        LocalDate lastMonth = LocalDate.now().minusMonths(1).with(TemporalAdjusters.firstDayOfMonth());
+        System.out.println(LocalDate.now()+" 23:59:59");
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectHiddenDangerTrendVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectHiddenDangerTrendVo.java
new file mode 100644
index 0000000..4fc96d8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectHiddenDangerTrendVo.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("项目各分享隐患趋势Vo")
+public class ProjectHiddenDangerTrendVo {
+
+    @ApiModelProperty("隐患名称")
+    private String name;
+
+    @ApiModelProperty("本月数量")
+    private Integer thisMonth;
+
+    @ApiModelProperty("上月数量")
+    private Integer lastMonth;
+
+    @ApiModelProperty("环比趋势")
+    private String rate;
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml
index 020177b..66b87da 100644
--- a/ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml
@@ -26,5 +26,12 @@
     <sql id="Base_Column_List">
         id, create_time, deleted, name, update_time, dangerous_options, detail, progress, progress_this_season, super_dangerous_options, hazard_source, update_date, creator_id, check_task_id, project_id, hazard_source_types
     </sql>
+    <select id="getProjectHiddenDangerTrend" resultType="com.ruoyi.system.model.Record"
+          >
+        select t2.id,t2.hierarchy_names,t2.create_time 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}
+    </select>
 
 </mapper>

--
Gitblit v1.7.1