From f5af2c565dbe38f22763ec17bf3868d58afafb97 Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Mon, 16 Nov 2020 16:30:39 +0800 Subject: [PATCH] 更改报表导出时间段 由原先的0-23 改为1-第二天零点 --- src/main/java/com/moral/service/impl/DeviceServiceImpl.java | 509 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 501 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java index cc3ce03..03df587 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,8 @@ import com.moral.mapper.OrganizationMapper; import com.moral.service.AccountService; import com.moral.service.DeviceService; +import com.moral.service.MonitorPointService; +import com.moral.util.LatLngTransformation; import com.moral.util.TkMybatisUtils; import org.apache.commons.collections.MapUtils; @@ -40,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; + import tk.mybatis.mapper.entity.Example; @Service @@ -79,6 +80,8 @@ OrganizationMapper organizationMapper; @Resource DictionaryDataMapper dictionaryDataMapper; + @Resource + private MonitorPointService monitorPointService ; @Override public Map<String, Object> getDeviceStatesByAccount(Map<String, Object> parameters) { @@ -206,14 +209,67 @@ */ @Override public List<Device> query(Map<String, Object> params) { + List<Integer> dv = deviceMapper.getHasWindDirAndWindSpeedDeviceVersion(); Object orgIdObj = params.get("orgId"); + String regionCode = params.get("regionCode").toString(); 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.selectByMap(params); + //��������������������������������������������� + if (regionCode.startsWith("1309")&&orgIdObj.toString().equals("5")) { + orgIds = new ArrayList<>(); + Collections.addAll(orgIds, 60, 65, 159, 165, 166); + deviceList = deviceMapper.selectByMap(params); + Iterator<Device> iter = deviceList.iterator(); + while (iter.hasNext()) { + Device device = iter.next(); + Integer mpId = device.getMonitorPointId(); + Integer oid = monitorPointService.byIdGetMonitorPoint(mpId).getOrganizationId(); + if (!orgIds.contains(oid)) { + iter.remove(); + } else { + if (orgId == 60) { + if (mpId != 56) { + iter.remove(); + } + } else if (orgId == 65) { + if (mpId != 83 && mpId != 84) { + iter.remove(); + } + } + } + } + }else { + params.put("orgIds", orgIds); + deviceList = deviceMapper.selectByMap(params); + } // loadDeviceState(deviceList); + } + Example deviceExample = new Example(Device.class);//��������� + 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); + } else { + d.setHasWindInfo(false); + } + 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); + } + } } return deviceList; } @@ -635,4 +691,441 @@ public List<String> getMacsByOrganizationId(List<Object> organizationIdList) { return deviceMapper.getMacsByOrganizationId(organizationIdList); } + + @Override + public List<Device> getDeviceById1(int id) { + return deviceMapper.getDeviceById1(id); + } + + @Override + public List<Device> getDeviceById2(int id) { + return deviceMapper.getDeviceById2(id); + } + + @Override + 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 tab) { + List<DeviceAndWind> deviceAndWinds = deviceMapper.byMonitorIdGetDeviceAndWind(Integer.parseInt(id), 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 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, 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, tab); + if (deviceAndWind != null) { + deviceAndWinds.add(deviceAndWind); + } + } + length = 2000; + perdlen = 280; + } else if (monitorPointId == 35) { + DeviceAndWind deviceAndWind = deviceMapper.getDeviceAndWindByMac("898607b0101730392253", tab); + DeviceAndWind deviceAndWind1 = deviceMapper.getDeviceAndWindByMac("p5dnd7a0392083", tab); + deviceAndWinds.add(deviceAndWind); + deviceAndWinds.add(deviceAndWind1); + length = 2000; + perdlen = 50; + + } else { + deviceAndWinds = deviceMapper.byMonitorIdGetDeviceAndWind(Integer.parseInt(id), 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; + } + + @Override + public List<Device> getDeviceByCodeAndId(String code, String id) { + return deviceMapper.getDeviceByCodeAndId(code, id); + } + + @Override + public String byMacGetOrgId(String mac) { + return deviceMapper.byMacGetOrgId(mac); + } + + @Override + public List<Device> getDevice(String macOrName) { + return deviceMapper.getDevice(macOrName); + } + + @Override + public List<Device> getDeviceByCode() { + return deviceMapper.getDeviceByCityCode(); + } + } -- Gitblit v1.8.0