From 0d667ba939460c3dc6cdb0c974841bd0be5dc432 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Wed, 16 Dec 2020 13:41:56 +0800
Subject: [PATCH] report_avg_datas接口更新

---
 src/main/resources/mapper/HistoryMinutelyMapper.xml |  137 +++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 130 insertions(+), 7 deletions(-)

diff --git a/src/main/resources/mapper/HistoryMinutelyMapper.xml b/src/main/resources/mapper/HistoryMinutelyMapper.xml
index 151cc41..252008c 100644
--- a/src/main/resources/mapper/HistoryMinutelyMapper.xml
+++ b/src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -31,6 +31,32 @@
         AND time &lt; #{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>

--
Gitblit v1.8.0