于紫祥_1901
2020-12-01 55af35b31d32627ba297b4324db34d612611ef9f
src/main/java/com/moral/util/AQICalculation2.java
@@ -3,61 +3,59 @@
import java.util.*;
public class AQICalculation2 {
   public static Map<String, Object> hourlyAQI(Map<String, Object> map){
      List<Double> AQIList = new ArrayList<>();
      Map maxMap = new HashMap();
      for (Map.Entry<String, Object> entry : map.entrySet()) {
         String key = entry.getKey();
         if (entry.getValue() instanceof Double){
            Double value = Double.parseDouble(entry.getValue().toString());
            if (key!="O3-8h"){
               maxMap.put(key,value);
            }
            Double PM2_5AQI;
            Double PM10AQI;
            Double SO2AQI;
            Double NO2AQI;
            Double COAQI;
            Double O3AQI;
            switch (key) {
               case "PM2_5":PM2_5AQI = PM2_5AQI(value);
                  AQIList.add(PM2_5AQI);
                  break;
               case "PM10":PM10AQI = PM10AQI(value);
                  AQIList.add(PM10AQI);
                  break;
               case "SO2":SO2AQI = SO2AQI(value);
                  AQIList.add(SO2AQI);
                  break;
               case "e16":NO2AQI = NO2AQI(value);
                  AQIList.add(NO2AQI);
                  break;
               case "CO":COAQI = COAQI(value);
                  AQIList.add(COAQI);
                  break;
               case "O3":O3AQI = O3AQI(value);
                  AQIList.add(O3AQI);
                  break;
         if (entry.getValue().toString().equals("")){
            continue;
         }
         Double value = Double.parseDouble(entry.getValue().toString());
               default:
                  break;
            }
         if (key!="O3_8h"){
            maxMap.put(key,value);
         }else {
            continue;
         }
         }
         Double PM2_5AQI;
         Double PM10AQI;
         Double SO2AQI;
         Double NO2AQI;
         Double COAQI;
         Double O3AQI;
      Double AQIMAX = Collections.max(AQIList);
         switch (key) {
            case "PM2_5":PM2_5AQI = PM2_5AQI(value);
               AQIList.add(PM2_5AQI);
               break;
            case "PM10":PM10AQI = PM10AQI(value);
               AQIList.add(PM10AQI);
               break;
            case "SO2":SO2AQI = SO2AQI(value);
               AQIList.add(SO2AQI);
               break;
            case "NO2":NO2AQI = NO2AQI(value);
               AQIList.add(NO2AQI);
               break;
            case "CO":COAQI = COAQI(value);
               AQIList.add(COAQI);
               break;
            case "maxO3_8h":O3AQI = O3AQI(value);
               AQIList.add(O3AQI);
               break;
            default:
               break;
         }
      }
      Map<String, Object> returnMap = new HashMap<>();
      //System.out.println("-------"+maxMap);
      Double AQIMAX = Collections.max(AQIList);
      Optional<Map.Entry<String, Integer>> max0 = maxMap.entrySet()
            .stream()
            .max(Map.Entry.comparingByValue());
      //System.out.println("-------"+max0.get().getKey());
      returnMap.put("maxSensor",max0.get().getKey());
      returnMap.put("AQI", AQIMAX);
      returnMap.put("maxSensor", max0.get().getKey());
      returnMap.put("AQI", String.format("%.1f", AQIMAX));
      return returnMap;
   }
   public static Map<String, Object> dayAQI(Map<String, Object> map){
@@ -65,54 +63,56 @@
      Map maxMap = new HashMap();
      for (Map.Entry<String, Object> entry : map.entrySet()) {
         String key = entry.getKey();
         if (entry.getValue() instanceof Double){
            Double value = Double.parseDouble(entry.getValue().toString());
            if (key!="O3-day"){
               maxMap.put(key,value);
            }
            Double PM2_5AQI;
            Double PM10AQI;
            Double SO2AQI;
            Double NO2AQI;
            Double COAQI;
            Double maxO38hAQI;
            switch (key) {
               case "PM2_5":PM2_5AQI = PM2_5AQI(value);
                  AQIList.add(PM2_5AQI);
                  break;
               case "PM10":PM10AQI = PM10AQI(value);
                  AQIList.add(PM10AQI);
                  break;
               case "SO2":SO2AQI = SO2DayAQI(value);
                  AQIList.add(SO2AQI);
                  break;
               case "e16":NO2AQI = NO2DayAQI(value);
                  AQIList.add(NO2AQI);
                  break;
               case "CO":COAQI = CODayAQI(value);
                  AQIList.add(COAQI);
                  break;
               case "O3":maxO38hAQI = O3DayAQI(value);
                  AQIList.add(maxO38hAQI);
                  break;
               default:
                  break;
            }
         if (entry.getValue().toString().equals("")){
            continue;
         }
         Double value = Double.parseDouble(entry.getValue().toString());
         if (key!="O3_day"){
            maxMap.put(key,value);
         }else {
            continue;
         }
         Double PM2_5AQI;
         Double PM10AQI;
         Double SO2AQI;
         Double NO2AQI;
         Double COAQI;
         Double maxO38hAQI;
         switch (key) {
            case "PM2_5":PM2_5AQI = PM2_5AQI(value);
               AQIList.add(PM2_5AQI);
               break;
            case "PM10":PM10AQI = PM10AQI(value);
               AQIList.add(PM10AQI);
               break;
            case "SO2":SO2AQI = SO2DayAQI(value);
               AQIList.add(SO2AQI);
               break;
            case "NO2":NO2AQI = NO2DayAQI(value);
               AQIList.add(NO2AQI);
               break;
            case "CO":COAQI = CODayAQI(value);
               AQIList.add(COAQI);
               break;
            case "maxO3_8h":maxO38hAQI = O3DayAQI(value);
               AQIList.add(maxO38hAQI);
               break;
            default:
               break;
         }
      }
      Double AQIMAX = Collections.max(AQIList);
      Map<String, Object> returnMap = new HashMap<>();
      System.out.println("-------"+maxMap);
      Optional<Map.Entry<String, Integer>> max0 = maxMap.entrySet()
            .stream()
            .max(Map.Entry.comparingByValue());
      //System.out.println("-------"+max0.get().getKey());
      returnMap.put("maxSensor",max0.get().getKey());
      returnMap.put("AQI", AQIMAX);
      if (AQIList.size()>0){
         Double AQIMAX = Collections.max(AQIList);
         Optional<Map.Entry<String, Integer>> max0 = maxMap.entrySet()
               .stream()
               .max(Map.Entry.comparingByValue());
         returnMap.put("maxSensor",max0.get().getKey());
         returnMap.put("AQI", String.format("%.1f", AQIMAX));
      }else {
         returnMap.put("maxSensor","");
         returnMap.put("AQI", "");
      }
      return returnMap;
   }
   static double PM2_5AQI(Double value) {
@@ -120,41 +120,41 @@
      if(value<=0) {
         result=(double) 0;
      }else if (value<=35) {
         result = 50/35*(value-0)+0;
         result = 50.0/35*(value-0)+0;
      }else if (value<=75) {
         result = 50/40*(value-35)+50;
         result = 50.0/40*(value-35)+50;
      }else if (value<=115) {
         result = 50/40*(value-75)+100;
         result = 50.0/40*(value-75)+100;
      }else if (value<=150) {
         result = 50/35*(value-115)+150;
         result = 50.0/35*(value-115)+150;
      }else if (value<=250) {
         result = 100/100*(value-150)+200;
         result = 100.0/100*(value-150)+200;
      }else if (value<=350) {
         result = 100/100*(value-250)+300;
         result = 100.0/100*(value-250)+300;
      }else {
         result = 100/150*(value-350)+400;
         result = 100.0/150*(value-350)+400;
      }
      return result;
   }
   static double PM10AQI(Double value) {
      Double result = (double) 0;
      if(value<=0) {
         result=(double) 0;
      }else if (value<=50) {
         result = 50/50*(value-0)+0;
         result = 50.0/50*(value-0)+0;
      }else if (value<=150) {
         result = 50/100*(value-50)+50;
         result = 50.0/100*(value-50)+50;
      }else if (value<=250) {
         result = 50/100*(value-150)+100;
         result = 50.0/100*(value-150)+100;
      }else if (value<=350) {
         result = 50/100*(value-250)+150;
         result = 50.0/100*(value-250)+150;
      }else if (value<=420) {
         result = 100/70*(value-350)+200;
         result = 100.0/70*(value-350)+200;
      }else if (value<=500) {
         result = 100/80*(value-420)+300;
         result = 100.0/80*(value-420)+300;
      }else {
         result = 100/100*(value-500)+400;
         result = 100.0/100*(value-500)+400;
      }
      return result;
   }
@@ -164,13 +164,13 @@
      if(value<=0) {
         result=(double) 0;
      }else if (value<=150) {
         result = 50/150*(value-0)+0;
         result = 50.0/150*(value-0)+0;
      }else if (value<=500) {
         result = 50/350*(value-150)+50;
         result = 50.0/350*(value-150)+50;
      }else if (value<=650) {
         result = 50/150*(value-500)+100;
         result = 50.0/150*(value-500)+100;
      }else {
         result = 50/150*(value-650)+150;
         result = 50.0/150*(value-650)+150;
      }
      return result;
   }
@@ -180,19 +180,19 @@
      if(value<=0) {
         result=(double) 0;
      }else if (value<=100) {
         result = 50/100*(value-0)+0;
         result = 50.0/100*(value-0)+0;
      }else if (value<=200) {
         result = 50/100*(value-100)+50;
         result = 50.0/100*(value-100)+50;
      }else if (value<=700) {
         result = 50/500*(value-200)+100;
         result = 50.0/500*(value-200)+100;
      }else if (value<=1200) {
         result = 50/500*(value-700)+150;
         result = 50.0/500*(value-700)+150;
      }else if (value<=2340) {
         result = 100/1140*(value-1200)+200;
         result = 100.0/1140*(value-1200)+200;
      }else if (value<=3090) {
         result = 100/750*(value-2340)+300;
         result = 100.0/750*(value-2340)+300;
      }else {
         result = 100/750*(value-3090)+400;
         result = 100.0/750*(value-3090)+400;
      }
      return result;
   }
