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