<?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.zcxk.dao.MonitorDataReportMapper">

    <resultMap id="MonitorDataChartReportMap" type="com.zcxk.dto.MonitorDataChartReportDeviceDto">
        <result property="devoceCode" column="devoceCode" jdbcType="INTEGER"/>
        <result property="deviceName" column="deviceName" jdbcType="INTEGER"/>
        <collection property="attributeData" resultMap="AttributeData"/>
    </resultMap>

    <resultMap id="AttributeData" type="com.zcxk.dto.MonitorDataChartReportAttributeDto">
        <result property="attributeType" column="attributeType"/>
        <result property="attributeName" column="attributeName"/>
        <result property="unit" column="unit"/>
        <collection property="monitorDataChartReportValue" resultMap="MonitorDataChartReportValue"/>
    </resultMap>

    <resultMap id="MonitorDataChartReportValue" type="com.zcxk.dto.MonitorDataChartReportValueDto">
        <result property="dateLabel" column="dateLabel" />
        <result property="dateStringLabel" column="dateStringLabel"/>
        <result property="monitorData" column="monitorData"/>
        <result property="data" column="data"/>
        <result property="date" column="date"/>
    </resultMap>

    <sql id="MonitorDataReportJoins">
        left join sms_device_parm dp on dp.DEVICE_ID=r.DEVICE_ID and dp.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_device_attribute da on da.id=r.ATTRIBUTE_ID
        left join sms_device d on d.id=r.DEVICE_ID
    </sql>
    <!-- 图表 -->
    <select id="MonitorDataChartReportByDay" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`HOUR` AS "dateLabel",
        CONCAT( s.SCENE_NAME, r.DEVICE_NAME ) AS "deviceName",
        r.DEVICE_CODE AS "devoceCode",
        IFNULL(p.REMARK, r.ATTRIBUTE_NAME) AS "attributeName",
        da.unit AS "unit",

        ROUND( sum(r.AVG_VALUE), 3 ) AS "data",
        max(r.COLLECT_DATE) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_day_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        LEFT JOIN sms_device_attribute da ON da.id = r.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        left join sms_scene s on s.id=p.PARENT_SCENE_ID
        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        and p.PARENT_SCENE_ID=#{sceneId}
        and r.year=#{year}
        and r.month=#{month}
        and r.day=#{day}
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        group by r.hour ,s.SCENE_NAME,r.DEVICE_NAME,r.DEVICE_CODE,p.REMARK,r.ATTRIBUTE_NAME,da.unit
        ORDER BY r.`HOUR` ASC

    </select>
    <select id="MonitorDataChartReportByMonth" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`day` AS "dateLabel",
        CONCAT( s.SCENE_NAME, r.DEVICE_NAME ) AS "deviceName",
        r.DEVICE_CODE AS "devoceCode",
        IFNULL(p.REMARK, r.ATTRIBUTE_NAME) AS "attributeName",
        da.unit AS "unit",

        ROUND( sum(r.AVG_VALUE), 3 ) AS "data",
        max(r.COLLECT_DATE) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_month_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        LEFT JOIN sms_device_attribute da ON da.id = r.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        left join sms_scene s on s.id=p.PARENT_SCENE_ID
        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        and p.PARENT_SCENE_ID=#{sceneId}
        and r.year=#{year}
        and r.month=#{month}
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        group by r.day ,s.SCENE_NAME,r.DEVICE_NAME,r.DEVICE_CODE,p.REMARK,r.ATTRIBUTE_NAME,da.unit
        ORDER BY r.`day` ASC
    </select>
    <select id="MonitorDataChartReportByYear" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`month` AS "dateLabel",
        CONCAT( s.SCENE_NAME, r.DEVICE_NAME ) AS "deviceName",
        r.DEVICE_CODE AS "devoceCode",
        IFNULL(p.REMARK, r.ATTRIBUTE_NAME) AS "attributeName",
        da.unit AS "unit",

        ROUND( sum(r.AVG_VALUE), 3 ) AS "data",
        max(r.COLLECT_DATE) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_year_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        LEFT JOIN sms_device_attribute da ON da.id = r.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        left join sms_scene s on s.id=p.PARENT_SCENE_ID
        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        and p.PARENT_SCENE_ID=#{sceneId}
        and r.year=#{year}
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        group by r.month ,s.SCENE_NAME,r.DEVICE_NAME,r.DEVICE_CODE,p.REMARK,r.ATTRIBUTE_NAME,da.unit
        ORDER BY r.`month` ASC
    </select>

    <!-- 对比————用水量、耗电量 -->
    <select id="MonitorDataEnergyReportByDay" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`HOUR` AS "dateLabel",
        IF( p.parm_type = 5, '耗电量', IF( p.parm_type = 4, '取水量', '用水量' ) ) AS "attributeName",
        s.SCENE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        da.unit AS "unit",

        ifnull( ROUND( sum( r.SUM_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_day_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_scene s on s.id=p.parent_scene_id
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        WHERE p.`STATUS`= 1
        <if test="sceneType != null and sceneType == 1">
            and p.parm_type in (4,5)
        </if>
        <if test="sceneType == null or  sceneType == 0">
            and p.parm_type in (3,5)
        </if>

        and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        AND r.YEAR = #{year}  and r.month=#{month}  and r.day=#{day}
        <if test="sceneIds != null and sceneIds.size()>0">
            and p.PARENT_SCENE_ID in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY s.SCENE_NAME,p.parm_type,da.unit,r.HOUR
        order by r.`hour` asc
    </select>
    <select id="MonitorDataEnergyReportByMonth" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`day` AS "dateLabel",
        <if test="sceneType != null and sceneType == 1">
            IF( p.parm_type = 5, '耗电量','取水量'  ) AS "attributeName",
        </if>
        <if test="sceneType == null or sceneType == 0">
            IF( p.parm_type = 5, '耗电量','用水量'  ) AS "attributeName",
        </if>
        s.SCENE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        da.unit AS "unit",

        ifnull( ROUND( sum( r.SUM_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_month_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_scene s on s.id=p.parent_scene_id
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        WHERE p.`STATUS`= 1
        <if test="sceneType != null and sceneType == 1">
            and p.parm_type in (4,5)
        </if>
        <if test="sceneType == null or  sceneType == 0">
            and p.parm_type in (3,5)
        </if>
        and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        AND r.YEAR = #{year}  and r.month=#{month}
        <if test="sceneIds != null and sceneIds.size()>0">
            and p.PARENT_SCENE_ID in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY s.SCENE_NAME,p.parm_type,da.unit,r.day
        order by r.`day` asc
    </select>
    <select id="MonitorDataEnergyReportByYear" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`month` AS "dateLabel",
        <if test="sceneType != null and sceneType == 1">
            IF( p.parm_type = 5, '耗电量','取水量'  ) AS "attributeName",
        </if>
        <if test="sceneType == null or sceneType == 0">
            IF( p.parm_type = 5, '耗电量','用水量'  ) AS "attributeName",
        </if>
        s.SCENE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        da.unit AS "unit",

        ifnull( ROUND( sum( r.SUM_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_year_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_scene s on s.id=p.parent_scene_id
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        WHERE p.`STATUS`= 1
        <if test="sceneType != null and sceneType == 1">
            and p.parm_type in (4,5)
        </if>
        <if test="sceneType == null or  sceneType == 0">
            and p.parm_type in (3,5)
        </if>
        and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        AND r.YEAR = #{year}
        <if test="sceneIds != null and sceneIds.size()>0">
            and p.PARENT_SCENE_ID in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY s.SCENE_NAME,p.parm_type,da.unit,r.month
        order by r.`month` asc
    </select>

    <!-- 对比————PH、余氯、浊度 -->
    <select id="MonitorDataQualityReportByDay" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`HOUR` AS "dateLabel",
        if(p.parm_type=8,'PH',if(p.parm_type=11,'余氯','浊度')) as  "attributeName",
        s.SCENE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        da.unit AS "unit",

        ifnull( ROUND( sum( r.SUM_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_day_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_scene s on s.id=p.parent_scene_id
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        WHERE p.`STATUS`= 1 and p.parm_type in (8,11,10) and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        AND r.YEAR = #{year}  and r.month=#{month}  and r.day=#{day}
        <if test="sceneIds != null and sceneIds.size()>0">
            and p.PARENT_SCENE_ID in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY s.SCENE_NAME,p.parm_type,da.unit,r.HOUR
        order by r.`hour` asc
    </select>
    <select id="MonitorDataQualityReportByMonth" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`day` AS "dateLabel",
        if(p.parm_type=8,'PH',if(p.parm_type=11,'余氯','浊度')) as  "attributeName",
        s.SCENE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        da.unit AS "unit",

        ifnull( ROUND( sum( r.SUM_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_month_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_scene s on s.id=p.parent_scene_id
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        WHERE p.`STATUS`= 1 and p.parm_type in (8,11,10) and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        AND r.YEAR = #{year}  and r.month=#{month}
        <if test="sceneIds != null and sceneIds.size()>0">
            and p.PARENT_SCENE_ID in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY s.SCENE_NAME,p.parm_type,da.unit,r.day
        order by r.`day` asc
    </select>
    <select id="MonitorDataQualityReportByYear" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`month` AS "dateLabel",
        if(p.parm_type=8,'PH',if(p.parm_type=11,'余氯','浊度')) as  "attributeName",
        s.SCENE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        da.unit AS "unit",

        ifnull( ROUND( sum( r.SUM_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_year_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_scene s on s.id=p.parent_scene_id
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        WHERE p.`STATUS`= 1 and p.parm_type in (8,11,10)
        AND r.YEAR = #{year} and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        <if test="sceneIds != null and sceneIds.size()>0">
            and p.PARENT_SCENE_ID in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY s.SCENE_NAME,p.parm_type,da.unit,r.month
        order by r.`month` asc
    </select>

    <!-- 对比————报警 -->
    <select id="DeviceAlarmReport" resultMap="MonitorDataChartReportMap">
        select
        a.*,DATE_ADD(#{beginDate},INTERVAL a.dateLabel-1 ${dateType}) as "date"
        from (
        select
        ${dateType}(ad.ALARM_START_TIME) as  "dateLabel"

        <if test="dateType != null and dateType == 'month'">
            ,DATE_FORMAT(max(ad.ALARM_START_TIME),'%Y-%m') as "dateStringLabel"
        </if>
        <if test="dateType != null and dateType == 'day'">
            ,DATE_FORMAT(max(ad.ALARM_START_TIME),'%Y-%m-%d') as "dateStringLabel"
        </if>
        <if test="dateType != null and dateType == 'hour'">
            ,DATE_FORMAT(max(ad.ALARM_START_TIME),'%Y-%m-%d %H:00') as "dateStringLabel"
        </if>

        ,ad.PARENT_SCENE_NAME as "deviceName"
        ,'报警次数' as "attributeName"
        ,count(1) as "monitorData"
        ,count(1) as "data"
        from sms_alarm_details ad
        left join sms_device d on ad.DEVICE_ID=d.ID

        where ad.ALARM_START_TIME &lt; #{endDate} and ad.ALARM_START_TIME >= #{beginDate} and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        <if test="sceneIds != null and sceneIds.size()>0">
            and ad.parent_scene_id  in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>

        group by ad.PARENT_SCENE_NAME,${dateType}(ad.ALARM_START_TIME)
        )a
        order by deviceName,dateLabel
    </select>
    <!-- 根据场景类型查询设备-->
    <select id="getDeviceBySceneTypeName" resultType="com.zcxk.entity.DeviceEntity">
        select
        distinct d.DEVICE_NAME as "deviceName",d.id
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_scene ds on ds.SCENE_ID=s.ID
        left join sms_device d on d.id=ds.DEVICE_ID
        where st.SCENE_TYPE_NAME=#{sceneTypeName} and d.`STATUS`= 1 and  d.ENABLE_STATE = 1 and s.ENABLE_STATE = 1 and  ds.status=1
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>

    </select>

    <!-- 设备报表 -->
    <select id="MonitorDataDeviceReportByDay" resultMap="MonitorDataChartReportMap">
        SELECT
        d.DEVICE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        IFNULL(p.REMARK,da.`NAME`) AS "attributeName",
        da.unit AS "unit",
        r.`HOUR` AS "dateLabel",
        ifnull( ROUND( sum( r.AVG_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_day_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = p.DEVICE_ID

        WHERE p.`STATUS`= 1 and p.IS_CHART = 1 and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        AND r.YEAR = #{year}  and r.month=#{month}  and r.day=#{day}
        <if test="deviceIds != null and deviceIds.size()>0">
            and d.id in
            <foreach collection="deviceIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        and p.SCENE_ID = #{sceneId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY d.DEVICE_NAME, p.parm_type,p.REMARK,da.`NAME`,da.unit,r.HOUR
        order by r.`hour` asc
    </select>

    <select id="MonitorDataDeviceReportByMonth" resultMap="MonitorDataChartReportMap">
        SELECT
        d.DEVICE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        IFNULL(p.REMARK,da.`NAME`) AS "attributeName",
        da.unit AS "unit",
        r.`day` AS "dateLabel",
        ifnull( ROUND( sum( r.AVG_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_month_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = p.DEVICE_ID
        WHERE p.`STATUS`= 1 and p.IS_CHART =1  and d.ENABLE_STATE = 1
        AND r.YEAR = #{year}  and r.month=#{month}
        <if test="deviceIds != null and deviceIds.size()>0">
            and d.id in
            <foreach collection="deviceIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        and p.SCENE_ID = #{sceneId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY d.DEVICE_NAME, p.parm_type,p.REMARK,da.`NAME`,da.unit,r.day
        order by r.day asc
    </select>
    <select id="MonitorDataDeviceReportByYear" resultMap="MonitorDataChartReportMap">
        SELECT
        d.DEVICE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        IFNULL(p.REMARK,da.`NAME`) AS "attributeName",
        da.unit AS "unit",
        r.month AS "dateLabel",
        ifnull( ROUND( sum( r.AVG_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_year_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = p.DEVICE_ID
        WHERE p.`STATUS`= 1 and p.IS_CHART =1  and d.ENABLE_STATE = 1
        AND r.YEAR = #{year}
        <if test="deviceIds != null and deviceIds.size()>0">
            and d.id in
            <foreach collection="deviceIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        and p.SCENE_ID = #{sceneId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY d.DEVICE_NAME, p.parm_type,p.REMARK,da.`NAME`,da.unit,r.month
        order by r.`month` asc
    </select>


    <!-- 概览页 -->
    <select id="selectDeviceCode" resultType="java.lang.String">
        select DEVICE_CODE from sms_device d
        where STATUS =1 and ENABLE_STATE =1  and TENANT_ID=#{tenantId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
    </select>


    <select id="selectDeviceCodeByConditions" resultType="java.lang.String">
        select distinct d.DEVICE_CODE
        FROM sms_scene_type st
        LEFT JOIN sms_scene s ON s.SCENE_TYPE_ID = st.ID
        LEFT JOIN sms_device_scene ds ON (ds.PARENT_SCENE_ID = s.ID or ds.SCENE_ID = s.ID)
        LEFT JOIN sms_device d ON d.id = ds.DEVICE_ID
        WHERE st.`STATUS` = 1 AND s.`STATUS` = 1 AND ds.`STATUS` = 1 AND d.`STATUS` = 1
        <if test="companyOrgId != null">
            and d.COMPANY_ORG_ID =#{companyOrgId}
        </if>
        <if test="sceneId != null">
            and s.id =#{sceneId}
        </if>
        <if test="sceneTypeName != null and sceneTypeName != ''">
            AND st.SCENE_TYPE_NAME = #{sceneTypeName}
        </if>
        and s.TENANT_ID=#{tenantId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>

    </select>

    <select id="getDeviceWaterFor30Day" resultType="com.zcxk.dto.generalView.DeviceWaterSupply">
        select
        r.year,r.month,r.day,
        sum(r.SUM_VALUE)/10000 as "amount"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
        left join sms_month_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID

        where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = '水厂' and s.ENABLE_STATE = 1
        and dp.PARM_TYPE = 3   and dp.TENANT_ID=#{tenantId}
        and r.COLLECT_DATE >= DATE_SUB(CURDATE(),INTERVAL 14 day)
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>
        group by r.year,r.month,r.day
        order by r.year desc,r.month desc,r.day desc
    </select>

    <select id="getDeviceWaterDetailForNow" resultType="com.zcxk.dto.generalView.DeviceWaterDetail">
        select
        s.SCENE_NAME as "sceneName"
        ,dp.DEVICE_ID as "deviceId"
        ,dp.ATTRIBUTE_ID as "attributeId"
        ,dp.PARM_TYPE as "parmType"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
        where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName} and s.ENABLE_STATE = 1  and s.PARENT_SCENE_ID = 0
        and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>

    </select>
    <select id="getDeviceWaterDetailForDay" resultType="com.zcxk.dto.generalView.DeviceWaterDetail">
        select
        s.SCENE_NAME as "sceneName"
        ,dp.DEVICE_ID as "deviceId"
        ,dp.ATTRIBUTE_ID as "attributeId"
        ,dp.PARM_TYPE as "parmType"
        ,r.LATEST_VALUE  as "latestValue"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
        left join sms_month_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID and r.year = #{year} and r.month= #{month} and r.day = #{day}
        where  dp.`STATUS`=1
        <if test="sceneTypeName!=null">
            and st.SCENE_TYPE_NAME = #{sceneTypeName}
        </if>
        <if test="sceneTypeName == null">
            and (st.SCENE_TYPE_NAME = '水源' or st.SCENE_TYPE_NAME = '水厂' or st.SCENE_TYPE_NAME = '泵站')
        </if>
        and s.ENABLE_STATE = 1
        <if test="companyOrgId != null">
            and s.COMPANY_ORG_ID = #{companyOrgId}
        </if>
        <if test="sceneId != null">
            and s.id = #{sceneId}
        </if>
        and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>

    </select>
    <select id="getDeviceWaterDetailForMonth" resultType="java.math.BigDecimal">
        select
        sum(ifnull(r.SUM_VALUE,0)) as "amount"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
        left join sms_month_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID and r.year = #{year} and r.month= #{month}
        where  dp.`STATUS`=1
        <if test="sceneTypeName!=null">
            and st.SCENE_TYPE_NAME = #{sceneTypeName}
        </if>
        <if test="sceneTypeName == null">
            and (st.SCENE_TYPE_NAME = '水源' or st.SCENE_TYPE_NAME = '水厂' or st.SCENE_TYPE_NAME = '泵站')
        </if>
        and s.ENABLE_STATE = 1
        <if test="companyOrgId != null">
            and s.COMPANY_ORG_ID = #{companyOrgId}
        </if>
        <if test="sceneId != null">
            and s.id = #{sceneId}
        </if>
        and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>

    </select>
    <select id="getDeviceWaterDetailForYear" resultType="java.math.BigDecimal">
        select
        sum(ifnull(r.SUM_VALUE,0)) as "amount"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
        left join sms_year_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID and r.year = #{year}
        where  dp.`STATUS`=1
        <if test="sceneTypeName!=null">
            and st.SCENE_TYPE_NAME = #{sceneTypeName}
        </if>
        <if test="sceneTypeName == null">
            and (st.SCENE_TYPE_NAME = '水源' or st.SCENE_TYPE_NAME = '水厂' or st.SCENE_TYPE_NAME = '泵站')
        </if>
        and s.ENABLE_STATE = 1
        <if test="companyOrgId != null">
            and s.COMPANY_ORG_ID = #{companyOrgId}
        </if>
        <if test="sceneId != null">
            and s.id = #{sceneId}
        </if>
        and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>


    </select>

    <select id="getAlarmInfoForScene" resultType="com.zcxk.dto.generalView.SceneAlarm">
        select
        s.SCENE_NAME as "sceneName",count(ad.id) as "alarmNumber"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id and s.PARENT_SCENE_ID = 0
        left join sms_alarm_details ad on ad.STATE = 1 and ad.PARENT_SCENE_ID=s.id
        where s.`STATUS` = 1 and s.ENABLE_STATE = 1 and (st.SCENE_TYPE_NAME = '水厂' or st.SCENE_TYPE_NAME ='水源') and s.TENANT_ID=#{tenantId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>

        group by s.SCENE_NAME
        having count(ad.id) >0

    </select>

    <select id="getQualificationForScene" resultType="com.zcxk.dto.generalView.SceneNormalRate">
        select
        sum(if(alarmNumber > 0 ,1,0)) as  "abnormal",
        sum(if(alarmNumber > 0 ,0,1)) as  "normal",
        ROUND(sum(if(alarmNumber > 0 ,0,1))/if(count(1) != 0, count(1),1) * 100,2) as "normalRate"
        from (
        select
        s.SCENE_NAME as "sceneName"
        <if test="parmType != null and  parmType == -1">
            ,sum( if(dp.PARM_TYPE IN ( 15, 8, 10, 11, 18, 19 ) and ad.id is not null,1,0) ) AS "alarmNumber"
        </if>
        <if test="parmType != null and  parmType != -1">
            ,sum( if(dp.PARM_TYPE = #{parmType} and ad.id is not null,1,0) ) AS "alarmNumber"
        </if>
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id and PARENT_SCENE_ID ='0'
        left join sms_device_parm dp on dp.PARENT_SCENE_ID =s.ID
        left join sms_alarm_details ad on ad.STATE = 1 and ad.PARENT_SCENE_ID=dp.PARENT_SCENE_ID and ad.DEVICE_ID =dp.DEVICE_ID and ad.ATTRIBUTE_ID =dp.ATTRIBUTE_ID

        where s.`STATUS`=1  and s.ENABLE_STATE = 1 and st.SCENE_TYPE_NAME = '水厂' and s.TENANT_ID =#{tenantId}  and dp.`STATUS` = 1

        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>
        group by s.SCENE_NAME
        ) a

    </select>

    <select id="getWaterSupplyData" resultType="com.zcxk.dto.generalView.WaterSupplyData">
        select
        r.year
        ,r.month
        ,r.day
        ,dp.PARM_TYPE as "parmType"
        ,sum(r.SUM_VALUE) as "amount"
        ,da.UNIT as "unit"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
        left join sms_device_attribute da on dp.ATTRIBUTE_ID =da.ID
        left join sms_month_report r on r.DEVICE_ID =dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID
        where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName} and s.ENABLE_STATE = 1
        and r.COLLECT_DATE >= DATE_SUB(CURDATE(),INTERVAL 7 day)
        and dp.PARM_TYPE in (3,5,6)   and dp.TENANT_ID=#{tenantId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>
        group by r.year,r.month,r.day,dp.PARM_TYPE,da.UNIT
    </select>
    <select id="getWaterSupplyDataForCurrentMonth" resultType="com.zcxk.dto.generalView.WaterSupplyData">
        select
        r.year
        ,r.month
        ,r.day
        ,dp.PARM_TYPE as "parmType"
        ,sum(r.SUM_VALUE) as "amount"
        ,da.UNIT as "unit"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
        left join sms_device_attribute da on dp.ATTRIBUTE_ID =da.ID
        left join sms_month_report r on r.DEVICE_ID =dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID
        where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName} and s.ENABLE_STATE = 1
        and DATE_FORMAT(NOW(), '%Y%m') = DATE_FORMAT(r.COLLECT_DATE, '%Y%m')
        and dp.PARM_TYPE in (3,5,6)   and dp.TENANT_ID=#{tenantId}
        <if test="sceneIds!=null and sceneIds.size() > 0">
            and  s.id in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>
        group by r.year,r.month,r.day,dp.PARM_TYPE,da.UNIT
    </select>

    <select id="getWaterSupplyDataByMonth" resultType="com.zcxk.dto.generalView.WaterSupplyData">
        select
        r.year
        ,r.month
        ,dp.PARM_TYPE as "parmType"
        ,sum(r.SUM_VALUE) as "amount"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
        left join sms_device_attribute da on dp.ATTRIBUTE_ID =da.ID
        left join sms_year_report r on r.DEVICE_ID =dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID
        where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName} and s.ENABLE_STATE = 1 and st.`STATUS`=1 and s.`STATUS`=1
        and r.COLLECT_DATE >= DATE_SUB(CURDATE(),INTERVAL 6 month)
        and dp.PARM_TYPE in (3,5)   and dp.TENANT_ID=#{tenantId}
        <if test="companyOrgId != null ">and s.COMPANY_ORG_ID=#{companyOrgId}</if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>
        group by r.year,r.month,dp.PARM_TYPE
    </select>
    <select id="getWaterSupplyDataByMonthForCurrentMonth" resultType="com.zcxk.dto.generalView.WaterSupplyData">
        select
        r.year
        ,r.month
        ,dp.PARM_TYPE as "parmType"
        ,sum(r.SUM_VALUE) as "amount"
        from sms_scene_type st
        left join sms_scene s on s.SCENE_TYPE_ID =st.id
        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
        left join sms_device_attribute da on dp.ATTRIBUTE_ID =da.ID
        left join sms_month_report r on r.DEVICE_ID =dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID
        where  dp.`STATUS`=1
        <if test="sceneTypeName != null ">
            and st.SCENE_TYPE_NAME = #{sceneTypeName}
        </if>
        <if test="sceneTypeName == null ">
            and st.SCENE_TYPE_NAME in ('水源','水厂','泵站')
        </if>
        and s.ENABLE_STATE = 1 and st.`STATUS`=1 and s.`STATUS`=1
        and DATE_FORMAT(r.COLLECT_DATE,'%Y%m' ) = DATE_FORMAT(CURDATE( ) , '%Y%m' )
        and dp.PARM_TYPE in (3,4,5)   and dp.TENANT_ID=#{tenantId}
        <if test="companyOrgId != null ">and s.COMPANY_ORG_ID=#{companyOrgId}</if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and s.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and s.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
            </if>
        </if>
        group by r.year,r.month,dp.PARM_TYPE
    </select>
    <select id="getUseAmount" resultType="java.math.BigDecimal">
        select  sum(ifnull(a.WATER_USAGE,0)) as "amount"
        from sms_month_sellwater a
        <where>
            <if test="companyOrgId != null">
                and a.COMPANY_ORG_ID = #{companyOrgId}
            </if>
            and a.TENANT_ID=#{tenantId}
            <if test="searchType ==1">
                and  date_format(a.COLLECT_DATE, '%Y-%m') = DATE_FORMAT(now(), '%Y-%m')
            </if>
            <if test="searchType ==2">
                and   date_format(a.COLLECT_DATE, '%Y') = DATE_FORMAT(now(), '%Y')
            </if>
            <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
                <if test="permissonType == 5 or permissonType == 2">
                    and a.COMPANY_ORG_ID in
                    <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                        #{item.orgId}
                    </foreach>
                </if>
                <if test="permissonType == 4 or permissonType == 3">
                    and a.COMPANY_ORG_ID in
                    <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                        #{item.orgId}
                    </foreach>
                </if>
                <if test="permissonType == 1">
                    and a.COMPANY_ORG_ID in
                    <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                        #{item.orgId}
                    </foreach>
                </if>
            </if>
        </where>
    </select>
    <select id="monthMonitorData" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`day` AS "dateLabel",
        CONCAT( s.SCENE_NAME, r.DEVICE_NAME ) AS "deviceName",
        r.DEVICE_CODE AS "devoceCode",
        IFNULL(p.REMARK, r.ATTRIBUTE_NAME) AS "attributeName",
        da.unit AS "unit",

        ROUND( sum(r.AVG_VALUE), 3 ) AS "data",
        max(r.COLLECT_DATE) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_month_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        LEFT JOIN sms_device_attribute da ON da.id = r.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        left join sms_scene s on s.id=p.PARENT_SCENE_ID
        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        and p.PARENT_SCENE_ID=#{sceneId}
        <if test="startTime != null and endTime != null ">
            and r.COLLECT_DATE BETWEEN #{startTime} AND #{endTime}
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        group by r.day ,s.SCENE_NAME,r.DEVICE_NAME,r.DEVICE_CODE,p.REMARK,r.ATTRIBUTE_NAME,da.unit
        ORDER BY r.`day` ASC
    </select>
    <select id="MonitorDataDeviceReport" resultMap="MonitorDataChartReportMap">
        SELECT
        d.DEVICE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        IFNULL(p.REMARK,da.`NAME`) AS "attributeName",
        da.unit AS "unit",
        r.`day` AS "dateLabel",
        ifnull( ROUND( sum( r.AVG_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_month_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = p.DEVICE_ID
        WHERE p.`STATUS`= 1 and p.IS_CHART = 1  and d.ENABLE_STATE = 1
        <if test="startTime != null and endTime != null ">
            and r.COLLECT_DATE BETWEEN #{startTime} AND #{endTime}
        </if>
        <if test="deviceIds != null and deviceIds.size()>0">
            and d.id in
            <foreach collection="deviceIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        and p.SCENE_ID = #{sceneId}
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY d.DEVICE_NAME, p.parm_type,p.REMARK,da.`NAME`,da.unit,r.day
        order by r.day asc
    </select>
    <select id="MonitorDataEnergyReport" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`day` AS "dateLabel",
        <if test="sceneType != null and sceneType == 1">
            IF( p.parm_type = 5, '耗电量','取水量'  ) AS "attributeName",
        </if>
        <if test="sceneType == null or sceneType == 0">
            IF( p.parm_type = 5, '耗电量','用水量'  ) AS "attributeName",
        </if>
        s.SCENE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        da.unit AS "unit",

        ifnull( ROUND( sum( r.SUM_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_month_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_scene s on s.id=p.parent_scene_id
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        WHERE p.`STATUS`= 1
        <if test="sceneType != null and sceneType == 1">
            and p.parm_type in (4,5)
        </if>
        <if test="sceneType == null or  sceneType == 0">
            and p.parm_type in (3,5)
        </if>
        and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        <if test="startTime != null and endTime != null ">
            and r.COLLECT_DATE BETWEEN #{startTime} AND #{endTime}
        </if>
        <if test="sceneIds != null and sceneIds.size()>0">
            and p.PARENT_SCENE_ID in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY s.SCENE_NAME,p.parm_type,da.unit,r.day
        order by r.`day` asc
    </select>
    <select id="MonitorDataQualityReport" resultMap="MonitorDataChartReportMap">
        SELECT
        r.`day` AS "dateLabel",
        if(p.parm_type=8,'PH',if(p.parm_type=11,'余氯','浊度')) as  "attributeName",
        s.SCENE_NAME AS "deviceName",
        p.parm_type AS "attributeType",
        da.unit AS "unit",

        ifnull( ROUND( sum( r.SUM_VALUE ), 3 ), 0 ) AS "data",
        max( r.COLLECT_DATE ) AS "date"
        FROM sms_device_parm p
        LEFT JOIN sms_month_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
        left join sms_scene s on s.id=p.parent_scene_id
        left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
        LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
        WHERE p.`STATUS`= 1 and p.parm_type in (8,11,10) and d.ENABLE_STATE = 1  and d.`STATUS`= 1
        <if test="startTime != null and endTime != null ">
            and r.COLLECT_DATE BETWEEN #{startTime} AND #{endTime}
        </if>
        <if test="sceneIds != null and sceneIds.size()>0">
            and p.PARENT_SCENE_ID in
            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != '' ">
            and d.tenant_id = #{tenantId}
        </if>
        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
            <if test="permissonType == 5 or permissonType == 2">
                and ( d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                or
                d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                )
            </if>
            <if test="permissonType == 4 or permissonType == 3">
                and d.DEPT_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
            </if>
            <if test="permissonType == 1">
                and d.COMPANY_ORG_ID in
                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
                    #{item.orgId}
                </foreach>
                and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
            </if>
        </if>
        GROUP BY s.SCENE_NAME,p.parm_type,da.unit,r.day
        order by r.`day` asc
    </select>
</mapper>