@@ -202,19 +202,19 @@
      if(value<=0) {
         result=(double) 0;
      }else if (value<=5) {
         result = 50/5*(value-0)+0;
         result = 50.0/5*(value-0)+0;
      }else if (value<=10) {
         result = 50/5*(value-5)+50;
         result = 50.0/5*(value-5)+50;
      }else if (value<=35) {
         result = 50/25*(value-10)+100;
         result = 50.0/25*(value-10)+100;
      }else if (value<=60) {
         result = 50/25*(value-35)+150;
         result = 50.0/25*(value-35)+150;
      }else if (value<=90) {
         result = 100/30*(value-60)+200;
         result = 100.0/30*(value-60)+200;
      }else if (value<=120) {
         result = 100/30*(value-90)+300;
         result = 100.0/30*(value-90)+300;
      }else {
         result = 100/30*(value-120)+400;
         result = 100.0/30*(value-120)+400;
      }
      return result;
   }
@@ -224,19 +224,19 @@
      if(value<=0) {
         result=(double) 0;
      }else if (value<=100) {
         result = 50/160*(value-0)+0;
         result = 50.0/160*(value-0)+0;
      }else if (value<=160) {
         result = 50/40*(value-160)+50;
         result = 50.0/40*(value-160)+50;
      }else if (value<=215) {
         result = 50/100*(value-200)+100;
         result = 50.0/100*(value-200)+100;
      }else if (value<=265) {
         result = 50/100*(value-300)+150;
         result = 50.0/100*(value-300)+150;
      }else if (value<=800) {
         result = 100/400*(value-400)+200;
         result = 100.0/400*(value-400)+200;
      }else if (value<=2100) {
         result = 100/200*(value-800)+300;
         result = 100.0/200*(value-800)+300;
      }else {
         result = 100/200*(value-1000)+400;
         result = 100.0/200*(value-1000)+400;
      }
      return result;
   }
