From af2ff6353abb09500ff08293490446a4d40d8e87 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Fri, 31 Jul 2020 17:03:19 +0800
Subject: [PATCH] 更换天气预测接口,根据城市名获取预测与实测数据对比

---
 src/main/java/com/moral/service/impl/WeatherServiceImpl.java |  155 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 119 insertions(+), 36 deletions(-)

diff --git a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
index 66b3245..62d3544 100644
--- a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
@@ -5,6 +5,7 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -32,7 +33,7 @@
 import com.moral.mapper.HangzhouAqiMapper;
 import com.moral.mapper.MonitorPointMapper;
 import com.moral.mapper.ProvinceMapper;
-import com.moral.mapper.RealTimeWeatherMapper;
+import com.moral.mapper.RealWeatherMapper;
 import com.moral.service.OrganizationService;
 import com.moral.service.WeatherService;
 
@@ -61,7 +62,7 @@
     private ProvinceMapper provinceMapper;
 
     @Resource
-    private RealTimeWeatherMapper realTimeWeatherMapper;
+    private RealWeatherMapper realWeatherMapper;
 
     @Override
     public Map<String, Object> getWeatherDataByRegion(Map<String, Object> parameters) {
@@ -300,58 +301,107 @@
         parameters.put("start", start);
         parameters.put("end", end);
         List<Map<String, Object>> forecastList = forecastWeatherMapper.getForecast(parameters);
+
+        List<Map<String, Object>> foreList = new ArrayList<>();
+
+        for (Map<String, Object> map : forecastList) {
+            Map<String, Object> hashMap = new HashMap<>();
+            hashMap.put("time", map.get("time").toString());
+            hashMap.put("type", "������");
+            hashMap.put("city", parameters.get("city").toString());
+            Map<String, Object> jsonMap = (Map<String, Object>) JSONObject.parse(map.get("json").toString());
+            hashMap.putAll(jsonMap);
+            foreList.add(hashMap);
+        }
+
         List<Map<String, Object>> aqiList = hangzhouAqiMapper.getAqi(parameters);
         if (aqiList.size() == 0) {
             parameters.put("areaCode", cityCode);
             aqiList = hangzhouAqiMapper.getAqi(parameters);
         }
-        List<Map<String, Object>> list1 = new ArrayList<>();
-        for (Map<String, Object> map : aqiList) {
+
+        List<Map<String, Object>> realAqilist = new ArrayList<>();
+        for (Map<String, Object> aqiMap : aqiList) {
             Map<String, Object> hashMap = new HashMap<>();
-            hashMap.put("time", map.get("time"));
-            Map<String, Object> jsonMap = (Map<String, Object>) JSONObject.parse(map.get("json").toString());
+            hashMap.put("time", aqiMap.get("time"));
+            Map<String, Object> jsonMap = (Map<String, Object>) JSONObject.parse(aqiMap.get("json").toString());
             hashMap.putAll(jsonMap);
             hashMap.put("city", parameters.get("city").toString());
-            list1.add(hashMap);
+            realAqilist.add(hashMap);
         }
 
-        List<Map<String, Object>> realTimeList = realTimeWeatherMapper.getRealTimeWeather(parameters);
-        List<Map<String, Object>> realList = new ArrayList<>();
-        for (Map<String, Object> map : realTimeList) {
+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        for (Map<String, Object> map : realAqilist) {
+            Date endTime = sdf1.parse(map.get("time").toString());
+            c.setTime(endTime);
+            c.add(Calendar.HOUR, -8);
+            Date startTime = c.getTime();
             Map<String, Object> hashMap = new HashMap<>();
-            hashMap.put("time", map.get("time"));
-            hashMap.put("type", "������");
-            hashMap.put("city", parameters.get("city").toString());
-            Map<String, Object> jsonMap = (Map<String, Object>) JSONObject.parse(map.get("json").toString());
-            hashMap.putAll(jsonMap);
-            realList.add(hashMap);
-        }
-
-        for (Map<String, Object> realTimeMap : realList) {
-            for (Map<String, Object> aqiMap : list1) {
-                if (aqiMap.get("time").equals(realTimeMap.get("time"))) {
-                    realTimeMap.putAll(aqiMap);
-                }
+            hashMap.put("areaCode", Integer.valueOf(parameters.get("areaCode").toString()));
+            hashMap.put("start", startTime);
+            hashMap.put("end", endTime);
+            Map<String, Object> O3Map = hangzhouAqiMapper.getAvgO3EightHours(hashMap);
+            map.put("O3������8������", O3Map.get("O3������8������").toString());
+            if (O3Map.get("O3������8������") != null) {
+                map.put("O3������8������", O3Map.get("O3������8������").toString());
             }
         }
 
-        List<Map<String, Object>> foreList = new ArrayList<>();
-        for (Map<String, Object> forecastMap : forecastList) {
-            Map<String, Object> jsonMap = (Map<String, Object>) JSONObject.parse(forecastMap.get("json").toString());
+        List<Map<String, Object>> realList = realWeatherMapper.getRealWeather(parameters);
+        List<Map<String, Object>> realWeatherList = new ArrayList<>();
+        for (Map<String, Object> realMap : realList) {
             Map<String, Object> hashMap = new HashMap<>();
-            hashMap.put("temp", jsonMap.get("tem"));
-            hashMap.put("windDir", jsonMap.get("win"));
-            hashMap.put("windLevel", jsonMap.get("win_speed"));
-            hashMap.put("condition", jsonMap.get("wea"));
-            hashMap.put("time", forecastMap.get("time").toString());
-            hashMap.put("type", "������");
+            hashMap.put("time", realMap.get("time"));
+            Map<String, Object> jsonMap = (Map<String, Object>) JSONObject.parse(realMap.get("json").toString());
+            hashMap.putAll(jsonMap);
             hashMap.put("city", parameters.get("city").toString());
-            foreList.add(hashMap);
+            realWeatherList.add(hashMap);
+        }
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (int i = 0; i < 24; i++) {
+            list.add(null);
+        }
+
+        for (Map<String, Object> map : realWeatherList) {
+            Integer t1 = Integer.valueOf(map.get("time").toString().split(" ")[1].split(":")[0]);
+            if (t1 == 0) {
+                list.set(list.size() - 1, map);
+            } else {
+                list.set(t1 - 1, map);
+            }
+        }
+
+        for (Map<String, Object> map : realAqilist) {
+            Integer t1 = Integer.valueOf(map.get("time").toString().split(" ")[1].split(":")[0]);
+            if (t1 == 0) {
+                Map<String, Object> map1 = list.get(list.size() - 1);
+                if (map1 == null) {
+                    list.set(list.size() - 1, map);
+                } else {
+                    map1.putAll(map);
+                    list.set(list.size() - 1, map1);
+                }
+            } else {
+                Map<String, Object> map1 = list.get(t1 - 1);
+                if (map1 == null) {
+                    list.set(t1 - 1, map);
+                } else {
+                    map1.putAll(map);
+                    list.set(t1 - 1, map1);
+                }
+            }
+        }
+        list.removeAll(Collections.singleton(null));
+        for (Map<String, Object> map : list) {
+            map.put("type", "������");
+            map.put("city", parameters.get("city").toString());
         }
 
         List<Map<String, Object>> resultList = new ArrayList<>();
         for (Map<String, Object> foreMap : foreList) {
-            for (Map<String, Object> realMap : realList) {
+            for (Map<String, Object> realMap : list) {
                 if (foreMap.get("time").equals(realMap.get("time"))) {
                     resultList.add(foreMap);
                     resultList.add(realMap);
@@ -359,15 +409,48 @@
             }
         }
 
-        for (int i = realList.size(); i < forecastList.size(); i++) {
+        for (int i = list.size(); i < foreList.size(); i++) {
             Map<String, Object> map = foreList.get(i);
             resultList.add(map);
             Map<String, Object> hashMap = new HashMap<>();
             hashMap.put("time", map.get("time").toString());
-            hashMap.put("type", "������");
+            hashMap.put("type", "������");
             hashMap.put("city", parameters.get("city").toString());
             resultList.add(hashMap);
         }
         return resultList;
     }
+
+    @Override
+    public void updateForecastWeather(List<Map<String, Object>> list) {
+        for (Map<String, Object> map : list) {
+            String time = map.get("time").toString();
+            Map<String, Object> parameters = new HashMap<>();
+            parameters.put("time", time);
+            Integer monitorPointId;
+            String city = map.get("city").toString();
+            Area area = areaMapper.getAreaByName(city);
+            if (area == null) {
+                Integer cityCode = cityMapper.getCityByName(city).getCityCode();
+                monitorPointId = monitorPointMapper.getFirstMonitorPointByCityCode(cityCode).getId();
+            } else {
+                Integer areaCode = area.getAreaCode();
+                monitorPointId = monitorPointMapper.getFirstMonitorPointByAreaCode(areaCode).getId();
+            }
+            parameters.put("monitorPointId", monitorPointId);
+
+            Map<String, Object> jsonMap = new HashMap<>();
+            for (String key : map.keySet()) {
+                if (!key.equals("city") && !key.equals("time") && !key.equals("type")) {
+                    String value = map.get(key).toString();
+                    jsonMap.put(key, value);
+                }
+            }
+
+            String json = JSONObject.toJSONString(jsonMap);
+            parameters.put("json", json);
+
+            forecastWeatherMapper.updateForecastWeather(parameters);
+        }
+    }
 }

--
Gitblit v1.8.0