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