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