liujie
2026-01-22 a8c5e3a00e6654b7cd2d92aa67fdb05404b32f21
大屏项目接口
2个文件已添加
6个文件已修改
161 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/ProjectDangerousTrendQuery.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectCategoryCalculator.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ProjectInfoService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProjectInfoServiceImpl.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectDangerousTrendVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/ProjectInfoMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/query/ProjectDangerousTrendQuery.java
New file
@@ -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;
}
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"; // 不满足任何类别
        }
    }
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);
}
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);
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
ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectDangerousTrendVo.java
New file
@@ -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;
}
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}