@@ -246,19 +246,19 @@
      if(value<=0) {
         result=(double) 0;
      }else if (value<=100) {
         result = 50/100*(value-0)+0;
         result = 50.0/100*(value-0)+0;
      }else if (value<=160) {
         result = 50/60*(value-100)+50;
         result = 50.0/60*(value-100)+50;
      }else if (value<=215) {
         result = 50/55*(value-160)+100;
         result = 50.0/55*(value-160)+100;
      }else if (value<=265) {
         result = 50/150*(value-215)+150;
         result = 50.0/150*(value-215)+150;
      }else if (value<=800) {
         result = 100/535*(value-265)+200;
         result = 100.0/535*(value-265)+200;
      }else if (value<=2100) {
         result = 100/12*(value-800)+300;
         result = 100.0/12*(value-800)+300;
      }else {
         result = 100/12*(value-48)+400;
         result = 100.0/12*(value-48)+400;
      }
      return result;
   }
@@ -268,19 +268,19 @@
      if(value<=0) {
         result=(double) 0;
      }else if (value<=50) {
         result = 50/50*(value-0)+0;
         result = 50.0/50*(value-0)+0;
      }else if (value<=150) {
         result = 50/100*(value-50)+50;
         result = 50.0/100*(value-50)+50;
      }else if (value<=475) {
         result = 50/325*(value-150)+100;
         result = 50.0/325*(value-150)+100;
      }else if (value<=800) {
         result = 50/325*(value-475)+150;
         result = 50.0/325*(value-475)+150;
      }else if (value<=1600) {
         result = 100/800*(value-800)+200;
         result = 100.0/800*(value-800)+200;
      }else if (value<=2100) {
         result = 100/500*(value-1600)+300;
         result = 100.0/500*(value-1600)+300;
      }else {
         result = 100/520*(value-2100)+400;
         result = 100.0/520*(value-2100)+400;
      }
      return result;
   }
