liujie
2026-04-01 2f74a0e6c101edc69de6d5e19e7c071e09a9c3ea
修改bug
9个文件已修改
313 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DashboardStatisticsController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/HiddenDangerListQuery.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceUsageServiceImpl.java 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ErrorListVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ScreenUserVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/DeviceUsageMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/ProjectMapper.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/RecordMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DashboardStatisticsController.java
@@ -94,6 +94,8 @@
                Client client = clientService.getById(project.getClientId());
                ClientParam param = clientParamService.getOne(new LambdaQueryWrapper<ClientParam>().eq(ClientParam::getClientId, client.getId()));
                if(param!=null){
                    screenUserVo.setLogo(param.getLogo());
                    screenUserVo.setName(param.getName());
                    screenUserVo.setCommentType(param.getCommentType());
                    screenUserVo.setSafetyId(param.getSafetyId());
                    String name = clientParamService.getTemplateName(param.getSafetyId());
@@ -104,7 +106,7 @@
                    screenUserVo.setBigHiddenDanger(param.getBigHiddenDanger());
                    screenUserVo.setGeneralHiddenDanger(param.getGeneralHiddenDanger());
                }
                screenUserVo.setName(project.getName());
                screenUserVo.setProjectName(project.getName());
                screenUserVo.setPermissionProject(project.getPermission());
            }
