From baa11d154e41d24a790596899b329faaa19b24be Mon Sep 17 00:00:00 2001
From: ZhuDongming <773644075@qq.com>
Date: Wed, 13 Nov 2019 09:31:40 +0800
Subject: [PATCH] update污染溯源

---
 src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java |  112 +++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 83 insertions(+), 29 deletions(-)

diff --git a/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java
index 6ba5929..314a26d 100644
--- a/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java
@@ -5,8 +5,6 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.annotation.Resource;
-
 import org.apache.commons.collections.MapUtils;
 import org.springframework.stereotype.Service;
 
@@ -17,6 +15,9 @@
 import com.moral.mapper.SensorMapper;
 import com.moral.service.DeviceService;
 import com.moral.service.HistoryHourlyService;
+import com.moral.service.SensorService;
+
+import javax.annotation.Resource;
 
 @Service
 public class HistoryHourlyServiceImpl implements HistoryHourlyService {
@@ -25,6 +26,9 @@
 
     @Resource
     private DeviceService deviceService;
+
+    @Resource
+    private SensorService sensorService;
 
     @Resource
     private SensorMapper sensorMapper;
@@ -37,31 +41,81 @@
             sensorKeys.add(sensor.getSensorKey());
         }
         parameters.put("sensorKeys", sensorKeys);
-       /* if(pollutionSourceData.get("e6")!=null&&pollutionSourceData.get("e18")!=null){
-            pollutionSourceData=historyHourlyMapper.getPollutionSourceData(parameters);
+        Map<String, Object> pollutionSourceData = historyHourlyMapper.getPollutionSourceData(parameters);
+        if (MapUtils.isNotEmpty(pollutionSourceData)) {
+            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
+            String selectSensorKey = parameters.get("sensorKey").toString();
+            for (Map.Entry<String, String> s : sensorsMap.entrySet()) {
+                if (selectSensorKey.equals(s.getKey())) {
+                    selectSensorKey = s.getValue();
+                }
+            }
+            pollutionSourceData.put("selectSensorKey", selectSensorKey);
         }
-        return pollutionSourceData;*/
-        System.out.println("----"+historyHourlyMapper.getPollutionSourceData(parameters));
-       return historyHourlyMapper.getPollutionSourceData(parameters);
+        return pollutionSourceData;
     }
 
     @Override
