From 38d3632583355b740c507b3d41fb683f88567b22 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Thu, 19 Nov 2020 09:43:34 +0800
Subject: [PATCH] 大屏臭氧预测与实测对比

---
 src/main/java/com/moral/service/impl/WeatherServiceImpl.java |   73 +++++++++++++++++++++++++-----------
 1 files changed, 51 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
index a370f6e..adcee3a 100644
--- a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
@@ -205,7 +205,7 @@
         List<Map<String, Object>> aqiList = hangzhouAqiMapper.getAqiDataByAreaCode(parameters);
         List<Map<String, Object>> forecastList = forecastWeatherMapper.getForecastHour(parameters);
 
-        String timeUnits = time.substring(5, 7);
+        String timeUnits = time.substring(0, 4);
         if (aqiList.size() == 0) {
             parameters.put("timeUnits", timeUnits);
             aqiList = hangzhouAqiMapper.getHistoryO3(parameters);
@@ -569,6 +569,7 @@
 
         //������������
         int x = 0;
+        parameters.put("cityCode", code);
         List<Map<String, Object>> realList = realWeatherMapper.getRealWeather(parameters);
         if (realList.size() == 0) {
             //1-23���������������������������������������������������������������������
@@ -670,7 +671,7 @@
             listMap.put("city", name);
             String time1 = listMap.get("time").toString();
             for (Map<String, Object> aqiMap : realAqilist) {
-                if(time1.equals(aqiMap.get("time"))){
+                if (time1.equals(aqiMap.get("time"))) {
                     listMap.putAll(aqiMap);
                 }
             }
@@ -797,20 +798,28 @@
 
                     if (rhour == nowHour) {
                         Map<String, Object> sumO3Map = hangzhouAqiMapper.getSumO3(hashMap);
-                        double v = value - Double.valueOf(sumO3Map.get("O3Sum").toString());
-                        resultMap.put("goodValue", v);
+                        if (sumO3Map != null) {
+                            double v = value - Double.valueOf(sumO3Map.get("O3Sum").toString());
+                            resultMap.put("goodValue", v);
+                        }
                     } else if (rhour == nowHour + 1) {
                         Map<String, Object> sumO3Map = hangzhouAqiMapper.getSumO3(hashMap);
-                        double v = (value - Double.valueOf(sumO3Map.get("O3Sum").toString())) / 2;
-                        resultMap.put("goodValue", String.valueOf(Math.round(v)));
+                        if (sumO3Map != null) {
+                            double v = (value - Double.valueOf(sumO3Map.get("O3Sum").toString())) / 2;
+                            resultMap.put("goodValue", String.valueOf(Math.round(v)));
+                        }
                     } else if (rhour == nowHour + 2) {
                         Map<String, Object> sumO3Map = hangzhouAqiMapper.getSumO3(hashMap);
-                        double v = (value - Double.valueOf(sumO3Map.get("O3Sum").toString())) / 3;
-                        resultMap.put("goodValue", String.valueOf(Math.round(v)));
+                        if (sumO3Map != null) {
+                            double v = (value - Double.valueOf(sumO3Map.get("O3Sum").toString())) / 3;
+                            resultMap.put("goodValue", String.valueOf(Math.round(v)));
+                        }
                     } else if (rhour == nowHour + 3) {
                         Map<String, Object> sumO3Map = hangzhouAqiMapper.getSumO3(hashMap);
-                        double v = (value - Double.valueOf(sumO3Map.get("O3Sum").toString())) / 4;
-                        resultMap.put("goodValue", String.valueOf(Math.round(v)));
+                        if (sumO3Map != null) {
+                            double v = (value - Double.valueOf(sumO3Map.get("O3Sum").toString())) / 4;
+                            resultMap.put("goodValue", String.valueOf(Math.round(v)));
+                        }
                     }
                 }
             }
@@ -818,19 +827,39 @@
 
         //������������
         Map<String, Object> geographyMap = shAreaMapper.getGeography(name);
-        for (Map<String, Object> map : resultList) {
-            double longitude = Double.valueOf(geographyMap.get("lng").toString());
-            double latitude = Double.valueOf(geographyMap.get("lat").toString());
-            map.put("longitude", df.format(longitude));
-            map.put("latitude", df.format(latitude));
-            if (geographyMap.get("altitude") != null) {
-                map.put("altitude", geographyMap.get("altitude").toString());
+        if (geographyMap != null) {
+            for (Map<String, Object> map : resultList) {
+                if (geographyMap.get("lng") != null) {
+                    double longitude = Double.valueOf(geographyMap.get("lng").toString());
+                    map.put("longitude", df.format(longitude));
+                }
+                if (geographyMap.get("lat") != null) {
+                    double latitude = Double.valueOf(geographyMap.get("lat").toString());
+                    map.put("latitude", df.format(latitude));
+                }
+                if (geographyMap.get("altitude") != null) {
+                    map.put("altitude", geographyMap.get("altitude").toString());
+                }
+                if (geographyMap.get("vegetation") != null) {
+                    map.put("vegetation", geographyMap.get("vegetation").toString());
+                }
+                if (geographyMap.get("river") != null) {
+                    map.put("river", geographyMap.get("river").toString());
+                }
             }
-            if (geographyMap.get("vegetation") != null) {
-                map.put("vegetation", geographyMap.get("vegetation").toString());
-            }
-            if (geographyMap.get("river") != null) {
-                map.put("river", geographyMap.get("river").toString());
+        }
+
+        for (int i = 0; i < resultList.size(); i = i + 2) {
+            Map<String, Object> foreMap = resultList.get(i);
+            Map<String, Object> realMap = resultList.get(i + 1);
+            if (foreMap.get("O3C") != null && realMap.get("O3C") != null) {
+                Double foreO3 = Double.valueOf(foreMap.get("O3C").toString());
+                Double realO3 = Double.valueOf(realMap.get("O3C").toString());
+                int round = (int) Math.round((realO3 - foreO3) / realO3 * 100);
+                if (round < 0) {
+                    round = -round;
+                }
+                realMap.put("errorRate", round + "%");
             }
         }
         return resultList;

--
Gitblit v1.8.0