From d903f312cf6a1d0fc4c5745832a9d6fa681e5141 Mon Sep 17 00:00:00 2001
From: 于紫祥_1901 <email@yuzixiang_1910>
Date: Tue, 30 Jun 2020 09:16:07 +0800
Subject: [PATCH] update(无组织排放)

---
 src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java |  386 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 386 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java b/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
index 1be75e8..3f1f427 100644
--- a/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
@@ -1,5 +1,6 @@
 package com.moral.service.impl;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -13,8 +14,14 @@
 import javax.annotation.Resource;
 import javax.validation.constraints.NotNull;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.moral.mapper.DictionaryDataMapper;
 import com.moral.mapper.OrganizationMapper;
+import com.moral.service.HistoryHourlyService;
+import com.moral.util.MyLatLng;
+import com.moral.util.mapUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
@@ -56,6 +63,9 @@
     
     @Resource
     private OrganizationService organizationService;
+
+    @Resource
+    private HistoryHourlyService historyHourlyService;
     
     private static Class ENTITY_CLASS = MonitorPoint.class;
     @Override
@@ -358,4 +368,380 @@
 		}
     	
 	}
+	@Override
+	public Map<String, Object> selectAllById(String id) {
+		int id2 = Integer.parseInt(id);
+		Map<String, Object> map = monitorPointMapper.selectAllById(id2);
+		return map;
+	}
+
+    @Override
+    public List<Device> getDeviceList(int id) {
+        return monitorPointMapper.getDeviceList(id);
+    }
+
+    @Override
+    public JSONObject getMonitorPointById(int id, String Time, int i, String sensor) {
+        JSONObject params = new JSONObject();
+        MonitorPoint monitorPoint = monitorPointMapper.getMonitorPointById(id);
+        if (i == 1) {
+            Double longitude = monitorPoint.getLongitude();
+            Double latitude = monitorPoint.getLatitude();
+
+            Double workshop = 0.0;
+
+            Double flue = 0.0;
+            //������������
+            List<Device> device1 = deviceService.getDeviceById1(id);
+
+            //������������
+            List<Device> device2 = deviceService.getDeviceById2(id);
+
+            //������������
+            List<Device> device3 = deviceService.getDeviceById3(id);
+
+
+            String purificationRate = null;//���������
+
+            if (device3.size() == 0) {
+                purificationRate = "���������������������������������������������";
+                params.put("device2", device2);
+                params.put("device1", device1);
+            } else {
+                params.put("device1", device1);
+                params.put("device2", device2);
+                params.put("device3", device3);
+                for (Device device33 : device3) {
+                    String mac3 = device33.getMac();
+                    String tvoc = historyHourlyService.getTVOCByMac(mac3, Time,sensor);
+                    if (tvoc != null) {
+                        workshop = Double.parseDouble(tvoc);
+                    } else {
+                        workshop = 0.0;
+                    }
+                }
+                if (device1.size() == 0) {
+                    purificationRate = "���������������������������������������������";
+                } else {
+                    for (Device device11 : device1) {
+                        String mac1 = device11.getMac();
+                        flue = Double.parseDouble(historyHourlyService.getTVOCByMac(mac1, Time,sensor));
+                        if (workshop == 0.0) {
+                            purificationRate = "���������������������������������������������������";
+                        } else {
+                            if (flue == 0.0) {
+                                purificationRate = "���������������������������������������������������";
+                            } else {
+                                BigDecimal b = new BigDecimal(((workshop - flue) / workshop) * 100);
+                                double purity2 = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                                purificationRate = (purity2) + "%";
+                            }
+                        }
+                    }
+                }
+            }
+            params.put("latitude", latitude);
+            params.put("longitude", longitude);
+            params.put("purificationRate", purificationRate);
+        }
+        if (i == 2) {
+            Double longitude = monitorPoint.getLongitude();
+            Double latitude = monitorPoint.getLatitude();
+            //������������
+            List<Device> device1 = deviceService.getDeviceById1(id);
+            //������������
+            List<Device> device2 = deviceService.getDeviceById2(id);
+            //������������
+            List<Device> device3 = deviceService.getDeviceById3(id);
+            String collectionRate = null;//���������
+            Double pressure = 0.0;//������������
+            List<Double> list1 = new ArrayList();
+            if (device3.size() == 0) {
+                collectionRate = "������������������������������������������������";
+                params.put("device1", device1);
+                params.put("device2", device2);
+            } else {
+                params.put("device3", device3);
+                if (device2.size() == 0) {
+                    collectionRate = "������������������������������������������������";
+                    params.put("device1", device1);
+                } else {
+                    params.put("device2", device2);
+                    params.put("device1", device1);
+                    Double sum = 0.0;
+                    for (Device device22 : device2) {
+                        String mac2 = device22.getMac();
+                        String pressure2 = historyHourlyService.getPressureByMac(mac2, Time);
+                        if (pressure2 != null) {
+                            pressure = Double.parseDouble(pressure2);
+                            list1.add(pressure);
+                        }else {
+                            collectionRate = "������������������������������������������������������������";
+                        }
+
+                    }
+                    for (Double d : list1) {
+                        sum = sum + d;
+                    }
+                    if (list1.size() != 0) {
+                        pressure = sum / list1.size();
+                    } else {
+                        collectionRate = "������������������������������������������������������������";
+                    }
+                    Double pressure33 = 0.0;
+                    for (Device device33 : device3) {
+                        String mac3 = device33.getMac();
+                        String pressure3 = historyHourlyService.getPressureByMac(mac3, Time);
+                        if (pressure3 != null) {
+                            pressure33 = Double.parseDouble(pressure3);
+                            BigDecimal b = new BigDecimal((pressure - pressure33 + 3.5) * 20);//���������2.5���������������������������������
+                            double collection = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                            collectionRate = collection + "%";
+                        }
+                    }
+                }
+            }
+            params.put("latitude", latitude);
+            params.put("longitude", longitude);
+            params.put("collectionRate", collectionRate);
+        }
+
+        if (i == 3) {
+            Double longitudeCompany = monitorPoint.getLongitude();
+            Double latitudeCompany = monitorPoint.getLatitude();
+            Double longitude = 0.0;//������������������������
+            Double latitude = 0.0;//������������������������
+            List<Device> deviceList = deviceService.getDeviceById2(id);
+            //List<Device> deviceList = monitorPointService.getDeviceList(id);
+            List<Map> list = new ArrayList<Map>();//������historyHourly���json������
+            String smac = "";//������������������Mac���
+            List<Map> windList = new ArrayList<Map>();//���������������������������������������
+            Map<String, Object> jsonMap = new HashMap<String, Object>();//���������������������
+            Map<String, Object> deviceMap = null;
+            if (deviceList.size()>1){
+                for (Device device : deviceList) {
+                    deviceMap = new HashMap<String, Object>();
+                    smac = device.getMac();
+                    latitude = device.getLatitude();
+                    longitude = device.getLongitude();
+
+                    jsonMap = historyHourlyService.getDataByMac(smac, Time);
+                    deviceMap.put("longitude", longitude);
+                    deviceMap.put("latitude", latitude);
+                    if (jsonMap != null) {
+                        deviceMap.put("jsonMap", jsonMap);
+                    } else {
+                        deviceMap.put("jsonMap", "������������������������������");
+                    }
+
+                    list.add(deviceMap);
+                }
+                Map<String, Object> mapData = new HashMap<String, Object>();
+                Map<String, Object> mapDevice;
+                JSONArray windDir;
+                for (Map<String, Object> objectMap : list) {
+                    mapDevice = new HashMap<String, Object>();
+                    Map<String, Object> map = null;
+                    if (!(objectMap.get("jsonMap") instanceof String)) {
+                        mapData = (Map<String, Object>) objectMap.get("jsonMap");
+                        map = (Map) JSON.parseObject((String) mapData.get("json"));
+                        windDir = (JSONArray) JSONArray.toJSON(map.get("e23"));
+                        JSONArray concentration = (JSONArray) JSONArray.toJSON(map.get(sensor));
+
+                        BigDecimal bigDecimal1=new BigDecimal(0);
+                        BigDecimal bigDecimal=new BigDecimal(0);
+                        if (concentration!=null){
+                            if (concentration.get(0) instanceof Integer){
+                                bigDecimal1 =new BigDecimal(concentration.get(0).toString());
+                            }else {
+                                bigDecimal1= (BigDecimal) concentration.get(0);
+                            }
+                            if (windDir!=null){
+                                if (windDir.get(0) instanceof Integer){
+                                    bigDecimal =new BigDecimal(windDir.get(0).toString());
+                                }else {
+                                    bigDecimal=(BigDecimal) windDir.get(0);
+                                }
+                                mapDevice.put("e23", bigDecimal.doubleValue());
+                                mapDevice.put("sensor", bigDecimal1.doubleValue());
+                                mapDevice.put("longitude", objectMap.get("longitude"));
+                                mapDevice.put("latitude", objectMap.get("latitude"));
+                            }else {
+                                mapDevice.put("noSensor", "���������������");
+                                mapDevice.put("longitude", objectMap.get("longitude"));
+                                mapDevice.put("latitude", objectMap.get("latitude"));
+                            }
+                        }
+                    } else {
+                        mapDevice.put("info", objectMap.get("jsonMap"));
+                        mapDevice.put("longitude", objectMap.get("longitude"));
+                        mapDevice.put("latitude", objectMap.get("latitude"));
+                    }
+                    windList.add(mapDevice);
+                }
+                // if (windDir!=null){}
+                Double differenceNum = 0.0;
+                Map<String, Object> indexMap;
+                List<Map> mapList = new ArrayList<>();
+                for (int j = 0; j < windList.size(); j++) {
+                    for (int k = 0; k < windList.size(); k++) {
+                        if (k != j) {
+                            indexMap = new HashMap<String, Object>();
+                            if (windList.get(k).containsKey("e23") && windList.get(j).containsKey("e23")) {
+                                Double e23Numk = (Double) windList.get(k).get("e23");
+                                Double e23Numj = (Double) windList.get(j).get("e23");
+                                Double diff = e23Numk - e23Numj;
+                                BigDecimal b = new BigDecimal(Math.abs(diff));
+
+                                differenceNum = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+                                if (differenceNum > 180) {
+                                    differenceNum = 360 - differenceNum;
+                                }
+                                indexMap.put("k", k);
+                                indexMap.put("j", j);
+                                indexMap.put("diff", differenceNum);
+                            } else {
+                                indexMap.put("k", k);
+                                indexMap.put("j", j);
+                                indexMap.put("info", "���������������");
+                            }
+
+//                     indexMap.put("longitude",windList.get(k).get("longitude"));
+//                     indexMap.put("latitude",windList.get(k).get("latitude"));
+                            mapList.add(indexMap);
+                        } else {
+                            continue;
+                        }
+
+                    }
+                }
+                Double min = 0.0;
+                int indexMin = 0;
+                if (mapList.size()>0){
+                    if (mapList.get(0).containsKey("diff")) {
+                        min = (Double) mapList.get(0).get("diff");
+                        for (int q = 1; q < mapList.size(); q++) {
+                            if (mapList.get(q).containsKey("diff")) {
+                                if (min > (Double) mapList.get(q).get("diff")) {
+                                    min = (Double) mapList.get(q).get("diff");
+                                    indexMin = q;
+                                }
+                            } else {
+                                indexMin = q;
+                            }
+                        }
+                    }
+                }
+
+                Map twoDeviceMap = mapList.get(indexMin);
+                List<Map> list1 = new ArrayList<Map>();           //���������������������������������������������������
+                list1.add(windList.get((Integer) twoDeviceMap.get("k")));
+                list1.add(windList.get((Integer) twoDeviceMap.get("j")));
+
+                Double wind = 0.0;
+                Double sum = 0.0;
+                if (list1.get(0).containsKey("e23")) {
+                    if (Math.abs((Double) list1.get(0).get("e23") - (Double) list1.get(1).get("e23")) > 180) {
+                        sum = (Double) list1.get(0).get("e23") + (Double) list1.get(1).get("e23");
+                        wind = sum / 2 + 180;
+                        if (wind > 360) {
+                            wind = wind - 360;
+                        }
+                    } else {
+                        for (Map map : list1) {
+                            sum += (Double) map.get("e23");
+                        }
+                        wind = sum / 2;
+                    }
+                } else {
+                    wind = 0.0;
+                }
+                Map<String, Object> longAndLatiMap;
+                List<Map> longAndLatiList = new ArrayList<>();//������������������������������������windList������������������������������������������������������������������
+                List<Map> preAngleDeviceList = new ArrayList<Map>(); //���������������������������������������
+                if (wind != 0.0) {
+                    for (int f = 0; f < windList.size(); f++) {
+                        for (int h = 0; h < windList.size(); h++) {
+                            if (f != h) {
+                                longAndLatiMap = new HashMap<String, Object>();
+                                longAndLatiMap.put("h", h);
+                                longAndLatiMap.put("f", f);
+                                Double angle = mapUtils.getAngle(
+                                        new MyLatLng((Double) windList.get(h).get("longitude"),
+                                                (Double) windList.get(h).get("latitude")),
+                                        new MyLatLng((Double) windList.get(f).get("longitude"),
+                                                (Double) windList.get(f).get("latitude")));
+                                Double angleDiff = Math.abs(angle - wind);
+                                longAndLatiMap.put("angle", angleDiff);
+                                longAndLatiList.add(longAndLatiMap);
+                            }
+                        }
+                    }
+                    Double minAngle = (Double) longAndLatiList.get(0).get("angle");
+                    int indexAngle = 0;
+                    for (int j = 0; j < longAndLatiList.size(); j++) {
+                        if (minAngle > (Double) longAndLatiList.get(j).get("angle")) {
+                            minAngle = (Double) longAndLatiList.get(j).get("angle");
+                            indexAngle = j;
+                        }
+                    }
+                    //windList.get((Integer) longAndLatiList.get(indexAngle).get("f"))������������������������
+                    preAngleDeviceList.add(windList.get((Integer) longAndLatiList.get(indexAngle).get("h")));
+                    preAngleDeviceList.add(windList.get((Integer) longAndLatiList.get(indexAngle).get("f")));
+
+                    Double length = mapUtils.getDistance((Double) preAngleDeviceList.get(0).get("longitude"), (Double) preAngleDeviceList.get(0).get("latitude"),
+                            (Double) preAngleDeviceList.get(1).get("longitude"), (Double) preAngleDeviceList.get(1).get("latitude"));
+                    Double subLength = length/5;
+                    Double subLength1 = length/6.1;
+                    Double angle = mapUtils.getAngle(
+                            new MyLatLng((Double) preAngleDeviceList.get(0).get("longitude"),
+                                    (Double) preAngleDeviceList.get(0).get("latitude")),
+                            new MyLatLng((Double) preAngleDeviceList.get(1).get("longitude"),
+                                    (Double) preAngleDeviceList.get(1).get("latitude")));
+
+                    params.put("preAngleDeviceList", preAngleDeviceList);
+                    params.put("angle", angle);
+                    List locationList = new ArrayList();
+                    String[] firstLocation = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, (Double) preAngleDeviceList.get(0).get("longitude"),
+                            (Double) preAngleDeviceList.get(0).get("latitude"), subLength);
+                    String[] secondLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(firstLocation[0]),
+                            Double.parseDouble(firstLocation[1]), subLength);
+                    String[] thirdLocation = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(secondLoction[0]),
+                            Double.parseDouble(secondLoction[1]), subLength);
+                    String[] fourthLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(thirdLocation[0]),
+                            Double.parseDouble(thirdLocation[1]), subLength);
+                    String[] fivethLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(fourthLoction[0]),
+                            Double.parseDouble(fourthLoction[1]), subLength1);
+                    locationList.add(firstLocation);
+                    locationList.add(secondLoction);
+                    locationList.add(thirdLocation);
+                    locationList.add(fourthLoction);
+                    locationList.add(fivethLoction);
+                    params.put("locationList", locationList);
+
+                    String preAngleDeviceString = JSON.toJSON(preAngleDeviceList).toString();
+                    params.put("preAngleDeviceString", preAngleDeviceString);//���������������������������
+                } else {
+                    params.put("preAngleDeviceString", 0);
+                }
+                params.put("wind", wind);
+                //String preAngleDeviceString=preAngleDeviceList.
+                params.put("deviceList", deviceList);
+            }else {
+                if (deviceList.size()!=0){
+                    params.put("deviceList", deviceList.get(0));
+                }else {
+                    params.put("deviceList","");
+                }
+                params.put("preAngleDeviceString", 1);
+                params.put("locationList", "");
+            }
+
+            params.put("latitudeCompany", latitudeCompany);
+            params.put("longitudeCompany", longitudeCompany);
+        }
+        return params;
+    }
+
+
 }

--
Gitblit v1.8.0