From cb888577b99892706860d2732785d22842aae9b0 Mon Sep 17 00:00:00 2001
From: 于紫祥_1901 <email@yuzixiang_1910>
Date: Fri, 18 Sep 2020 15:14:34 +0800
Subject: [PATCH] 走行车update

---
 src/main/java/com/moral/service/impl/DeviceServiceImpl.java |  422 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 416 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
index 830090e..f31a2d0 100644
--- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -1,16 +1,12 @@
 package com.moral.service.impl;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 import javax.validation.constraints.NotNull;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.TypeReference;
 import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
@@ -22,7 +18,9 @@
 import com.moral.common.util.RedisUtils;
 import com.moral.common.util.ValidateUtil;
 import com.moral.entity.Device;
+import com.moral.entity.DeviceAndWind;
 import com.moral.entity.DeviceProperty;
+import com.moral.entity.MonitorPoint;
 import com.moral.mapper.DeviceMapper;
 import com.moral.mapper.DevicePropertyMapper;
 import com.moral.mapper.DeviceVersionMapper;
@@ -31,6 +29,7 @@
 import com.moral.mapper.OrganizationMapper;
 import com.moral.service.AccountService;
 import com.moral.service.DeviceService;
+import com.moral.util.LatLngTransformation;
 import com.moral.util.TkMybatisUtils;
 
 import org.apache.commons.collections.MapUtils;
@@ -220,6 +219,10 @@
         Example.Criteria deviceCriteria = deviceExample.createCriteria();
         deviceCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE);
         List<Device> devicesInfo = deviceMapper.selectByExample(deviceExample);
