jinpengyong
2022-09-26 601ea597275582142d9bd480884ca198c9d14062
screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java
@@ -760,25 +760,37 @@
        for (String s : strings1) {
            HashMap<String, Object> map = new HashMap<>();
            List<Double> doubles = ListHashMap.get(s);
            ArrayList<Double> list = new ArrayList<>();
            double co = getCo(doubles.get(0));
            double so2 = getSo2(doubles.get(1));
            double no2 = getNo2(doubles.get(2));
            double pm10 = getPm10(doubles.get(3));
            double pm2_5 = getPm2_5(doubles.get(4));
            double o3 = getO3(doubles.get(5));
            list.add(co);
            list.add(so2);
            list.add(no2);
            list.add(pm10);
            list.add(pm2_5);
            list.add(o3);
            Double aqi = Collections.max(list);
            map.put("a21005",doubles.get(0));
            map.put("a21026",doubles.get(1));
            map.put("a21004",doubles.get(2));
            map.put("a34002",doubles.get(3));
            map.put("a34004",doubles.get(4));
            map.put("a05024",doubles.get(5));
            AQI aqi = AQIUtils.dailyAQI(map);
            Integer aqiValue = aqi.getAQIValue();
            map.put("AQI",aqiValue);
            List<String> primaryPollutantNames = aqi.getPrimaryPollutantNames();
            String primaryPollutant = "__";
            if (!ObjectUtils.isEmpty(primaryPollutantNames)) {
                primaryPollutant = primaryPollutantNames.stream().map(String::valueOf).collect(Collectors.joining(","));
            }
            map.put("SU", primaryPollutant);
            map.put("AQI",aqi);
            map.put("SU", getSU(aqi,list));
            resultMap.put(s,map);
        }
        return resultMap;
    }
    /**
     * 计算平均值
@@ -947,4 +959,149 @@
        }
        return  round;
    }
    /**
     * 计算搜要污染物
     * @param aqi
     * @param list
     * @return
     */
    private String getSU(Double aqi,ArrayList list){
        String SU=null;
        if (aqi<=50){
            SU="-";
        } else if (aqi==list.get(1)){
            SU="SO2";
        }else if (aqi==list.get(0)){
            SU="CO";
        }else if (aqi==list.get(2)){
            SU="NO2";
        }else if (aqi==list.get(3)){
            SU="PM10";
        }else if (aqi==list.get(4)){
            SU="PM2.5";
        }else if (aqi==list.get(5)){
            SU="O3";
        }
        return SU;
    }
    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);
    }
}