From 60cd6696e315bc4ee8ba5e8197e08bf7774df06c Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Wed, 12 Oct 2022 14:28:12 +0800 Subject: [PATCH] 修改浑南区图表aqi计算方法 --- screen-api/src/main/java/com/moral/api/service/impl/HnExcelServiceImpl.java | 495 ++++++++++++++++++++++++---------------- screen-api/src/main/java/com/moral/api/utils/AqiUtils.java | 189 +++++++++++++++ screen-api/src/main/java/com/moral/api/pojo/vo/excel/SyExcelVo.java | 1 3 files changed, 486 insertions(+), 199 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/excel/SyExcelVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/excel/SyExcelVo.java index 219c9d1..028ded2 100644 --- a/screen-api/src/main/java/com/moral/api/pojo/vo/excel/SyExcelVo.java +++ b/screen-api/src/main/java/com/moral/api/pojo/vo/excel/SyExcelVo.java @@ -15,6 +15,7 @@ private String code4; private String code5; private String code6; + private String season; private Map<String, ArrayList<String>> list; } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HnExcelServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HnExcelServiceImpl.java index b7490fe..b03f176 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/HnExcelServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/HnExcelServiceImpl.java @@ -29,8 +29,8 @@ import com.moral.api.pojo.bo.ExcelBO; import com.moral.api.pojo.vo.excel.SyExcelVo; import com.moral.api.service.HnExcelService; +import com.moral.api.utils.AqiUtils; import com.moral.api.utils.ExcelUtils; -import com.moral.pojo.AQI; import com.moral.util.AQIUtils; import com.moral.util.AmendUtils; import com.moral.util.DateUtils; @@ -157,17 +157,23 @@ if (s.equals("count")){ ArrayList<String> list1 = new ArrayList<>(); List<Integer> list = stringListMap.get(s); + String season; Integer sum =0; if (data>=1 && data<=3){ sum = list.get(0) + list.get(1) + list.get(2); + season = "���"; }else if (data>=4 &&data<=6){ sum = list.get(3) + list.get(4) + list.get(5); + season = "���"; }else if (data>=7 &&data<=9){ sum = list.get(6) + list.get(7) + list.get(8); + season = "���"; }else { sum = list.get(9) + list.get(10) + list.get(11); + season = "���"; } syExcelVo.setCode5(sum.toString()); + syExcelVo.setSeason(season); for (int i = 0; i < list.size()-1; i++) { if (list.get(i)==0){ list1.add(""); @@ -340,7 +346,7 @@ if (objects.length == 9) { map.put("time", objects[0]); map.put("PM10", objects[1]); - map.put("a34004", objects[2]); + map.put("PM2_5", objects[2]); map.put("SO2", objects[3]); map.put("NO2", objects[4]); map.put("CO", objects[5]); @@ -351,7 +357,7 @@ if (objects.length == 18) { map.put("time", objects[0]); map.put("PM10", objects[1]); - map.put("a34004", objects[2]); + map.put("PM2_5", objects[2]); map.put("SO2", objects[3]); map.put("NO2", objects[4]); map.put("CO", objects[5]); @@ -368,7 +374,7 @@ { map1.put("time", objects[10]); map1.put("PM10", objects[11]); - map1.put("a34004", objects[12]); + map1.put("PM2_5", objects[12]); map1.put("SO2", objects[13]); map1.put("NO2", objects[14]); map1.put("CO", objects[15]); @@ -382,7 +388,7 @@ if (objects.length == 27) { map.put("time", objects[0]); map.put("PM10", objects[1]); - map.put("a34004", objects[2]); + map.put("PM2_5", objects[2]); map.put("SO2", objects[3]); map.put("NO2", objects[4]); map.put("CO", objects[5]); @@ -399,7 +405,7 @@ map1.put("time", objects[10]); map1.put("PM10", objects[11]); - map1.put("a34004", objects[12]); + map1.put("PM2_5", objects[12]); map1.put("SO2", objects[13]); map1.put("NO2", objects[14]); map1.put("CO", objects[15]); @@ -416,7 +422,7 @@ ) { map2.put("time", objects[19]); map2.put("PM10", objects[20]); - map2.put("a34004", objects[21]); + map2.put("PM2_5", objects[21]); map2.put("SO2", objects[22]); map2.put("NO2", objects[23]); map2.put("CO", objects[24]); @@ -428,13 +434,14 @@ } //���������������pm2.5��������������� - Map<String, List<Integer>> map = getMap(rsMap3); + Map<String, List<Integer>> map = getMap(rsMap3,time); //������������PM2.5��������������� - Map<String, Integer> map2 = getResult(rsMap2, time); + Map<String, List<Integer>> map2 = getResult(rsMap2, time); List<Integer> list = map.get("count"); - list.add(map2.get("count")); + list.add(map2.get("count").get(0)); List<Integer> list1 = map.get("PM2_5"); - list1.add(map2.get("PM2_5")); + list1.add(map2.get("PM2_5").get(0)); + map.put("������",map2.get("������")); return map; } @@ -443,7 +450,7 @@ * * @param rsMap3 */ - private Map<String, List<Integer>> getMap(HashMap<String, Object> rsMap3) { + private Map<String, List<Integer>> getMap(HashMap<String, Object> rsMap3,String time) { HashMap<String, List<Integer>> listMap = new HashMap<>(); Set<String> strings = rsMap3.keySet(); ArrayList<Double> list1 = new ArrayList<>(); @@ -461,6 +468,8 @@ ArrayList<Double> resList = new ArrayList<>(); ArrayList<Integer> list = new ArrayList<>(); ArrayList<Integer> listPM = new ArrayList<>(); + ArrayList<Double> AQI = new ArrayList<>(); + ArrayList<Integer> integers = new ArrayList<>(); int count1 = 0; int count2 = 0; int count3 = 0; @@ -473,6 +482,8 @@ int count10 = 0; int count11 = 0; int count12 = 0; + String rsTime = time.substring(0, 4); + integers.add(Integer.parseInt(rsTime)); for (String string : strings) { String substring = string.substring(5, 7); @@ -481,10 +492,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list1.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count1++; } } @@ -493,10 +505,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list2.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count2++; } } @@ -505,10 +518,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list3.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count3++; } } @@ -516,13 +530,12 @@ Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); - String aqi = map.get("AQI").toString(); - - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list4.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count4++; } } @@ -531,10 +544,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list5.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count5++; } } @@ -543,10 +557,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list6.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count6++; } } @@ -555,10 +570,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list7.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count7++; } } @@ -567,10 +583,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list8.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count8++; } } @@ -579,10 +596,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list9.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count9++; } } @@ -591,10 +609,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list10.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count10++; } } @@ -603,10 +622,11 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list11.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count11++; } } @@ -615,15 +635,56 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list12.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count12++; } } } + int code1 =0; + int code2 =0; + int code3 =0; + int code4 =0; + int code5 =0; + int code6 =0; + int i; + for (double aDouble : AQI) { + i=(int)aDouble; + String s = AQIUtils.classOfPollutionByAqi(i); + if (s.equals("���")){ + code1++; + } + if (s.equals("���")){ + code2++; + } + if (s.equals("������������")){ + code3++; + } + if (s.equals("������������")){ + code4++; + } + if (s.equals("������������")){ + code5++; + } + if (s.equals("������������")){ + code6++; + } + } + + + + integers.add(code1+code2); + integers.add(code1); + integers.add(code2); + integers.add(code3); + integers.add(code4); + integers.add(code5); + integers.add(code6); + list.add(count1); list.add(count2); list.add(count3); @@ -638,59 +699,74 @@ list.add(count12); Integer sum = list.stream().reduce(Integer::sum).orElse(0); + list.add(sum); listMap.put("count", list); Integer collect1 = 0; if (list1.size() > 0) { - collect1 = Math.toIntExact(Math.round(list1.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect1 = Math.toIntExact(Math.round(list1.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect1 = (int) AmendUtils.sciCal(list1.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect2 = 0; if (list2.size() > 0) { - collect2 = Math.toIntExact(Math.round(list2.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect2 = Math.toIntExact(Math.round(list2.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect2= (int) AmendUtils.sciCal(list2.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect3 = 0; if (list3.size() > 0) { - collect3 = Math.toIntExact(Math.round(list3.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect3 = Math.toIntExact(Math.round(list3.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect3 = (int) AmendUtils.sciCal(list3.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect4 = 0; if (list4.size() > 0) { - collect4 = Math.toIntExact(Math.round(list4.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect4 = Math.toIntExact(Math.round(list4.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect4 = (int) AmendUtils.sciCal(list4.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect5 = 0; if (list5.size() > 0) { - collect5 = Math.toIntExact(Math.round(list5.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect5 = Math.toIntExact(Math.round(list5.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect5 = (int) AmendUtils.sciCal(list5.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect6 = 0; if (list6.size() > 0) { - collect6 = Math.toIntExact(Math.round(list6.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect6 = Math.toIntExact(Math.round(list6.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect6 = (int) AmendUtils.sciCal(list6.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } + Integer collect7 = 0; if (list7.size() > 0) { - collect7 = Math.toIntExact(Math.round(list7.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect7 = Math.toIntExact(Math.round(list7.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect7 = (int) AmendUtils.sciCal(list7.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect8 = 0; if (list8.size() > 0) { - collect8 = Math.toIntExact(Math.round(list8.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect8 = Math.toIntExact(Math.round(list8.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect8 = (int) AmendUtils.sciCal(list8.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect9 = 0; if (list9.size() > 0) { - collect9 = Math.toIntExact(Math.round(list9.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect9 = Math.toIntExact(Math.round(list9.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect9 = (int) AmendUtils.sciCal(list9.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect10 = 0; if (list10.size() > 0) { - collect10 = Math.toIntExact(Math.round(list10.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect10 = Math.toIntExact(Math.round(list10.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect10 = (int) AmendUtils.sciCal(list10.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect11 = 0; if (list11.size() > 0) { - collect11 = Math.toIntExact(Math.round(list11.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect11 = Math.toIntExact(Math.round(list11.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect11 = (int) AmendUtils.sciCal(list11.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect12 = 0; if (list12.size() > 0) { - collect12 = Math.toIntExact(Math.round(list12.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// collect12 = Math.toIntExact(Math.round(list12.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + collect12 = (int) AmendUtils.sciCal(list12.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } //���������pm2.5������ - int resPM25 = Math.toIntExact(Math.round(resList.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); +// int resPM25 = Math.toIntExact(Math.round(resList.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + int resPM25 = (int) AmendUtils.sciCal(resList.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); listPM.add(collect1); listPM.add(collect2); listPM.add(collect3); @@ -704,7 +780,8 @@ listPM.add(collect11); listPM.add(collect12); listPM.add(resPM25); - listMap.put("PM2_5", listPM); + listMap.put("PM2_5",listPM); + listMap.put("������",integers); return listMap; } @@ -713,14 +790,21 @@ * * @param rsMap2 */ - private Map<String, Integer> getResult(HashMap<String, Object> rsMap2, String time) throws ParseException { - HashMap<String, Integer> rsMap = new HashMap<>(); + private Map<String, List<Integer>> getResult(HashMap<String, Object> rsMap2, String time) throws ParseException { + HashMap<String, List<Integer>> rsMap = new HashMap<>(); ArrayList<Double> list = new ArrayList<>(); + ArrayList<Integer> list2 = new ArrayList<>(); + ArrayList<Integer> list3 = new ArrayList<>(); + ArrayList<Double> AQI = new ArrayList<>(); + ArrayList<Integer> rsAqi = new ArrayList<>(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); Calendar instance = Calendar.getInstance(); instance.setTime(sdf1.parse(time)); instance.add(Calendar.YEAR, -1); Date date = instance.getTime(); + //��������� + String format = sdf1.format(date); + String rsTime = format.substring(0, 4); //��������� long time1 = date.getTime(); int count = 0; @@ -733,17 +817,60 @@ String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); - String pm2_5 = map.get("a34004").toString(); + String pm2_5 = map.get("PM2_5").toString(); list.add(Double.parseDouble(pm2_5)); - if (Double.parseDouble(aqi) < 100) { + AQI.add(Double.parseDouble(aqi)); + if (Double.parseDouble(aqi) <= 100) { count++; } } } + list2.add(count); + int code1 =0; + int code2 =0; + int code3 =0; + int code4 =0; + int code5 =0; + int code6 =0; + int i; + for (double adouble : AQI) { + i =(int) adouble; + String s = AQIUtils.classOfPollutionByAqi(i); + if (s.equals("���")){ + code1++; + } + if (s.equals("���")){ + code2++; + } + if (s.equals("������������")){ + code3++; + } + if (s.equals("������������")){ + code4++; + } + if (s.equals("������������")){ + code5++; + } + if (s.equals("������������")){ + code6++; + } + } + rsAqi.add(Integer.parseInt(rsTime)); + rsAqi.add(code1+code2); + rsAqi.add(code1); + rsAqi.add(code2); + rsAqi.add(code3); + rsAqi.add(code4); + rsAqi.add(code5); + rsAqi.add(code6); + //���������pm2.5������ - int PM2_5 = Math.toIntExact(Math.round(list.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); - rsMap.put("count", count); - rsMap.put("PM2_5", PM2_5); +// int PM2_5 = Math.toIntExact(Math.round(list.stream().collect(Collectors.averagingDouble(Double::doubleValue)))); + int PM2_5 = (int) AmendUtils.sciCal(list.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); + list3.add(PM2_5); + rsMap.put("count", list2); + rsMap.put("PM2_5", list3); + rsMap.put("������",rsAqi); return rsMap; } @@ -790,67 +917,39 @@ HashMap<String, Object> map1 = new HashMap<>(); HashMap<String, Object> map2 = new HashMap<>(); if (objects.length == 18) { - if ( !objects[11].toString().contains("H") - && !objects[12].toString().contains("H") - && !objects[13].toString().contains("H") - && !objects[14].toString().contains("H") - && !objects[15].toString().contains("H") - && !objects[16].toString().contains("H") - ) { -// map1.put("time", objects[10]); - //PM10 - map1.put("a34002", objects[11]); - //PM2_5 - map1.put("a34004", objects[12]); - //SO2 - map1.put("a21026", objects[13]); - //NO2 - map1.put("a21004", objects[14]); - //CO - map1.put("a21005", objects[15]); - //O3_8H - map1.put("a05024", objects[16]); - rsMap1.put(objects[10].toString(), map1); - } + map1.put("PM10", objects[11]); + map1.put("PM2_5", objects[12]); + map1.put("SO2", objects[13]); + map1.put("NO2", objects[14]); + map1.put("CO", objects[15]); + map1.put("O3", objects[16]); + + rsMap1.put(objects[10].toString(), map1); } if (objects.length == 27) { - if ( !objects[11].toString().contains("H") - && !objects[12].toString().contains("H") - && !objects[13].toString().contains("H") - && !objects[14].toString().contains("H") - && !objects[15].toString().contains("H") - && !objects[16].toString().contains("H") - ) { - map1.put("a34002", objects[11]); - map1.put("a34004", objects[12]); - map1.put("a21026", objects[13]); - map1.put("a21004", objects[14]); - map1.put("a21005", objects[15]); - map1.put("a05024", objects[16]); + map1.put("PM10", objects[11]); + map1.put("PM2_5", objects[12]); + map1.put("SO2", objects[13]); + map1.put("NO2", objects[14]); + map1.put("CO", objects[15]); + map1.put("O3", objects[16]); - rsMap1.put(objects[10].toString(), map1); - } - if ( - !objects[20].toString().contains("H") - && !objects[21].toString().contains("H") - && !objects[22].toString().contains("H") - && !objects[23].toString().contains("H") - && !objects[24].toString().contains("H") - && !objects[25].toString().contains("H")) - { - map2.put("a34002", objects[20]); - map2.put("a34004", objects[21]); - map2.put("a21026", objects[22]); - map2.put("a21004", objects[23]); - map2.put("a21005", objects[24]); - map2.put("a05024", objects[25]); + rsMap1.put(objects[10].toString(), map1); - rsMap2.put(objects[19].toString(), map2); - } + + map2.put("PM10", objects[20]); + map2.put("PM2_5", objects[21]); + map2.put("SO2", objects[22]); + map2.put("NO2", objects[23]); + map2.put("CO", objects[24]); + map2.put("O3", objects[25]); + + rsMap2.put(objects[19].toString(), map2); + } } @@ -880,59 +979,39 @@ HashMap<String, Object> map1 = new HashMap<>(); HashMap<String, Object> map2 = new HashMap<>(); if (objects.length == 18) { - if ( !objects[11].toString().contains("H") - && !objects[12].toString().contains("H") - && !objects[13].toString().contains("H") - && !objects[14].toString().contains("H") - && !objects[15].toString().contains("H") - && !objects[16].toString().contains("H") - ) { -// map1.put("time", objects[10]); - map1.put("a34002", objects[11]); - map1.put("a34004", objects[12]); - map1.put("a21026", objects[13]); - map1.put("a21004", objects[14]); - map1.put("a21005", objects[15]); - map1.put("a05024", objects[16]); - rsMap3.put(objects[10].toString(), map1); - } + map1.put("PM10", objects[11]); + map1.put("PM2_5", objects[12]); + map1.put("SO2", objects[13]); + map1.put("NO2", objects[14]); + map1.put("CO", objects[15]); + map1.put("O3", objects[16]); + + rsMap3.put(objects[10].toString(), map1); + } if (objects.length == 27) { - if ( !objects[11].toString().contains("H") - && !objects[12].toString().contains("H") - && !objects[13].toString().contains("H") - && !objects[14].toString().contains("H") - && !objects[15].toString().contains("H") - && !objects[16].toString().contains("H")) - { - map1.put("a34002", objects[11]); - map1.put("a34004", objects[12]); - map1.put("a21026", objects[13]); - map1.put("a21004", objects[14]); - map1.put("a21005", objects[15]); - map1.put("a05024", objects[16]); - rsMap3.put(objects[10].toString(), map1); - } - if ( !objects[20].toString().contains("H") - && !objects[21].toString().contains("H") - && !objects[22].toString().contains("H") - && !objects[23].toString().contains("H") - && !objects[24].toString().contains("H") - && !objects[25].toString().contains("H") - ) { -// map2.put("time", objects[19]); - map2.put("a34002", objects[20]); - map2.put("a34004", objects[21]); - map2.put("a21026", objects[22]); - map2.put("a21004", objects[23]); - map2.put("a21005", objects[24]); - map2.put("a05024", objects[25]); - rsMap4.put(objects[19].toString(), map2); - } + map1.put("PM10", objects[11]); + map1.put("PM2_5", objects[12]); + map1.put("SO2", objects[13]); + map1.put("NO2", objects[14]); + map1.put("CO", objects[15]); + map1.put("O3", objects[16]); + + rsMap3.put(objects[10].toString(), map1); + + + map2.put("PM10", objects[20]); + map2.put("PM2_5", objects[21]); + map2.put("SO2", objects[22]); + map2.put("NO2", objects[23]); + map2.put("CO", objects[24]); + map2.put("O3", objects[25]); + rsMap4.put(objects[19].toString(), map2); + } } @@ -941,95 +1020,113 @@ Object o = rsMap1.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); - if (!rsMap3.containsKey(string)){ - hnMap1.put(string,map); - continue; - } + Object o1 = rsMap3.get(string); String s1 = JSON.toJSONString(o1); Map map1 = JSON.parseObject(s1, Map.class); Set sets = map1.keySet(); HashMap<Object, Object> hs = new HashMap<>(); for (Object set : sets) { - if (set.toString().equals("a21005")){ + if (set.toString().equals("CO")){ String s3 = map1.get(set).toString(); String s2 = map.get(set).toString(); - hs.put(set,new BigDecimal((Double.parseDouble(s3)+Double.parseDouble(s2))/2).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue()); + if (s3.contains("H") && !s2.contains("H")){ + hs.put(set,Double.parseDouble(s2)); + }else if(!s3.contains("H") && s2.contains("H")){ + hs.put(set,Double.parseDouble(s3)); + }else if(s3.contains("H") && s2.contains("H")){ + break; + }else { +// hs.put(set,new BigDecimal((Double.parseDouble(s3)+Double.parseDouble(s2))/2).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue()); + hs.put(set, AmendUtils.sciCal((Double.parseDouble(s3)+Double.parseDouble(s2))/2,1)); + } continue; } String s3 = map1.get(set).toString(); String s2 = map.get(set).toString(); - hs.put(set,Math.round((Double.parseDouble(s3)+Double.parseDouble(s2))/2)); + if (s3.contains("H") && !s2.contains("H")){ + hs.put(set,Double.parseDouble(s2)); + }else if(!s3.contains("H") && s2.contains("H")){ + hs.put(set,Double.parseDouble(s3)); + }else if(s3.contains("H") && s2.contains("H")){ + break; + }else { +// hs.put(set,Math.round((Double.parseDouble(s3)+Double.parseDouble(s2))/2)); + hs.put(set, AmendUtils.sciCal((Double.parseDouble(s3)+Double.parseDouble(s2))/2,0)); + } } - hnMap1.put(string,hs); + if (hs.size()==6){ + hnMap1.put(string,hs); + } + } - Set<String> strings2 = rsMap3.keySet(); - for (String s : strings2) { - Object o = rsMap3.get(s); - String s1 = JSON.toJSONString(o); - Map map = JSON.parseObject(s1, Map.class); - if (!hnMap1.containsKey(s)){ - hnMap1.put(s,map); - } - } + Set<String> strings1 = rsMap2.keySet(); for (String s : strings1) { Object o = rsMap2.get(s); String s1 = JSON.toJSONString(o); Map map = JSON.parseObject(s1, Map.class); - if (!rsMap4.containsKey(s)){ - hnMap2.put(s,map); - continue; - } Object o1 = rsMap4.get(s); String s2 = JSON.toJSONString(o1); Map map1 = JSON.parseObject(s2, Map.class); Set sets = map1.keySet(); HashMap<Object, Object> hs = new HashMap<>(); for (Object set : sets) { - if (set.toString().equals("a21005")){ + if (set.toString().equals("CO")){ String s3 = map1.get(set).toString(); String s4 = map.get(set).toString(); - hs.put(set,new BigDecimal((Double.parseDouble(s3)+Double.parseDouble(s4))/2).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue()); + if (s3.contains("H") && !s4.contains("H")){ + hs.put(set,Double.parseDouble(s4)); + }else if(!s3.contains("H") && s4.contains("H")){ + hs.put(set,Double.parseDouble(s3)); + }else if(s3.contains("H") && s4.contains("H")){ + break; + }else { + hs.put(set, AmendUtils.sciCal((Double.parseDouble(s3)+Double.parseDouble(s4))/2,1)); + } continue; } String s3 = map1.get(set).toString(); String s4 = map.get(set).toString(); - hs.put(set,Math.round((Double.parseDouble(s3)+Double.parseDouble(s4))/2)); + if (s3.contains("H") && !s4.contains("H")){ + hs.put(set,Double.parseDouble(s4)); + }else if(!s3.contains("H") && s4.contains("H")){ + hs.put(set,Double.parseDouble(s3)); + }else if(s3.contains("H") && s4.contains("H")){ + break; + }else { + hs.put(set, AmendUtils.sciCal((Double.parseDouble(s3)+Double.parseDouble(s4))/2,0)); + } } - hnMap2.put(s,hs); + if (hs.size()==6){ + hnMap2.put(s,hs); + } + } - Set<String> strings3 = rsMap4.keySet(); - for (String s : strings3) { - Object o = rsMap4.get(s); - String s1 = JSON.toJSONString(o); - Map map = JSON.parseObject(s1, Map.class); - if (!rsMap2.containsKey(s1)){ - hnMap2.put(s,map); - } - } + //���������������aqi getHnMap(hnMap2); //���������������aqi getHnMap(hnMap1); // - Map<String, List<Integer>> map = getMap(hnMap2); + Map<String, List<Integer>> map = getMap(hnMap2,time); - Map<String, Integer> map2 = getResult(hnMap1, time); + Map<String, List<Integer>> map2 = getResult(hnMap1, time); List<Integer> list = map.get("count"); - list.add(map2.get("count")); + list.add(map2.get("count").get(0)); List<Integer> list1 = map.get("PM2_5"); - list1.add(map2.get("PM2_5")); + list1.add(map2.get("PM2_5").get(0)); return map; } + //������aqi private void getHnMap(HashMap<String, Object> hnMap2) { Set<String> strings4 = hnMap2.keySet(); @@ -1037,9 +1134,9 @@ Object o = hnMap2.get(s); String s1 = JSON.toJSONString(o); Map rs = JSON.parseObject(s1, Map.class); - AQI aqi = AQIUtils.dailyAQI(rs); + Map aqi1 = AqiUtils.getAqi(rs); JSONObject jsonObject = JSON.parseObject(s1); - jsonObject.put("AQI",aqi.getAQIValue()); + jsonObject.put("AQI",aqi1.get("AQI")); String s2 = JSON.toJSONString(jsonObject); Map map = JSON.parseObject(s2, Map.class); hnMap2.put(s,map); diff --git a/screen-api/src/main/java/com/moral/api/utils/AqiUtils.java b/screen-api/src/main/java/com/moral/api/utils/AqiUtils.java new file mode 100644 index 0000000..3b4cc29 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/utils/AqiUtils.java @@ -0,0 +1,189 @@ +package com.moral.api.utils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class AqiUtils { + /** + * ������6������������aqi������������������ + * @param map + * @return + */ + public static Map<String,Object> getAqi(Map<String,Object> map){ + + HashMap<String, Object> rsMap = new HashMap<>(); + ArrayList<Double> list = new ArrayList<>(); + if (map.get("PM2_5")!=null && map.get("PM10")!=null && map.get("CO")!=null + && map.get("SO2")!=null + && map.get("NO2")!=null + && map.get("O3")!=null + ){ + double pm2_5 = getPm2_5(Double.parseDouble(map.get("PM2_5").toString())); + list.add(pm2_5); + double pm10 = getPm10(Double.parseDouble(map.get("PM10").toString())); + list.add(pm10); + double co = getCo(Double.parseDouble(map.get("CO").toString())); + list.add(co); + double So2 = getSo2(Double.parseDouble(map.get("SO2").toString())); + list.add(So2); + double No2 = getNo2(Double.parseDouble(map.get("NO2").toString())); + list.add(No2); + double O3 = getO3(Double.parseDouble(map.get("O3").toString())); + list.add(O3); + } + + double max = Collections.max(list); + int AQI = (int) max; + rsMap.put("AQI",AQI); + + rsMap.put("SU",getSU(max,list)); + + return rsMap; + } + + + + private static double getSo2(double so2){ + double v = 0.0; + if (so2<50){ + v = 50 * so2 / 50; + }else if (so2<150 && so2 >= 50){ + v = 50 * (so2 - 50) / 100 + 50; + }else if (so2<475 && so2 >= 150){ + v = 50 * (so2 - 150) / 325 + 100; + }else if (so2<800 && so2 >= 475){ + v = 50 * (so2 - 475) / 325 + 150; + }else { + v = 100 * (so2 - 800) / 800 + 200; + } + return Math.round(v); + } + + private static double getNo2(double no2){ + double v = 0.0; + if (no2<40){ + v = 50 * no2 / 40; + }else if (no2<80 && no2 >= 40){ + v = 50 * (no2 - 40) / 40 + 50; + }else if (no2<180 && no2 >= 80){ + v = 50 * (no2 - 80) / 100 + 100; + }else if (no2<280 && no2 >= 180){ + v = 50 * (no2 - 180) / 100 + 150; + }else if (no2<565 && no2 >= 280){ + v = 100 * (no2 - 280) / 285 + 200; + }else if (no2<750 && no2 >= 565){ + v = 100 * (no2 - 565) / 185 + 300; + } + else { + v = 100 * (no2 - 750) / 190 + 400; + } + return Math.round(v); + } + + + private static double getCo(double co){ + double v = 0.0; + if (co<2){ + v = 50 * co / 2; + }else if (co<4 && co >= 2){ + v = 50 * (co - 2) / 2 + 50; + }else if (co<14 && co >= 4){ + v = 50 * (co - 4) / 10 + 100; + }else if (co<24 && co >= 14){ + v = 50 * (co - 14) / 10 + 150; + }else if (co<36 && co >= 24){ + v = 100 * (co - 24) / 12 + 200; + }else if (co<48 && co >= 36){ + v = 100 * (co - 36) / 12 + 300; + } + else { + v = 100 * (co - 48) / 12 + 400; + } + return Math.round(v); + } + + private static double getPm10(double pm10){ + double v = 0.0; + if (pm10<50){ + v = 50 * pm10 / 50; + }else if (pm10<150 && pm10 >= 50){ + v = 50 * (pm10 - 50) / 100 + 50; + }else if (pm10<250 && pm10 >= 150){ + v = 50 * (pm10 - 150) / 100 + 100; + }else if (pm10<350 && pm10 >= 250){ + v = 50 * (pm10 - 250) / 100 + 150; + }else if (pm10<420 && pm10 >= 350){ + v = 100 * (pm10 - 350) / 70 + 200; + }else if (pm10<500 && pm10 >= 420){ + v = 100 * (pm10 - 420) / 80 + 300; + } + else { + v = 100 * (pm10 - 500) / 100 + 400; + } + return Math.round(v); + } + + private static double getPm2_5(double pm2_5){ + double v = 0.0; + if (pm2_5<35){ + v = 50 * pm2_5 / 35; + }else if (pm2_5<75 && pm2_5 >= 35){ + v = 50 * (pm2_5 - 35) / 40 + 50; + }else if (pm2_5<115 && pm2_5 >= 75){ + v = 50 * (pm2_5 - 75) / 40 + 100; + }else if (pm2_5<150 && pm2_5 >= 115){ + v = 50 * (pm2_5 - 115) / 35 + 150; + }else if (pm2_5<250 && pm2_5 >= 150){ + v = 100 * (pm2_5 - 150) / 100 + 200; + }else if (pm2_5<350 && pm2_5 >= 250){ + v = 100 * (pm2_5 - 250) / 100 + 300; + } + else { + v = 100 * (pm2_5 - 350) / 150 + 400; + } + return Math.round(v); + } + + + private static double getO3(double o3){ + double v = 0.0; + if (o3<100){ + v = 50 * o3 / 100; + }else if (o3<160 && o3 >= 100){ + v = 50 * (o3 - 100) / 60 + 50; + }else if (o3<215 && o3 >= 160){ + v = 50 * (o3 - 160) / 55 + 100; + }else if (o3<265 && o3 >= 215){ + v = 50 * (o3 - 215) / 50 + 150; + }else if (o3<800 && o3 >= 265){ + v = 100 * (o3 - 265) / 535 + 200; + }else if (o3<1000 && o3 >= 800){ + v = 100 * (o3 - 800) / 200 + 300; + } + return Math.round(v); + } + + + private static String getSU(Double aqi,ArrayList list){ + String SU=null; + if (aqi<=50){ + SU="-"; + } else if (aqi.toString().equals(list.get(1).toString())){ + SU="PM10"; + }else if (aqi.toString().equals(list.get(0).toString())){ + SU="PM2.5"; + }else if (aqi.toString().equals(list.get(2).toString())){ + SU="CO"; + }else if (aqi.toString().equals(list.get(3).toString())){ + SU="SO2"; + }else if (aqi.toString().equals(list.get(4).toString())){ + SU="NO2"; + }else if (aqi.toString().equals(list.get(5).toString())){ + SU="O3"; + } + return SU; + } + +} -- Gitblit v1.8.0