From dba54bf8c8f9299d61c05bf3a941708ea399c998 Mon Sep 17 00:00:00 2001
From: ZhuDongming <773644075@qq.com>
Date: Sun, 26 Apr 2020 15:20:22 +0800
Subject: [PATCH] update excel多个工作表导出

---
 src/main/resources/mapper/HistoryMinutelyMapper.xml |   54 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/src/main/resources/mapper/HistoryMinutelyMapper.xml b/src/main/resources/mapper/HistoryMinutelyMapper.xml
index 6aedbcb..933a5e7 100644
--- a/src/main/resources/mapper/HistoryMinutelyMapper.xml
+++ b/src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -179,19 +179,26 @@
         hm.time
     </select>
 
-    <select id="getDevicesAvgDataToExcel" resultType="java.util.Map">
-        SELECT
-        d.name,DATE_FORMAT(time, #{typeFormat}) time,
+    <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
+        device d,
+        monitor_point m
         WHERE
         h.mac=d.mac
-        AND
-        h.time >= #{start}
+        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=")"
@@ -199,9 +206,40 @@
             #{mac}
         </foreach>
         GROUP BY
-        h.mac,d.name,DATE_FORMAT(time, #{typeFormat})
+        h.mac,m.name,d.name,DATE_FORMAT(time, #{typeFormat})
         ORDER BY
-        h.mac
+        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>
\ No newline at end of file

--
Gitblit v1.8.0