+        Example monitorExample = new Example(MonitorPoint.class);//���������
+        Example.Criteria monitorCriteria = monitorExample.createCriteria();
+        monitorCriteria.orEqualTo("isDelete", Constants.IS_DELETE_FALSE);
+        List<MonitorPoint> monitorsInfo = monitorPointMapper.selectByExample(monitorExample);
         for (Device d : deviceList) {
             if (dv.contains(d.getDeviceVersionId())) {
                 d.setHasWindInfo(true);
@@ -229,6 +232,11 @@
             for (Device temp : devicesInfo) {
                 if (d.getId().equals(temp.getId())) {
                     d.setState(temp.getState());
+                }
+            }
+            for (MonitorPoint mp : monitorsInfo) {
+                if (d.getMonitorPointId().equals(mp.getId())) {
+                    d.setMonitorPoint(mp);
                 }
             }
         }
@@ -667,4 +675,406 @@
     public List<Device> getDeviceById3(int id) {
         return deviceMapper.getDeviceById3(id);
     }
+
+    @Override
+    public List<Device> queryDevice(Map<String, Object> params) {
+        List<Integer> dv = deviceMapper.getHasWindDirAndWindSpeedDeviceVersion();
+        Object orgIdObj = params.get("orgId");
+        List<Device> deviceList = null;
+        if (orgIdObj != null) {
+            Integer orgId = Integer.parseInt(orgIdObj.toString());
+            List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId);
+            params.put("orgIds", orgIds);
+            deviceList = deviceMapper.selectDevicesAll(params);
+        }
+        List<Device> deviceListHasWind=new ArrayList<>();
+        for (Device d : deviceList) {
+            if (dv.contains(d.getDeviceVersionId())) {
+                deviceListHasWind.add(d);
+            }
+        }
+        return deviceListHasWind;
+    }
+
+    @Override
+    public Map<String, Object> getAllFieldByMac(Map<String, Object> parameters) {
+        Map<String, Object> deviceMap = deviceMapper.selectAllFieldByMac(parameters);
+        return deviceMap;
+    }
+
+    @Override
+    public List<DeviceAndWind> getAllDevice() {
+        return deviceMapper.getAllDevice();
+    }
+
+    @Override
+    public List<String> getAllMac() {
+        return deviceMapper.getAllMac();
+    }
+
+    @Override
+    public Device byMacGetDevice(String mac) {
+        return deviceMapper.byMacGetDevice(mac);
+    }
+
+    @Override
+    public List byMonitorIdGetDeviceAndWind(String id,String time,String tab) {
+        List<DeviceAndWind> deviceAndWinds=deviceMapper.byMonitorIdGetDeviceAndWind(Integer.parseInt(id),time,tab);
+        List loList=new ArrayList();
+        List laList=new ArrayList();
+        Double U=0.0;
+        Double V=0.0;
+        List list=new ArrayList();
+        for (DeviceAndWind andWind : deviceAndWinds) {
+            Double lo=andWind.getLongitude();
+            Double la=andWind.getLatitude();
+            List tranlist= LatLngTransformation.Convert_BD09_To_GCJ02(la,lo);
+            Double transLo=(Double) tranlist.get(0);
+            Double transLa=(Double) tranlist.get(1);
+            loList.add(transLo);
+            laList.add(transLa);
+        }
+        Double  loma= 0.0;
+        Double  lomi= 0.0;
+        Double  lama= 0.0;
+        Double  lami= 0.0;
+        if (loList.size()>0){
+            loma= (Double) Collections.max(loList);
+            lomi= (Double) Collections.min(loList);
+        }
+        if (laList.size()>0){
+            lama= (Double) Collections.max(laList);
+            lami= (Double) Collections.min(laList);
+        }
+        Map laLaMap=new HashMap();
+        laLaMap.put("maxLo",loma);
+        laLaMap.put("minLo",lomi);
+        laLaMap.put("maxLa",lama);
+        laLaMap.put("minLa",lami);
+
+        Double lo1=lomi-250*0.00001141;
+        Double lo2=loma+250*0.00001141;
+        Double la2=lami-250*0.00000899;
+        Double la1=lama+250*0.00000899;
+
+        Double dx=0.00001141*20;
+        Double dy=0.00000899*20;
+        int nx=(int) Math.floor((lo2-lo1)/dx);
+        int ny=(int) Math.floor((la1-la2)/dy);
+        String header1 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 2 +
+                ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy +
+                ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 +
+                ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 +
+                ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}";
+
+        String header2 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 3 +
+                ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy +
+                ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 +
+                ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 +
+                ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}";
+
+        List<Double> uList=new ArrayList<Double> ();
+        List<Double>  vList=new ArrayList<Double> ();
+        int x=0;
+        int y=0;
+        List<Map> mapList=new ArrayList<Map>();
+
+        for (int j = 0; j <deviceAndWinds.size() ; j++) {
+            Map<String,Double> map=new HashMap<String,Double> ();
+            Double windDir= deviceAndWinds.get(j).getWindDir();
+
+            Double windSpeed=deviceAndWinds.get(j).getWindSpeed();
+            if (windDir==null){
+                windDir=0.0;
+                windSpeed=0.0;
+            }
+            Double tvoc=deviceAndWinds.get(j).getTVoc();
+
+            List tranlist= LatLngTransformation.Convert_BD09_To_GCJ02(deviceAndWinds.get(j).getLatitude(),deviceAndWinds.get(j).getLongitude());
+            Double transLo=(Double) tranlist.get(0);
+            Double transLa=(Double) tranlist.get(1);
+            if (tvoc==null){
+                tvoc=0.0;
+            }
+            Double dir = (270.0 - windDir * Math.PI / 180.0);
+
+            U = windSpeed * Math.cos(dir);
+            V = windSpeed * Math.sin(dir);
+            map.put("lo",transLo);
+            map.put("la",transLa);
+            map.put("U",U);
+            map.put("V",V);
+            mapList.add(map);
+        }
+        for (int i = 0; i <mapList.size() ; i++) {
+            Double lo= (Double) mapList.get(i).get("lo");
+            Double la= (Double) mapList.get(i).get("la");
+            x= (int) Math.floor((lo-lo1)/dx);
+            y=Math.abs((int)Math.floor((la-la1)/dy));
+            //y=Math.floor(Math.abs(la-la1)/dy);
+            U=(Double) mapList.get(i).get("U");
+            V=(Double) mapList.get(i).get("V");
+            if (i==0){
+                for (int j = 0; j <nx*ny ; j++) {
+                    uList.add(0.0);
+                    vList.add(0.0);
+                }
+            }
+            for (int j = 0; j <nx*ny ; j++) {
+                if (i==0){
+                    if ((y>=2 && j==(y)*nx+x)){
+                        int k;
+                        for (k = j-2*nx; k <=j+2*nx ;k=k+nx) {
+                            uList.set(k,U);
+                            uList.set(k-1,U);
+                            uList.set(k-2,U);
+                            uList.set(k+1,U);
+                            uList.set(k+2,U);
+                            vList.set(k,V);
+                            vList.set(k-1,V);
+                            vList.set(k-2,V);
+                            vList.set(k+1,V);
+                            vList.set(k+2,V);
+                        }
+                    }
+                }else {
+                    if (y>=1 && j==y*nx+x){
+                        int k;
+                        for (k = j-2*nx; k <=j+2*nx ;) {
+                            uList.set(k-1,U);
+                            uList.set(k-2,U);
+                            uList.set(k+1,U);
+                            uList.set(k+2,U);
+                            vList.set(k-1,V);
+                            vList.set(k-2,V);
+                            vList.set(k+1,V);
+                            vList.set(k+2,V);
+                            k=k+nx;
+                        }
+                        uList.set(j,U);
+                        vList.set(j,V);
+                    }
+                }
+            }
+        }
+        String uData = "\"" + "data" + "\"" + ": " + uList;
+        String vData = "\"" + "data" + "\"" + ": " + vList;
+        String s1 = "[" + "{" + header1 + ", " + uData + "}" + ", " + "{" + header2 + ", " + vData + "}" + "]";
+        JSONArray jsonArray = JSONArray.parseArray(s1);
+        MonitorPoint monitorPoint=monitorPointMapper.byIdGetMonitorPoint(Integer.parseInt(id));
+        Double monitorLo=monitorPoint.getLongitude();
+        Double monitorLa=monitorPoint.getLatitude();
+        List transList= LatLngTransformation.Convert_BD09_To_GCJ02(monitorLa,monitorLo);
+        Double transLo=(Double) transList.get(0);
+        Double transLa=(Double) transList.get(1);
+        list.add(jsonArray);
+        list.add(transLo);
+        list.add(transLa);
+        list.add(laLaMap);
+        return list;
+    }
+
+    @Override
+    public List byMonitorIdGetDeviceAndWindSpecial(String id, String time, String tab) {
+        MonitorPoint monitorPoint=monitorPointMapper.byIdGetMonitorPoint(Integer.parseInt(id));
+        Integer areaCode=monitorPoint.getAreaCode();
+        String townCode= monitorPoint.getTownCode()+"";
+        int monitorPointId=monitorPoint.getId();
+        Map<String, Object> parm=new HashMap<>();
+        List<DeviceAndWind> deviceAndWinds=new ArrayList<>();
+        Double  loma= 0.0;
+        Double  lomi= 0.0;
+        Double  lama= 0.0;
+        Double  lami= 0.0;
+
+        int length=1;
+        int perdlen=1;
+        if (areaCode==320581){
+            parm.put("areaCode",areaCode);
+            List<Device> deviceList=deviceMapper.getDeviceByCode(parm);
+            for (Device d : deviceList) {
+                String mac=d.getMac();
+                 DeviceAndWind deviceAndWind = deviceMapper.byMacGetDeviceAndWind(mac,time,tab);
+                 if (deviceAndWind!=null){
+                     deviceAndWinds.add(deviceAndWind);
+                 }
+            }
+            length=8000;
+            perdlen=2200;
+        }else if ((areaCode == 320583) && (townCode.equals("320583108000"))){
+            parm.put("townCode",townCode);
+            List<Device> deviceList=deviceMapper.getDeviceByCode(parm);
+            for (Device d : deviceList) {
+                String mac=d.getMac();
+                DeviceAndWind deviceAndWind = deviceMapper.byMacGetDeviceAndWind(mac,time,tab);
+                if (deviceAndWind!=null){
+                    deviceAndWinds.add(deviceAndWind);
+                }
+            }
+            length=2000;
+            perdlen=280;
+        }else if(monitorPointId==35){
+         DeviceAndWind deviceAndWind=deviceMapper.getDeviceAndWindByMac("898607b0101730392253",time,tab);
+         DeviceAndWind deviceAndWind1=deviceMapper.getDeviceAndWindByMac("p5dnd7a0392083",time,tab);
+         deviceAndWinds.add(deviceAndWind);
+         deviceAndWinds.add(deviceAndWind1);
+            length=2000;
+            perdlen=50;
+
+        }else {
+            deviceAndWinds=deviceMapper.byMonitorIdGetDeviceAndWind(Integer.parseInt(id),time,tab);
+            length=2000;
+            perdlen=80;
+        }
+        List loList=new ArrayList();
+        List laList=new ArrayList();
+        Double U=0.0;
+        Double V=0.0;
+        List list=new ArrayList();
+        for (DeviceAndWind andWind : deviceAndWinds) {
+                Double lo=andWind.getLongitude();
+                Double la=andWind.getLatitude();
+                List tranlist= LatLngTransformation.Convert_BD09_To_GCJ02(la,lo);
+                Double transLo=(Double) tranlist.get(0);
+                Double transLa=(Double) tranlist.get(1);
+                loList.add(transLo);
+                laList.add(transLa);
+        }
+
+        if (loList.size()>0){
+            loma= (Double) Collections.max(loList);
+            lomi= (Double) Collections.min(loList);
+        }
+        if (laList.size()>0){
+            lama= (Double) Collections.max(laList);
+            lami= (Double) Collections.min(laList);
+        }
+        Map laLaMap=new HashMap();
+        laLaMap.put("maxLo",loma);
+        laLaMap.put("minLo",lomi);
+        laLaMap.put("maxLa",lama);
+        laLaMap.put("minLa",lami);
+
+        Double lo1=lomi-length*0.00001141;
+        Double lo2=loma+length*0.00001141;
+        Double la2=lami-length*0.00000899;
+        Double la1=lama+length*0.00000899;
+
+        Double dx=0.00001141*perdlen;
+        Double dy=0.00000899*perdlen;
+        int nx=(int) Math.floor((lo2-lo1)/dx);
+        int ny=(int) Math.floor((la1-la2)/dy);
+        String header1 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 2 +
+                ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy +
+                ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 +
+                ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 +
+                ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}";
+
+        String header2 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 3 +
+                ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy +
+                ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 +
+                ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\""            + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 +
+                ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}";
+
+        List<Double> uList=new ArrayList<Double> ();
+        List<Double>  vList=new ArrayList<Double> ();
+        int x=0;
+        int y=0;
+        List<Map> mapList=new ArrayList<Map>();
+
+        for (int j = 0; j <deviceAndWinds.size() ; j++) {
+                Map<String,Double> map=new HashMap<String,Double> ();
+                Double windDir= deviceAndWinds.get(j).getWindDir();
+                Double windSpeed=deviceAndWinds.get(j).getWindSpeed();
+                if (windDir==null){
+                    windDir=0.0;
+                    windSpeed=0.0;
+                }
+                Double tvoc=deviceAndWinds.get(j).getTVoc();
+
+                List tranlist= LatLngTransformation.Convert_BD09_To_GCJ02(deviceAndWinds.get(j).getLatitude(),deviceAndWinds.get(j).getLongitude());
+                Double transLo=(Double) tranlist.get(0);
+                Double transLa=(Double) tranlist.get(1);
+                if (tvoc==null){
+                    tvoc=0.0;
+                }
+                Double dir = (270.0 - windDir * Math.PI / 180.0);
+
+                U = windSpeed * Math.cos(dir);
+                V = windSpeed * Math.sin(dir);
+                map.put("lo",transLo);
+                map.put("la",transLa);
+                map.put("U",U);
+                map.put("V",V);
+                mapList.add(map);
+        }
+        for (int i = 0; i <mapList.size() ; i++) {
+            Double lo= (Double) mapList.get(i).get("lo");
+            Double la= (Double) mapList.get(i).get("la");
+            x= (int) Math.floor((lo-lo1)/dx);
+            y=Math.abs((int)Math.floor((la-la1)/dy));
+            //y=Math.floor(Math.abs(la-la1)/dy);
+            U=(Double) mapList.get(i).get("U");
+            V=(Double) mapList.get(i).get("V");
+            if (i==0){
+                for (int j = 0; j <nx*ny ; j++) {
+                    uList.add(0.0);
+                    vList.add(0.0);
+                }
+            }
+            for (int j = 0; j <nx*ny ; j++) {
+                if (i==0){
+                    if ((y>=2 && j==(y)*nx+x)){
+                        int k;
+                        for (k = j-2*nx; k <=j+2*nx ;k=k+nx) {
+                            uList.set(k,U);
+                            uList.set(k-1,U);
+                            uList.set(k-2,U);
+                            uList.set(k+1,U);
+                            uList.set(k+2,U);
+                            vList.set(k,V);
+                            vList.set(k-1,V);
+                            vList.set(k-2,V);
+                            vList.set(k+1,V);
+                            vList.set(k+2,V);
+                        }
+                    }
+                }else {
+                    if (y>=1 && j==y*nx+x){
+                        int k;
+                        for (k = j-2*nx; k <=j+2*nx ;) {
+                            uList.set(k-1,U);
+                            uList.set(k-2,U);
+                            uList.set(k+1,U);
+                            uList.set(k+2,U);
+                            vList.set(k-1,V);
+                            vList.set(k-2,V);
+                            vList.set(k+1,V);
+                            vList.set(k+2,V);
+                            k=k+nx;
+                        }
+                        uList.set(j,U);
+                        vList.set(j,V);
+                    }
+                }
+            }
+        }
+        String uData = "\"" + "data" + "\"" + ": " + uList;
+        String vData = "\"" + "data" + "\"" + ": " + vList;
+        String s1 = "[" + "{" + header1 + ", " + uData + "}" + ", " + "{" + header2 + ", " + vData + "}" + "]";
+        JSONArray jsonArray = JSONArray.parseArray(s1);
+
+        Double monitorLo=monitorPoint.getLongitude();
+        Double monitorLa=monitorPoint.getLatitude();
+        List transList= LatLngTransformation.Convert_BD09_To_GCJ02(monitorLa,monitorLo);
+        Double transLo=(Double) transList.get(0);
+        Double transLa=(Double) transList.get(1);
+
+        list.add(jsonArray);
+        list.add(transLo);
+        list.add(transLa);
+        list.add(laLaMap);
+        return list;
+    }
+
 }

--
Gitblit v1.8.0