From d82b68b61c86db91acebce81326731501457d722 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Tue, 18 Aug 2020 15:45:46 +0800
Subject: [PATCH] 预测o3_8H计算,实测增加保良值
---
src/main/resources/mapper/ForecastWeatherMapper.xml | 27 +++-
src/main/java/com/moral/mapper/ForecastWeatherMapper.java | 2
src/main/resources/mapper/RealWeatherMapper.xml | 38 +++---
src/main/resources/mapper/HangzhouAqiMapper.xml | 98 ++++++++++--------
src/main/java/com/moral/mapper/HangzhouAqiMapper.java | 18 ++-
src/main/java/com/moral/service/impl/WeatherServiceImpl.java | 73 +++++++++++++-
6 files changed, 172 insertions(+), 84 deletions(-)
diff --git a/src/main/java/com/moral/mapper/ForecastWeatherMapper.java b/src/main/java/com/moral/mapper/ForecastWeatherMapper.java
index 24d8611..65afb15 100644
--- a/src/main/java/com/moral/mapper/ForecastWeatherMapper.java
+++ b/src/main/java/com/moral/mapper/ForecastWeatherMapper.java
@@ -12,4 +12,6 @@
void updateForecastWeather(Map<String, Object> parameters);
Map<String, Object> getPrecip6Hour(Map<String, Object> parameters);
+
+ Map<String, Object> getO38Hours(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 ccf0798..6d3876a 100644
--- a/src/main/java/com/moral/mapper/HangzhouAqiMapper.java
+++ b/src/main/java/com/moral/mapper/HangzhouAqiMapper.java
@@ -3,24 +3,26 @@
import com.moral.common.mapper.BaseMapper;
import com.moral.entity.HangzhouAqi;
import com.moral.entity.charts.TimePeriod;
+
import org.apache.ibatis.annotations.Param;
-import java.util.Date;
import java.util.List;
import java.util.Map;
public interface HangzhouAqiMapper extends BaseMapper<HangzhouAqi> {
- public List<Map> selectAqisByCodeAndTimePeriod(@Param("code") String code, @Param("timePeriod") TimePeriod timePeriod);
+ List<Map> selectAqisByCodeAndTimePeriod(@Param("code") String code, @Param("timePeriod") TimePeriod timePeriod);
- List<Map<String, Object>> getAqisByOrganizationId(Map<String, Object> parameters);
+ List<Map<String, Object>> getAqisByOrganizationId(Map<String, Object> parameters);
- Integer queryCityCode(@Param("areaCode") Integer areaCode);
+ Integer queryCityCode(@Param("areaCode") Integer areaCode);
- List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters);
+ List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters);
- List<Map<String, Object>> getAqiDataByAreaCode(Map<String, Object> parameters);
+ List<Map<String, Object>> getAqiDataByAreaCode(Map<String, Object> parameters);
- List<Map<String, Object>> getAqi(Map<String, Object> parameters);
+ List<Map<String, Object>> getAqi(Map<String, Object> parameters);
- Map<String, Object> getAvgO3EightHours(Map<String, Object> parameters);
+ Map<String, Object> getAvgO3EightHours(Map<String, Object> parameters);
+
+ Map<String, Object> getSumO3(Map<String, Object> parameters);
}
diff --git a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
index 3caa8d3..4674038 100644
--- a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
@@ -1,5 +1,6 @@
package com.moral.service.impl;
+import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -13,7 +14,6 @@
import javax.annotation.Resource;
-import org.apache.jasper.compiler.JspUtil;
import org.dom4j.Element;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
@@ -334,7 +334,8 @@
List<Map<String, Object>> foreList = new ArrayList<>();
for (Map<String, Object> forecastMap : forecastList) {
Map<String, Object> hashMap = new HashMap<>();
- hashMap.put("time", forecastMap.get("time").toString());
+ String ftime = forecastMap.get("time").toString();
+ hashMap.put("time", ftime);
hashMap.put("type", "������");
hashMap.put("TVOC", "");
hashMap.put("altitude", "");
@@ -368,6 +369,7 @@
foreList.add(hashMap);
}
+ //������6���������������
for (Map<String, Object> foreMap : foreList) {
String ftime = foreMap.get("time").toString();
Date endTime = sdf1.parse(ftime);
@@ -385,10 +387,26 @@
}
}
+ //������O3C_8H
+ for (Map<String, Object> map : foreList) {
+ Date endTime = sdf1.parse(map.get("time").toString());
+ cal.setTime(endTime);
+ cal.add(Calendar.HOUR, -8);
+ Date startTime = cal.getTime();
+ Map<String, Object> hashMap = new HashMap<>();
+ hashMap.put("cityCode", Integer.valueOf(parameters.get("cityCode").toString()));
+ hashMap.put("start", startTime);
+ hashMap.put("end", endTime);
+ Map<String, Object> O3Map = forecastWeatherMapper.getO38Hours(hashMap);
+ if (O3Map != null) {
+ map.put("O3C_8H", O3Map.get("O3C_8H").toString());
+ }
+ }
+
String ac = parameters.get("cityCode").toString();
List<Map<String, Object>> aqiList = hangzhouAqiMapper.getAqi(parameters);
if (aqiList.size() == 0) {
- parameters.put("cityCode", code);//320500
+ parameters.put("cityCode", code);
aqiList = hangzhouAqiMapper.getAqi(parameters);
if (aqiList.size() == 0) {
List<Area> areaList = areaMapper.getAreaByCityCode(code);
@@ -408,12 +426,19 @@
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("time", aqiMap.get("time"));
Map<String, Object> jsonMap = (Map<String, Object>) JSONObject.parse(aqiMap.get("json").toString());
+ DecimalFormat df = new DecimalFormat(".####");
+ double longitude = Double.valueOf(jsonMap.get("longitude").toString());
+ double latitude = Double.valueOf(jsonMap.get("latitude").toString());
+ jsonMap.put("longitude", df.format(longitude));
+ jsonMap.put("latitude", df.format(latitude));
hashMap.putAll(jsonMap);
hashMap.put("city", parameters.get("name").toString());
realAqilist.add(hashMap);
}
+
for (Map<String, Object> map : realAqilist) {
- Date endTime = sdf1.parse(map.get("time").toString());
+ String rtime = map.get("time").toString();
+ Date endTime = sdf1.parse(rtime);
cal.setTime(endTime);
cal.add(Calendar.HOUR, -8);
Date startTime = cal.getTime();
@@ -425,7 +450,6 @@
map.put("O3C_8H", O3Map.get("O3C_8H").toString());
}
//������
-
Map<String, Object> params = new HashMap<>();
if (ac.endsWith("00")) {
params.put("cityCode", Integer.valueOf(ac));
@@ -613,6 +637,45 @@
}
}
+
+ //���4���������������
+ double value = 160.0 * 8;
+ int nowHour = Integer.valueOf(sdf1.format(now).substring(11, 13));
+ String format = sdf1.format(now).substring(0, 13) + ":00:00";
+ if (nowHour < 8) {
+ return resultList;
+ }
+ for (Map<String, Object> resultMap : resultList) {
+ if (resultMap.get("type").equals("������")) {
+ String rtime = resultMap.get("time").toString() + ":00";
+ int rhour = Integer.valueOf(rtime.substring(11, 13));
+ cal.setTime(sdf1.parse(rtime));
+ cal.add(Calendar.HOUR_OF_DAY, -7);
+ Date startTime = cal.getTime();
+ Date endTime=sdf1.parse(format);
+ Map<String, Object> hashMap = new HashMap<>();
+ hashMap.put("cityCode", Integer.valueOf(parameters.get("cityCode").toString()));
+ hashMap.put("start", startTime);
+ hashMap.put("end", endTime);
+ if (rhour == nowHour) {
+ Map<String, Object> sumO3Map = hangzhouAqiMapper.getSumO3(hashMap);
+ 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", 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", 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", v);
+ }
+ }
+ }
return resultList;
}
diff --git a/src/main/resources/mapper/ForecastWeatherMapper.xml b/src/main/resources/mapper/ForecastWeatherMapper.xml
index a7ecfcc..e0e76d8 100644
--- a/src/main/resources/mapper/ForecastWeatherMapper.xml
+++ b/src/main/resources/mapper/ForecastWeatherMapper.xml
@@ -33,13 +33,24 @@
<select id="getPrecip6Hour" resultType="java.util.Map">
- select
- round(sum(json->'$.precip'),2) 'precip6'
- FROM
- forecast_weather
- WHERE
- time >= #{start}
- AND time <![CDATA[<]]> #{end}
- AND city_code = #{cityCode}
+ select
+ round(sum(json->'$.precip'),2) 'precip6'
+ FROM
+ forecast_weather
+ WHERE
+ time >= #{start}
+ AND time <![CDATA[<]]> #{end}
+ AND city_code = #{cityCode}
+ </select>
+
+ <select id="getO38Hours" resultType="java.util.Map">
+ select
+ AVG(json->'$.O3C') as 'O3C_8H'
+ FROM
+ forecast_weather
+ WHERE
+ time >= #{start}
+ AND time <![CDATA[<]]> #{end}
+ AND city_code = #{cityCode}
</select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/HangzhouAqiMapper.xml b/src/main/resources/mapper/HangzhouAqiMapper.xml
index 5e1a166..20a903a 100644
--- a/src/main/resources/mapper/HangzhouAqiMapper.xml
+++ b/src/main/resources/mapper/HangzhouAqiMapper.xml
@@ -53,58 +53,68 @@
</select>
<select id="getAreaAvgDataByAreaCode" resultType="java.util.Map">
- SELECT
- DATE_FORMAT(time, #{typeFormat}) time,
- round(AVG(case when aqi_json->'$.${sensors}' is null then aqi_json->'$.${sensors1}' else aqi_json->'$.${sensors}' end),4) as '${sensors2}'
- FROM
- hangzhou_aqi ha
- WHERE
- ha.time >= #{start}
- AND ha.time <![CDATA[<]]> #{end}
- AND ha.city_code = #{areaCode}
- GROUP BY
- DATE_FORMAT(time, #{typeFormat})
- ORDER BY
- time
- </select>
+ SELECT
+ DATE_FORMAT(time, #{typeFormat}) time,
+ round(AVG(case when aqi_json->'$.${sensors}' is null then aqi_json->'$.${sensors1}' else aqi_json->'$.${sensors}' end),4) as '${sensors2}'
+ FROM
+ hangzhou_aqi ha
+ WHERE
+ ha.time >= #{start}
+ AND ha.time <![CDATA[<]]> #{end}
+ AND ha.city_code = #{areaCode}
+ GROUP BY
+ DATE_FORMAT(time, #{typeFormat})
+ ORDER BY
+ time
+ </select>
<select id="getAqiDataByAreaCode" resultType="java.util.Map">
- SELECT
- DATE_FORMAT(time, #{typeFormat}) time,
- ifnull(aqi_json->'$.O3C',aqi_json->'$.O3') as 'O3'
- FROM
- hangzhou_aqi ha
- WHERE
- ha.time >= #{start}
- AND ha.time <![CDATA[<]]> #{end}
- AND ha.city_code = #{cityCode}
- ORDER BY
- time
+ SELECT
+ DATE_FORMAT(time, #{typeFormat}) time,
+ ifnull(aqi_json->'$.O3C',aqi_json->'$.O3') as 'O3'
+ FROM
+ hangzhou_aqi ha
+ WHERE
+ ha.time >= #{start}
+ AND ha.time <![CDATA[<]]> #{end}
+ AND ha.city_code = #{cityCode}
+ ORDER BY
+ time
</select>
<select id="getAqi" resultType="java.util.Map">
- select
- DATE_FORMAT(time, #{typeFormat}) time,
- aqi_json json
- FROM
- hangzhou_aqi
- WHERE
- time >= #{start}
- AND time <![CDATA[<]]> #{end}
- AND city_code = #{cityCode}
- ORDER BY
- time
+ select
+ DATE_FORMAT(time, #{typeFormat}) time,
+ aqi_json json
+ FROM
+ hangzhou_aqi
+ WHERE
+ time >= #{start}
+ AND time <![CDATA[<]]> #{end}
+ AND city_code = #{cityCode}
+ ORDER BY
+ time
</select>
<select id="getAvgO3EightHours" resultType="java.util.Map">
- select
- AVG(case when aqi_json->'$.O3C' is null then aqi_json->'$.O3' else aqi_json->'$.O3C' end) as 'O3C_8H'
- FROM
- hangzhou_aqi
- WHERE
- time >= #{start}
- AND time <![CDATA[<]]> #{end}
- AND city_code = #{cityCode}
+ select
+ AVG(case when aqi_json->'$.O3C' is null then aqi_json->'$.O3' else aqi_json->'$.O3C' end) as 'O3C_8H'
+ FROM
+ hangzhou_aqi
+ WHERE
+ time >= #{start}
+ AND time <![CDATA[<]]> #{end}
+ AND city_code = #{cityCode}
</select>
+ <select id="getSumO3" resultType="java.util.Map">
+ select
+ SUM(case when aqi_json->'$.O3C' is null then aqi_json->'$.O3' else aqi_json->'$.O3C' end) 'O3Sum'
+ FROM
+ hangzhou_aqi
+ WHERE
+ time >= #{start}
+ AND time <![CDATA[<]]> #{end}
+ AND city_code = #{cityCode}
+ </select>
</mapper>
diff --git a/src/main/resources/mapper/RealWeatherMapper.xml b/src/main/resources/mapper/RealWeatherMapper.xml
index 2882762..19ffea6 100644
--- a/src/main/resources/mapper/RealWeatherMapper.xml
+++ b/src/main/resources/mapper/RealWeatherMapper.xml
@@ -5,27 +5,27 @@
<id column="city_code" property="cityCode" jdbcType="INTEGER"/>
</resultMap>
<select id="getRealWeather" resultType="java.util.Map">
- select
- DATE_FORMAT(time, #{typeFormat}) time,
- json
- FROM
- real_weather
- WHERE
- time >= #{start}
- AND time <![CDATA[<]]> #{end}
- AND city_code = #{cityCode}
- ORDER BY
- time
+ select
+ DATE_FORMAT(time, #{typeFormat}) time,
+ json
+ FROM
+ real_weather
+ WHERE
+ time >= #{start}
+ AND time <![CDATA[<]]> #{end}
+ AND city_code = #{cityCode}
+ ORDER BY
+ time
</select>
<select id="getPrecip6Hour" resultType="java.util.Map">
- select
- round(sum(json->'$.precip'),2) 'precip6'
- FROM
- real_weather
- WHERE
- time >= #{start}
- AND time <![CDATA[<]]> #{end}
- AND city_code = #{cityCode}
+ select
+ round(sum(json->'$.precip'),2) 'precip6'
+ FROM
+ real_weather
+ WHERE
+ time >= #{start}
+ AND time <![CDATA[<]]> #{end}
+ AND city_code = #{cityCode}
</select>
</mapper>
\ No newline at end of file
--
Gitblit v1.8.0