From 7c50c777eda4fa9dfdf54535a7d6ab0520243267 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Wed, 21 Jul 2021 18:04:28 +0800
Subject: [PATCH] 风场数据,城市切换
---
screen-api/src/main/java/com/moral/api/service/HistoryMonthlyService.java | 16 +
screen-common/src/main/java/com/moral/util/DateUtils.java | 25 +
screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java | 4
screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java | 211 +++++++++++++++++
screen-api/src/main/resources/mapper/HistoryMonthlyMapper.xml | 12 +
screen-api/src/main/java/com/moral/api/service/SysAreaService.java | 5
screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java | 4
screen-api/src/main/java/com/moral/api/controller/WebController.java | 78 ++++++
screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java | 6
screen-api/src/main/java/com/moral/api/mapper/HistoryMonthlyMapper.java | 16 +
screen-api/src/main/java/com/moral/api/entity/HistoryMonthly.java | 45 +++
screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 57 ++++
/dev/null | 12 -
screen-api/src/main/java/com/moral/api/mapper/HistoryFiveMinutelyMapper.java | 6
screen-api/src/main/java/com/moral/api/service/DeviceService.java | 9
screen-api/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java | 87 +++++++
screen-api/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml | 25 ++
screen-api/src/main/java/com/moral/api/pojo/dto/Wind/WindData.java | 20 +
screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java | 20 +
screen-api/src/main/resources/mapper/DeviceMapper.xml | 57 ++-
20 files changed, 668 insertions(+), 47 deletions(-)
diff --git a/screen-api/src/main/java/com/moral/api/controller/WebController.java b/screen-api/src/main/java/com/moral/api/controller/WebController.java
index ae6bf47..b16c7d7 100644
--- a/screen-api/src/main/java/com/moral/api/controller/WebController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/WebController.java
@@ -10,12 +10,16 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
+import com.moral.api.service.DeviceService;
import com.moral.api.service.HistoryDailyService;
+import com.moral.api.service.HistoryFiveMinutelyService;
import com.moral.api.service.HistoryHourlyService;
+import com.moral.api.service.SysAreaService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import com.moral.util.WebUtils;
@@ -31,6 +35,15 @@
@Autowired
private HistoryDailyService historyDailyService;
+
+ @Autowired
+ private HistoryFiveMinutelyService historyFiveMinutelyService;
+
+ @Autowired
+ private DeviceService deviceService;
+
+ @Autowired
+ private SysAreaService sysAreaService;
@GetMapping("getHourlyAqi")
@ApiOperation(value = "���������������AQI", notes = "���������������AQI")
@@ -63,4 +76,69 @@
return ResultMessage.ok(result);
}
+ @GetMapping("getWindData")
+ @ApiOperation(value = "������������������", notes = "������������������")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"),
+ @ApiImplicitParam(name = "monitorPointId", value = "������id", required = true, paramType = "query", dataType = "String")
+ })
+ public ResultMessage getWindData(HttpServletRequest request) {
+ Map<String, Object> params = WebUtils.getParametersStartingWith(request, null);
+ if (!params.containsKey("monitorPointIds")) {
+ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+ }
+ String[] monitorPointIds = params.remove("monitorPointIds").toString().split(",");
+ params.put("monitorPointIds", monitorPointIds);
+ List<Object> result = historyFiveMinutelyService.getAreaWindData(params);
+ return ResultMessage.ok(result);
+ }
+
+ @GetMapping("getMacSensors")
+ @ApiOperation(value = "������mac������������������������", notes = "������mac������������������������")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"),
+ @ApiImplicitParam(name = "mac", value = "������mac", required = true, paramType = "query", dataType = "String")
+ })
+ public ResultMessage getMacSensors(HttpServletRequest request) {
+ Map<String, Object> params = WebUtils.getParametersStartingWith(request, null);
+ if (!params.containsKey("mac")) {
+ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+ }
+ Map<String, Object> sensorsInfo = deviceService.getSensorsByMac(params.get("mac").toString());
+ return ResultMessage.ok(sensorsInfo);
+ }
+
+ @GetMapping("getTrendChartData")
+ @ApiOperation(value = "���������������������������������", notes = "���������������������������������")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"),
+ @ApiImplicitParam(name = "mac", value = "������mac", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "sensorCode", value = "������code", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "type", value = "���������������������day���,������month���,������year���", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "time", value = "������������", required = true, paramType = "query", dataType = "String")
+ })
+ public ResultMessage getTrendChartData(HttpServletRequest request) {
+ Map<String, Object> params = WebUtils.getParametersStartingWith(request, null);
+ if (!params.containsKey("mac") || !params.containsKey("sensorCode") || !params.containsKey("type") || !params.containsKey("time")) {
+ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+ }
+ List<Map<String, Object>> sensorsInfo = deviceService.getTrendChartData(params);
+ return ResultMessage.ok(sensorsInfo);
+ }
+
+ @GetMapping("getMapPath")
+ @ApiOperation(value = "������������������������������", notes = "������������������������������")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"),
+ @ApiImplicitParam(name = "organizationId", value = "������id", required = true, paramType = "query", dataType = "String")
+ })
+ public ResultMessage getMapPath(HttpServletRequest request) {
+ Map<String, Object> params = WebUtils.getParametersStartingWith(request, null);
+ if (!params.containsKey("organizationId")) {
+ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+ }
+ List<Map<String, Object>> result = sysAreaService.getMapPath(Integer.parseInt(params.get("organizationId").toString()));
+ return ResultMessage.ok(result);
+ }
+
}
diff --git a/screen-api/src/main/java/com/moral/api/entity/HistoryMonthly.java b/screen-api/src/main/java/com/moral/api/entity/HistoryMonthly.java
new file mode 100644
index 0000000..ecd7b52
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/entity/HistoryMonthly.java
@@ -0,0 +1,45 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-07-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HistoryMonthly extends Model<HistoryMonthly> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ������mac
+ */
+ private String mac;
+
+ /**
+ * ������
+ */
+ private Date time;
+
+ /**
+ * ������
+ */
+ private String value;
+
+
+ @Override
+ protected Serializable pkVal() {
+ return null;
+ }
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java b/screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java
index f49f9df..589c2e8 100644
--- a/screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java
+++ b/screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java
@@ -1,5 +1,8 @@
package com.moral.api.mapper;
+import java.util.List;
+import java.util.Map;
+
import com.moral.api.entity.Device;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -13,4 +16,7 @@
*/
public interface DeviceMapper extends BaseMapper<Device> {
+ /*���������������������������*/
+ List<Map<String, Object>> getTrendChartData(Map<String, Object> params);
+
}
diff --git a/screen-api/src/main/java/com/moral/api/mapper/HistoryFiveMinutelyMapper.java b/screen-api/src/main/java/com/moral/api/mapper/HistoryFiveMinutelyMapper.java
index cd5aec7..2ec37a9 100644
--- a/screen-api/src/main/java/com/moral/api/mapper/HistoryFiveMinutelyMapper.java
+++ b/screen-api/src/main/java/com/moral/api/mapper/HistoryFiveMinutelyMapper.java
@@ -1,7 +1,11 @@
package com.moral.api.mapper;
+import java.util.List;
+import java.util.Map;
+
import com.moral.api.entity.HistoryFiveMinutely;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.pojo.dto.Wind.WindData;
/**
* <p>
@@ -13,4 +17,6 @@
*/
public interface HistoryFiveMinutelyMapper extends BaseMapper<HistoryFiveMinutely> {
+ List<WindData> getAreaWindData(Map<String, Object> params);
+
}
diff --git a/screen-api/src/main/java/com/moral/api/mapper/HistoryMonthlyMapper.java b/screen-api/src/main/java/com/moral/api/mapper/HistoryMonthlyMapper.java
new file mode 100644
index 0000000..4d498d0
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/mapper/HistoryMonthlyMapper.java
@@ -0,0 +1,16 @@
+package com.moral.api.mapper;
+
+import com.moral.api.entity.HistoryMonthly;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * ��������� Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-07-20
+ */
+public interface HistoryMonthlyMapper extends BaseMapper<HistoryMonthly> {
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/Wind/WindData.java b/screen-api/src/main/java/com/moral/api/pojo/dto/Wind/WindData.java
new file mode 100644
index 0000000..6c56f2d
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/dto/Wind/WindData.java
@@ -0,0 +1,20 @@
+package com.moral.api.pojo.dto.Wind;
+
+import lombok.Data;
+
+@Data
+public class WindData {
+
+ //������
+ private Double longitude;
+
+ //������
+ private Double latitude;
+
+ //������������
+ private Double windDir;
+
+ //������
+ private Double windSpeed;
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/DeviceService.java b/screen-api/src/main/java/com/moral/api/service/DeviceService.java
index 53d8109..bfb323d 100644
--- a/screen-api/src/main/java/com/moral/api/service/DeviceService.java
+++ b/screen-api/src/main/java/com/moral/api/service/DeviceService.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -14,5 +15,13 @@
* @since 2021-06-28
*/
public interface DeviceService extends IService<Device> {
+
List<Device> getDevicesByMonitorPointId(Integer monitorPointId);
+
+ //������mac������������������
+ Map<String, Object> getSensorsByMac(String mac);
+
+ //���������������������������������
+ List<Map<String, Object>> getTrendChartData(Map<String,Object> params);
+
}
diff --git a/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java b/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java
index 58e3e02..aaefcd2 100644
--- a/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java
+++ b/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java
@@ -6,6 +6,7 @@
import com.moral.api.pojo.form.historyFiveMinutely.QueryDeviceAndFiveMinuteDataForm;
import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -25,4 +26,7 @@
* @Date: 2021/7/16
*/
List<DeviceAndFiveMinuteDataDTO> queryDeviceAndFiveMinuteData(QueryDeviceAndFiveMinuteDataForm form);
+
+ //������5������������������
+ List<Object> getAreaWindData(Map<String,Object> params);
}
diff --git a/screen-api/src/main/java/com/moral/api/service/HistoryMonthlyService.java b/screen-api/src/main/java/com/moral/api/service/HistoryMonthlyService.java
new file mode 100644
index 0000000..529f0ac
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/HistoryMonthlyService.java
@@ -0,0 +1,16 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.HistoryMonthly;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * ��������� ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-07-20
+ */
+public interface HistoryMonthlyService extends IService<HistoryMonthly> {
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/SysAreaService.java b/screen-api/src/main/java/com/moral/api/service/SysAreaService.java
index 0cb05dd..a972152 100644
--- a/screen-api/src/main/java/com/moral/api/service/SysAreaService.java
+++ b/screen-api/src/main/java/com/moral/api/service/SysAreaService.java
@@ -1,5 +1,8 @@
package com.moral.api.service;
+import java.util.List;
+import java.util.Map;
+
import com.moral.api.entity.SysArea;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -13,4 +16,6 @@
*/
public interface SysAreaService extends IService<SysArea> {
+ List<Map<String, Object>> getMapPath(Integer orgId);
+
}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
index e103c8c..4ae4498 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
@@ -2,14 +2,23 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.Device;
+import com.moral.api.entity.Sensor;
import com.moral.api.mapper.DeviceMapper;
import com.moral.api.service.DeviceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.service.HistoryHourlyService;
import com.moral.constant.Constants;
+import com.moral.constant.RedisConstants;
+import com.moral.util.DateUtils;
+
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -25,12 +34,58 @@
@Autowired
DeviceMapper deviceMapper;
+ @Autowired
+ private RedisTemplate redisTemplate;
+
@Override
public List<Device> getDevicesByMonitorPointId(Integer monitorPointId) {
QueryWrapper<Device> wrapper = new QueryWrapper();
wrapper.eq("is_delete", Constants.NOT_DELETE);
- wrapper.eq("monitor_point_id",monitorPointId);
+ wrapper.eq("monitor_point_id", monitorPointId);
List<Device> devices = deviceMapper.selectList(wrapper);
return devices;
}
+
+ @Override
+ public Map<String, Object> getSensorsByMac(String mac) {
+ //���redis���������������������������
+ Device device = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac);
+ List<Sensor> sensors = device.getVersion().getSensors();
+ Map<String, Object> result = new HashMap<>();
+ for (Sensor sensor : sensors) {
+ String sensorCode = sensor.getCode();
+ String name = sensor.getName();
+ result.put(sensorCode, name);
+ }
+ return result;
+ }
+
+ @Override
+ public List<Map<String, Object>> getTrendChartData(Map<String, Object> params) {
+ Object type = params.get("type");
+ String start = params.remove("time").toString();
+ String end;
+ String timeUnits;
+ String dateFormat;
+ List<Map<String, Object>> result = new ArrayList<>();
+ if ("day".equals(type)) {
+ end = DateUtils.getDateAddDay(start, 1);
+ timeUnits = "hourly";
+ dateFormat = "%H";
+ } else if ("month".equals(type)) {
+ end = DateUtils.getDateAddMonth(start, 1);
+ timeUnits = "daily";
+ dateFormat = "%d";
+ } else {
+ end = DateUtils.getDateAddYear(start, 1);
+ timeUnits = "monthly";
+ dateFormat = "%m";
+ }
+ params.put("dateFormat", dateFormat);
+ params.put("timeUnits", timeUnits);
+ params.put("start", start);
+ params.put("end", end);
+ return deviceMapper.getTrendChartData(params);
+ }
+
}
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..dac6205 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,22 +1,29 @@
package com.moral.api.service.impl;
+import com.alibaba.fastjson.JSONArray;
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.Collections;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -34,8 +41,12 @@
@Autowired
MonitorPointService monitorPointService;
+
@Autowired
RedisTemplate redisTemplate;
+
+ @Autowired
+ private HistoryFiveMinutelyMapper historyFiveMinutelyMapper;
@Override
public List<DeviceAndFiveMinuteDataDTO> queryDeviceAndFiveMinuteData(QueryDeviceAndFiveMinuteDataForm form) {
@@ -57,11 +68,11 @@
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<>();
- if (sensorValues!=null&&sensorValues.get(sensorCode) != null)
- value.put(sensorCode,sensorValues.get(sensorCode));
+ Map<String, Object> value = new HashMap<>();
+ if (sensorValues != null && sensorValues.get(sensorCode) != null)
+ value.put(sensorCode, sensorValues.get(sensorCode));
else
- value.put(sensorCode,null);
+ value.put(sensorCode, null);
dto.setDevice(device);
dto.setSensorValue(value);
dtos.add(dto);
@@ -69,4 +80,196 @@
return dtos;
}
+ @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;
+ }
}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java
new file mode 100644
index 0000000..586b30e
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java
@@ -0,0 +1,20 @@
+package com.moral.api.service.impl;
+
+import com.moral.api.entity.HistoryMonthly;
+import com.moral.api.mapper.HistoryMonthlyMapper;
+import com.moral.api.service.HistoryMonthlyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * ��������� ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-07-20
+ */
+@Service
+public class HistoryMonthlyServiceImpl extends ServiceImpl<HistoryMonthlyMapper, HistoryMonthly> implements HistoryMonthlyService {
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java
index 2c755cb..83e23db 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java
@@ -1,10 +1,26 @@
package com.moral.api.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.entity.Menu;
+import com.moral.api.entity.MonitorPoint;
import com.moral.api.entity.SysArea;
+import com.moral.api.mapper.MonitorPointMapper;
import com.moral.api.mapper.SysAreaMapper;
import com.moral.api.service.SysAreaService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.constant.Constants;
+
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* <p>
@@ -17,4 +33,75 @@
@Service
public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysArea> implements SysAreaService {
+ @Autowired
+ private SysAreaMapper sysAreaMapper;
+
+ @Autowired
+ private MonitorPointMapper monitorPointMapper;
+
+ @Override
+ public List<Map<String, Object>> getMapPath(Integer orgId) {
+ //������������id������������������
+ QueryWrapper<MonitorPoint> queryWrapper = new QueryWrapper<>();
+ queryWrapper.select("province_code", "city_code", "area_code")
+ .eq("organization_id", orgId)
+ .eq("is_delete", Constants.NOT_DELETE);
+ List<MonitorPoint> monitorPoints = monitorPointMapper.selectList(queryWrapper);
+ Set<Integer> cityCodes = new HashSet<>();
+ for (MonitorPoint monitorPoint : monitorPoints) {
+ cityCodes.add(monitorPoint.getProvinceCode());
+ cityCodes.add(monitorPoint.getCityCode());
+ cityCodes.add(monitorPoint.getAreaCode());
+ }
+
+ QueryWrapper<SysArea> sysAreaQueryWrapper = new QueryWrapper<>();
+ sysAreaQueryWrapper.select("area_code", "area_name", "parent_code").in("area_code", cityCodes);
+ List<SysArea> allAreas = sysAreaMapper.selectList(sysAreaQueryWrapper);
+
+ //���������������
+ List<SysArea> oneSysArea = allAreas.stream()
+ .filter(o -> o.getParentCode().equals(0))
+ .sorted(Comparator.comparing(SysArea::getAreaCode))
+ .collect(Collectors.toList());
+
+ List<Map<String, Object>> newList = new ArrayList<>();
+ //������������������
+ oneSysArea.forEach(o -> {
+ Map<String, Object> sysAreaMap = new LinkedHashMap<>();
+ sysAreaMap.put("provinceCode", o.getAreaCode());
+ sysAreaMap.put("provinceName", o.getAreaName());
+ sysAreaMap.put("cities", getAreasByRecursion(o, allAreas));
+ newList.add(sysAreaMap);
+ });
+ return newList;
+ }
+
+ //������������������������������������
+ private List<Map<String, Object>> getAreasByRecursion(SysArea sysArea, List<SysArea> sysAreas) {
+ SysArea newSysArea = new SysArea();
+ newSysArea.setParentCode(sysArea.getAreaCode());
+ //������������������������������
+ List<SysArea> nextLevel = sysAreas.stream()
+ .filter(o -> o.getParentCode().equals(sysArea.getAreaCode()))
+ .collect(Collectors.toList());
+ List<Map<String, Object>> list = new ArrayList<>();
+
+ if (nextLevel.size() > 0) {
+ nextLevel.forEach(o -> {
+ Map<String, Object> sysMap = new LinkedHashMap<>();
+ if (o.getAreaCode().toString().endsWith("00")) {
+ sysMap.put("cityCode", o.getAreaCode());
+ sysMap.put("cityName", o.getAreaName());
+ sysMap.put("provinceCode", o.getParentCode());
+ sysMap.put("areas", getAreasByRecursion(o, sysAreas));
+ } else {
+ sysMap.put("areaCode", o.getAreaCode());
+ sysMap.put("areaName", o.getAreaName());
+ sysMap.put("cityCode", o.getParentCode());
+ }
+ list.add(sysMap);
+ });
+ }
+ return list;
+ }
}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
index 12dad29..f8cd551 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
@@ -225,11 +225,11 @@
nextLevelMenus.forEach(o -> {
Map<String, Object> menuMap = new LinkedHashMap<>();
menuMap.put("id", o.getId());
- menuMap.put("name", o.getName());
+ menuMap.put("label", o.getName());
menuMap.put("url", o.getUrl());
menuMap.put("icon", o.getIcon());
//���������������
- menuMap.put("child", getMenusByRecursion(o, menus));
+ menuMap.put("children", getMenusByRecursion(o, menus));
list.add(menuMap);
});
}
diff --git a/screen-api/src/main/resources/mapper/DeviceMapper.xml b/screen-api/src/main/resources/mapper/DeviceMapper.xml
index 493dc7b..94cde21 100644
--- a/screen-api/src/main/resources/mapper/DeviceMapper.xml
+++ b/screen-api/src/main/resources/mapper/DeviceMapper.xml
@@ -2,28 +2,39 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.moral.api.mapper.DeviceMapper">
- <!-- ������������������������ -->
- <resultMap id="BaseResultMap" type="com.moral.api.entity.Device">
- <id column="id" property="id" />
- <result column="name" property="name" />
- <result column="mac" property="mac" />
- <result column="address" property="address" />
- <result column="longitude" property="longitude" />
- <result column="latitude" property="latitude" />
- <result column="state" property="state" />
- <result column="operate_ids" property="operateIds" />
- <result column="monitor_point_id" property="monitorPointId" />
- <result column="organization_id" property="organizationId" />
- <result column="device_version_id" property="deviceVersionId" />
- <result column="profession" property="profession" />
- <result column="tech" property="tech" />
- <result column="detector" property="detector" />
- <result column="purchaser" property="purchaser" />
- <result column="create_time" property="createTime" />
- <result column="update_time" property="updateTime" />
- <result column="install_time" property="installTime" />
- <result column="is_delete" property="isDelete" />
- <result column="extend" property="extend" />
- </resultMap>
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.Device">
+ <id column="id" property="id"/>
+ <result column="name" property="name"/>
+ <result column="mac" property="mac"/>
+ <result column="address" property="address"/>
+ <result column="longitude" property="longitude"/>
+ <result column="latitude" property="latitude"/>
+ <result column="state" property="state"/>
+ <result column="operate_ids" property="operateIds"/>
+ <result column="monitor_point_id" property="monitorPointId"/>
+ <result column="organization_id" property="organizationId"/>
+ <result column="device_version_id" property="deviceVersionId"/>
+ <result column="profession" property="profession"/>
+ <result column="tech" property="tech"/>
+ <result column="detector" property="detector"/>
+ <result column="purchaser" property="purchaser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="install_time" property="installTime"/>
+ <result column="is_delete" property="isDelete"/>
+ <result column="extend" property="extend"/>
+ </resultMap>
+ <!--���������������������������-->
+ <select id="getTrendChartData" resultType="java.util.Map">
+ SELECT
+ DATE_FORMAT(`time`,#{dateFormat}) AS `time`,
+ `value`->'$.${sensorCode}' AS '${sensorCode}'
+ FROM history_${timeUnits}
+ WHERE mac = #{mac}
+ AND `time` <![CDATA[>=]]> #{start}
+ AND `time` <![CDATA[<]]> #{end}
+ ORDER BY `time`
+ </select>
</mapper>
\ No newline at end of file
diff --git a/screen-api/src/main/resources/mapper/HistoryFiveMinutely202107Mapper.xml b/screen-api/src/main/resources/mapper/HistoryFiveMinutely202107Mapper.xml
deleted file mode 100644
index d5ef167..0000000
--- a/screen-api/src/main/resources/mapper/HistoryFiveMinutely202107Mapper.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.moral.api.mapper.HistoryFiveMinutely202107Mapper">
-
- <!-- ������������������������ -->
- <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryFiveMinutely">
- <result column="mac" property="mac" />
- <result column="time" property="time" />
- <result column="value" property="value" />
- </resultMap>
-
-</mapper>
\ No newline at end of file
diff --git a/screen-api/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml b/screen-api/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
new file mode 100644
index 0000000..4e0901b
--- /dev/null
+++ b/screen-api/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.HistoryFiveMinutelyMapper">
+
+ <!--������5������������������-->
+ <select id="getAreaWindData" resultType="com.moral.api.pojo.dto.Wind.WindData">
+ SELECT
+ d.longitude AS longitude,
+ d.latitude AS latitude,
+ CASE WHEN
+ h.value->'$.a01007' = 0 THEN 0.1 ELSE h.value->'$.a01007' END AS windSpeed,
+ h.value->'$.a01008' AS windDir
+ FROM history_five_minutely_${timeUnits} h ,
+ `device` AS d
+ WHERE d.mac = h.mac
+ AND d.mac IN
+ (SELECT mac FROM device WHERE monitor_point_id IN
+ <foreach item="monitorPointId" collection="monitorPointIds" index="index" open="(" separator="," close=")">
+ #{monitorPointId}
+ </foreach>
+ )
+ AND h.time = (SELECT max(time) FROM history_five_minutely_${timeUnits})
+ </select>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-api/src/main/resources/mapper/HistoryMonthlyMapper.xml b/screen-api/src/main/resources/mapper/HistoryMonthlyMapper.xml
new file mode 100644
index 0000000..942a9a0
--- /dev/null
+++ b/screen-api/src/main/resources/mapper/HistoryMonthlyMapper.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.HistoryMonthlyMapper">
+
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryMonthly">
+ <result column="mac" property="mac"/>
+ <result column="time" property="time"/>
+ <result column="value" property="value"/>
+ </resultMap>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java
index 1d777ef..8e61079 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -16,6 +16,10 @@
public class DateUtils {
/**
+ * ������������(yyyy)
+ */
+ public static final String yyyy = "yyyy";
+ /**
* ������������(yyyy-MM-dd)
*/
public static final String yyyy_MM_dd_EN = "yyyy-MM-dd";
@@ -746,8 +750,8 @@
* @param days
* @return
*/
- public static String getDateAddDay(String date, int days, String format) {
- DateFormat df = getDateFormat(format);
+ public static String getDateAddDay(String date, int days) {
+ DateFormat df = getDateFormat(yyyy_MM_dd_EN);
try {
Calendar cal = Calendar.getInstance();
cal.setTime(df.parse(date));
@@ -791,7 +795,7 @@
* @return
*/
public static String getDateAddMonth(String date, int m) {
- DateFormat df = getDateFormat(yyyyMM_EN);
+ DateFormat df = getDateFormat(yyyy_MM_EN);
try {
Calendar cal = Calendar.getInstance();
cal.setTime(df.parse(date));
@@ -1337,7 +1341,18 @@
return getDate(dateToDateString(calendar.getTime(), yyyy_MM_dd_EN));
}
- public static void main(String[] args) {
- System.out.println(getFirstDayOfCurrMonth());
+
+ /*���������������������*/
+ public static String getDateAddYear(String date, int year) {
+ DateFormat df = getDateFormat(yyyy);
+ try {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(df.parse(date));
+ cal.add(Calendar.YEAR, year);
+ date = df.format(cal.getTime());
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ return date;
}
}
--
Gitblit v1.8.0