@@ -289,19 +289,19 @@
      if(value<=0) {
         result=(double) 0;
      }else if (value<=40) {
         result = 50/40*(value-0)+0;
         result = 50.0/40*(value-0)+0;
      }else if (value<=80) {
         result = 50/40*(value-40)+50;
         result = 50.0/40*(value-40)+50;
      }else if (value<=180) {
         result = 50/100*(value-80)+100;
         result = 50.0/100*(value-80)+100;
      }else if (value<=280) {
         result = 50/100*(value-180)+150;
         result = 50.0/100*(value-180)+150;
      }else if (value<=565) {
         result = 100/285*(value-280)+200;
         result = 100.0/285*(value-280)+200;
      }else if (value<=750) {
         result = 100/185*(value-565)+300;
         result = 100.0/185*(value-565)+300;
      }else {
         result = 100/190*(value-750)+400;
         result = 100.0/190*(value-750)+400;
      }
      return result;
   }
@@ -311,19 +311,19 @@
      if(value<=0) {
         result=(double) 0;
      }else if (value<=5) {
         result = 50/2*(value-0)+0;
         result = 50.0/2*(value-0)+0;
      }else if (value<=10) {
         result = 50/2*(value-2)+50;
         result = 50.0/2*(value-2)+50;
      }else if (value<=35) {
         result = 50/10*(value-4)+100;
         result = 50.0/10*(value-4)+100;
      }else if (value<=60) {
         result = 50/10*(value-14)+150;
         result = 50.0/10*(value-14)+150;
      }else if (value<=90) {
         result = 100/12*(value-24)+200;
         result = 100.0/12*(value-24)+200;
      }else if (value<=120) {
         result = 100/12*(value-36)+300;
         result = 100.0/12*(value-36)+300;
      }else {
         result = 100/12*(value-48)+400;
         result = 100.0/12*(value-48)+400;
      }
      return result;
   }