From e5102b46b77fa8381caa914b4cec89baa5f5e0df Mon Sep 17 00:00:00 2001 From: lizijie <lzjiiie@163.com> Date: Thu, 08 Aug 2019 17:17:35 +0800 Subject: [PATCH] AQI计算工具类 --- src/main/java/com/moral/service/impl/HistoryServiceImpl.java | 17 ++++ src/main/java/com/moral/util/AQICalculation.java | 178 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 194 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java index da7fdbd..461bfea 100644 --- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java @@ -38,6 +38,7 @@ import com.moral.service.AccountService; import com.moral.service.HistoryService; import com.moral.service.ProfessionService; +import com.moral.util.AQICalculation; @Service public class HistoryServiceImpl implements HistoryService { @@ -359,6 +360,20 @@ startTime = localDate+" "+startHour+":00:00"; } Map<String, Object> map = historyMapper.getAVGValueByMacAndTimeslot(mac, startTime, endTime); - return map; + System.out.println(map); + Map<String, Object> returnMap = new HashMap<>(); + if (map.isEmpty()) { + returnMap.put("AQI", "N/V"); + } else { + Map<String, Double> AQIMap = new HashMap<>(); + for (Map.Entry<String, Object> entry : map.entrySet()) { + String key = entry.getKey(); + Double value = Double.parseDouble(entry.getValue().toString()); + AQIMap.put(key, value); + } + returnMap = AQICalculation.hourlyAQI(AQIMap); + } + + return returnMap; } } diff --git a/src/main/java/com/moral/util/AQICalculation.java b/src/main/java/com/moral/util/AQICalculation.java new file mode 100644 index 0000000..da7444f --- /dev/null +++ b/src/main/java/com/moral/util/AQICalculation.java @@ -0,0 +1,178 @@ +package com.moral.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class AQICalculation { + + public static Map<String, Object> hourlyAQI(Map<String, Double> map){ + List<Double> AQIList = new ArrayList<>(); + for (Map.Entry<String, Double> entry : map.entrySet()) { + String key = entry.getKey(); + Double value = entry.getValue(); + Double PM2_5AQI; + Double PM10AQI; + Double SO2AQI; + Double NO2AQI; + Double COAQI; + Double O3AQI; + switch (key) { + case "e1":PM2_5AQI = PM2_5AQI(value); + AQIList.add(PM2_5AQI); + break; + case "e2":PM10AQI = PM10AQI(value); + AQIList.add(PM10AQI); + break; + case "e11":SO2AQI = SO2AQI(value); + AQIList.add(SO2AQI); + break; + case "e16":NO2AQI = NO2AQI(value); + AQIList.add(NO2AQI); + break; + case "e10":COAQI = COAQI(value); + AQIList.add(COAQI); + break; + case "e15":O3AQI = O3AQI(value); + AQIList.add(O3AQI); + break; + + default: + break; + } + } + Double AQIMAX = Collections.max(AQIList); + Map<String, Object> returnMap = new HashMap<>(); + returnMap.put("AQI", AQIMAX); + return returnMap; + } + + static double PM2_5AQI(Double value) { + Double result = (double) 0; + if(value<=0) { + result=(double) 0; + }else if (value<=35) { + result = 50/35*(value-0)+0; + }else if (value<=75) { + result = 50/40*(value-35)+50; + }else if (value<=115) { + result = 50/40*(value-75)+100; + }else if (value<=150) { + result = 50/35*(value-115)+150; + }else if (value<=250) { + result = 100/100*(value-150)+200; + }else if (value<=350) { + result = 100/100*(value-250)+300; + }else if (value<=500) { + result = 100/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; + }else if (value<=150) { + result = 50/100*(value-50)+50; + }else if (value<=250) { + result = 50/100*(value-150)+100; + }else if (value<=350) { + result = 50/100*(value-250)+150; + }else if (value<=420) { + result = 100/70*(value-350)+200; + }else if (value<=500) { + result = 100/80*(value-420)+300; + }else if (value<=600) { + result = 100/100*(value-500)+400; + } + return result; + } + + static double SO2AQI(Double value) { + Double result = (double) 0; + if(value<=0) { + result=(double) 0; + }else if (value<=150) { + result = 50/150*(value-0)+0; + }else if (value<=500) { + result = 50/350*(value-150)+50; + }else if (value<=650) { + result = 50/150*(value-500)+100; + }else if (value<=800) { + result = 50/150*(value-650)+150; + } + return result; + } + + static double NO2AQI(Double value) { + Double result = (double) 0; + if(value<=0) { + result=(double) 0; + }else if (value<=100) { + result = 50/100*(value-0)+0; + }else if (value<=200) { + result = 50/100*(value-100)+50; + }else if (value<=700) { + result = 50/500*(value-200)+100; + }else if (value<=1200) { + result = 50/500*(value-700)+150; + }else if (value<=2340) { + result = 100/1140*(value-1200)+200; + }else if (value<=3090) { + result = 100/750*(value-2340)+300; + }else if (value<=3840) { + result = 100/750*(value-3090)+400; + } + return result; + } + + static double COAQI(Double value) { + Double result = (double) 0; + if(value<=0) { + result=(double) 0; + }else if (value<=5) { + result = 50/5*(value-0)+0; + }else if (value<=10) { + result = 50/5*(value-5)+50; + }else if (value<=35) { + result = 50/25*(value-10)+100; + }else if (value<=60) { + result = 50/25*(value-35)+150; + }else if (value<=90) { + result = 100/30*(value-60)+200; + }else if (value<=120) { + result = 100/30*(value-90)+300; + }else if (value<=150) { + result = 100/30*(value-120)+400; + } + return result; + } + + static double O3AQI(Double value) { + Double result = (double) 0; + if(value<=0) { + result=(double) 0; + }else if (value<=100) { + result = 50/100*(value-0)+0; + }else if (value<=160) { + result = 50/60*(value-100)+50; + }else if (value<=215) { + result = 50/55*(value-160)+100; + }else if (value<=265) { + result = 50/150*(value-215)+150; + }else if (value<=800) { + result = 100/535*(value-265)+200; + }else if (value<=2100) { + result = 100/12*(value-800)+300; + }else if (value<=2620) { + result = 100/12*(value-48)+400; + } + return result; + } + +} -- Gitblit v1.8.0