lizijie
2019-06-12 09c3a7d258c7bde571f74050156437d2eb86c6c6
src/main/resources/mapper/HistoryDailyMapper.xml
@@ -33,4 +33,81 @@
      </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!=''">
                AND mac=#{mac}
            </if>
            <if test="time!=null and time!=''">
                AND time=#{time}
            </if>
        </where>
    </select>
</mapper>