From af2ff6353abb09500ff08293490446a4d40d8e87 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Fri, 31 Jul 2020 17:03:19 +0800 Subject: [PATCH] 更换天气预测接口,根据城市名获取预测与实测数据对比 --- /dev/null | 9 -- src/main/java/com/moral/mapper/RealWeatherMapper.java | 9 ++ src/main/resources/mapper/ForecastWeatherMapper.xml | 8 ++ src/main/java/com/moral/mapper/ForecastWeatherMapper.java | 6 + src/main/resources/mapper/RealWeatherMapper.xml | 8 +- src/main/resources/mapper/HangzhouAqiMapper.xml | 13 +++ src/main/java/com/moral/entity/RealWeather.java | 2 src/main/java/com/moral/service/WeatherService.java | 1 src/main/java/com/moral/controller/ScreenController.java | 5 + src/main/java/com/moral/mapper/HangzhouAqiMapper.java | 2 src/main/java/com/moral/service/impl/WeatherServiceImpl.java | 155 +++++++++++++++++++++++++++++--------- 11 files changed, 166 insertions(+), 52 deletions(-) diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 0f33018..a0149a3 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -1989,4 +1989,9 @@ List<Map<String, Object>> weatherList = weatherService.getWeatherData(parameters); return new ResultBean<List<Map<String, Object>>>(weatherList); } + + @RequestMapping("updateForecastWeather") + public void updateForecastWeather(@RequestBody List<Map<String,Object>> list) { + weatherService.updateForecastWeather(list); + } } diff --git a/src/main/java/com/moral/entity/RealTimeWeather.java b/src/main/java/com/moral/entity/RealWeather.java similarity index 86% rename from src/main/java/com/moral/entity/RealTimeWeather.java rename to src/main/java/com/moral/entity/RealWeather.java index cbf93d7..cb099ea 100644 --- a/src/main/java/com/moral/entity/RealTimeWeather.java +++ b/src/main/java/com/moral/entity/RealWeather.java @@ -7,7 +7,7 @@ import javax.persistence.Id; @Data -public class RealTimeWeather { +public class RealWeather { @Id private Integer monitorPointId; diff --git a/src/main/java/com/moral/mapper/ForecastWeatherMapper.java b/src/main/java/com/moral/mapper/ForecastWeatherMapper.java index fe73bf0..fcbb705 100644 --- a/src/main/java/com/moral/mapper/ForecastWeatherMapper.java +++ b/src/main/java/com/moral/mapper/ForecastWeatherMapper.java @@ -5,7 +5,9 @@ public interface ForecastWeatherMapper { - List<Map<String,Object>> getForecastHour(Map<String, Object> parameters); + List<Map<String, Object>> getForecastHour(Map<String, Object> parameters); - List<Map<String,Object>> getForecast(Map<String, Object> parameters); + List<Map<String, Object>> getForecast(Map<String, Object> parameters); + + void updateForecastWeather(Map<String, Object> parameters); } diff --git a/src/main/java/com/moral/mapper/HangzhouAqiMapper.java b/src/main/java/com/moral/mapper/HangzhouAqiMapper.java index 31f2878..ccf0798 100644 --- a/src/main/java/com/moral/mapper/HangzhouAqiMapper.java +++ b/src/main/java/com/moral/mapper/HangzhouAqiMapper.java @@ -21,4 +21,6 @@ List<Map<String, Object>> getAqiDataByAreaCode(Map<String, Object> parameters); List<Map<String, Object>> getAqi(Map<String, Object> parameters); + + Map<String, Object> getAvgO3EightHours(Map<String, Object> parameters); } diff --git a/src/main/java/com/moral/mapper/RealTimeWeatherMapper.java b/src/main/java/com/moral/mapper/RealTimeWeatherMapper.java deleted file mode 100644 index 9801ad6..0000000 --- a/src/main/java/com/moral/mapper/RealTimeWeatherMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.moral.mapper; - -import java.util.List; -import java.util.Map; - -public interface RealTimeWeatherMapper { - - List<Map<String,Object>> getRealTimeWeather(Map<String, Object> parameters); -} diff --git a/src/main/java/com/moral/mapper/RealWeatherMapper.java b/src/main/java/com/moral/mapper/RealWeatherMapper.java new file mode 100644 index 0000000..b8a4f87 --- /dev/null +++ b/src/main/java/com/moral/mapper/RealWeatherMapper.java @@ -0,0 +1,9 @@ +package com.moral.mapper; + +import java.util.List; +import java.util.Map; + +public interface RealWeatherMapper { + + List<Map<String,Object>> getRealWeather(Map<String, Object> parameters); +} diff --git a/src/main/java/com/moral/service/WeatherService.java b/src/main/java/com/moral/service/WeatherService.java index d65fd5b..08b6d6e 100644 --- a/src/main/java/com/moral/service/WeatherService.java +++ b/src/main/java/com/moral/service/WeatherService.java @@ -14,4 +14,5 @@ List<Map<String, Object>> getWeatherData(Map<String, Object> parameters) throws ParseException; + void updateForecastWeather(List<Map<String,Object>> list); } 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); + } + } } diff --git a/src/main/resources/mapper/ForecastWeatherMapper.xml b/src/main/resources/mapper/ForecastWeatherMapper.xml index a0bf96d..8c084fc 100644 --- a/src/main/resources/mapper/ForecastWeatherMapper.xml +++ b/src/main/resources/mapper/ForecastWeatherMapper.xml @@ -21,5 +21,13 @@ where time >= #{start} AND time <![CDATA[<]]> #{end} AND monitor_point_id=#{monitorPointId} + ORDER BY + time </select> + + <update id="updateForecastWeather"> + update forecast_weather set json=#{json} + where monitor_point_id=#{monitorPointId} + and time=#{time} + </update> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/HangzhouAqiMapper.xml b/src/main/resources/mapper/HangzhouAqiMapper.xml index 7f7912b..753ed7f 100644 --- a/src/main/resources/mapper/HangzhouAqiMapper.xml +++ b/src/main/resources/mapper/HangzhouAqiMapper.xml @@ -95,4 +95,17 @@ ORDER BY time </select> + + <select id="getAvgO3EightHours" resultType="java.util.Map"> + select + AVG(aqi_json->'$.O3') 'O3������8������', + AVG(aqi_json->'$.O3C') 'O3������8������' + FROM + hangzhou_aqi + WHERE + time >= #{start} + AND time <![CDATA[<]]> #{end} + AND city_code = #{areaCode} + </select> + </mapper> diff --git a/src/main/resources/mapper/RealTimeWeatherMapper.xml b/src/main/resources/mapper/RealWeatherMapper.xml similarity index 68% rename from src/main/resources/mapper/RealTimeWeatherMapper.xml rename to src/main/resources/mapper/RealWeatherMapper.xml index 855f42c..ad86d99 100644 --- a/src/main/resources/mapper/RealTimeWeatherMapper.xml +++ b/src/main/resources/mapper/RealWeatherMapper.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -<mapper namespace="com.moral.mapper.RealTimeWeatherMapper"> - <resultMap id="BaseResultMap" type="com.moral.entity.RealTimeWeather"> +<mapper namespace="com.moral.mapper.RealWeatherMapper"> + <resultMap id="BaseResultMap" type="com.moral.entity.RealWeather"> <id column="monitor_point_id" property="monitorPointId" jdbcType="INTEGER"/> </resultMap> - <select id="getRealTimeWeather" resultType="java.util.Map"> + <select id="getRealWeather" resultType="java.util.Map"> select DATE_FORMAT(time, #{typeFormat}) time, json FROM - realtime_weather + real_weather WHERE time >= #{start} AND time <![CDATA[<]]> #{end} -- Gitblit v1.8.0