kaiyu
2020-11-16 de71d925566922784d315ef86045528a651dd07c
src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -31,6 +31,32 @@
        AND time < #{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}
    </select>
    <select id="getMonitorPointOrDeviceAvgData" resultType="java.util.Map">
        SELECT
        DATE_FORMAT(time, #{typeFormat}) time
@@ -77,6 +103,7 @@
        ORDER BY
        time
    </select>
    <select id="selectLineChartDateByCrieria" resultType="java.util.Map">
        SELECT
        <choose>
@@ -96,7 +123,7 @@
        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}
@@ -149,7 +176,7 @@
        history_minutely as hm
        <where>
            <if test="mac!=null">
                and hm.mac=#{mac}
                and hm.mac = #{mac}
            </if>
            and hm.time >= #{startTime}
            and hm.time <![CDATA[<]]> #{endTime}
@@ -170,7 +197,7 @@
        history_minutely_${yearAndMonth} as hm
        <where>
            <if test="mac!=null">
                and hm.mac=#{mac}
                and hm.mac = #{mac}
            </if>
            and hm.time >= #{startTime}
            and hm.time <![CDATA[<]]> #{endTime}
@@ -196,13 +223,12 @@
        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">
        <foreach collection="macs" open="(" separator="," close=")" item="mac">
            #{mac}
        </foreach>
        GROUP BY
@@ -213,4 +239,101 @@
        order by rs.monitorPointName
    </select>
    <select id="getDevicesSensorsAvgDataToExcel" resultType="java.util.LinkedHashMap">
        select
        rs.monitorPointName,rs.name,
        <foreach collection="timeList" separator="," item="time">
            max(case time when #{time} then rs.json else "" end) as #{time}
        </foreach>
        from
        (SELECT
        m.name as monitorPointName,d.name,DATE_FORMAT(time, #{typeFormat}) time,h.json
        FROM
        history_${timeUnits} h,
        device d,
        monitor_point m
        WHERE
        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>
        ORDER BY
        h.mac) rs
        GROUP BY rs.monitorPointName,rs.name
        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>