From 4b347b7e9b02129ab51e0316f17c027714122ccc Mon Sep 17 00:00:00 2001
From: lizijie <lzjiiie@163.com>
Date: Wed, 30 Mar 2022 08:42:56 +0800
Subject: [PATCH] 蜂窝图接口
---
screen-api/src/main/java/com/moral/api/service/impl/ServicesScopeServiceImpl.java | 144 ++++++++++++++++++++++++++++++++++++++++++++---
screen-api/src/main/java/com/moral/api/controller/ChartController.java | 16 +++++
screen-api/src/main/java/com/moral/api/service/ServicesScopeService.java | 9 +++
3 files changed, 158 insertions(+), 11 deletions(-)
diff --git a/screen-api/src/main/java/com/moral/api/controller/ChartController.java b/screen-api/src/main/java/com/moral/api/controller/ChartController.java
index 90b6611..21a13f2 100644
--- a/screen-api/src/main/java/com/moral/api/controller/ChartController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/ChartController.java
@@ -235,6 +235,22 @@
return ResultMessage.ok(resultMap);
}
+ @GetMapping("honeycombDiagram")
+ public ResultMessage honeycombDiagram (HttpServletRequest httpServletRequest){
+ Map<String, Object> params = WebUtils.getParametersStartingWith(httpServletRequest, null);
+ Object serviceScopeId = params.get("serviceScopeId");
+ Object sensor_code = params.get("sensor_code");
+ Object type = params.get("type");
+ Object time = params.get("time");
+ Object distance = params.get("distance");
+ if (ObjectUtils.isEmpty(serviceScopeId)){
+ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+ }
+ List<Map<String, Object>> resultList = servicesScopeService.honeycombDiagram(Integer.parseInt(serviceScopeId.toString()), Integer.parseInt(distance.toString()), type.toString(), time.toString(), sensor_code.toString());
+ //List<Map<String, Object>> resultList = servicesScopeService.honeycombDiagram(6, 40, "monthly", "2022-02", "a34004");
+ return ResultMessage.ok(resultList);
+ }
+
@RequestMapping(value = "returnDataTest", method = RequestMethod.GET)
@ResponseBody
public ResultMessage returnDataTest(HttpServletRequest request) throws ParseException {
diff --git a/screen-api/src/main/java/com/moral/api/service/ServicesScopeService.java b/screen-api/src/main/java/com/moral/api/service/ServicesScopeService.java
index 008d11d..9bb72eb 100644
--- a/screen-api/src/main/java/com/moral/api/service/ServicesScopeService.java
+++ b/screen-api/src/main/java/com/moral/api/service/ServicesScopeService.java
@@ -24,5 +24,14 @@
*@Date: 2022/2/9 14:04
**/
List<Map<String, Object>> getDateByOrgIdAndCondition(Map map);
+
+ /**
+ *@Description: ������������
+ *@Param: [serviceScopeId]
+ *@return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
+ *@Author: lizijie
+ *@Date: 2022/3/21 17:23
+ **/
+ List<Map<String, Object>> honeycombDiagram(Integer serviceScopeId,Integer distance,String type,String time,String sensorCode);
}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/ServicesScopeServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/ServicesScopeServiceImpl.java
index 01778df..5e35790 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/ServicesScopeServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/ServicesScopeServiceImpl.java
@@ -1,23 +1,21 @@
package com.moral.api.service.impl;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.moral.api.entity.Organization;
-import com.moral.api.entity.ServicesScope;
-import com.moral.api.mapper.OrganizationMapper;
-import com.moral.api.mapper.ServicesScopeMapper;
-import com.moral.api.service.OrganizationService;
-import com.moral.api.service.ServicesScopeService;
+import com.moral.api.entity.*;
+import com.moral.api.mapper.*;
+import com.moral.api.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
-import com.moral.util.RegionCodeUtils;
+import com.moral.util.*;
import org.springframework.beans.factory.annotation.Autowired;
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.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -39,6 +37,21 @@
@Autowired
private OrganizationService organizationService;
+
+ @Autowired
+ private ServicesScopeDeviceMapper servicesScopeDeviceMapper;
+
+ @Autowired
+ private DeviceMapper deviceMapper;
+
+ @Autowired
+ private HistoryMonthlyMapper historyMonthlyMapper;
+
+ @Autowired
+ private HistoryDailyMapper historyDailyMapper;
+
+ @Autowired
+ private HistoryHourlyMapper historyHourlyMapper;
@Override
public List<Map<String, Object>> getDateByOrgIdAndCondition(Map map) {
@@ -103,6 +116,115 @@
return resultList;
}
+ @Override
+ public List<Map<String, Object>> honeycombDiagram(Integer serviceScopeId,Integer distance,String type,String time,String sensorCode) {
+ List<Map<String,Object>> resultList = new ArrayList<>();
+ ServicesScope servicesScope = servicesScopeMapper.selectById(serviceScopeId);
+ QueryWrapper<ServicesScopeDevice> servicesScopeDeviceQueryWrapper = new QueryWrapper<>();
+ servicesScopeDeviceQueryWrapper.eq("services_scope_id",servicesScope.getId());
+ servicesScopeDeviceQueryWrapper.eq("is_delete",Constants.NOT_DELETE);
+ List<ServicesScopeDevice> servicesScopeDevices = servicesScopeDeviceMapper.selectList(servicesScopeDeviceQueryWrapper);
+ List<Integer> deviceIds = servicesScopeDevices.stream().map(d -> d.getDeviceId()).collect(Collectors.toList());
+ QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
+ deviceQueryWrapper.eq("is_delete",Constants.NOT_DELETE);
+ deviceQueryWrapper.in("id",deviceIds);
+ List<Device> devices = deviceMapper.selectList(deviceQueryWrapper);
+ List<String> deviceMacs = devices.stream().map(d -> d.getMac()).collect(Collectors.toList());
+ Map<String,Device> devicesMap = new HashMap<>();
+ for (Device device : devices) {
+ devicesMap.put(device.getMac(), device);
+ }
+ Map<String, Map<String,Object>> historyDataMap = new HashMap<>();
+ SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
+ if (type.equals("monthly")){
+ Date monthly_time = DateUtils.getDate(time+"-01 00:00:00",DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
+ QueryWrapper<HistoryMonthly> wrapper = new QueryWrapper<>();
+ wrapper.in("mac", deviceMacs);
+ wrapper.eq("time", monthly_time);
+ List<HistoryMonthly> historyMonthlies = historyMonthlyMapper.selectList(wrapper);
+ for (HistoryMonthly historyMonthly : historyMonthlies) {
+ historyDataMap.put(historyMonthly.getMac(), JSON.parseObject(JSON.toJSONString(historyMonthly), Map.class));
+ }
+ }
+ if (type.equals("daily")){
+ Date daily_time = DateUtils.getDate(time+" 00:00:00",DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
+ QueryWrapper<HistoryDaily> wrapper = new QueryWrapper<>();
+ wrapper.in("mac", deviceMacs);
+ wrapper.eq("time", daily_time);
+ List<HistoryDaily> historyDailies = historyDailyMapper.selectList(wrapper);
+ for (HistoryDaily historyDaily : historyDailies) {
+ historyDataMap.put(historyDaily.getMac(), JSON.parseObject(JSON.toJSONString(historyDaily), Map.class));
+ }
+ }
+ if (type.equals("hourly")){
+ Date houtly_time = DateUtils.getDate(time+":00:00",DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
+ QueryWrapper<HistoryHourly> wrapper = new QueryWrapper<>();
+ wrapper.in("mac", deviceMacs);
+ wrapper.eq("time", houtly_time);
+ List<HistoryHourly> historyHourlies = historyHourlyMapper.selectList(wrapper);
+ for (HistoryHourly historyHourly : historyHourlies) {
+ historyDataMap.put(historyHourly.getMac(), JSON.parseObject(JSON.toJSONString(historyHourly), Map.class));
+ }
+
+ }
+ String boundary = servicesScope.getBoundary();
+ String[] lon_lat_arrs = boundary.split(";");
+ List<Map<String,Double>> areas=new ArrayList<Map<String,Double>>();
+ List<Double> lonList = new ArrayList<>();
+ List<Double> latList = new ArrayList<>();
+ for (String lon_lat:lon_lat_arrs) {
+ String[] lonAndLat = lon_lat.split(",");
+ Map<String, Double> lon_lat_map = new HashMap<String,Double>();//������
+ lon_lat_map.put("px", Double.parseDouble(lonAndLat[0]));
+ lon_lat_map.put("py", Double.parseDouble(lonAndLat[1]));
+ areas.add(lon_lat_map);
+ lonList.add(Double.parseDouble(lonAndLat[0]));
+ latList.add(Double.parseDouble(lonAndLat[1]));
+ }
+ Double lonMax = Collections.max(lonList);
+ Double lonMin = Collections.min(lonList);
+ Double latMax = Collections.max(latList);
+ Double latMin = Collections.min(latList);
+ double lon_getmeter = LongitudeAndLatitudeUtils.getmeter(lonMax, latMin, lonMin, latMin);
+ Double lon_numberOfCopies = DoubleUtils.div(lon_getmeter, distance.doubleValue(), 0);
+ double lat_getmeter = LongitudeAndLatitudeUtils.getmeter(lonMax, latMin, lonMax, latMax);
+ Double lat_numberOfCopies = DoubleUtils.div(lat_getmeter, distance.doubleValue(), 0);
+ double lon_sub = DoubleUtils.sub(lonMax, lonMin);
+ double lat_sub = DoubleUtils.sub(latMax, latMin);
+ Double lon_oneShare = DoubleUtils.div(lon_sub, lon_numberOfCopies,15);
+ Double lat_ontShare = DoubleUtils.div(lat_sub, lat_numberOfCopies,15);
+ Double point_lon = lonMin;
+ for (int i=0;i<lon_numberOfCopies.intValue();i++){
+ Double point_lat = latMin;
+ for (int j=0;j<lat_numberOfCopies.intValue();j++){
+ Boolean pointInPolygon = OtgUtils.isPointInPolygon(areas, point_lon, point_lat);
+ if (pointInPolygon){
+ Map<String,Object> resultMap = new HashMap<>();
+ Double getmeter = 100000000.0;
+ String near_mac = "";
+ for(String key:devicesMap.keySet()){
+ Device device = devicesMap.get(key);
+ double getmeter1 = LongitudeAndLatitudeUtils.getmeter(point_lon, point_lat, device.getLongitude(), device.getLatitude());
+ if (getmeter1<getmeter){
+ near_mac = device.getMac();
+ }
+ }
+ Map<String, Object> map = historyDataMap.get(near_mac);
+ String value = map.get("value").toString();
+ JSONObject jsonObject = JSONObject.parseObject(value);
+ Double sensorValue = Double.parseDouble(jsonObject.get(sensorCode).toString());
+ resultMap.put("lon",point_lon);
+ resultMap.put("lat",point_lat);
+ resultMap.put("value",sensorValue);
+ resultList.add(resultMap);
+ }
+ point_lat = DoubleUtils.add(point_lat,lat_ontShare);
+ }
+ point_lon = DoubleUtils.add(point_lon,lon_oneShare);
+ }
+ return resultList;
+ }
+
/*private OrganizationServicesScopeVO treeStructure(int orgId){
OrganizationServicesScopeVO organizationServicesScopeVO = new OrganizationServicesScopeVO();
Organization organization = organizationMapper.selectById(orgId);
--
Gitblit v1.8.0