龚焕茏
2024-08-07 94acbd8f68123b1c17878c39494b1d8db1b7dfea
feat:大屏接口、首页考核预警
18个文件已修改
6个文件已添加
489 ■■■■■ 已修改文件
ycl-common/src/main/java/enumeration/Trend.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/query/DashboardQuery.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/screen/DeptAreaVO.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/screen/MonitorRateVO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/screen/MonitorTotalVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/DashboardController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/HomeController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/CheckScoreMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/ICheckScoreService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/system/mapper/SysDeptMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/system/service/ISysDeptService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/system/SysDeptMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/enumeration/Trend.java
New file
@@ -0,0 +1,11 @@
package enumeration;
/**
 * @author gonghl
 * @since 2024-8-7
 */
public enum Trend {
    RISING, FALLING, STABLE
}
ycl-pojo/src/main/java/com/ycl/platform/domain/query/DashboardQuery.java
New file
@@ -0,0 +1,22 @@
package com.ycl.platform.domain.query;
import lombok.Data;
/**
 * @author gonghl
 * @since 2024/8/6 下午 3:01
 */
@Data
public class DashboardQuery {
    /**
     * 数据权限:1省厅,2市局,3其他
     */
    private Integer dataScope;
    /**
     * 部门id
     */
    private Integer deptId;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/screen/DeptAreaVO.java
New file
@@ -0,0 +1,22 @@
package com.ycl.platform.domain.vo.screen;
import lombok.Data;
/**
 * @author gonghl
 * @since 2024/8/7 上午 10:06
 */
@Data
public class DeptAreaVO {
    /**
     * 部门id
     */
    private Integer deptId;
    /**
     * 部门区域
     */
    private String area;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/screen/MonitorRateVO.java
New file
@@ -0,0 +1,62 @@
package com.ycl.platform.domain.vo.screen;
import lombok.Data;
/**
 * @author gonghl
 * @since 2024/8/7 上午 10:06
 */
@Data
public class MonitorRateVO {
    /**
     * 地区
     */
    private String area;
    /**
     * 人脸设备
     */
    private Double faceRate;
    /**
     * 人脸正常数
     */
    private Integer faceNormalNum;
    /**
     * 人脸异常数
     */
    private Integer faceErrorNum;
    /**
     * 车辆设备
     */
    private Double carRate;
    /**
     * 车辆正常数
     */
    private Integer carNormalNum;
    /**
     * 车辆异常数
     */
    private Integer carErrorNum;
    /**
     * 视频设备
     */
    private Double videoRate;
    /**
     * 视频正常数
     */
    private Integer videoNormalNum;
    /**
     * 视频异常数
     */
    private Integer videoErrorNum;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/screen/MonitorTotalVO.java
New file
@@ -0,0 +1,48 @@
package com.ycl.platform.domain.vo.screen;
import enumeration.Trend;
import lombok.Data;
/**
 * @author gonghl
 * @since 2024/8/7 上午 10:06
 */
@Data
public class MonitorTotalVO {
    /**
     * 设备类型
     */
    private String type;
    /**
     * 设备总数
     */
    private Integer totalNum;
    /**
     * 设备总数趋势
     */
    private Trend totalTrend;
    /**
     * 设备正常数
     */
    private Integer normalNum;
    /**
     * 设备正常数趋势
     */
    private Trend normalTrend;
    /**
     * 设备异常数
     */
    private Integer errorNum;
    /**
     * 设备异常数趋势
     */
    private Trend errorTrend;
}
ycl-server/src/main/java/com/ycl/platform/controller/DashboardController.java
New file
@@ -0,0 +1,50 @@
package com.ycl.platform.controller;
import com.ycl.platform.domain.query.DashboardQuery;
import com.ycl.platform.service.ITMonitorService;
import com.ycl.platform.service.WorkOrderService;
import com.ycl.system.service.ISysDeptService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import pojo.AjaxResult;
/**
 * 运维考核大屏
 *
 * @author gonghl
 * @since 2024/8/6 下午 2:35
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/dashboard")
public class DashboardController {
    private final WorkOrderService workOrderService;
    private final ITMonitorService monitorService;
    private final ISysDeptService deptService;
    @GetMapping("/department")
    public AjaxResult department() {
        return AjaxResult.success(deptService.dashboard());
    }
    @GetMapping("/workOrder")
    public AjaxResult workOrder(DashboardQuery dashboardQuery) {
        return AjaxResult.success(workOrderService.dashboard(dashboardQuery));
    }
    @GetMapping("/monitor/total")
    public AjaxResult monitorTotal(DashboardQuery dashboardQuery) {
        return AjaxResult.success(monitorService.monitorTotal(dashboardQuery));
    }
    @GetMapping("/monitor/rate")
    public AjaxResult monitorRate(DashboardQuery dashboardQuery) {
        return AjaxResult.success(monitorService.monitorRate(dashboardQuery));
    }
}
ycl-server/src/main/java/com/ycl/platform/controller/HomeController.java
@@ -23,6 +23,7 @@
    private final WorkOrderService workOrderService;
    private final YwPointService ywPointService;
    private final IContractScoreService contractScoreService;
    private final ICheckScoreService checkScoreService;
    @GetMapping("/ywUnitList")
    public AjaxResult ywUnitList() {
@@ -49,6 +50,11 @@
        return AjaxResult.success(ywUnitService.ywUnitCount());
    }
    @GetMapping("/checkScore")
    public AjaxResult checkScore() {
        return AjaxResult.success(checkScoreService.home());
    }
    @GetMapping("/calculate")
    public AjaxResult calculate() {
        return AjaxResult.success(contractScoreService.calculate());
ycl-server/src/main/java/com/ycl/platform/mapper/CheckScoreMapper.java
@@ -74,4 +74,10 @@
    void saveBatch(List<CheckScore> scoreList);
    List<CheckScore> selectCheckScoreMap(CheckScore checkScore);
    /**
     * 首页考核预警
     * @return 数据
     */
    List<Map<String, Object>> home();
}
ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
@@ -2,8 +2,11 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycl.platform.domain.entity.TMonitor;
import com.ycl.platform.domain.query.DashboardQuery;
import com.ycl.platform.domain.query.HomeQuery;
import com.ycl.platform.domain.vo.TMonitorVO;
import com.ycl.platform.domain.vo.screen.MonitorRateVO;
import com.ycl.platform.domain.vo.screen.MonitorTotalVO;
import java.util.List;
import java.util.Map;
@@ -92,4 +95,18 @@
    List<Map<String, Object>> home(HomeQuery monitorQuery);
    List<TMonitorVO> selectListByIds(List<String> list);
    /**
     * 大屏设备总数
     * @param dashboardQuery 查询条件
     * @return 数据
     */
    List<MonitorTotalVO> monitorTotal(DashboardQuery dashboardQuery);
    /**
     * 大屏设备正常率
     * @return 数据
     */
    List<MonitorRateVO> monitorRate(DashboardQuery dashboardQuery);
}
ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
@@ -3,10 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ycl.platform.domain.entity.WorkOrder;
import com.ycl.platform.domain.query.DistributeWorkOrderQuery;
import com.ycl.platform.domain.query.HomeQuery;
import com.ycl.platform.domain.query.ScreenQuery;
import com.ycl.platform.domain.query.WorkOrderQuery;
import com.ycl.platform.domain.query.*;
import com.ycl.platform.domain.vo.WorkOrderVO;
import com.ycl.platform.domain.vo.YwPointJobVO;
import com.ycl.platform.domain.vo.screen.ScreenWorkOrderVO;
@@ -50,4 +47,18 @@
     * @return 数据
     */
    List<Map<String, Object>> home(HomeQuery monitorQuery);
    /**
     * 大屏工单总数
     * @param dashboardQuery 查询条件
     * @return 数据
     */
    Map<String, Object> workOrderTotal(DashboardQuery dashboardQuery);
    /**
     * 大屏工单分区
     * @param dashboardQuery 查询条件
     * @return 数据
     */
    Map<String, Object> workOrderRegion(DashboardQuery dashboardQuery);
}
ycl-server/src/main/java/com/ycl/platform/service/ICheckScoreService.java
@@ -49,6 +49,12 @@
    List<CheckScore> page(CheckScore checkScore);
    void exportIndex(HttpServletResponse response,CheckScore checkScore) throws IOException;
    /**
     * 首页考核预警
     * @return 数据
     */
    List<Map<String, Object>> home();
