ZhuDongming
2019-07-25 9a8498f1dbe3b7362a1a90682edfe062517e42c2
新增无人机在时间段查询sensor值的sql语句
1 files modified
299 ■■■■■ changed files
src/main/resources/mapper/HistoryMinutelyMapper.xml 299 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -1,135 +1,172 @@
<?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.moral.mapper.HistoryMinutelyMapper">
    <resultMap id="PairDataResultMap" type="com.moral.entity.charts.PairData" >
        <result column="format_time" property="category" jdbcType="VARCHAR" />
        <result column="value" property="value" jdbcType="DOUBLE" />
    </resultMap>
    <select id="getSersionAvgByDevice" resultType="java.util.Map">
        SELECT
            <foreach  collection="sensorKeys" separator="," item="sensorKey">
                AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
            </foreach>
        FROM
            history_minutely
        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
            <foreach  collection="sensorKeys" open="," separator="," item="sensorKey">
                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>
        <if test="mac == null">
        AND    h.mac IN
            (SELECT
                d.mac
            FROM
                device d,
                monitor_point mp
            WHERE
                d.monitor_point_id = mp.id
                <if test="provinceCode != null">
                AND mp.province_code = #{provinceCode}
                </if>
                <if test="cityCode != null">
                AND mp.city_code = #{cityCode}
                </if>
                <if test="areaCode != null">
                AND mp.area_code = #{areaCode}
                </if>
                <if test="monitorPointId != null">
                AND mp.id =    #{monitorPointId}
                </if>
                <if test="professionId != null">
                AND d.profession_id = #{professionId}
                </if>
            )
        </if>
        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>
                    </when>
                    <otherwise>
                        <foreach collection="sensorKeys"
                                 item="sensorKey" separator="," close=",">
                            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
            <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 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>
                    <if test='"PROFESSION"==dataCondition.deviceDimension.toString()'>
                        and dev.profession_id = #{dataCondition.dimensionValue}
                    </if>
                    <if test='"MONITORPOINT"==dataCondition.areaRange.toString()'>
                        and mpt.id = #{dataCondition.areaRangeId}
                    </if>
                    <if test='"PROVINCE"==dataCondition.areaRange.toString()'>
                        and mpt.province_code = #{dataCondition.areaRangeId}
                    </if>
                    <if test='"CITY"==dataCondition.areaRange.toString()'>
                        and mpt.city_code = #{dataCondition.areaRangeId}
                    </if>
                    <if test='"AREA"==dataCondition.areaRange.toString()'>
                        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>
            ORDER BY format_time asc
    </select>
    <resultMap id="PairDataResultMap" type="com.moral.entity.charts.PairData">
        <result column="format_time" property="category" jdbcType="VARCHAR"/>
        <result column="value" property="value" jdbcType="DOUBLE"/>
    </resultMap>
    <select id="getSersionAvgByDevice" resultType="java.util.Map">
        SELECT
        <foreach collection="sensorKeys" separator="," item="sensorKey">
            AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
        </foreach>
        FROM
        history_minutely
        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
        <foreach collection="sensorKeys" open="," separator="," item="sensorKey">
            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>
        <if test="mac == null">
            AND h.mac IN
            (SELECT
            d.mac
            FROM
            device d,
            monitor_point mp
            WHERE
            d.monitor_point_id = mp.id
            <if test="provinceCode != null">
                AND mp.province_code = #{provinceCode}
            </if>
            <if test="cityCode != null">
                AND mp.city_code = #{cityCode}
            </if>
            <if test="areaCode != null">
                AND mp.area_code = #{areaCode}
            </if>
            <if test="monitorPointId != null">
                AND mp.id = #{monitorPointId}
            </if>
            <if test="professionId != null">
                AND d.profession_id = #{professionId}
            </if>
            )
        </if>
        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>
            </when>
            <otherwise>
                <foreach collection="sensorKeys"
                         item="sensorKey" separator="," close=",">
                    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
        <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 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>
                <if test='"PROFESSION"==dataCondition.deviceDimension.toString()'>
                    and dev.profession_id = #{dataCondition.dimensionValue}
                </if>
                <if test='"MONITORPOINT"==dataCondition.areaRange.toString()'>
                    and mpt.id = #{dataCondition.areaRangeId}
                </if>
                <if test='"PROVINCE"==dataCondition.areaRange.toString()'>
                    and mpt.province_code = #{dataCondition.areaRangeId}
                </if>
                <if test='"CITY"==dataCondition.areaRange.toString()'>
                    and mpt.city_code = #{dataCondition.areaRangeId}
                </if>
                <if test='"AREA"==dataCondition.areaRange.toString()'>
                    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>
        ORDER BY format_time asc
    </select>
    <!-- 无人机sensor查询 -->
    <select id="getSensorData" resultType="java.util.LinkedHashMap">
        SELECT
        <foreach collection="sensorKeys"
                 item="sensorKey" separator="," close=",">
            hm.json->'$.${sensorKey}[0]' as '${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!=''">
                and hm.mac=#{mac}
            </if>
        </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
    </select>
</mapper>