<?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.zcloud.mapper.datasource.bimap.BiMapMapper">


    <select id="getCarRecordslistPage" resultType="com.zcloud.entity.PageData">
        SELECT LICENSE_PLATE,
               STATE,
               COMING_REASON,
               CASE
                   STATE
                   WHEN 4 THEN
                       TIME_IN
                   WHEN 5 THEN
                       TIME_OUT
                   END TIME
        from bus_foreigncar
        where STATE in (4, 5) AND ISDELETE = 0 <if test="pd.AREA != null and pd.AREA != ''">
        and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{pd.AREA} and ISDELETE = 0)
    </if>
        <if test="pd.CORPINFO_ID != null and pd.CORPINFO_ID != ''">
            and CORPINFO_ID = #{pd.CORPINFO_ID}
        </if>
        ORDER BY TIME DESC
    </select>
    <!-- 统计今日临时人员检测
         * 		提交申请数[COUNTAPPLY],门卫确认进入数[COUNTIN],现场车辆数[COUNTSITE],
         * 		审核通过数[COUNPASS],门卫确认离开数[COUNTOUT],入场车辆比例[INRATIO]
         * 	 	审核未通过数[COUNREFUSE] -->
    <select id="statisticsOutsiderCount" parameterType="pd" resultType="pd">
        SELECT F.*,
               (f.COUNTIN - f.COUNTOUT)                                                          COUNTSITE,
               IF(ISNULL(f.COUNTIN / f.COUNTAPPLY), 0, ROUND(f.COUNTIN / f.COUNTAPPLY * 100, 2)) INRATIO
        FROM (SELECT COUNT(case when f.STATE != '0' then f.OUTSIDERS_ID END)                       COUNTAPPLY,
                     COUNT(case when f.TIME_IN IS NOT NULL then f.OUTSIDERS_ID END)                COUNTIN,
                     COUNT(case when f.TIME_OUT IS NOT NULL then f.OUTSIDERS_ID END)               COUNTOUT,
                     COUNT(case when f.STATE IN ('3', '4', '5', '7', '8') then f.OUTSIDERS_ID END) COUNPASS,
                     COUNT(case when f.STATE = '6' then f.OUTSIDERS_ID END)                        COUNREFUSE
              FROM bus_outsiders f
              WHERE f.ISDELETE = 0
                AND f.CREATTIME >= CONCAT_WS(" ", DATE_FORMAT(CURDATE(), '%Y-%m-%d'), '00:00:00')) f
    </select>
    <!-- 统计今日临时车辆-->


    <!-- 统计今日人员刷卡数据(今日进入[COUNTUSERIN],今日离场[COUNTUSEROUT],现场人数[COUNTUSER],入场刷卡数[COUNTCARDIN],出场刷卡数[COUNTCARDOUT]) -->
    <select id="statisticsCardUserCount" parameterType="pd" resultType="pd">
        SELECT f.*, (COUNTUSERIN - COUNTUSEROUT) COUNTUSER
        FROM (SELECT COUNT(DISTINCT (case when f.STATE = 0 then f.USERID END)) COUNTUSERIN,
                     COUNT(DISTINCT (case when f.STATE = 1 then f.USERID END)) COUNTUSEROUT,
                     COUNT(case when f.STATE = 0 then f.CARDID END)            COUNTCARDIN,
                     COUNT(case when f.STATE = 1 then f.CARDID END)            COUNTCARDOUT
              FROM bus_carduser f
              WHERE f.`TIME` >= CONCAT_WS(" ", DATE_FORMAT(CURDATE(), '%Y-%m-%d'), '00:00:00')) f
    </select>
    <!-- 统计今日车辆-->

    <select id="getCorpinfoIds" parameterType="string" resultType="string">
        SELECT CORPINFO_ID FROM bus_corp_info WHERE ISDELETE = '0' AND AREA IN
        <foreach item="item" index="index" collection="array" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>

    <select id="getPeopleRecordslistPage" resultType="com.zcloud.entity.PageData">
        select
        CARDID,
        CARDNUMBER,
        USERID,
        USERNAME,
        USERNUMBER,
        USERDEPARTMENTNAME,
        CARDTYPE,
        EQUIPMENTNAME,
        EQUIPMENTID,
        TIME,
        STATE
        from
        BUS_CARDUSER f
        where 1 = 1
        <if test="pd.AREA != null and pd.AREA != ''">
            and f.CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{pd.AREA} and ISDELETE = 0)
        </if>
        <if test="pd.CORPINFO_ID != null and pd.CORPINFO_ID != ''">
            and f.CORPINFO_ID = #{pd.CORPINFO_ID}
        </if>
        <if test="pd.USERNAME != null and pd.USERNAME != ''"><!-- 关键词检索 -->
            and f.USERNAME LIKE CONCAT(CONCAT('%', #{pd.USERNAME}),'%')
        </if>
        <if test="pd.STARTTIME != null and pd.STARTTIME != ''"><!-- 关键词检索 -->
            and f.TIME <![CDATA[ >= ]]>  CONCAT_WS(' ',#{pd.STARTTIME}, '00:00')
        </if>
        <if test="pd.ENDTIME != null and pd.ENDTIME != ''"><!-- 关键词检索 -->
            and f.TIME <![CDATA[ <= ]]>  CONCAT_WS(' ',#{pd.ENDTIME}, '23:59')
        </if>
        <if test="pd.STATE != null and pd.STATE != ''"><!-- 关键词检索 -->
            and f.STATE = #{pd.STATE}
        </if>
        ORDER BY f.`TIME` DESC

    </select>
    <select id="getRiskIdentificationCount" resultType="com.zcloud.entity.PageData">
        SELECT *
        FROM (
                 (SELECT COUNT(r.RISKUNIT_ID) '0'
                  FROM bus_riskunit r
                  WHERE r.ISDELETE = '0'
                    AND r.CORPINFO_ID = #{CORPINFO_ID}) t1,
(
			SELECT
				COUNT( i.IDENTIFICATIONPARTS_ID ) '1'
			FROM
				bus_identificationparts i
			WHERE
				i.ISDELETE = '0'
			AND i.CORPINFO_ID = #{CORPINFO_ID}
                     ) t2,
                     ( SELECT COUNT( 1 ) '2' FROM bus_riskpoint r WHERE r.ISDELETE = '0' AND r.CORPINFO_ID = #{CORPINFO_ID} )
                     t3
                 )
    </select>

    <!-- 列表 -->
    <select id="listbymeteorological" parameterType="pd" resultType="pd">
        SELECT
        m.CORPINFO_ID,
        f.TEMPERATURE,
        f.HUMIDITY,
        f.WINDDIRECTION,
        f.WINDSPEED,
        f.ISDELETE,
        f.OPERATTIME,
        f.METEOROLOGICAL_ID,
        f.METEOROLOGICALINFO_ID,
        f.OPERATOR,
        f.CODE,
        sd.NAME as NAME,
        m.EQUIPMENTNAME
        FROM
        `qa-czks-regulatory`.BUS_METEOROLOGICALINFO f
        LEFT JOIN `qa-czks-regulatory`.bus_meteorological m ON m.CODE = f.CODE
        LEFT JOIN sys_dictionaries sd on sd.DICTIONARIES_ID = m.EQUIPMENTTYPE
        WHERE 1=1
        <if test="CORPINFO_ID != null and CORPINFO_ID != ''"><!-- 关键词检索 -->
            and m.CORPINFO_ID = #{CORPINFO_ID}
        </if>
        <if test="TYPE != null and TYPE != ''"><!-- 关键词检索 -->
            and m.EQUIPMENTTYPE = #{TYPE}
        </if>
        <if test="id != null and id != ''"><!-- 关键词检索 -->
            and m.METEOROLOGICAL_ID = #{id}
        </if>
        ORDER BY
        f.OPERATTIME DESC
        LIMIT 1
    </select>

    <select id="getPersonPositioningCount" resultType="com.zcloud.entity.PageData">
        SELECT *
        FROM (
                 (SELECT COUNT(u.USER_ID) '0'
                  FROM sys_user u
                  WHERE u.ISDELETE = '0'
                    AND u.CORPINFO_ID = #{CORPINFO_ID}) t1,
(
	SELECT
            COUNT( o.DEPARTMENT_ID ) '1'
        FROM
            oa_department o
        WHERE
          o.CORPINFO_ID = #{CORPINFO_ID}
                     ) t2,
                     ( SELECT 0 '2' )
                     t3
                 )

    </select>
    <select id="getRiskIndex" resultType="com.zcloud.entity.PageData">
        SELECT
        IFNULL( COUNT( 1 ), 0 ) COUNT,
        'levelA' TYPE,
        '重大风险区域数' label
        FROM
        bus_riskpoint p
        LEFT JOIN bus_corp_info ci ON p.CORPINFO_ID = ci.CORPINFO_ID
        LEFT JOIN sys_dictionaries d ON p.LEVELID = d.BIANMA
        WHERE
        p.ISDELETE = 0
        AND p.LEVELID = 'levelA'
        AND ci.AREA IS NOT NULL
        AND ci.AREA != ''
        <if test="AREA != null and AREA != ''">
            AND ci.AREA = #{AREA}
        </if>
        UNION ALL
        SELECT

        IFNULL( COUNT( 1 ), 0 ) COUNT,
        'levelB' TYPE,
        '较大风险区域数' label
        FROM
        bus_riskpoint p
        LEFT JOIN bus_corp_info ci ON p.CORPINFO_ID = ci.CORPINFO_ID
        LEFT JOIN sys_dictionaries d ON p.LEVELID = d.BIANMA
        WHERE
        p.ISDELETE = 0
        AND p.LEVELID = 'levelB'
        AND ci.AREA IS NOT NULL
        AND ci.AREA != ''
        <if test="AREA != null and AREA != ''">
            AND ci.AREA = #{AREA}
        </if>
        UNION ALL
        SELECT

        IFNULL( COUNT( 1 ), 0 ) COUNT,
        'levelC' TYPE,
        '一般风险区域数' label
        FROM
        bus_riskpoint p
        LEFT JOIN bus_corp_info ci ON p.CORPINFO_ID = ci.CORPINFO_ID
        LEFT JOIN sys_dictionaries d ON p.LEVELID = d.BIANMA
        WHERE
        p.ISDELETE = 0
        AND p.LEVELID = 'levelC'
        AND ci.AREA IS NOT NULL
        AND ci.AREA != ''
        <if test="AREA != null and AREA != ''">
            AND ci.AREA = #{AREA}
        </if>
        UNION ALL
        SELECT
        IFNULL( COUNT( 1 ), 0 ) COUNT,
        'levelD' TYPE,
        '低风险性区域数' label
        FROM
        bus_riskpoint p
        LEFT JOIN bus_corp_info ci ON p.CORPINFO_ID = ci.CORPINFO_ID
        LEFT JOIN sys_dictionaries d ON p.LEVELID = d.BIANMA
        WHERE
        p.ISDELETE = 0
        AND p.LEVELID = 'levelD'
        AND ci.AREA IS NOT NULL
        AND ci.AREA != ''
        <if test="AREA != null and AREA != ''">
            AND ci.AREA = #{AREA}
        </if>

    </select>
    <select id="inAndoutPeoCarToday" resultType="com.zcloud.entity.PageData">
        SELECT
        IFNULL( COUNT( 1 ), 0 ) count,
        '今日出港人员数' label,
        'PERSON_OUT' TYPE
        FROM
        bus_carduser c
        WHERE
        c.TIME BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
        AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
        <if test="AREA != null and AREA != ''">
            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
        </if>
        <if test="CORPINFO_ID != null and CORPINFO_ID != ''">
            and CORPINFO_ID = #{CORPINFO_ID}
        </if>

        AND c.STATE = 1 UNION ALL
        SELECT
        IFNULL( COUNT( 1 ), 0 ) count,
        '今日进港人员数' label,
        'PERSON_IN' TYPE
        FROM
        bus_carduser c
        WHERE
        c.TIME BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
        AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
        <if test="AREA != null and AREA != ''">
            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
        </if>
        <if test="CORPINFO_ID != null and CORPINFO_ID != ''">
            and CORPINFO_ID = #{CORPINFO_ID}
        </if>
        AND c.STATE = 0 UNION ALL
        SELECT
        IFNULL( COUNT( 1 ), 0 ) count,
        '今日进港车辆数' label,
        'CAR_IN' TYPE
        FROM
        bus_foreigncar c
        WHERE
        c.TIME_IN BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
        AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
        <if test="AREA != null and AREA != ''">
            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
        </if>
        <if test="CORPINFO_ID != null and CORPINFO_ID != ''">
            and CORPINFO_ID = #{CORPINFO_ID}
        </if>
        UNION ALL
        SELECT
        IFNULL( COUNT( 1 ), 0 ) count,
        '今日出港车辆数' label,
        'CAR_OUT' TYPE
        FROM
        bus_foreigncar c
        WHERE
        c.TIME_OUT BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
        AND CONCAT(
        DATE_FORMAT( now(), '%Y-%m-%d' ),
        ' 23:59:59'
        )
        <if test="AREA != null and AREA != ''">
            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
        </if>
        <if test="CORPINFO_ID != null and CORPINFO_ID != ''">
            and CORPINFO_ID = #{CORPINFO_ID}
        </if>
    </select>
</mapper>