jinpengyong
2020-07-31 af2ff6353abb09500ff08293490446a4d40d8e87
更换天气预测接口,根据城市名获取预测与实测数据对比
2 files renamed
1 files deleted
1 files added
7 files modified
218 ■■■■ changed files
src/main/java/com/moral/controller/ScreenController.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/entity/RealWeather.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/ForecastWeatherMapper.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HangzhouAqiMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/RealTimeWeatherMapper.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/RealWeatherMapper.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/WeatherService.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/WeatherServiceImpl.java 155 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/ForecastWeatherMapper.xml 8 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/HangzhouAqiMapper.xml 13 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/RealWeatherMapper.xml 8 ●●●● patch | view | raw | blame | history
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);
    }
}
src/main/java/com/moral/entity/RealWeather.java
File was renamed from src/main/java/com/moral/entity/RealTimeWeather.java
@@ -7,7 +7,7 @@
import javax.persistence.Id;
@Data
public class RealTimeWeather {
public class RealWeather {
    @Id
    private Integer monitorPointId;
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);
}
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);
}
src/main/java/com/moral/mapper/RealTimeWeatherMapper.java
File was deleted
src/main/java/com/moral/mapper/RealWeatherMapper.java
New file
@@ -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);
}
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);
}
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);
        }
    }
}
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>
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>
src/main/resources/mapper/RealWeatherMapper.xml
File was renamed from src/main/resources/mapper/RealTimeWeatherMapper.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}