-    public Point getDirPoint(Map<String, Object> parameters) throws Exception{
-        Map<String,Object> pollutionSourceData=getPollutionSourceData(parameters);
+    public Map<String, Object> getPollutionSourceDataByHour(Map<String, Object> parameters) throws Exception {
+        List<Sensor> sensors = sensorMapper.getSensorsByMac(parameters);
+        List<String> sensorKeys = new ArrayList<>();
+        for (Sensor sensor : sensors) {
+            sensorKeys.add(sensor.getSensorKey());
+        }
+        parameters.put("sensorKeys", sensorKeys);
+        Map<String, Object> pollutionSourceData = historyHourlyMapper.getPollutionSourceDataByHour(parameters);
+        if (MapUtils.isNotEmpty(pollutionSourceData)) {
+            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
+            String selectSensorKey = parameters.get("sensorKey").toString();
+            for (Map.Entry<String, String> s : sensorsMap.entrySet()) {
+                if (selectSensorKey.equals(s.getKey())) {
+                    selectSensorKey = s.getValue();
+                }
+            }
+            pollutionSourceData.put("selectSensorKey", selectSensorKey);
+        }
+        return pollutionSourceData;
+    }
+
+    @Override
+    public Map<String, Object> getPollutionSourceDataAll(Map<String, Object> parameters) throws Exception {
+        List<Sensor> sensors = sensorMapper.getSensorsByMac(parameters);
+        List<String> sensorKeys = new ArrayList<>();
+        for (Sensor sensor : sensors) {
+            sensorKeys.add(sensor.getSensorKey());
+        }
+        parameters.put("sensorKeys", sensorKeys);
+        Map<String, Object> pollutionSourceData = historyHourlyMapper.getPollutionSourceDataAll(parameters);
+        if (MapUtils.isNotEmpty(pollutionSourceData)) {
+            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
+            String selectSensorKey = parameters.get("sensorKey").toString();
+            for (Map.Entry<String, String> s : sensorsMap.entrySet()) {
+                if (selectSensorKey.equals(s.getKey())) {
+                    selectSensorKey = s.getValue();
+                }
+            }
+            pollutionSourceData.put("selectSensorKey", selectSensorKey);
+        }
+        return pollutionSourceData;
+    }
+
+    @Override
+    public Point getDirPoint(Map<String, Object> parameters) throws Exception {
+        Map<String, Object> pollutionSourceData = getPollutionSourceDataByHour(parameters);
+        if (MapUtils.isEmpty(pollutionSourceData)) {
+            pollutionSourceData = getPollutionSourceDataAll(parameters);
+        }
         String mac = parameters.get("mac").toString();
         Device device = deviceService.getDeviceByMac(mac, false);
-        Point pointEnd=new Point();
-        if(MapUtils.isNotEmpty(pollutionSourceData)){
-            System.out.println("pollutionSourceData"+pollutionSourceData);
-            if(pollutionSourceData.get("e18")!=null&&pollutionSourceData.get("e23")!=null&&pollutionSourceData.get("e6")!=null){
-                double windSpeed=Double.valueOf(pollutionSourceData.get("e18").toString());
-                double winDir=Double.valueOf(pollutionSourceData.get("e23").toString());
-                double distance=windSpeed*3600;
-                double long1=device.getLongitude();
-                double lat1=device.getLatitude();
-                System.out.println("windSpeed:"+windSpeed+"---winDir:"+winDir+"---distance:"+distance+"--long1:"+long1+"--lat1:"+lat1);
-                String[] result=calLocationByDistanceAndLocationAndDirection(winDir,long1,lat1,distance);
-                System.out.println("result1���"+Double.valueOf(result[0])+"result2���"+Double.valueOf(result[1]));
+        Point pointEnd = new Point();
+        if (MapUtils.isNotEmpty(pollutionSourceData)) {
+            if (pollutionSourceData.get("e18") != null && pollutionSourceData.get("e23") != null) {
+                double windSpeed = Double.valueOf(pollutionSourceData.get("e18").toString());
+                double winDir = Double.valueOf(pollutionSourceData.get("e23").toString());
+                double distance = windSpeed * 3600;
+                double long1 = device.getLongitude();
+                double lat1 = device.getLatitude();
+                String[] result = calLocationByDistanceAndLocationAndDirection(winDir, long1, lat1, distance);
                 pointEnd.setLng(Double.valueOf(result[0]));
                 pointEnd.setLat(Double.valueOf(result[1]));
             }
@@ -70,29 +124,29 @@
     }
 
 
-
     /**
      * ���������������������������������������������������������������������������
-     * @param angle ���������������������������������������������
+     *
+     * @param angle     ���������������������������������������������
      * @param startLong ���������������
-     * @param startLat ���������������
-     * @param distance ���������������m
+     * @param startLat  ���������������
+     * @param distance  ���������������m
      * @return
      */
-    private String[] calLocationByDistanceAndLocationAndDirection(double angle, double startLong,double startLat, double distance){
+    private String[] calLocationByDistanceAndLocationAndDirection(double angle, double startLong, double startLat, double distance) {
         /** ������������ **/
         final double R = 6371e3;
         /** 180�� **/
         final DecimalFormat df = new DecimalFormat("0.000000");
         String[] result = new String[2];
         //���������������������������������������
-        double �� = distance/R;
+        double �� = distance / R;
         // ���������radian���������������������������
         angle = Math.toRadians(angle);
         startLong = Math.toRadians(startLong);
         startLat = Math.toRadians(startLat);
-        double lat = Math.asin(Math.sin(startLat)*Math.cos(��)+Math.cos(startLat)*Math.sin(��)*Math.cos(angle));
-        double lng = startLong + Math.atan2(Math.sin(angle)*Math.sin(��)*Math.cos(startLat),Math.cos(��)-Math.sin(startLat)*Math.sin(lat));
+        double lat = Math.asin(Math.sin(startLat) * Math.cos(��) + Math.cos(startLat) * Math.sin(��) * Math.cos(angle));
+        double lng = startLong + Math.atan2(Math.sin(angle) * Math.sin(��) * Math.cos(startLat), Math.cos(��) - Math.sin(startLat) * Math.sin(lat));
         // ���������������10���������������
         lng = Math.toDegrees(lng);
         lat = Math.toDegrees(lat);

--
Gitblit v1.8.0