于紫祥_1901
2020-08-13 0a107debd7676141376a59bd3d4472912b24f7dc
src/main/resources/mapper/HistoryDailyMapper.xml
@@ -1,36 +1,130 @@
<?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.HistoryDailyMapper">
   <select id="getEmissionsData" resultType="java.util.Map">
      SELECT
         SUM(hd.`json` ->'$.${sensorKey}[0]') AS '${sensorKey}',
         vdi.mac,
         mp.`name` 'name'
      FROM
         history_daily hd,
         view_device_info vdi,
         monitor_point mp
      <where>
         hd.mac = vdi.mac
         AND vdi.monitor_point_id = mp.id
         AND vdi.device_tech = 1
         <if test="start != null">
            AND hd.time >= #{start}
         </if>
         <if test="end != null">
            AND hd.time &lt; #{end}
         </if>
         <if test="regionCode != null">
            AND mp.${regionType}_code = #{regionCode}
         </if>
         <if test="orgIds != null and orgIds.size &gt; 0">
            AND mp.organization_id IN
            <foreach collection="orgIds" open="(" separator="," close=")"
               item="listItem">
               #{listItem}
            </foreach>
         </if>
      </where>
      GROUP BY mp.`name`, vdi.mac
   </select>
    <select id="getEmissionsData" resultType="java.util.Map">
        SELECT
        SUM(hd.`json` ->'$.${sensorKey}[0]') AS '${sensorKey}',
        vdi.mac,
        mp.`name` 'name'
        FROM
        history_daily hd,
        view_device_info vdi,
        monitor_point mp
        <where>
            hd.mac = vdi.mac
            AND vdi.monitor_point_id = mp.id
            AND vdi.device_tech = 1
            <if test="monitorPointId != null">
                AND mp.id = #{monitorPointId}
            </if>
            <if test="mac != null">
                AND hd.mac = #{mac}
            </if>
            <if test="start != null">
                AND hd.time >= #{start}
            </if>
            <if test="end != null">
                AND hd.time &lt; #{end}
            </if>
            <if test="regionCode != null">
                AND mp.${regionType}_code = #{regionCode}
            </if>
            <if test="orgIds != null and orgIds.size &gt; 0">
                AND mp.organization_id IN
                <foreach collection="orgIds" open="(" separator="," close=")"
                         item="listItem">
                    #{listItem}
                </foreach>
            </if>
        </where>
        GROUP BY mp.`name`, vdi.mac
    </select>
    <select id="getOverproofData" resultType="java.util.Map">
        SELECT
        AVG( hd.`json` -> '$.${sensorKey}[0]' ) avg,
        ( SELECT DISTINCT limit_val ->> '$.${sensorKey}' FROM view_device_density WHERE monitor_point_id =
        vdd.monitor_point_id AND device_tech = vdd.device_tech ) `limit`,
        ( SELECT mp.`name` FROM monitor_point mp WHERE mp.id = vdd.monitor_point_id ) `name`,
        vdd.device_tech
        FROM
        history_daily hd,
        view_device_density vdd,
        (
        SELECT
        vdd.monitor_point_id
        FROM
        history_daily hd,
        device vdd,
        monitor_point mp
        <where>
            hd.mac = vdd.mac
            AND mp.id = vdd.monitor_point_id
            <if test="start != null">
                AND hd.time >= #{start}
            </if>
            <if test="end != null">
                AND hd.time &lt; #{end}
            </if>
            <if test="regionCode != null">
                AND mp.${regionType}_code = #{regionCode}
            </if>
            <if test="orgIds != null and orgIds.size &gt; 0">
                AND mp.organization_id IN
                <foreach collection="orgIds" open="(" separator="," close=")"
                         item="listItem">
                    #{listItem}
                </foreach>
            </if>
        </where>
        GROUP BY
        vdd.mac,
        vdd.monitor_point_id
        HAVING
        AVG( hd.`json` -> '$.${sensorKey}[0]' ) >= ( SELECT limit_val ->> '$.${sensorKey}' FROM view_device_density
        WHERE mac = vdd.mac ) * (1 + #{overproofRatio} * 1)
        <if test="overproofRatio != 0 and overproofRatio != 3">
            AND AVG( hd.`json` -> '$.${sensorKey}[0]' ) &lt; ( SELECT limit_val ->> '$.${sensorKey}' FROM
            view_device_density WHERE mac = vdd.mac ) * (2 + #{overproofRatio} * 1)
        </if>
        ) ta
        <where>
            hd.mac = vdd.mac
            AND vdd.monitor_point_id = ta.monitor_point_id
            <if test="start != null">
                AND hd.time >= #{start}
            </if>
            <if test="end != null">
                AND hd.time &lt; #{end}
            </if>
        </where>
        GROUP BY
        vdd.monitor_point_id,
        vdd.device_tech
    </select>
    <!-- 根据设备mac地址,时间,污染因子查询一天的平均值 -->
    <select id="getTraceabilityData" resultType="java.util.Map">
        SELECT
        json ->'$.${sensorKey}[0]' AS '${sensorKey}'
        FROM
        history_daily
        <where>
            <if test="mac!=null">
                AND mac=#{mac}
            </if>
            <if test="time!=null">
                AND time=#{time}
            </if>
        </where>
    </select>
    <!-- 根据设备mac地址,时间,污染因子查询一天的平均值 -->
    <select id="getDataByTimeSlot" resultType="java.util.Map">
        SELECT *
        FROM history_daily
        where mac=#{mac}
        AND time between #{startTime} and #{endTime}
    </select>
</mapper>