kaiyu
2020-11-16 de71d925566922784d315ef86045528a651dd07c
src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -8,8 +8,8 @@
    <select id="getSersionAvgByDevice" resultType="java.util.Map">
        SELECT
        <foreach collection="sensorKeys" separator="," item="sensorKey">
      AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
    </foreach>
            AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
        </foreach>
        FROM
        history_minutely_${yearAndMonth}
        WHERE
@@ -21,11 +21,37 @@
        WHERE
        d.is_delete = 0
        <if test="monitorPointId != null">
      AND d.monitor_point_id = #{monitorPointId}
    </if>
            AND d.monitor_point_id = #{monitorPointId}
        </if>
        <if test="mac != null">
      AND d.mac = #{mac}
    </if>
            AND d.mac = #{mac}
        </if>
        )
        AND time >= #{start}
        AND time &lt; #{end}
    </select>
    <select id="getAvgByDevice" resultType="java.util.Map">
        SELECT
        <foreach collection="sensorKeys" separator="," item="sensorKey">
            AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
        </foreach>
        FROM
        history_daily
        WHERE
        mac IN
        (SELECT
        d.mac
        FROM
        device d
        WHERE
        d.is_delete = 0
        <if test="monitorPointId != null">
            AND d.monitor_point_id = #{monitorPointId}
        </if>
        <if test="mac != null">
            AND d.mac = #{mac}
        </if>
        )
        AND time >= #{start}
        AND time &lt; #{end}
