From a66d53c3cbfb0024804045f4d795be06089d4f9d Mon Sep 17 00:00:00 2001
From: lizijie <lzjiiie@163.com>
Date: Thu, 03 Dec 2020 17:54:15 +0800
Subject: [PATCH] 五分钟表相关代码,平均风向、平局风速工具类

---
 src/main/resources/mapper/HistoryFiveMinutelyMapper.xml                  |   12 ++++++
 src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java |    6 +++
 src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java            |    1 
 src/main/java/com/moral/util/WindUtils.java                              |   88 ++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/moral/service/HistoryFiveMinutelyService.java          |    2 +
 5 files changed, 109 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java b/src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java
index 438fb96..0aadbdd 100644
--- a/src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java
@@ -9,4 +9,5 @@
 
     Map<String,Object> getFiveMinutesDataByMac(Map<String,Object> parameters);
 
+    List<Map<String,Object>> getFiveMinutesSersorDataByMacsAndTime(Map<String,Object> parameters);
 }
diff --git a/src/main/java/com/moral/service/HistoryFiveMinutelyService.java b/src/main/java/com/moral/service/HistoryFiveMinutelyService.java
index 0d3f3eb..21972b8 100644
--- a/src/main/java/com/moral/service/HistoryFiveMinutelyService.java
+++ b/src/main/java/com/moral/service/HistoryFiveMinutelyService.java
@@ -7,4 +7,6 @@
     List<Map<String, Object>> getFiveMinutesDataByMacsAndTime(Map<String, Object> parameters);
 
     Map<String,Object> getFiveMinutesDataByMac(Map<String, Object> parameters);
+
+    List<Map<String, Object>> getFiveMinutesSersorDataByMacsAndTime(Map<String,Object> parameters);
 }
diff --git a/src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java
index 1a2e322..b2dc382 100644
--- a/src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java
@@ -26,5 +26,11 @@
         return historyFiveMinutelyMapper.getFiveMinutesDataByMac(parameters);
     }
 
+    @Override
+    public List<Map<String, Object>> getFiveMinutesSersorDataByMacsAndTime(Map<String, Object> parameters) {
+        ValidateUtil.notNull(parameters,"���������������������������������");
+        return historyFiveMinutelyMapper.getFiveMinutesSersorDataByMacsAndTime(parameters);
+    }
+
 
 }
diff --git a/src/main/java/com/moral/util/WindUtils.java b/src/main/java/com/moral/util/WindUtils.java
new file mode 100644
index 0000000..01d7073
--- /dev/null
+++ b/src/main/java/com/moral/util/WindUtils.java
@@ -0,0 +1,88 @@
+package com.moral.util;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class WindUtils {
+
+    /**
+     *@Description: ������������������������������UV������
+     * @return:                                                                <                                                               com.moral.entity.Device>>
+     * @Author: lizijie
+     * @Date: 2020/12/03
+     *
+     * */
+    public static Map<String, Double> getWind_direction_speed(List<Map<String, Object>> list){
+        //������u������������������v���������������
+        double u = 0;
+        double v = 0;
+        for (Map map:list) {
+            double u1 = 0;
+            double v1 = 0;
+            double wind_speed = Double.parseDouble(map.get("wind_speed").toString());
+            double wind_direction = Double.parseDouble(map.get("wind_direction").toString());
+            if (wind_speed == 0){
+                continue;//���������������0������������������������������������������
+            }
+            if (wind_direction==0){
+                u1 = 0;
+                v1 = wind_speed*1;
+            }else if (0<wind_direction&&wind_direction<90){
+                u1 = wind_speed*Math.sin(wind_direction);
+                v1 = wind_speed*Math.cos(wind_direction);
+            }else if (wind_direction == 90){
+                u1 = wind_speed*1;
+                v1 = 0;
+            }else if (90<wind_direction&&wind_direction<180){
+                u1 = wind_speed*Math.sin(180-wind_direction);
+                v1 = -1*wind_speed*Math.cos(180-wind_direction);
+            }else if (wind_direction == 180){
+                u1 = 0;
+                v1 = wind_speed*-1;
+            }else if (180<wind_direction&&wind_direction<270){
+                u1 = -1*wind_speed*Math.sin(wind_direction-180);
+                v1 = -1*wind_speed*Math.cos(wind_direction-180);
+            }else if (wind_direction == 270){
+                u1 = wind_speed*-1;
+                v1 = 0;
+            }else if (270<wind_direction&&wind_direction<360){
+                u1 = wind_speed*Math.sin(360-wind_direction);
+                v1 = -1*wind_speed*Math.cos(360-wind_direction);
+            }
+            u = u+u1;
+            v = v+v1;
+        }
+        Map<String,Double> windDirectionSpeedMap = new HashMap<>();
+        if (u==0&&v==0){
+            windDirectionSpeedMap.put("wind_direction",0.0);
+            windDirectionSpeedMap.put("wind_speed",0.0);
+        }else if (u==0&&v>0){
+            windDirectionSpeedMap.put("wind_direction",0.0);
+            windDirectionSpeedMap.put("wind_speed",v);
+        }else if (u>0&&v>0){
+            windDirectionSpeedMap.put("wind_direction",Math.atan2(u,v));
+            windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v));
+        }else if (u>0&&v==0){
+            windDirectionSpeedMap.put("wind_direction",90.0);
+            windDirectionSpeedMap.put("wind_speed",u);
+        }else if (u>0&&v<0){
+            windDirectionSpeedMap.put("wind_direction",Math.atan2(-v,u)+90);
+            windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v));
+        }else if (u==0&&v<0){
+            windDirectionSpeedMap.put("wind_direction",180.0);
+            windDirectionSpeedMap.put("wind_speed",-v);
+        }else if (u<0&&v<0){
+            windDirectionSpeedMap.put("wind_direction",Math.atan2(-u,-v)+180);
+            windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v));
+        }else if (u<0&&v==0){
+            windDirectionSpeedMap.put("wind_direction",270.0);
+            windDirectionSpeedMap.put("wind_speed",-u);
+        }else if (u<0&&v>0){
+            windDirectionSpeedMap.put("wind_direction",Math.atan2(v,-u)+270);
+            windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v));
+        }
+        return windDirectionSpeedMap;
+    }
+
+}
diff --git a/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml b/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
index 3c8e2b7..642d314 100644
--- a/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
+++ b/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
@@ -20,4 +20,16 @@
         where  h.time = #{time}
         and h.mac = #{mac}
     </select>
+
+    <select id="getFiveMinutesSersorDataByMacsAndTime" resultType="map">
+        SELECT h.mac,h.time,
+        <foreach collection="sensorKeys" separator="," item="sensorKey">
+            json->'$.${sensorKey}' AS '${sensorKey}'
+        </foreach>
+        from history_five_minutely_${yearAndMonth} h
+        where time = #{time} and mac IN
+        <foreach collection="macs" separator="," open="(" close=")" item="mac">
+            #{mac}
+        </foreach>
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0