From 158a0ab4db8c34363e5460dbec287c8af1f0f277 Mon Sep 17 00:00:00 2001
From: xufenglei <xufenglei>
Date: Fri, 24 Aug 2018 16:42:53 +0800
Subject: [PATCH] 天气 接口

---
 src/main/resources/mapper/HistoryMapper.xml |  219 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 147 insertions(+), 72 deletions(-)

diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml
index 580a1f2..5314b67 100644
--- a/src/main/resources/mapper/HistoryMapper.xml
+++ b/src/main/resources/mapper/HistoryMapper.xml
@@ -1,90 +1,165 @@
 <?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.HistoryMapper">
-
-  <select id="getDayAQIByDevice" resultType="map">
-		SELECT
-			AVG(value -> '$.e1') e1,
-			AVG(value -> '$.e2') e2,
-			AVG(value -> '$.e10') e10,
-			AVG(value -> '$.e11') e11,
-			AVG(value -> '$.e15') e15,
-			AVG(value -> '$.e16') e16
-		FROM
-			history
-		WHERE
-			mac = #{mac}
-		AND time &gt; #{start}
-		AND time &lt; #{end}
-  </select>
-
-	<select id="getAllSensorAverageByDevice" resultType="java.util.LinkedHashMap">
-		SELECT
-			${queryColumns}
-		FROM
-			history h,
-			device d,
-			monitor_point mp
-		<if test="orgIds != null and orgIds.size &gt; 0">
-			LEFT JOIN monitor_point_organization mpo ON mpo.monitor_point_id = mp.id 
-			AND mpo.organization_id IN
-			<foreach close=")" collection="orgIds" item="listItem" open="(" separator=",">
-				#{listItem}
-			</foreach>
-		</if>
-		WHERE
-			mp.area_code = #{areaCode} 
-			AND h.time > #{start} 
-			AND h.time &lt; #{end}
-			AND h.mac = d.mac 
-			AND d.monitor_point_id = mp.id 
+<mapper namespace="com.moral.mapper.HistoryMapper">
+	<select id="selectValueByMacAndTime" resultType="java.lang.String">
+		select `value` from history
+		where  time = #{time} and mac = #{mac}
+		limit 0,1
 	</select>
-	
+
 	<select id="getAreaAllDataByAccount" resultType="java.util.LinkedHashMap">
 		SELECT
-		<if test="macKey == 'all'">
-			${queryColumns}
-		</if>	
-		<if test="macKey != 'all'">
+		<if test="macKey != null">
 			d.`name`,
-			AVG( h.`value` -> ${macKey}) avg
-		</if>	
+		</if>
+		<foreach collection="sensorKeys" separator="," item="sensorKey">
+			AVG(h.`value` ->'$.${sensorKey}[0]') AS '${sensorKey}'
+		</foreach>
 		FROM
 			history h,
 			device d,
 			monitor_point mp
 		WHERE