//    /**
//     * 新增考核积分明细
//     *
ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java
@@ -2,8 +2,11 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ycl.platform.domain.entity.TMonitor;
import com.ycl.platform.domain.query.DashboardQuery;
import com.ycl.platform.domain.query.HomeQuery;
import com.ycl.platform.domain.vo.TMonitorVO;
import com.ycl.platform.domain.vo.screen.MonitorRateVO;
import com.ycl.platform.domain.vo.screen.MonitorTotalVO;
import java.util.List;
import java.util.Map;
@@ -84,4 +87,18 @@
     * @return 数据
     */
    Map<String, Object> home(HomeQuery monitorQuery);
    /**
     * 大屏设备数据
     * @param dashboardQuery 查询条件
     * @return 数据
     */
    List<MonitorTotalVO> monitorTotal(DashboardQuery dashboardQuery);
    /**
     * 大屏设备正常率
     * @return 数据
     */
    List<MonitorRateVO> monitorRate(DashboardQuery dashboardQuery);
}
ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
@@ -1,14 +1,12 @@
package com.ycl.platform.service;
import com.ycl.platform.domain.entity.WorkOrder;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ycl.platform.domain.entity.WorkOrder;
import com.ycl.platform.domain.form.*;
import com.ycl.platform.domain.query.DistributeWorkOrderQuery;
import com.ycl.platform.domain.query.HomeQuery;
import com.ycl.platform.domain.query.ScreenQuery;
import com.ycl.platform.domain.query.*;
import com.ycl.platform.domain.vo.DistributeWorkOrderVO;
import com.ycl.system.Result;
import com.ycl.platform.domain.query.WorkOrderQuery;
import java.util.List;
import java.util.Map;
@@ -159,4 +157,12 @@
     * @return 数据
     */
    Map<String, Object> home(HomeQuery monitorQuery);
    /**
     * 大屏工单
     * @param dashboardQuery 查询条件
     * @return 数据
     */
    Map<String, Object> dashboard(DashboardQuery dashboardQuery);
}
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
@@ -290,6 +290,10 @@
        }
    }
    @Override
    public List<Map<String, Object>> home() {
        return baseMapper.home();
    }
    //    /**