@@ -35,16 +61,16 @@
        SELECT
        DATE_FORMAT(time, #{typeFormat}) time
        <foreach collection="sensorKeys" open="," separator="," item="sensorKey">
      AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
    </foreach>
            AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
        </foreach>
        FROM
        history_${timeUnits} h
        WHERE
        h.time >= #{start}
        AND h.time <![CDATA[<]]> #{end}
        <if test="mac != null">
      AND h.mac = #{mac}
    </if>
            AND h.mac = #{mac}
        </if>
        <if test="mac == null">
            AND h.mac IN
            (SELECT
@@ -55,20 +81,20 @@
            WHERE
            d.monitor_point_id = mp.id
            <if test="provinceCode != null">
        AND mp.province_code = #{provinceCode}
      </if>
                AND mp.province_code = #{provinceCode}
            </if>
            <if test="cityCode != null">
        AND mp.city_code = #{cityCode}
      </if>
                AND mp.city_code = #{cityCode}
            </if>
            <if test="areaCode != null">
        AND mp.area_code = #{areaCode}
      </if>
                AND mp.area_code = #{areaCode}
            </if>
            <if test="monitorPointId != null">
        AND mp.id = #{monitorPointId}
      </if>
                AND mp.id = #{monitorPointId}
            </if>
            <if test="professionId != null">
        AND d.profession_id = #{professionId}
      </if>
                AND d.profession_id = #{professionId}
            </if>
            )
        </if>
@@ -78,78 +104,62 @@
        time
    </select>
    <select id="getAreaAvgDataByAreaCode" resultType="java.util.Map">
    SELECT
    DATE_FORMAT(time, #{typeFormat}) time,
    AVG(aqi_json->'$.${sensors1}') AS '${sensors2}'
    FROM
    hangzhou_aqi ha
    WHERE
    ha.time >= #{start}
    AND ha.time <![CDATA[<]]> #{end}
    AND ha.city_code = #{areaCode}
    GROUP BY
    DATE_FORMAT(time, #{typeFormat})
    ORDER BY
    time
  </select>
    <select id="selectLineChartDateByCrieria" resultType="java.util.Map">
        SELECT
        <choose>
            <when test="'MINUTE'==dataCondition.timeUnits.toString() and 'DEVICE'==dataCondition.areaRange.toString()">
                <foreach collection="sensorKeys"
                         item="sensorKey" separator="," close=",">
          json->'$.${sensorKey}[0]' as '${sensorKey}'
        </foreach>
                    json->'$.${sensorKey}[0]' as '${sensorKey}'
                </foreach>
            </when>
            <otherwise>
                <foreach collection="sensorKeys"
                         item="sensorKey" separator="," close=",">
          AVG(json->'$.${sensorKey}[0]') as '${sensorKey}'
        </foreach>
                    AVG(json->'$.${sensorKey}[0]') as '${sensorKey}'
                </foreach>
            </otherwise>
        </choose>
        DATE_FORMAT(time,'${@com.moral.common.util.ReportTimeFormat@toMySqlTimeFormat(timePeriod.timeUnits)}') as
        format_time
        FROM
        `history_minutely` hmi
        history_${timeUnits} hmi
        <where>
            and hmi.time >= #{timePeriod.startTime}
            and hmi.time <![CDATA[<=]]> #{timePeriod.endTime}
            <if test="dataCondition.actualTime != null">
        and DATE_FORMAT(time,
        '${@com.moral.common.util.ReportTimeFormat@toMySqlActualTimeFormat(dataCondition.timeUnits)}') =
        #{dataCondition.actualTime}
      </if>
                and DATE_FORMAT(time,
                '${@com.moral.common.util.ReportTimeFormat@toMySqlActualTimeFormat(dataCondition.timeUnits)}') =
                #{dataCondition.actualTime}
            </if>
            and hmi.mac in (
            select mac from device dev
            join monitor_point mpt on dev.monitor_point_id = mpt.id
            <where>
                <if test='"DEVICE"==dataCondition.areaRange.toString()'>
          and dev.id = #{dataCondition.areaRangeId}
        </if>
                    and dev.id = #{dataCondition.areaRangeId}
                </if>
                <if test='"PROFESSION"==dataCondition.deviceDimension.toString()'>
          and dev.profession_id = #{dataCondition.dimensionValue}
        </if>
                    and dev.profession_id = #{dataCondition.dimensionValue}
                </if>
                <if test='"MONITORPOINT"==dataCondition.areaRange.toString()'>
          and mpt.id = #{dataCondition.areaRangeId}
        </if>
                    and mpt.id = #{dataCondition.areaRangeId}
                </if>
                <if test='"PROVINCE"==dataCondition.areaRange.toString()'>
          and mpt.province_code = #{dataCondition.areaRangeId}
        </if>
                    and mpt.province_code = #{dataCondition.areaRangeId}
                </if>
                <if test='"CITY"==dataCondition.areaRange.toString()'>
          and mpt.city_code = #{dataCondition.areaRangeId}
        </if>
                    and mpt.city_code = #{dataCondition.areaRangeId}
                </if>
                <if test='"AREA"==dataCondition.areaRange.toString()'>
          and mpt.area_code = #{dataCondition.areaRangeId}
        </if>
                    and mpt.area_code = #{dataCondition.areaRangeId}
                </if>
            </where>
            )
        </where>
        <if test="'MINUTE'!=dataCondition.timeUnits.toString() or 'DEVICE'!=dataCondition.areaRange.toString()">
      GROUP BY format_time
    </if>
            GROUP BY format_time
        </if>
        ORDER BY format_time asc
    </select>
@@ -158,16 +168,16 @@
        SELECT
        DATE_FORMAT(hm.time,'%Y-%m-%d %H:%i:%s') time,
        <foreach collection="sensorKeys" item="sensorKey" separator=",">
      hm.json->'$.${sensorKey}[0]' as '${sensorKey}',
      hm.json->'$.${sensorKey}[1]' as 'min${sensorKey}',
      hm.json->'$.${sensorKey}[2]' as 'max${sensorKey}'
    </foreach>
            hm.json->'$.${sensorKey}[0]' as '${sensorKey}',
            hm.json->'$.${sensorKey}[1]' as 'min${sensorKey}',
            hm.json->'$.${sensorKey}[2]' as 'max${sensorKey}'
        </foreach>
        FROM
        history_minutely as hm
        <where>
            <if test="mac!=null">
        and hm.mac=#{mac}
      </if>
                and hm.mac = #{mac}
            </if>
            and hm.time >= #{startTime}
            and hm.time <![CDATA[<]]> #{endTime}
        </where>
@@ -179,16 +189,16 @@
        SELECT
        DATE_FORMAT(hm.time,'%Y-%m-%d %H:%i:%s') time,
        <foreach collection="sensorKeys" item="sensorKey" separator=",">
      hm.json->'$.${sensorKey}[0]' as '${sensorKey}',
      hm.json->'$.${sensorKey}[1]' as 'min${sensorKey}',
      hm.json->'$.${sensorKey}[2]' as 'max${sensorKey}'
    </foreach>
            hm.json->'$.${sensorKey}[0]' as '${sensorKey}',
            hm.json->'$.${sensorKey}[1]' as 'min${sensorKey}',
            hm.json->'$.${sensorKey}[2]' as 'max${sensorKey}'
        </foreach>
        FROM
        history_minutely_${yearAndMonth} as hm
        <where>
            <if test="mac!=null">
        and hm.mac=#{mac}
      </if>
                and hm.mac = #{mac}
            </if>
            and hm.time >= #{startTime}
            and hm.time <![CDATA[<]]> #{endTime}
        </where>
@@ -200,28 +210,27 @@
        select
        rs.monitorPointName,rs.name,
        <foreach collection="timeList" separator="," item="time">
      max(case time when #{time} then rs.${sensorKey} else "" end) as #{time}
    </foreach>
            max(case time when #{time} then rs.${sensorKey} else "" end) as #{time}
        </foreach>
        from
        (SELECT
        m.name as monitorPointName,d.name,DATE_FORMAT(time, #{typeFormat}) time,
        <foreach collection="sensorKeys" separator="," item="sensorKey">
      AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
    </foreach>
            AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
        </foreach>
        FROM
        history_${timeUnits} h,
        device d,
        monitor_point m
        WHERE
        h.mac=d.mac
        AND d.monitor_point_id=m.id
        h.mac = d.mac
        AND d.monitor_point_id = m.id
        AND h.time >= #{start}
        AND h.time <![CDATA[<=]]> #{end}
        AND h.mac in
        <foreach collection="macs" open="(" separator="," close=")"
                 item="mac">
      #{mac}
    </foreach>
        <foreach collection="macs" open="(" separator="," close=")" item="mac">
            #{mac}
        </foreach>
        GROUP BY
        h.mac,m.name,d.name,DATE_FORMAT(time, #{typeFormat})
        ORDER BY
@@ -244,8 +253,8 @@
        device d,
        monitor_point m
        WHERE
        h.mac=d.mac
        AND d.monitor_point_id=m.id
        h.mac = d.mac
        AND d.monitor_point_id = m.id
        AND h.time >= #{start}
        AND h.time <![CDATA[<=]]> #{end}
        AND h.mac in
@@ -259,4 +268,72 @@
        order by rs.monitorPointName
    </select>
    <select id="get5MiutesOrHalfHourByDay" resultType="java.util.LinkedHashMap">
        SELECT
        <foreach collection="sensorKeys" separator="," item="sensorKey">
            AVG(h.json->'$.${sensorKey}[0]') AS '${sensorKey}'
        </foreach>
        FROM
        history_${timeUnits} h inner join
        (select mac from device where monitor_point_id in
        (
        select id from monitor_point
        where
        <if test="areaCode != null">
            area_code = #{areaCode}
        </if>
        <if test="cityCode != null">
            city_code = #{cityCode}
        </if>
        <if test="provinceCode != null">
            province_code = #{provinceCode}
        </if>
        )
        and is_delete=0) m
        on h.mac=m.mac
        and h.time>=#{start}
        and h.time <![CDATA[<]]> #{end}
        ORDER BY
        h.time
    </select>
    <select id="getMultiDeviceSensorData" resultType="java.util.Map">
        SELECT
        DATE_FORMAT(time, #{typeFormat}) time,
        <foreach collection="macs" separator="," item="mac" index="index">
            AVG(json->'$.${sensorKey}[0]') AS '${index}${sensorKey}'
        </foreach>
        FROM
        history_${timeUnits}
        WHERE
        <foreach collection="macs" separator="," item="mac" index="index">
            mac = #{mac}
        </foreach>
        AND time >= #{start}
        AND h.time <![CDATA[<]]> #{end}
        GROUP BY
        DATE_FORMAT(time, #{typeFormat})
        ORDER BY
        time
    </select>
    <select id="getMultiDeviceSensorData1" resultType="java.util.Map">
        SELECT *
        from
        <foreach collection="macs" separator="," item="mac" index="index">
            (SELECT
            AVG(json->'$.${sensorKey}[0]') AS '${index}${sensorKey}',
            DATE_FORMAT(time,'%Y-%m') as time
            FROM history_${timeUnits}
            WHERE mac=#{mac}
            AND time >= #{start}
            AND time <![CDATA[<]]> #{end}
            GROUP BY DATE_FORMAT(time,#{typeFormat})
            ORDER BY
            time) as t${index}
        </foreach>
        WHERE t1.time=t2.time
    </select>
</mapper>