|
@@ -0,0 +1,102 @@
|
|
|
|
|
+<?xml version="1.0" encoding="UTF-8" ?>
|
|
|
|
|
+<!DOCTYPE mapper
|
|
|
|
|
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
|
|
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
|
|
|
+<mapper namespace="com.zksy.system.mapper.PortalMapper">
|
|
|
|
|
+
|
|
|
|
|
+ <resultMap id="PortalStatisticsResult" type="com.zksy.system.domain.vo.PortalStatistics">
|
|
|
|
|
+ <result property="deviceTotal" column="device_total"/>
|
|
|
|
|
+ <result property="offlineDeviceCount" column="offline_device_count"/>
|
|
|
|
|
+ <result property="alarmingDeviceCount" column="alarming_device_count"/>
|
|
|
|
|
+ <result property="todayWarningCount" column="today_warning_count"/>
|
|
|
|
|
+ <result property="yesterdayWarningCount" column="yesterday_warning_count"/>
|
|
|
|
|
+ <result property="todayAlarmCount" column="today_alarm_count"/>
|
|
|
|
|
+ <result property="yesterdayAlarmCount" column="yesterday_alarm_count"/>
|
|
|
|
|
+ </resultMap>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- 全网口径,不关联用户、角色或部门数据范围。 -->
|
|
|
|
|
+ <select id="selectStatistics" resultMap="PortalStatisticsResult">
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ equipment.device_total,
|
|
|
|
|
+ equipment.offline_device_count,
|
|
|
|
|
+ equipment.alarming_device_count,
|
|
|
|
|
+ warning.today_warning_count,
|
|
|
|
|
+ warning.yesterday_warning_count,
|
|
|
|
|
+ alarm.today_alarm_count,
|
|
|
|
|
+ alarm.yesterday_alarm_count
|
|
|
|
|
+ FROM (
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ COUNT(*) AS device_total,
|
|
|
|
|
+ COALESCE(SUM(CASE WHEN latest_status.online_status = 0 THEN 1 ELSE 0 END), 0) AS offline_device_count,
|
|
|
|
|
+ COALESCE(SUM(CASE WHEN latest_status.alarm_status = 1 THEN 1 ELSE 0 END), 0) AS alarming_device_count
|
|
|
|
|
+ FROM app_user.equipment_base equipment_base
|
|
|
|
|
+ LEFT JOIN LATERAL (
|
|
|
|
|
+ SELECT status.online_status, status.alarm_status
|
|
|
|
|
+ FROM app_user.equipment_status status
|
|
|
|
|
+ WHERE status.equipment_id = equipment_base.equipment_id
|
|
|
|
|
+ AND status.del_flag = '0'
|
|
|
|
|
+ ORDER BY status.status_update_time DESC NULLS LAST, status.status_id DESC
|
|
|
|
|
+ LIMIT 1
|
|
|
|
|
+ ) latest_status ON TRUE
|
|
|
|
|
+ ) equipment
|
|
|
|
|
+ CROSS JOIN (
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ COALESCE(SUM(CASE
|
|
|
|
|
+ WHEN early_warning.status != 'DRAFT'
|
|
|
|
|
+ AND early_warning.publish_time >= CURRENT_DATE
|
|
|
|
|
+ AND early_warning.publish_time < CAST(CURRENT_DATE AS TIMESTAMP) + CAST('1 day' AS INTERVAL)
|
|
|
|
|
+ THEN 1 ELSE 0 END), 0) AS today_warning_count,
|
|
|
|
|
+ COALESCE(SUM(CASE
|
|
|
|
|
+ WHEN early_warning.status != 'DRAFT'
|
|
|
|
|
+ AND early_warning.publish_time >= CAST(CURRENT_DATE AS TIMESTAMP) - CAST('1 day' AS INTERVAL)
|
|
|
|
|
+ AND early_warning.publish_time < CURRENT_DATE
|
|
|
|
|
+ THEN 1 ELSE 0 END), 0) AS yesterday_warning_count
|
|
|
|
|
+ FROM app_user.early_warning early_warning
|
|
|
|
|
+ WHERE early_warning.status != 'DRAFT'
|
|
|
|
|
+ AND early_warning.publish_time >= CAST(CURRENT_DATE AS TIMESTAMP) - CAST('1 day' AS INTERVAL)
|
|
|
|
|
+ AND early_warning.publish_time < CAST(CURRENT_DATE AS TIMESTAMP) + CAST('1 day' AS INTERVAL)
|
|
|
|
|
+ ) warning
|
|
|
|
|
+ CROSS JOIN (
|
|
|
|
|
+ SELECT
|
|
|
|
|
+ COALESCE(SUM(CASE
|
|
|
|
|
+ WHEN alarm_data.audit_status = 1
|
|
|
|
|
+ AND alarm_data.create_time >= CURRENT_DATE
|
|
|
|
|
+ AND alarm_data.create_time < CAST(CURRENT_DATE AS TIMESTAMP) + CAST('1 day' AS INTERVAL)
|
|
|
|
|
+ THEN 1 ELSE 0 END), 0) AS today_alarm_count,
|
|
|
|
|
+ COALESCE(SUM(CASE
|
|
|
|
|
+ WHEN alarm_data.audit_status = 1
|
|
|
|
|
+ AND alarm_data.create_time >= CAST(CURRENT_DATE AS TIMESTAMP) - CAST('1 day' AS INTERVAL)
|
|
|
|
|
+ AND alarm_data.create_time < CURRENT_DATE
|
|
|
|
|
+ THEN 1 ELSE 0 END), 0) AS yesterday_alarm_count
|
|
|
|
|
+ FROM app_user.alarm_data alarm_data
|
|
|
|
|
+ WHERE alarm_data.audit_status = 1
|
|
|
|
|
+ AND alarm_data.create_time >= CAST(CURRENT_DATE AS TIMESTAMP) - CAST('1 day' AS INTERVAL)
|
|
|
|
|
+ AND alarm_data.create_time < CAST(CURRENT_DATE AS TIMESTAMP) + CAST('1 day' AS INTERVAL)
|
|
|
|
|
+ ) alarm
|
|
|
|
|
+ </select>
|
|
|
|
|
+
|
|
|
|
|
+ <resultMap id="PortalNoticeResult" type="com.zksy.system.domain.SysNotice">
|
|
|
|
|
+ <id property="noticeId" column="notice_id"/>
|
|
|
|
|
+ <result property="noticeTitle" column="notice_title"/>
|
|
|
|
|
+ <result property="noticeType" column="notice_type"/>
|
|
|
|
|
+ <result property="noticeContent" column="notice_content"/>
|
|
|
|
|
+ <result property="status" column="status"/>
|
|
|
|
|
+ <result property="createBy" column="create_by"/>
|
|
|
|
|
+ <result property="createTime" column="create_time"/>
|
|
|
|
|
+ </resultMap>
|
|
|
|
|
+
|
|
|
|
|
+ <select id="selectNotices" resultMap="PortalNoticeResult">
|
|
|
|
|
+ SELECT notice_id, notice_title, notice_type, status, create_by, create_time
|
|
|
|
|
+ FROM app_user.sys_notice
|
|
|
|
|
+ WHERE status = '0'
|
|
|
|
|
+ ORDER BY create_time DESC NULLS LAST, notice_id DESC
|
|
|
|
|
+ LIMIT #{limit}
|
|
|
|
|
+ </select>
|
|
|
|
|
+
|
|
|
|
|
+ <select id="selectNoticeById" resultMap="PortalNoticeResult">
|
|
|
|
|
+ SELECT notice_id, notice_title, notice_type, notice_content, status, create_by, create_time
|
|
|
|
|
+ FROM app_user.sys_notice
|
|
|
|
|
+ WHERE notice_id = #{noticeId}
|
|
|
|
|
+ AND status = '0'
|
|
|
|
|
+ </select>
|
|
|
|
|
+</mapper>
|