//     * 新增考核积分
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java
@@ -3,12 +3,16 @@
import annotation.DataScope;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.platform.domain.entity.TMonitor;
import com.ycl.platform.domain.query.DashboardQuery;
import com.ycl.platform.domain.query.HomeQuery;
import com.ycl.platform.domain.vo.TMonitorVO;
import com.ycl.platform.domain.vo.screen.MonitorRateVO;
import com.ycl.platform.domain.vo.screen.MonitorTotalVO;
import com.ycl.platform.mapper.TMonitorMapper;
import com.ycl.platform.service.ITMonitorService;
import com.ycl.system.service.ISysConfigService;
import com.ycl.utils.StringUtils;
import com.ycl.utils.redis.RedisCache;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -31,6 +35,8 @@
    private TMonitorMapper tMonitorMapper;
    @Autowired
    private ISysConfigService configService;
    @Autowired
    private RedisCache redisCache;
    /**
     * 查询设备资产
@@ -143,4 +149,15 @@
        }
        return dataMap;
    }
    @Override
    public List<MonitorTotalVO> monitorTotal(DashboardQuery dashboardQuery) {
        List<MonitorTotalVO> list = baseMapper.monitorTotal(dashboardQuery);
        return list;
    }
    @Override
    public List<MonitorRateVO> monitorRate(DashboardQuery dashboardQuery) {
        return baseMapper.monitorRate(dashboardQuery);
    }
}
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -8,10 +8,7 @@
import com.ycl.exception.ServiceException;
import com.ycl.platform.domain.entity.*;
import com.ycl.platform.domain.form.*;
import com.ycl.platform.domain.query.DistributeWorkOrderQuery;
import com.ycl.platform.domain.query.HomeQuery;
import com.ycl.platform.domain.query.ScreenQuery;
import com.ycl.platform.domain.query.WorkOrderQuery;
import com.ycl.platform.domain.query.*;
import com.ycl.platform.domain.vo.DistributeWorkOrderVO;
import com.ycl.platform.domain.vo.WorkOrderVO;
import com.ycl.platform.domain.vo.WorkOrderYwConditionRecordVO;
@@ -465,4 +462,12 @@
        dataMap.put("pending", data3);
        return dataMap;
    }
    @Override
    public Map<String, Object> dashboard(DashboardQuery dashboardQuery) {
        HashMap<String, Object> map = new HashMap<>();
        map.put("workOrderTotal", baseMapper.workOrderTotal(dashboardQuery));
        map.put("workOrderRegion", baseMapper.workOrderRegion(dashboardQuery));
        return map;
    }
}
ycl-server/src/main/java/com/ycl/system/mapper/SysDeptMapper.java
@@ -1,6 +1,7 @@
package com.ycl.system.mapper;
import com.ycl.platform.base.Cascader;
import com.ycl.platform.domain.vo.screen.DeptAreaVO;
import com.ycl.system.entity.SysDept;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -142,4 +143,10 @@
     * @return
     */
    List<Long> selectByParentId(@Param("id") Long deptId);
    /**
     * 大屏地区
     * @return 地区
     */
    List<DeptAreaVO> dashboard();
}
ycl-server/src/main/java/com/ycl/system/service/ISysDeptService.java
@@ -1,5 +1,6 @@
package com.ycl.system.service;
import com.ycl.platform.domain.vo.screen.DeptAreaVO;
import com.ycl.system.Result;
import com.ycl.system.domain.TreeSelect;
import com.ycl.system.entity.SysDept;
@@ -141,4 +142,10 @@
     * @return
     */
    Result cascader();
    /**
     * 大屏地区
     * @return 地区
     */
    List<DeptAreaVO> dashboard();
}
ycl-server/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java
@@ -4,6 +4,7 @@
import com.ycl.exception.ServiceException;
import com.ycl.platform.base.BaseSelect;
import com.ycl.platform.base.Cascader;
import com.ycl.platform.domain.vo.screen.DeptAreaVO;
import com.ycl.system.Result;
import com.ycl.system.domain.TreeSelect;
import com.ycl.system.entity.SysDept;
@@ -405,4 +406,9 @@
    {
        return getChildList(list, t).size() > 0;
    }
    @Override
    public List<DeptAreaVO> dashboard() {
        return deptMapper.dashboard();
    }
}
ycl-server/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -183,4 +183,8 @@
            level DESC
    </select>
    <select id="dashboard" resultType="com.ycl.platform.domain.vo.screen.DeptAreaVO">
        SELECT dept_id, area FROM sys_dept WHERE status = '0' AND del_flag = 0 AND area IS NOT NULL
    </select>
