From a4bcc1576c21046167cdea4049821e2238757784 Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Sat, 18 Sep 2021 09:45:59 +0800
Subject: [PATCH] screen-manage 修改添加父菜单BUG
---
screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 229 insertions(+), 8 deletions(-)
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
index 0ee5973..c9701ec 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
@@ -1,25 +1,28 @@
package com.moral.api.service.impl;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.Device;
import com.moral.api.entity.HistoryFiveMinutely;
import com.moral.api.entity.MonitorPoint;
import com.moral.api.mapper.HistoryFiveMinutelyMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.pojo.dto.Wind.WindData;
import com.moral.api.pojo.dto.historyFiveMinutely.DeviceAndFiveMinuteDataDTO;
import com.moral.api.pojo.form.device.MonitorPointQueryForm;
import com.moral.api.pojo.form.historyFiveMinutely.QueryDeviceAndFiveMinuteDataForm;
import com.moral.api.service.HistoryFiveMinutelyService;
import com.moral.api.service.MonitorPointService;
import com.moral.constant.RedisConstants;
+import com.moral.util.DateUtils;
+import io.lettuce.core.GeoCoordinates;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* <p>
@@ -36,6 +39,8 @@
MonitorPointService monitorPointService;
@Autowired
RedisTemplate redisTemplate;
+ @Autowired
+ HistoryFiveMinutelyMapper historyFiveMinutelyMapper;
@Override
public List<DeviceAndFiveMinuteDataDTO> queryDeviceAndFiveMinuteData(QueryDeviceAndFiveMinuteDataForm form) {
@@ -56,17 +61,233 @@
for (Device device : devices) {
DeviceAndFiveMinuteDataDTO dto = new DeviceAndFiveMinuteDataDTO();
String mac = device.getMac();
+ //������������������
Map<String, Object> sensorValues = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.DATA_FIVE_MINUTES, mac);
- Map<String,Object> value = new HashMap<>();
+ //������������������������������������
+ HistoryFiveMinutely dbHistoryFiveMinutely = queryLastDataByMac(mac);
+ if(ObjectUtils.isEmpty(dbHistoryFiveMinutely))
+ continue;
+ String dbDataStr = dbHistoryFiveMinutely.getValue();
+ sensorValues = JSON.parseObject(dbDataStr, HashMap.class);
+ Map<String,Object> sensorValue = new HashMap<>();
if (sensorValues!=null&&sensorValues.get(sensorCode) != null)
- value.put(sensorCode,sensorValues.get(sensorCode));
+ sensorValue.put(sensorCode,sensorValues.get(sensorCode));
else
- value.put(sensorCode,null);
+ sensorValue.put(sensorCode,null);
dto.setDevice(device);
- dto.setSensorValue(value);
+ dto.setSensorValue(sensorValue);
dtos.add(dto);
}
return dtos;
}
+ @Override
+ public HistoryFiveMinutely queryLastDataByMac(String mac) {
+ QueryWrapper<HistoryFiveMinutely> queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("mac",mac);
+ queryWrapper.orderByDesc("time");
+ queryWrapper.last("limit 0,1");
+ List<HistoryFiveMinutely> historyFiveMinutelies = historyFiveMinutelyMapper.selectList(queryWrapper);
+ if(ObjectUtils.isEmpty(historyFiveMinutelies))
+ return null;
+ return historyFiveMinutelies.get(0);
+ }
+
+
+ @Override
+ public List<Object> getAreaWindData(Map<String, Object> params) {
+ String timeUnits = DateUtils.dateToDateString(new Date(), DateUtils.yyyyMM_EN);
+ params.put("timeUnits", timeUnits);
+ //������������
+ List<WindData> windData = historyFiveMinutelyMapper.getAreaWindData(params);
+ return getWindData(windData);
+ }
+
+
+ /**
+ * ������������������������������������������
+ *
+ * @param geoCoordinateList
+ * @return
+ */
+ public Map<String, Double> getCenterPoint(List<GeoCoordinates> geoCoordinateList) {
+ int total = geoCoordinateList.size();
+ double X = 0, Y = 0, Z = 0;
+ for (GeoCoordinates g : geoCoordinateList) {
+ double lat, lon, x, y, z;
+ lat = (double) g.getY() * Math.PI / 180;
+ lon = (double) g.getX() * Math.PI / 180;
+ x = Math.cos(lat) * Math.cos(lon);
+ y = Math.cos(lat) * Math.sin(lon);
+ z = Math.sin(lat);
+ X += x;
+ Y += y;
+ Z += z;
+ }
+
+ X = X / total;
+ Y = Y / total;
+ Z = Z / total;
+ double Lon = Math.atan2(Y, X);
+ double Hyp = Math.sqrt(X * X + Y * Y);
+ double Lat = Math.atan2(Z, Hyp);
+
+ Map<String, Double> map = new HashMap<>();
+ map.put("lng", Lon * 180 / Math.PI);
+ map.put("lat", Lat * 180 / Math.PI);
+ return map;
+ }
+
+ public List<Object> getWindData(List<WindData> windData) {
+ List<GeoCoordinates> points = new ArrayList<>();
+ int length = 2000;
+ int perdlen = 200;
+ Double loma = 0d;
+ Double lomi = 0d;
+ Double lama = 0d;
+ Double lami = 0d;
+ List<Double> loList = new ArrayList<>();
+ List<Double> laList = new ArrayList<>();
+ Double U;
+ Double V;
+ //���������
+ List<Object> list = new ArrayList<>();
+ List<Map<String, Object>> mapList = new ArrayList<>();
+ for (WindData data : windData) {
+ Double longitude = data.getLongitude();
+ Double latitude = data.getLatitude();
+ GeoCoordinates geoCoordinates = GeoCoordinates.create(longitude, latitude);
+ points.add(geoCoordinates);
+ loList.add(longitude);
+ laList.add(latitude);
+
+ Map<String, Object> map = new HashMap<>();
+ Double windDir = data.getWindDir();
+ Double windSpeed = data.getWindSpeed();
+ if (windDir == null) {
+ windDir = 0d;
+ windSpeed = 0d;
+ }
+ double dir = (360.0 - (windDir + 180.0) * Math.PI / 180.0);
+ U = windSpeed * Math.cos(dir);
+ V = windSpeed * Math.sin(dir);
+ map.put("lo", longitude);
+ map.put("la", latitude);
+ map.put("U", U);
+ map.put("V", V);
+ mapList.add(map);
+ }
+
+ //������������������������������������������������
+ Map<String, Double> centerPoint = getCenterPoint(points);
+
+ if (loList.size() > 0) {
+ loma = Collections.max(loList);
+ lomi = Collections.min(loList);
+ }
+ if (laList.size() > 0) {
+ lama = Collections.max(laList);
+ lami = Collections.min(laList);
+ }
+ Map<String, Object> 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);
+
+
+ List<Double> uList = new ArrayList<>();
+ List<Double> vList = new ArrayList<>();
+ int x;
+ int y;
+
+ 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));
+ 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 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" + "\"" + "}";
+
+
+ String s1 = "[" + "{" + header1 + ", " + uData + "}" + ", " + "{" + header2 + ", " + vData + "}" + "]";
+ JSONArray jsonArray = JSONArray.parseArray(s1);
+
+ list.add(jsonArray);
+ list.add(centerPoint.get("lng"));
+ list.add(centerPoint.get("lat"));
+ list.add(laLaMap);
+ return list;
+ }
+
+
+
+
}
--
Gitblit v1.8.0