ruoyi-system/src/main/java/com/ruoyi/system/query/HiddenDangerListQuery.java
@@ -17,9 +17,18 @@
    @ApiModelProperty("隐患类型 1=安全 2=设备")
    private Integer type;
    @ApiModelProperty("隐患等级")
    private Integer level;
    @ApiModelProperty("隐患类型 1=重大 2=其他")
    private Integer category;
    @ApiModelProperty("整改情况 0未整改  1部分整改  2已整改")
    private Integer reformed;
    @ApiModelProperty("整改情况 0未整改  1部分整改  2已整改  3未复查")
    private Integer state;
    @ApiModelProperty("开始时间")
    private String startTime;
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
@@ -664,6 +664,7 @@
                // 解析 address_info JSON 字符串
                JSONObject addressJson = JSON.parseObject(p.getAddressInfo());
                JSONArray gps = addressJson.getJSONArray("gps");
                String lonLat = addressJson.getString("lonLat");
                if (gps != null && gps.size() >= 2) {
                    ProjectMapPointVO vo = new ProjectMapPointVO();
@@ -680,6 +681,22 @@
                    vo.setCategory(categoryMap.get(p.getId()));
                    result.add(vo);
                }else if(org.apache.commons.lang3.StringUtils.isNotBlank(lonLat)){
                    String[] split = lonLat.split(",");
                    ProjectMapPointVO vo = new ProjectMapPointVO();
                    vo.setProjectId(p.getId());
                    vo.setProjectName(p.getName());
                    vo.setProjectType(p.getType());
                    // gps 数组格式:[经度, 纬度]
                    vo.setLongitude(split[0]);
                    vo.setLatitude(split[1]);
                    //位置信息
                    vo.setAddressInfo(addressJson);
                    // 设置项目类别
                    vo.setCategory(categoryMap.get(p.getId()));
                    result.add(vo);
                }
            } catch (Exception e) {
                // 解析失败则跳过该项目
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceUsageServiceImpl.java
@@ -154,7 +154,7 @@
                        .isNotNull(ClientParam::getUnderConstructionProject))
                .stream().collect(Collectors.toMap(ClientParam::getClientId, ClientParam::getUnderConstructionProject));
        Map<Integer, String> assetParamMap = clientParamMapper.selectList(new LambdaQueryWrapper<ClientParam>()
                .isNotNull(ClientParam::getAssetProject))
                        .isNotNull(ClientParam::getAssetProject))
                .stream().collect(Collectors.toMap(ClientParam::getClientId, ClientParam::getAssetProject));
        Map<Integer, List<Task>> taskMap = taskMapper.selectList(new LambdaQueryWrapper<Task>()
                        .ge(Task::getCreateTime, startTime)
@@ -228,8 +228,10 @@
                // 查询重大隐患记录(level 表示隐患等级,0 表示重大隐患)
                LambdaQueryWrapper<Record> recordWrapperPro = new LambdaQueryWrapper<>();
                recordWrapperPro.eq(Record::getDeleted, false)
                        .in(Record::getCheckTaskId, checkTaskIdsPro)
                if(checkTaskIdsPro.size()>0){
                    recordWrapperPro.eq(Record::getDeleted, false)
                            .in(Record::getCheckTaskId, checkTaskIdsPro);
                }
                ; // 重大隐患等级
                List<Record> records1 = recordMapper.selectList(recordWrapperPro);
//                long c1 = records1.stream().filter(e -> e.getLevel() != null && e.getLevel() == 0).count();
@@ -288,7 +290,7 @@
//                List<Record> recordList = records.stream().filter(e -> taskIds.contains(e.getCheckTaskId())).toList();
//                Record record = recordList.stream().max(Comparator.comparing(Record::getCreateTime)).orElse(null);
                if (task1 != null && task1.getState()==3) {
                if (task1 != null && task1.getState() == 3) {
                    deviceListVo.setCheckTime(task1.getDate().atStartOfDay());
                    deviceListVo.setCheckResult("已检查");
                } else {
@@ -506,32 +508,34 @@
            startTime = "";
        }
        LambdaQueryWrapper<Project> projectWrapper = new LambdaQueryWrapper<>();
        switch (query.getCategory()) {
            case 1:
                // 查询在建资产项目
                projectWrapper.eq(Project::getDeleted, false)
                        .ne(Project::getType, 2) // 在建工程
                        .and(wrapper -> wrapper
                                .eq(Project::getStatus, 1)  // 在建项目
                                .or(w -> w
                                        .eq(Project::getStatus, 2)  // 已完成项目
        if(query.getCategory()!=null) {
            switch (query.getCategory()) {
                case 1:
                    // 查询在建资产项目
                    projectWrapper.eq(Project::getDeleted, false)
                            .ne(Project::getType, 2) // 在建工程
                            .and(wrapper -> wrapper
                                    .eq(Project::getStatus, 1)  // 在建项目
                                    .or(w -> w
                                            .eq(Project::getStatus, 2)  // 已完成项目
                                        .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                )
                        );
                break;
            case 2:
                // 查询固定资产项目
                projectWrapper.eq(Project::getDeleted, false)
                        .eq(Project::getType, 2) // 在建工程
                        .and(wrapper -> wrapper
                                .eq(Project::getStatus, 1)  // 在建项目
                                .or(w -> w
                                        .eq(Project::getStatus, 2)  // 已完成项目
                                        .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                )
                        );
                break;
                                            .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                    )
                            );
                    break;
                case 2:
                    // 查询固定资产项目
                    projectWrapper.eq(Project::getDeleted, false)
                            .eq(Project::getType, 2) // 在建工程
                            .and(wrapper -> wrapper
                                    .eq(Project::getStatus, 1)  // 在建项目
                                    .or(w -> w
                                            .eq(Project::getStatus, 2)  // 已完成项目
                                            .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                    )
                            );
                    break;
            }
        }
        if (query.getClientId() != null) {
            projectWrapper.eq(Project::getClientId, query.getClientId());
@@ -572,32 +576,36 @@
            startTime = "";
        }
        LambdaQueryWrapper<Project> projectWrapper = new LambdaQueryWrapper<>();
        switch (query.getCategory()) {
            case 1:
                // 查询在建资产项目
                projectWrapper.eq(Project::getDeleted, false)
                        .ne(Project::getType, 2) // 在建工程
                        .and(wrapper -> wrapper
                                .eq(Project::getStatus, 1)  // 在建项目
                                .or(w -> w
                                        .eq(Project::getStatus, 2)  // 已完成项目
        if (query.getCategory() != null) {
                                        .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                )
                        );
                break;
            case 2:
                // 查询固定资产项目
                projectWrapper.eq(Project::getDeleted, false)
                        .eq(Project::getType, 2) // 在建工程
                        .and(wrapper -> wrapper
                                .eq(Project::getStatus, 1)  // 在建项目
                                .or(w -> w
                                        .eq(Project::getStatus, 2)  // 已完成项目
                                        .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                )
                        );
                break;
            switch (query.getCategory()) {
                case 1:
                    // 查询在建资产项目
                    projectWrapper.eq(Project::getDeleted, false)
                            .ne(Project::getType, 2) // 在建工程
                            .and(wrapper -> wrapper
                                    .eq(Project::getStatus, 1)  // 在建项目
                                    .or(w -> w
                                            .eq(Project::getStatus, 2)  // 已完成项目
                                            .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                    )
                            );
                    break;
                case 2:
                    // 查询固定资产项目
                    projectWrapper.eq(Project::getDeleted, false)
                            .eq(Project::getType, 2) // 在建工程
                            .and(wrapper -> wrapper
                                    .eq(Project::getStatus, 1)  // 在建项目
                                    .or(w -> w
                                            .eq(Project::getStatus, 2)  // 已完成项目
                                            .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                    )
                            );
                    break;
            }
        }
        if (query.getClientId() != null) {
            projectWrapper.eq(Project::getClientId, query.getClientId());
@@ -637,41 +645,43 @@
            startTime = "";
        }
        LambdaQueryWrapper<Project> projectWrapper = new LambdaQueryWrapper<>();
        switch (query.getCategory()) {
            case 1:
                // 查询在建资产项目
                projectWrapper
        if(query.getCategory()!=null) {
            switch (query.getCategory()) {
                case 1:
                    // 查询在建资产项目
                    projectWrapper
//                        .eq(Project::getDeleted, false)
                        .ne(Project::getType, 2) // 在建工程
                        .and(wrapper -> wrapper
                                .eq(Project::getStatus, 1)  // 在建项目
                                .or(w -> w
                                        .eq(Project::getStatus, 2)  // 已完成项目
                                        .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                )
                                .or(w -> w
                                        .isNull(Project::getStatus)  // 已完成项目
                                        .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                )
                        );
                break;
            case 2:
                // 查询固定资产项目
                projectWrapper
                            .ne(Project::getType, 2) // 在建工程
                            .and(wrapper -> wrapper
                                    .eq(Project::getStatus, 1)  // 在建项目
                                    .or(w -> w
                                            .eq(Project::getStatus, 2)  // 已完成项目
                                            .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                    )
                                    .or(w -> w
                                            .isNull(Project::getStatus)  // 已完成项目
                                            .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                    )
                            );
                    break;
                case 2:
                    // 查询固定资产项目
                    projectWrapper
//                        .eq(Project::getDeleted, false)
                        .eq(Project::getType, 2) // 在建工程
                        .and(wrapper -> wrapper
                                        .eq(Project::getStatus, 1)  // 在建项目
                                        .or(w -> w
                                                .eq(Project::getStatus, 2)  // 已完成项目
                                                .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                        )
                                        .or(w -> w
                                                        .isNull(Project::getStatus)  // 已完成项目
                            .eq(Project::getType, 2) // 在建工程
                            .and(wrapper -> wrapper
                                            .eq(Project::getStatus, 1)  // 在建项目
                                            .or(w -> w
                                                    .eq(Project::getStatus, 2)  // 已完成项目
                                                    .between(StringUtils.hasLength(startTime), Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                            )
                                            .or(w -> w
                                                            .isNull(Project::getStatus)  // 已完成项目
//                                        .between(StringUtils.hasLength(startTime),Project::getSuccessTime, startTime, endTime)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                                        )
                        );
                break;
                                            )
                            );
                    break;
            }
        }
        if (query.getClientId() != null) {
            projectWrapper.eq(Project::getClientId, query.getClientId());
ruoyi-system/src/main/java/com/ruoyi/system/vo/ErrorListVo.java
@@ -35,7 +35,7 @@
    @ApiModelProperty("检查时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime checkTime;
     //0未整改  1部分整改  2已整改  3未复查
    @ApiModelProperty("整改情况0未复查1-未整改 2-部分整改 3-已整改")
    private Integer state;
    @ApiModelProperty("责任人")
ruoyi-system/src/main/java/com/ruoyi/system/vo/ScreenUserVo.java
@@ -40,4 +40,7 @@
    @ApiModelProperty(value = "1开启 2关闭 一般隐患")
    private Integer generalHiddenDanger;
    @ApiModelProperty(value = "项目名称")
    private String projectName;
}
ruoyi-system/src/main/resources/mapper/system/DeviceUsageMapper.xml
@@ -124,7 +124,11 @@
    <select id="errorList" resultType="com.ruoyi.system.vo.ErrorListVo">
        select t1.*,t2.project_id,t2.plan_id,t3.`name` as  projectName,t4.`name` as planName
             ,t5.description as problemName,IF(t1.device_id is null ,1,2) as type,t2.create_time as checkTime
        ,IF(t6.state  is null,0,t6.state+1) as state
        ,
        case
        when t6.id is null then 3
        else t6.state
        end as state
        from record t1
                 LEFT JOIN task t2 on t1.check_task_id = t2.id
                 LEFT JOIN project t3 on t2.project_id = t3.id
@@ -132,7 +136,7 @@
                 LEFT JOIN problem t5 ON t1.problem_id = t5.id
        left join error_review t6 on t1.error_review_id = t6.id
        where t1.deleted = 0 and t2.deleted = 0  and t1.`level` =0
          <if test="query.recordIds != null">
          <if test="query.recordIds != null and query.recordIds.size()>0 ">
            and t1.id in
            <foreach item="item" index="index" collection="query.recordIds" open="(" separator="," close=")">
                #{item}
@@ -160,11 +164,21 @@
        <if test="query.type != null and query.type == 2">
            and t1.device_id is not null
        </if>
        <if test="query.startTime != null and query.startTime !='' ">
            and t2.create_time >= #{query.startTime}
        </if>
          <if test="query.endTime != null and query.endTime !='' ">
            and #{query.endTime} >= t2.create_time
        </if>
        <if test="query.content!= null and query.content!=''">
            and (t3.name like CONCAT('%', #{query.content}, '%')
                or
            t5.name like CONCAT('%', #{query.content}, '%')
                or
            t5.description like CONCAT('%', #{query.content}, '%')
                or
            t1.hierarchy_name like CONCAT('%', #{query.content}, '%')
                or
            t1.remark like CONCAT('%', #{query.content}, '%')
                )
@@ -174,7 +188,10 @@
    <select id="deviceErrorList" resultType="com.ruoyi.system.vo.ErrorListVo">
        select t1.*,t2.project_id,t2.plan_id,t3.`name` as  projectName,t4.`name` as planName
        ,t5.description as problemName,IF(t1.device_id is null ,1,2) as type,t1.create_time as checkTime
        ,IF(t6.state  is null,0,t6.state+1) as state
        ,  case
        when t6.id is null then 3
        else t6.state
        end as state
        from record t1
        LEFT JOIN task t2 on t1.check_task_id = t2.id
        LEFT JOIN project t3 on t2.project_id = t3.id
@@ -218,7 +235,10 @@
    <select id="safetyErrorList" resultType="com.ruoyi.system.vo.ErrorListVo">
        select t1.*,t2.project_id,t2.plan_id,t3.`name` as  projectName,t4.`name` as planName
        ,t5.description as problemName,IF(t1.device_id is null ,1,2) as type,t1.create_time as checkTime
        ,IF(t6.state  is null,0,t6.state+1) as state
        ,  case
        when t6.id is null then 3
        else t6.state
        end as state
        from record t1
        LEFT JOIN task t2 on t1.check_task_id = t2.id
        LEFT JOIN project t3 on t2.project_id = t3.id
ruoyi-system/src/main/resources/mapper/system/ProjectMapper.xml
@@ -25,26 +25,43 @@
        <result column="permission" property="permission" />
    </resultMap>
    <select id="getDeviceDetailCheckList" resultType="com.ruoyi.system.vo.DeviceDetailCheckListVo">
            select t1.id,t2.name planName,t2.type planType,t1.date checkTime,t1.system_fuzzy fuzzyScore,t1.system_score score,t3.risk_level riskLevel,
                   t3.contain_device_res ,t3.contain_system_res,t2.id planId
            from task t1
            left join plan t2 on t1.plan_id = t2.id
            left join eval_result t3 on t1.id = t3.check_task_id
            where t1.project_id = #{query.projectId}
            <if test="query.planName != null and query.planName != ''">
                and t2.name like concat('%',#{query.planName},'%')
            </if>
            <if test="query.planType != null">
                and t2.type = #{query.planType}
            </if>
            <if test="query.startTime != null and query.startTime != ''">
                and t1.date >= #{query.startTime}
            </if>
            <if test="query.endTime != null and query.endTime != ''">
                and  #{query.endTime} >=t1.date
            </if>
            GROUP BY t2.id
            order by t1.date desc
        SELECT
        t1.id AS id,
        t2.id AS planId,
        t2.name AS planName,
        t2.type AS planType,
        MAX(t1.date) AS checkTime,
        -- 从eval_result表获取风险等级(取fuzzy类型的)
        MAX(CASE WHEN t3.type = 'fuzzy' THEN t3.risk_level END) AS riskLevel,
        -- 从eval_result表获取设备资源(取fuzzy类型的)
        MAX(CASE WHEN t3.type = 'fuzzy' THEN t3.contain_device_res END) AS contain_device_res,
        -- 从eval_result表获取系统资源(取fuzzy类型的)
        MAX(CASE WHEN t3.type = 'fuzzy' THEN t3.contain_system_res END) AS contain_system_res,
        -- 将fuzzy类型的分数放到fuzzyScore字段,保留4位小数
        ROUND(MAX(CASE WHEN t3.type = 'fuzzy' THEN t3.score END), 4) AS fuzzyScore,
        -- 将score类型的分数放到score字段,保留4位小数
        ROUND(MAX(CASE WHEN t3.type = 'score' THEN t3.score END), 4) AS score,
        -- 也可以获取score类型的风险等级(如果需要)
        MAX(CASE WHEN t3.type = 'score' THEN t3.risk_level END) AS scoreRiskLevel
        FROM task t1
        LEFT JOIN plan t2 ON t1.plan_id = t2.id
        LEFT JOIN eval_result t3 ON t1.id = t3.check_task_id
        WHERE t1.project_id = #{query.projectId}
        <if test="query.planName != null and query.planName != ''">
            AND t2.name LIKE CONCAT('%', #{query.planName}, '%')
        </if>
        <if test="query.planType != null">
            AND t2.type = #{query.planType}
        </if>
        <if test="query.startTime != null and query.startTime != ''">
            AND t1.date >= #{query.startTime}
        </if>
        <if test="query.endTime != null and query.endTime != ''">
            AND t1.date &lt;= #{query.endTime}
        </if>
        GROUP BY t2.id, t2.name, t2.type
        HAVING t2.id IS NOT NULL
        ORDER BY MAX(t1.date) DESC
    </select>
ruoyi-system/src/main/resources/mapper/system/RecordMapper.xml
@@ -53,23 +53,26 @@
            #{item}
        </foreach>
        <if test="query.type == null">
        <if test="query.category==1">
            and t1.level = 0
        </if>
        <if test="query.content != null">
            and t1.hierarchy_name like concat('%',#{query.content},'%')
            and (t1.hierarchy_name like concat('%',#{query.content},'%') or t2.description like concat('%',#{query.content},'%'))
        </if>
        <if test="query.startTime != null and query.startTime !='' and query.endTime!=null and query.endTime !=''">
            and t1.create_time between #{query.startTime} and #{query.endTime}
        </if>
        ) as o where 1=1
        <if test="query.reformed != null">
            and o.state = #{query.reformed}
        <if test="query.state != null">
            and o.state = #{query.state}
        </if>
        <if test="query.type != null">
            and o.type = #{query.type}
        </if>
        <if test="query.level != null">
            and o.level = #{query.level}
        </if>
        order by o.create_time desc
    </select>