</mapper>
ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
@@ -136,4 +136,19 @@
          AND DATE_FORMAT(tcs.create_time, '%Y-%m') BETWEEN DATE_FORMAT(#{startDate}, '%Y-%m') AND DATE_FORMAT(#{endDate}, '%Y-%m')
    </select>
    <select id="home" resultType="java.util.Map">
        SELECT
            DATE_FORMAT(cs.create_time, '%Y-%m-%d %h:%i:%s') AS createTime,
            d.area,
            CASE WHEN cs.examine_tag = '0' THEN '省厅' WHEN cs.examine_tag = '1' THEN '市局' WHEN cs.examine_tag = '2' THEN '' END AS examineTag,
            ct.template_name AS templateName,
            cs.score
        FROM
            t_check_score cs
                LEFT JOIN t_check_template ct ON cs.template_id = ct.id
                LEFT JOIN sys_dept d ON cs.dept_id = d.dept_id
        WHERE cs.score > ct.alarm_score
        ORDER BY cs.create_time DESC
    </select>
</mapper>
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -346,7 +346,102 @@
        <if test="dateRange != null and dateRange.size > 0">
            AND DATE_FORMAT(w.create_time, '%Y-%m') BETWEEN #{dateRange[0]} AND #{dateRange[1]}
        </if>
        GROUP BY months
        ORDER BY months
    </select>
    <select id="monitorTotal" resultType="com.ycl.platform.domain.vo.screen.MonitorTotalVO">
        SELECT
            '视频' as type,
            COUNT(p1.id) AS totalNum,
            COUNT(p2.id) AS errorNum,
            COUNT(p1.id) - COUNT(p2.id) AS normalNum
        FROM t_monitor
        LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number <if test="dataScope == 1"> AND p1.province_tag = 'province' </if>
        LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.recovery = 1 <if test="dataScope == 1"> AND p2.province_tag = 'province' </if>
        WHERE INSTR(camera_fun_type, 1)
        <if test="deptId != null"> AND p1.dept_id = #{deptId} AND p2.dept_id = #{deptId} </if>
        UNION ALL
        SELECT
            '车辆' as type,
            COUNT(p1.id) AS totalNum,
            COUNT(p2.id) AS errorNum,
            COUNT(p1.id) - COUNT(p2.id) AS normalNum
        FROM t_monitor
        LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number <if test="dataScope == 1"> AND p1.province_tag = 'province' </if>
        LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.recovery = 1 <if test="dataScope == 1"> AND p2.province_tag = 'province' </if>
        WHERE INSTR(camera_fun_type, 2)
        <if test="deptId != null"> AND p1.dept_id = #{deptId} AND p2.dept_id = #{deptId} </if>
        UNION ALL
        SELECT
            '人脸' as type,
            COUNT(p1.id) AS totalNum,
            COUNT(p2.id) AS errorNum,
            COUNT(p1.id) - COUNT(p2.id) AS normalNum
        FROM t_monitor
        LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number <if test="dataScope == 1"> AND p1.province_tag = 'province' </if>
        LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.recovery = 1 <if test="dataScope == 1"> AND p2.province_tag = 'province' </if>
        WHERE INSTR(camera_fun_type, 3)
        <if test="deptId != null"> AND p1.dept_id = #{deptId} AND p2.dept_id = #{deptId} </if>
    </select>
    <select id="monitorRate" resultType="com.ycl.platform.domain.vo.screen.MonitorRateVO">
        SELECT
            *
        FROM
            -- 人脸设备
            (
                SELECT
                    d.area,
                    IFNULL(ROUND((COUNT(m.id) - COUNT(m2.id)) / COUNT(m.id) * 100, 2), 0) AS faceRate,
                    COUNT(m.id) - COUNT(m2.id) AS faceNormalNum,
                    COUNT(m2.id) AS faceErrorNum
                FROM
                    sys_dept d
                        LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 <if test="dataScope == 1"> AND p.province_tag = 'province' </if>
                        LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.recovery = 1 <if test="dataScope == 1"> AND p2.province_tag = 'province' </if>
                        LEFT JOIN t_monitor m ON m.serial_number = p.serial_number AND INSTR(m.camera_fun_type, 1)
                        LEFT JOIN t_monitor m2 ON m2.serial_number = p2.serial_number AND INSTR(m2.camera_fun_type, 1)
                WHERE d.del_flag = 0 AND d.area IS NOT NULL
                GROUP BY d.area, d.dept_id
                ORDER BY d.dept_id
            ) a
        INNER JOIN
            -- 车辆设备
            (
                SELECT
                    d.area,
                    IFNULL(ROUND((COUNT(m.id) - COUNT(m2.id)) / COUNT(m.id) * 100, 2), 0) AS carRate,
                    COUNT(m.id) - COUNT(m2.id) AS carNormalNum,
                    COUNT(m2.id) AS carErrorNum
                FROM
                    sys_dept d
                        LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 <if test="dataScope == 1"> AND p.province_tag = 'province' </if>
                        LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.recovery = 1 <if test="dataScope == 1"> AND p2.province_tag = 'province' </if>
                        LEFT JOIN t_monitor m ON m.serial_number = p.serial_number AND INSTR(m.camera_fun_type, 2)
                        LEFT JOIN t_monitor m2 ON m2.serial_number = p2.serial_number AND INSTR(m2.camera_fun_type, 2)
                WHERE d.del_flag = 0 AND d.area IS NOT NULL
                GROUP BY d.area, d.dept_id
                ORDER BY d.dept_id
            ) b ON a.area = b.area
        INNER JOIN
            -- 视频设备
            (
                SELECT
                    d.area,
                    IFNULL(ROUND((COUNT(m.id) - COUNT(m2.id)) / COUNT(m.id) * 100, 2), 0) AS videoRate,
                    COUNT(m.id) - COUNT(m2.id) AS videoNormalNum,
                    COUNT(m2.id) AS videoErrorNum
                FROM
                    sys_dept d
                        LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 <if test="dataScope == 1"> AND p.province_tag = 'province' </if>
                        LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.recovery = 1 <if test="dataScope == 1"> AND p2.province_tag = 'province' </if>
                        LEFT JOIN t_monitor m ON m.serial_number = p.serial_number AND INSTR(m.camera_fun_type, 3)
                        LEFT JOIN t_monitor m2 ON m2.serial_number = p2.serial_number AND INSTR(m2.camera_fun_type, 3)
                WHERE d.del_flag = 0 AND d.area IS NOT NULL
                GROUP BY d.area, d.dept_id
                ORDER BY d.dept_id
            ) c ON a.area = c.area
    </select>
</mapper>
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -139,4 +139,17 @@
        </if>
    </select>
    <select id="workOrderTotal" resultType="java.util.Map">
        SELECT
            COUNT(*) AS totalNum,
            COUNT(IF(status = 'DISTRIBUTED', 1, NULL)) + COUNT(IF(status = 'AUDITING_FAIL', 1, NULL)) + COUNT(IF(status = 'WAIT_DISTRIBUTE', 1, NULL)) AS todoNum,
            COUNT(IF(status = 'YW_HANDLE', 1, NULL)) + COUNT(IF(status = 'AUDITING_SUCCESS', 1, NULL)) + COUNT(IF(status = 'AUDITING', 1, NULL)) AS doneNum
        FROM t_work_order w
        WHERE w.deleted = 0
    </select>
    <select id="workOrderRegion" resultType="java.util.Map">
        SELECT * FROM t_work_order limit 1
    </select>
</mapper>
ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml
@@ -55,10 +55,10 @@
    <select id="home" resultType="com.ycl.platform.domain.entity.YwPoint">
        <![CDATA[
        SELECT id, point_name, start_time, end_time, status
        SELECT t_yw_point.id, point_name, start_time, end_time, status, unit_name AS remark
        FROM t_yw_point
        WHERE
        deleted = 0
        LEFT JOIN t_yw_unit ON t_yw_unit.id = t_yw_point.unit_id AND t_yw_point.deleted = 0
        WHERE t_yw_point.deleted = 0
        AND TIMESTAMPDIFF(MONTH, NOW(), end_time) <= (SELECT config_value FROM sys_config WHERE config_key = 'operation.and.maintenance.expiration.warning.time')
        ORDER BY end_time
        ]]>