From aefb5929bf574914740c8ff7ddf7f383c64841f2 Mon Sep 17 00:00:00 2001 From: lizijie <lzjiiie@163.com> Date: Thu, 30 Sep 2021 14:41:39 +0800 Subject: [PATCH] 通过组织id和guids获取指定日期国控站点周围设备AQI六参数据、站点平均数据、AQI、首要污染物接口;获取AQI和首要污染物工具类 --- screen-common/src/main/java/com/moral/util/AQIUtils.java | 70 +++++++++++ screen-api/src/main/java/com/moral/api/controller/GovMonitorPointController.java | 4 screen-api/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java | 274 +++++++++++++++++++++++++++++++++++++++------ 3 files changed, 305 insertions(+), 43 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/controller/GovMonitorPointController.java b/screen-api/src/main/java/com/moral/api/controller/GovMonitorPointController.java index 48f5a05..1f83302 100644 --- a/screen-api/src/main/java/com/moral/api/controller/GovMonitorPointController.java +++ b/screen-api/src/main/java/com/moral/api/controller/GovMonitorPointController.java @@ -84,9 +84,9 @@ *@Author: lizijie *@Date: 2021/9/26 10:06 **/ - @RequestMapping(value = "queryGovMonitorPointHoutlyDatyByGuidsAndOrgid", method = RequestMethod.GET) + @RequestMapping(value = "queryGovMonitorPointHourlyDataByGuidsAndOrgid", method = RequestMethod.GET) @ResponseBody - public ResultMessage queryGovMonitorPointHoutlyDatyByGuidsAndOrgid(HttpServletRequest request){ + public ResultMessage queryGovMonitorPointHourlyDataByGuidsAndOrgid(HttpServletRequest request){ Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null); Object orgid = parameters.get("organization_id"); Object guids = parameters.get("guids"); diff --git a/screen-api/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java index 3e954ae..3f33fea 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java @@ -1,6 +1,5 @@ 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.baomidou.mybatisplus.core.toolkit.ObjectUtils; @@ -15,6 +14,7 @@ import com.moral.api.service.OrganizationService; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; +import com.moral.util.AQIUtils; import com.moral.util.RegionCodeUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -100,6 +100,11 @@ Date endDate = simpleDateFormat.parse(endTime); Map<String, Object> resultMap = new HashMap<>(); List govMonitorPointList = new ArrayList(); + //��������������������������������������������������������� + GovMonitorPoint govMonitorPoint_avg = new GovMonitorPoint(); + govMonitorPoint_avg.setId(0); + govMonitorPoint_avg.setName(""); + govMonitorPoint_avg.setGuid(""); List<Map<String,Object>> data = new ArrayList<>(); Map<String,Object> hour_1 = new HashMap<>(); Map<String,Object> hour_2 = new HashMap<>(); @@ -126,31 +131,6 @@ Map<String,Object> hour_23 = new HashMap<>(); Map<String,Object> hour_24 = new HashMap<>(); Map<String,Object> hour_AVG = new HashMap<>(); - hour_1.put("time","1���"); - hour_2.put("time","2���"); - hour_3.put("time","3���"); - hour_4.put("time","4���"); - hour_5.put("time","5���"); - hour_6.put("time","6���"); - hour_7.put("time","7���"); - hour_8.put("time","8���"); - hour_9.put("time","9���"); - hour_10.put("time","10���"); - hour_11.put("time","11���"); - hour_12.put("time","12���"); - hour_13.put("time","13���"); - hour_14.put("time","14���"); - hour_15.put("time","15���"); - hour_16.put("time","16���"); - hour_17.put("time","17���"); - hour_18.put("time","18���"); - hour_19.put("time","19���"); - hour_20.put("time","20���"); - hour_21.put("time","21���"); - hour_22.put("time","22���"); - hour_23.put("time","23���"); - hour_24.put("time","0���"); - hour_AVG.put("time","avg"); for (String guid:guids) { //������������������������ QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>(); @@ -219,11 +199,11 @@ } } Double PM2_5Avg = (double)Math.round(PM2_5List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); - Double PM10Avg = (double)Math.round(PM2_5List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); - Double SO2Avg = (double)Math.round(PM2_5List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); - Double NO2Avg = (double)Math.round(PM2_5List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); - Double COAvg = new BigDecimal(PM2_5List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); - Double O3_1hAvg = (double)Math.round(PM2_5List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + Double PM10Avg = (double)Math.round(PM10List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + Double SO2Avg = (double)Math.round(SO2List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + Double NO2Avg = (double)Math.round(NO2List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + Double COAvg = new BigDecimal(COList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + Double O3_1hAvg = (double)Math.round(O3_1hList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); if (!ObjectUtils.isEmpty(PM2_5Avg)){ PM2_5List_daliy.add(PM2_5Avg); oneGovMonitorPointOneHourData.put("a34004_"+govMonitorPointId,PM2_5Avg); @@ -232,31 +212,31 @@ } if (!ObjectUtils.isEmpty(PM10Avg)){ PM10List_daliy.add(PM10Avg); - oneGovMonitorPointOneHourData.put("a34002_"+govMonitorPointId,PM2_5Avg); + oneGovMonitorPointOneHourData.put("a34002_"+govMonitorPointId,PM10Avg); }else { oneGovMonitorPointOneHourData.put("a34002_"+govMonitorPointId,null); } if (!ObjectUtils.isEmpty(SO2Avg)){ SO2List_daliy.add(SO2Avg); - oneGovMonitorPointOneHourData.put("a21026_"+govMonitorPointId,PM2_5Avg); + oneGovMonitorPointOneHourData.put("a21026_"+govMonitorPointId,SO2Avg); }else { oneGovMonitorPointOneHourData.put("a21026_"+govMonitorPointId,null); } if (!ObjectUtils.isEmpty(NO2Avg)){ NO2List_daliy.add(NO2Avg); - oneGovMonitorPointOneHourData.put("a21004_"+govMonitorPointId,PM2_5Avg); + oneGovMonitorPointOneHourData.put("a21004_"+govMonitorPointId,NO2Avg); }else { oneGovMonitorPointOneHourData.put("a21004_"+govMonitorPointId,null); } if (!ObjectUtils.isEmpty(COAvg)){ COList_daliy.add(COAvg); - oneGovMonitorPointOneHourData.put("a21005_"+govMonitorPointId,PM2_5Avg); + oneGovMonitorPointOneHourData.put("a21005_"+govMonitorPointId,COAvg); }else { oneGovMonitorPointOneHourData.put("a21005_"+govMonitorPointId,null); } if (!ObjectUtils.isEmpty(O3_1hAvg)){ O3_1hList_daliy.add(O3_1hAvg); - oneGovMonitorPointOneHourData.put("a05024_"+govMonitorPointId,PM2_5Avg); + oneGovMonitorPointOneHourData.put("a05024_"+govMonitorPointId,O3_1hAvg); O3_1hMap.put(i,O3_1hAvg); }else { oneGovMonitorPointOneHourData.put("a05024_"+govMonitorPointId,null); @@ -326,6 +306,226 @@ } } } + Map<Integer,Map<String,Object>> replaceDataMap = new HashMap<>(); + replaceDataMap.put(0,hour_1); + replaceDataMap.put(1,hour_2); + replaceDataMap.put(2,hour_3); + replaceDataMap.put(3,hour_4); + replaceDataMap.put(4,hour_5); + replaceDataMap.put(5,hour_6); + replaceDataMap.put(6,hour_7); + replaceDataMap.put(7,hour_8); + replaceDataMap.put(8,hour_9); + replaceDataMap.put(9,hour_10); + replaceDataMap.put(10,hour_11); + replaceDataMap.put(11,hour_12); + replaceDataMap.put(12,hour_13); + replaceDataMap.put(13,hour_14); + replaceDataMap.put(14,hour_15); + replaceDataMap.put(15,hour_16); + replaceDataMap.put(16,hour_17); + replaceDataMap.put(17,hour_18); + replaceDataMap.put(18,hour_19); + replaceDataMap.put(19,hour_20); + replaceDataMap.put(20,hour_21); + replaceDataMap.put(21,hour_22); + replaceDataMap.put(22,hour_23); + replaceDataMap.put(23,hour_24); + replaceDataMap.put(24,hour_AVG); + for (int i=0;i<25;i++){ + List<Double> PM2_5AllList = new ArrayList<>(); + List<Double> PM10AllList = new ArrayList<>(); + List<Double> SO2AllList = new ArrayList<>(); + List<Double> NO2AllList = new ArrayList<>(); + List<Double> COAllList = new ArrayList<>(); + List<Double> O3_1hAllList = new ArrayList<>(); + List<Double> O3_8hAllList = new ArrayList<>(); + for (String guid:guids) { + //������������������������ + QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>(); + wrapper_govMonitorPoint.eq("is_delete",Constants.NOT_DELETE).eq("guid",guid); + GovMonitorPoint govMonitorPoint = govMonitorPointMapper.selectOne(wrapper_govMonitorPoint); + if (ObjectUtils.isEmpty(govMonitorPoint)){ + continue; + } + int govMonitorPointId = govMonitorPoint.getId(); + + Map<String,Object> replaceMap = new HashMap<>(); + replaceMap = replaceDataMap.get(i); + if (!ObjectUtils.isEmpty(replaceMap.get("a34004_"+govMonitorPointId))){ + PM2_5AllList.add((double)replaceMap.get("a34004_"+govMonitorPointId)); + } + if (!ObjectUtils.isEmpty(replaceMap.get("a34002_"+govMonitorPointId))){ + PM10AllList.add((double)replaceMap.get("a34002_"+govMonitorPointId)); + } + if (!ObjectUtils.isEmpty(replaceMap.get("a21026_"+govMonitorPointId))){ + SO2AllList.add((double)replaceMap.get("a21026_"+govMonitorPointId)); + } + if (!ObjectUtils.isEmpty(replaceMap.get("a21004_"+govMonitorPointId))){ + NO2AllList.add((double)replaceMap.get("a21004_"+govMonitorPointId)); + } + if (!ObjectUtils.isEmpty(replaceMap.get("a21005_"+govMonitorPointId))){ + COAllList.add((double)replaceMap.get("a21005_"+govMonitorPointId)); + } + if (!ObjectUtils.isEmpty(replaceMap.get("a05024_"+govMonitorPointId))){ + O3_1hAllList.add((double)replaceMap.get("a05024_"+govMonitorPointId)); + } + if (!ObjectUtils.isEmpty(replaceMap.get("O3_8h_"+govMonitorPointId))){ + O3_8hAllList.add((double)replaceMap.get("O3_8h_"+govMonitorPointId)); + } + } + Double PM2_5 = null; + Double PM10 = null; + Double SO2 = null; + Double NO2 = null; + Double CO = null; + Double O3_1h = null; + Double O3_8h = null; + if (PM2_5AllList.size()>0){ + PM2_5 = (double)Math.round(PM2_5AllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (PM10AllList.size()>0){ + PM10 = (double)Math.round(PM10AllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (SO2AllList.size()>0){ + SO2 = (double)Math.round(SO2AllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (NO2AllList.size()>0){ + NO2 = (double)Math.round(NO2AllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (COAllList.size()>0){ + CO = new BigDecimal(COAllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + if (O3_1hAllList.size()>0){ + O3_1h = (double)Math.round(O3_1hAllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + if (O3_8hAllList.size()>0){ + O3_8h = (double)Math.round(O3_8hAllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); + } + Map<String,Object> AQIMap = new HashMap<>(); + if (!ObjectUtils.isEmpty(PM2_5)){ + AQIMap.put("a34004",PM2_5); + } + if (!ObjectUtils.isEmpty(PM2_5)){ + AQIMap.put("a34002",PM10); + } + if (!ObjectUtils.isEmpty(PM2_5)){ + AQIMap.put("a21026",SO2); + } + if (!ObjectUtils.isEmpty(PM2_5)){ + AQIMap.put("a21004",NO2); + } + if (!ObjectUtils.isEmpty(PM2_5)){ + AQIMap.put("a21005",CO); + } + if (!ObjectUtils.isEmpty(PM2_5)){ + AQIMap.put("a05024",O3_1h); + } + Map<String,Object> AQIResultMap = new HashMap<>(); + if (AQIMap.size()!=0){ + AQIResultMap = AQIUtils.hourlyAqi_pollutant(AQIMap); + } + Map<String,Object> avgMap = new HashMap<>(); + avgMap.put("a34004_"+"0",PM2_5); + avgMap.put("a34002_"+"0",PM10); + avgMap.put("a21026_"+"0",SO2); + avgMap.put("a21004_"+"0",NO2); + avgMap.put("a21005_"+"0",CO); + avgMap.put("a05024_"+"0",O3_1h); + avgMap.put("O3_8h_"+"0",O3_8h); + if (!ObjectUtils.isEmpty(AQIResultMap.get("aqi"))){ + avgMap.put("aqi",AQIResultMap.get("aqi")); + }else { + avgMap.put("aqi",""); + } + if (!ObjectUtils.isEmpty(AQIResultMap.get("aqi"))){ + String pollutant = AQIResultMap.get("pollutant").toString(); + pollutant = pollutant.replace("[",""); + pollutant = pollutant.replace("]",""); + avgMap.put("pollutant",pollutant); + }else { + avgMap.put("aqi",""); + } + //System.out.println("==============="+pollutant); + //avgMap.put("pullutant",StringUtils.join(aqi_pollutantMap.get("pollutant").toArray(), separator)); + switch (i){ + case 0:hour_1.putAll(avgMap); + break; + case 1:hour_2.putAll(avgMap); + break; + case 2:hour_3.putAll(avgMap); + break; + case 3:hour_4.putAll(avgMap); + break; + case 4:hour_5.putAll(avgMap); + break; + case 5:hour_6.putAll(avgMap); + break; + case 6:hour_7.putAll(avgMap); + break; + case 7:hour_8.putAll(avgMap); + break; + case 8:hour_9.putAll(avgMap); + break; + case 9:hour_10.putAll(avgMap); + break; + case 10:hour_11.putAll(avgMap); + break; + case 11:hour_12.putAll(avgMap); + break; + case 12:hour_13.putAll(avgMap); + break; + case 13:hour_14.putAll(avgMap); + break; + case 14:hour_15.putAll(avgMap); + break; + case 15:hour_16.putAll(avgMap); + break; + case 16:hour_17.putAll(avgMap); + break; + case 17:hour_18.putAll(avgMap); + break; + case 18:hour_19.putAll(avgMap); + break; + case 19:hour_20.putAll(avgMap); + break; + case 20:hour_21.putAll(avgMap); + break; + case 21:hour_22.putAll(avgMap); + break; + case 22:hour_23.putAll(avgMap); + break; + case 23:hour_24.putAll(avgMap); + break; + default: + break; + } + } + hour_1.put("time","1���"); + hour_2.put("time","2���"); + hour_3.put("time","3���"); + hour_4.put("time","4���"); + hour_5.put("time","5���"); + hour_6.put("time","6���"); + hour_7.put("time","7���"); + hour_8.put("time","8���"); + hour_9.put("time","9���"); + hour_10.put("time","10���"); + hour_11.put("time","11���"); + hour_12.put("time","12���"); + hour_13.put("time","13���"); + hour_14.put("time","14���"); + hour_15.put("time","15���"); + hour_16.put("time","16���"); + hour_17.put("time","17���"); + hour_18.put("time","18���"); + hour_19.put("time","19���"); + hour_20.put("time","20���"); + hour_21.put("time","21���"); + hour_22.put("time","22���"); + hour_23.put("time","23���"); + hour_24.put("time","0���"); + hour_AVG.put("time","avg"); data.add(hour_1); data.add(hour_2); data.add(hour_3); @@ -352,7 +552,7 @@ data.add(hour_24); resultMap.put("title",date+"������"); resultMap.put("data",data); - resultMap.put("gocMonitorPoint",govMonitorPointList); + resultMap.put("govMonitorPoint",govMonitorPointList); return resultMap; }catch (Exception e){ e.printStackTrace(); diff --git a/screen-common/src/main/java/com/moral/util/AQIUtils.java b/screen-common/src/main/java/com/moral/util/AQIUtils.java index 70cddb2..b4b9cff 100644 --- a/screen-common/src/main/java/com/moral/util/AQIUtils.java +++ b/screen-common/src/main/java/com/moral/util/AQIUtils.java @@ -2,10 +2,7 @@ import org.springframework.util.ObjectUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import com.moral.constant.Constants; @@ -59,6 +56,71 @@ return AQIMAX; } + public static Map<String,Object> hourlyAqi_pollutant(Map<String, Object> map) { + List<Integer> AQIList = new ArrayList<>(); + Map<String,Integer> AQIMap = new HashMap<>(); + for (Map.Entry<String, Object> entry : map.entrySet()) { + String key = entry.getKey(); + if (entry.getValue().toString().equals("")) { + continue; + } + int PM2_5AQI; + int PM10AQI; + int SO2AQI; + int NO2AQI; + int COAQI; + int O3AQI; + switch (key) { + case Constants.SENSOR_CODE_PM25: + PM2_5AQI = PM2_5AQI(Double.valueOf(entry.getValue().toString())); + AQIList.add(PM2_5AQI); + AQIMap.put("PM2.5",PM2_5AQI); + break; + case Constants.SENSOR_CODE_PM10: + PM10AQI = PM10AQI(Double.valueOf(entry.getValue().toString())); + AQIList.add(PM10AQI); + AQIMap.put("PM10",PM10AQI); + break; + case Constants.SENSOR_CODE_SO2: + SO2AQI = SO2AQI(Double.valueOf(entry.getValue().toString())); + AQIList.add(SO2AQI); + AQIMap.put("SO2",SO2AQI); + break; + case Constants.SENSOR_CODE_NO2: + NO2AQI = NO2AQI(Double.valueOf(entry.getValue().toString())); + AQIList.add(NO2AQI); + AQIMap.put("NO2",NO2AQI); + break; + case Constants.SENSOR_CODE_CO: + COAQI = COAQI(Double.valueOf(entry.getValue().toString())); + AQIList.add(COAQI); + AQIMap.put("CO",COAQI); + break; + case Constants.SENSOR_CODE_O3: + O3AQI = O3AQI(Double.valueOf(entry.getValue().toString())); + AQIList.add(O3AQI); + AQIMap.put("O3",O3AQI); + break; + default: + break; + } + } + int AQIMAX = 0; + if (!ObjectUtils.isEmpty(AQIList)) { + AQIMAX = Collections.max(AQIList); + } + List<String> nameList = new ArrayList<>(); + for (String key:AQIMap.keySet()){ + if (AQIMap.get(key).equals(AQIMAX)){ + nameList.add(key); + } + } + Map<String,Object> resultMap = new HashMap<>(); + resultMap.put("aqi",AQIMAX); + resultMap.put("pollutant",nameList); + return resultMap; + } + //PM2.5 IAQI public static int PM2_5AQI(Double value) { double result; -- Gitblit v1.8.0