ZhuDongming
2020-04-26 dba54bf8c8f9299d61c05bf3a941708ea399c998
src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -11,7 +11,7 @@
            AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
        </foreach>
        FROM
        history_minutely
        history_minutely_${yearAndMonth}
        WHERE
        mac IN
        (SELECT
@@ -139,34 +139,107 @@
    <!-- 无人机sensor查询 -->
    <select id="getSensorData" resultType="java.util.LinkedHashMap">
        SELECT
        <foreach collection="sensorKeys"
                 item="sensorKey" separator="," close=",">
            hm.json->'$.${sensorKey}[0]' as '${sensorKey}'
        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>
        DATE_FORMAT(hm.time,'%Y-%m-%d %H:%i:%s') as uavDate
        FROM
        history_minutely as hm
        <where>
            <if test="mac!=null and mac!=''">
            <if test="mac!=null">
                and hm.mac=#{mac}
            </if>
            and hm.time >= #{startTime}
            and hm.time <![CDATA[<]]> #{endTime}
        </where>
        <choose>
            <when test="startTime !=null and startTime != '' and endTime!=null and endTime !='' ">
                and hm.time >= #{startTime}
                and hm.time <![CDATA[<=]]> #{endTime}
            </when>
            <when test="startTime !=null and startTime != '' ">
                and hm.time >= #{startTime}
            </when>
            <when test="endTime !=null and endTime != '' ">
                and hm.time <![CDATA[<=]]> #{endTime}
            </when>
            <otherwise>
                and hm.time >= DATE_ADD(NOW(), INTERVAL -30 MINUTE)
                and hm.time <![CDATA[<=]]> now()
            </otherwise>
        </choose>
        ORDER BY hm.time
        ORDER BY
        hm.time
    </select>
    <select id="getSensorData2020" resultType="java.util.LinkedHashMap">
        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>
        FROM
        history_minutely_${yearAndMonth} as hm
        <where>
            <if test="mac!=null">
                and hm.mac=#{mac}
            </if>
            and hm.time >= #{startTime}
            and hm.time <![CDATA[<]]> #{endTime}
        </where>
        ORDER BY
        hm.time
    </select>
    <select id="getDevicesAvgDataToExcel" resultType="java.util.LinkedHashMap">
        select
        rs.monitorPointName,rs.name,
        <foreach collection="timeList" separator="," item="time">
            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>
        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>
        GROUP BY
        h.mac,m.name,d.name,DATE_FORMAT(time, #{typeFormat})
        ORDER BY
        h.mac) rs
        GROUP BY rs.monitorPointName,rs.name
        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>
</mapper>