-			mp.area_code = #{areaCode} 
-			AND h.time > #{start} 
-			AND h.time &lt; #{end}
+			h.mac = d.mac
+			AND d.monitor_point_id = mp.id
+			<if test="areaCode != null">
+				AND mp.area_code = #{areaCode}
+			</if>
+			<if test="start != null">
+				AND h.time >= #{start}
+			</if>
+			<if test="end != null">
+				AND h.time &lt; #{end}
+			</if>
+			<if test="monitorPointId != null">
+				AND mp.id = #{monitorPointId}
+			</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>
+		<if test="macKey != null">
+			GROUP BY d.id
+			ORDER BY ${macKey} desc
+		</if>
+	</select>
+
+	<select id="getRegionRankingData" resultType="java.util.Map">
+		SELECT
+			AVG( h.${column} -> '$.${sensorKey}[0]' ) avg ,
+			<if test="dimension == 'profession'">
+				p.`name`
+			</if>
+			<if test="dimension == 'monitorPoint'">
+				mp.`name`
+			</if>
+			<if test="dimension == 'region'">
+				r.${nextLevel}_name AS 'name'
+			</if>
+		FROM
+			<if test="dimension == 'profession'">
+				profession p , 
+			</if>
+			<if test="dimension == 'region'">
+				${nextLevel} r,
+			</if>
+			device d,
+			${table} h,
+			monitor_point mp
+		WHERE
+			d.mac = h.mac 
+			AND d.is_delete = '0'
+			AND mp.is_delete = '0'
+			AND d.monitor_point_id = mp.id 
+			AND h.time >= #{start}
+			AND mp.${regionType}_code = #{regionCode}
+			<if test="dimension == 'profession'">
+				AND d.profession_id = p.id 
+			</if>
+			<if test="dimension == 'region'">
+				AND r.${nextLevel}_code = mp.${nextLevel}_code
+			</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>
+		GROUP BY
+			<if test="dimension == 'profession'">
+				p.id
+			</if>
+			<if test="dimension == 'monitorPoint'">
+				mp.id
+			</if>
+			<if test="dimension == 'region'">
+				mp.${nextLevel}_code
+			</if>
+		ORDER BY
+			avg DESC
+		<if test="dimension == 'monitorPoint'">
+		LIMIT 0,50
+		</if>
+	</select>
+	
+	<select id="selectNextLevelRegion" resultType="string">
+		SELECT
+			${nextLevel}_name AS 'name' 
+		FROM
+			${nextLevel}
+		WHERE
+			${regionType}_code = #{regionCode}
+	</select>
+
+	<select id="getDischargeByRegion" resultType="java.util.Map">
+		SELECT
+			mp.`name`,
+			dis.`value` -> '$.${sensorKey}' 'value'
+		FROM
+			monitor_point mp,
+			discharge dis 
+		WHERE
+			dis.monitor_point_id = mp.id 
+			AND mp.${regionType}_code = #{regionCode}
+			AND dis.`year` = #{year}
+	</select>
+	
+	<select id="getValueByMacAndSize" resultType="java.util.Map">
+		SELECT 
+			value,
+			time
+		FROM
+			history 
+		WHERE
+			mac = #{mac} 
+		ORDER BY
+			time DESC 
+		LIMIT #{size}
+	</select>
+	
+	<select id="getActualDataByRegion" resultType="java.util.Map">
+		SELECT
+		<foreach collection="sensorKeys" separator="," item="sensorKey">
+			MAX( CONVERT ( `value` -> '$.${sensorKey}', DECIMAL ) ) AS '${sensorKey}' 
+		</foreach>
+		FROM
+			history h ,
+			device d,
+			monitor_point mp
+		<where>
+			h.mac = d.mac 
+			AND d.monitor_point_id = mp.id 
 		<if test="orgIds != null and orgIds.size &gt; 0">
 			AND mp.organization_id IN
-			<foreach  collection="orgIds" open="(" separator="," close=")" item="listItem" >
+			<foreach  collection="orgIds" open="(" separator="," close=")" item="listItem">
 				#{listItem}
 			</foreach>
 		</if>
-			AND h.mac = d.mac 
-			AND d.monitor_point_id = mp.id 
-		<if test="macKey != 'all'">
-			GROUP BY d.id
-			ORDER BY avg desc
-		</if>	
+			AND h.time >= #{start}			
+			AND h.time &lt; #{end}	
+		</where>
 	</select>
-	
-	<select id="getSensorsAverageByDevice4Report" resultType="map">
-		SELECT
-			DATE_FORMAT(time, #{type}) time,
-			${queryColumns}
-		FROM
-			history h
-		WHERE
-			h.mac = #{mac}
-		AND h.time >= #{start}
-		AND h.time &lt; #{end}
-		GROUP BY
-			DATE_FORMAT(time, #{type})
-		ORDER BY
-			time
-	</select>
-	
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0