From 239927b057f65a040594f7a4cb08c8881b303797 Mon Sep 17 00:00:00 2001
From: cjl <276999030@qq.com>
Date: Fri, 18 Aug 2023 14:52:16 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/cjl-230812' into cjl-230812
---
screen-api/src/main/java/com/moral/api/service/impl/ServicesScopeServiceImpl.java | 150 ++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 139 insertions(+), 11 deletions(-)
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..c2ad449 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,24 @@
@Autowired
private OrganizationService organizationService;
+
+ @Autowired
+ private ServicesScopeDeviceMapper servicesScopeDeviceMapper;
+
+ @Autowired
+ private DeviceMapper deviceMapper;
+
+ @Autowired
+ private HistoryMonthlyMapper historyMonthlyMapper;
+
+ @Autowired
+ private HistoryDailyMapper historyDailyMapper;
+
+ @Autowired
+ private HistoryHourlyMapper historyHourlyMapper;
+
+ @Autowired
+ private HistoryHourlyService historyHourlyService;
@Override
public List<Map<String, Object>> getDateByOrgIdAndCondition(Map map) {
@@ -103,6 +119,118 @@
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 hourly_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", hourly_time);
+ List<HistoryHourly> historyHourlies = historyHourlyService.getHourlyDataByMacs(deviceMacs,time);
+ 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){
+ getmeter=getmeter1;
+ near_mac = device.getMac();
+ }
+ }
+ Map<String, Object> map = historyDataMap.get(near_mac);
+ if (map != null){
+ 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