From a470e75012381d51b14065c34424e619c86b16e5 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Fri, 31 Dec 2021 09:38:21 +0800 Subject: [PATCH] 气象预测数据定时任务 --- screen-job/src/main/resources/mapper/CityConfigWeatherForecastMapper.xml | 14 ++ screen-job/src/main/resources/mapper/CityWeatherForecastMapper.xml | 12 ++ screen-job/src/main/java/com/moral/api/task/WeatherTask.java | 20 +++ screen-job/src/main/java/com/moral/api/entity/CityWeatherForecast.java | 45 +++++++ screen-job/src/main/java/com/moral/api/entity/CityConfigWeatherForecast.java | 56 +++++++++ screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java | 2 screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java | 2 screen-job/src/main/java/com/moral/api/mapper/CityConfigWeatherForecastMapper.java | 16 ++ screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java | 2 screen-job/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java | 2 screen-job/src/main/java/com/moral/api/mapper/CityWeatherForecastMapper.java | 16 ++ screen-job/src/main/java/com/moral/api/service/CityConfigWeatherForecastService.java | 16 ++ screen-job/src/main/java/com/moral/api/service/impl/CityConfigWeatherForecastServiceImpl.java | 20 +++ screen-job/src/main/java/com/moral/api/service/CityWeatherForecastService.java | 19 +++ screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java | 2 screen-job/src/main/java/com/moral/api/service/impl/CityWeatherForecastServiceImpl.java | 69 +++++++++++ screen-job/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java | 2 17 files changed, 307 insertions(+), 8 deletions(-) diff --git a/screen-job/src/main/java/com/moral/api/entity/CityConfigWeatherForecast.java b/screen-job/src/main/java/com/moral/api/entity/CityConfigWeatherForecast.java new file mode 100644 index 0000000..7767020 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/CityConfigWeatherForecast.java @@ -0,0 +1,56 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ������������������������������������������������������������������ + * </p> + * + * @author moral + * @since 2021-12-30 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class CityConfigWeatherForecast extends Model<CityConfigWeatherForecast> { + + private static final long serialVersionUID = 1L; + + /** + * ������id + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * ������code + */ + private Integer cityCode; + + /** + * ������������ + */ + private String cityName; + + /** + * ��������������������������������������� + */ + private Integer locationId; + + /** + * ������������,0���������������1��������� + */ + private String isDelete; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/entity/CityWeatherForecast.java b/screen-job/src/main/java/com/moral/api/entity/CityWeatherForecast.java new file mode 100644 index 0000000..58e8d3a --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/CityWeatherForecast.java @@ -0,0 +1,45 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ��������������������������� + * </p> + * + * @author moral + * @since 2021-12-30 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class CityWeatherForecast extends Model<CityWeatherForecast> { + + private static final long serialVersionUID = 1L; + + /** + * ������code + */ + private Integer cityCode; + + /** + * ������ + */ + private Date time; + + /** + * ������ + */ + private String value; + + + @Override + protected Serializable pkVal() { + return null; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/mapper/CityConfigWeatherForecastMapper.java b/screen-job/src/main/java/com/moral/api/mapper/CityConfigWeatherForecastMapper.java new file mode 100644 index 0000000..2c84d61 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/CityConfigWeatherForecastMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.CityConfigWeatherForecast; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ������������������������������������������������������������������ Mapper ������ + * </p> + * + * @author moral + * @since 2021-12-30 + */ +public interface CityConfigWeatherForecastMapper extends BaseMapper<CityConfigWeatherForecast> { + +} diff --git a/screen-job/src/main/java/com/moral/api/mapper/CityWeatherForecastMapper.java b/screen-job/src/main/java/com/moral/api/mapper/CityWeatherForecastMapper.java new file mode 100644 index 0000000..3de5f1c --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/CityWeatherForecastMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.CityWeatherForecast; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ��������������������������� Mapper ������ + * </p> + * + * @author moral + * @since 2021-12-30 + */ +public interface CityWeatherForecastMapper extends BaseMapper<CityWeatherForecast> { + +} diff --git a/screen-job/src/main/java/com/moral/api/service/CityConfigWeatherForecastService.java b/screen-job/src/main/java/com/moral/api/service/CityConfigWeatherForecastService.java new file mode 100644 index 0000000..4c18b28 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/CityConfigWeatherForecastService.java @@ -0,0 +1,16 @@ +package com.moral.api.service; + +import com.moral.api.entity.CityConfigWeatherForecast; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ������������������������������������������������������������������ ��������� + * </p> + * + * @author moral + * @since 2021-12-30 + */ +public interface CityConfigWeatherForecastService extends IService<CityConfigWeatherForecast> { + +} diff --git a/screen-job/src/main/java/com/moral/api/service/CityWeatherForecastService.java b/screen-job/src/main/java/com/moral/api/service/CityWeatherForecastService.java new file mode 100644 index 0000000..27020d9 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/CityWeatherForecastService.java @@ -0,0 +1,19 @@ +package com.moral.api.service; + +import com.moral.api.entity.CityWeatherForecast; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ��������������������������� ��������� + * </p> + * + * @author moral + * @since 2021-12-30 + */ +public interface CityWeatherForecastService extends IService<CityWeatherForecast> { + + //���������������������������������������insert + void insertCityWeatherForecast(); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java index 2398263..1522d56 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java @@ -69,9 +69,9 @@ //���city_code������ Map<String, List<Map<String, Object>>> data = dailyData.parallelStream().collect(Collectors.groupingBy(o -> o.get("city_code").toString())); + CityAqiDaily cityAqiDaily = new CityAqiDaily(); data.forEach((cityCode, value) -> { Map<String, Object> jsonMap = new HashMap<>(); - CityAqiDaily cityAqiDaily = new CityAqiDaily(); cityAqiDaily.setCityCode(Integer.parseInt(cityCode)); cityAqiDaily.setTime(start); //O3��������������������������������������� diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java index 7fd2098..5a68e10 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java @@ -71,9 +71,9 @@ //���city_code������ Map<String, List<Map<String, Object>>> data = monthlyData.parallelStream().collect(Collectors.groupingBy(o -> o.get("city_code").toString())); + CityAqiMonthly cityAqiMonthly = new CityAqiMonthly(); data.forEach((cityCode, value) -> { Map<String, Object> jsonMap = new HashMap<>(); - CityAqiMonthly cityAqiMonthly = new CityAqiMonthly(); cityAqiMonthly.setCityCode(Integer.parseInt(cityCode)); cityAqiMonthly.setTime(start); diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java index 2e88c31..141b779 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java @@ -70,6 +70,7 @@ wrapper.select("city_code", "city_id").eq("is_delete", Constants.NOT_DELETE); List<CityConfigAqi> list = cityConfigAqiService.list(wrapper); + CityAqi cityAqi = new CityAqi(); for (CityConfigAqi cityConfigAqi : list) { Integer cityCode = cityConfigAqi.getCityCode(); Map<String, Object> data; @@ -142,7 +143,6 @@ aqi.put("primaryPollutant", aqiAndPollutant.getPrimaryPollutantNames()); - CityAqi cityAqi = new CityAqi(); cityAqi.setCityCode(cityCode); cityAqi.setTime(dataTime); cityAqi.setValue(JSONObject.toJSONString(aqi)); diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java index 347ab89..95ef4b0 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java @@ -72,9 +72,9 @@ //���city_code������ Map<String, List<Map<String, Object>>> data = monthlyData.parallelStream().collect(Collectors.groupingBy(o -> o.get("city_code").toString())); + CityAqiYearly cityAqiYearly = new CityAqiYearly(); data.forEach((cityCode, value) -> { Map<String, Object> jsonMap = new HashMap<>(); - CityAqiYearly cityAqiYearly = new CityAqiYearly(); cityAqiYearly.setCityCode(Integer.parseInt(cityCode)); cityAqiYearly.setTime(start); diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityConfigWeatherForecastServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityConfigWeatherForecastServiceImpl.java new file mode 100644 index 0000000..4a08164 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityConfigWeatherForecastServiceImpl.java @@ -0,0 +1,20 @@ +package com.moral.api.service.impl; + +import com.moral.api.entity.CityConfigWeatherForecast; +import com.moral.api.mapper.CityConfigWeatherForecastMapper; +import com.moral.api.service.CityConfigWeatherForecastService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * ������������������������������������������������������������������ ��������������� + * </p> + * + * @author moral + * @since 2021-12-30 + */ +@Service +public class CityConfigWeatherForecastServiceImpl extends ServiceImpl<CityConfigWeatherForecastMapper, CityConfigWeatherForecast> implements CityConfigWeatherForecastService { + +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherForecastServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherForecastServiceImpl.java new file mode 100644 index 0000000..aa43f1a --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherForecastServiceImpl.java @@ -0,0 +1,69 @@ +package com.moral.api.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.moral.api.entity.CityConfigWeatherForecast; +import com.moral.api.entity.CityWeatherForecast; +import com.moral.api.mapper.CityWeatherForecastMapper; +import com.moral.api.service.CityConfigWeatherForecastService; +import com.moral.api.service.CityWeatherForecastService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.moral.constant.Constants; +import com.moral.util.DateUtils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * <p> + * ��������������������������� ��������������� + * </p> + * + * @author moral + * @since 2021-12-30 + */ +@Service +public class CityWeatherForecastServiceImpl extends ServiceImpl<CityWeatherForecastMapper, CityWeatherForecast> implements CityWeatherForecastService { + + @Autowired + private CityConfigWeatherForecastService cityConfigWeatherForecastService; + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private CityWeatherForecastMapper cityWeatherForecastMapper; + + @Override + public void insertCityWeatherForecast() { + Date nextDay = DateUtils.addDays(new Date(), 1); + String nextTime = DateUtils.dateToDateString(nextDay, DateUtils.yyyy_MM_dd_EN); + //������������������ + QueryWrapper<CityConfigWeatherForecast> wrapper = new QueryWrapper<>(); + wrapper.select("city_code", "location_id").eq("is_delete", Constants.NOT_DELETE); + List<CityConfigWeatherForecast> list = cityConfigWeatherForecastService.list(wrapper); + CityWeatherForecast cityWeatherForecast = new CityWeatherForecast(); + for (CityConfigWeatherForecast cityConfigWeatherForecast : list) { + Integer cityCode = cityConfigWeatherForecast.getCityCode(); + Integer locationId = cityConfigWeatherForecast.getLocationId(); + Map<String, Object> data = restTemplate.getForObject("https://api.qweather.com/v7/weather/72h?key=da05c6c4852d4f7aa3364a9236ee9e26&gzip=n&location={1}", Map.class, locationId); + List<Map<String, Object>> hourly = (List<Map<String, Object>>) data.get("hourly"); + for (Map<String, Object> hourlyMap : hourly) { + String fxTime = hourlyMap.get("fxTime").toString(); + String dayTime = fxTime.split("T")[0]; + if (dayTime.equals(nextTime)) { + String hourTime = fxTime.substring(0, 17).replaceAll("T", " "); + cityWeatherForecast.setCityCode(cityCode); + cityWeatherForecast.setTime(DateUtils.getDate(hourTime, DateUtils.yyyy_MM_dd_HH_EN)); + cityWeatherForecast.setValue(JSONObject.toJSONString(hourlyMap)); + cityWeatherForecastMapper.insert(cityWeatherForecast); + } + } + } + } +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java index e5bcd7d..252c9db 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java @@ -50,12 +50,12 @@ QueryWrapper<CityConfigWeather> wrapper = new QueryWrapper<>(); wrapper.select("city_code", "location_id").eq("is_delete", Constants.NOT_DELETE); List<CityConfigWeather> list = cityConfigWeatherService.list(wrapper); + CityWeather cityWeather = new CityWeather(); for (CityConfigWeather cityConfigWeather : list) { Integer cityCode = cityConfigWeather.getCityCode(); Integer locationId = cityConfigWeather.getLocationId(); Map<String, Object> data = restTemplate.getForObject("https://api.qweather.com/v7/weather/now?key=da05c6c4852d4f7aa3364a9236ee9e26&gzip=n&location={1}", Map.class, locationId); Map<String, Object> now = (Map<String, Object>) data.get("now"); - CityWeather cityWeather = new CityWeather(); cityWeather.setCityCode(cityCode); //������km/h->m/s double windSpeed = Double.parseDouble(now.get("windSpeed").toString()); diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java index 062e655..80e1b89 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java @@ -69,6 +69,7 @@ List<GovMonitorPoint> govMonitorPoints = govMonitorPointService.list(queryWrapper); Date time = DateUtils.dataToTimeStampTime(new Date(), DateUtils.yyyy_MM_dd_HH_EN); String timeStr = DateUtils.dateToDateString(time, DateUtils.yyyy_MM_dd_HH_mm_ss_EN); + HistoryAqi historyAqi = new HistoryAqi(); for (GovMonitorPoint govMonitorPoint : govMonitorPoints) { String guid = govMonitorPoint.getGuid(); ResponseEntity<String> response; @@ -84,7 +85,6 @@ if (ObjectUtils.isEmpty(map)) { continue; } - HistoryAqi historyAqi = new HistoryAqi(); historyAqi.setGuid(guid); historyAqi.setTime(DateUtils.addHours(time, -1)); //��������������� diff --git a/screen-job/src/main/java/com/moral/api/task/WeatherTask.java b/screen-job/src/main/java/com/moral/api/task/WeatherTask.java index 3709089..841aa04 100644 --- a/screen-job/src/main/java/com/moral/api/task/WeatherTask.java +++ b/screen-job/src/main/java/com/moral/api/task/WeatherTask.java @@ -3,6 +3,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import com.moral.api.service.CityWeatherForecastService; import com.moral.api.service.CityWeatherService; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobHelper; @@ -14,9 +15,12 @@ @Autowired private CityWeatherService cityWeatherService; - //������������������������insert + @Autowired + private CityWeatherForecastService cityWeatherForecastService; + + //���������������������������������insert @XxlJob("insertCityWeather") - public ReturnT insertCityWeather(){ + public ReturnT insertCityWeather() { try { cityWeatherService.insertCityWeather(); } catch (Exception e) { @@ -25,4 +29,16 @@ } return ReturnT.SUCCESS; } + + //���������������������������������������������insert + @XxlJob("insertCityWeatherForecast") + public ReturnT insertCityWeatherForecast() { + try { + cityWeatherForecastService.insertCityWeatherForecast(); + } catch (Exception e) { + XxlJobHelper.log(e.getMessage()); + return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); + } + return ReturnT.SUCCESS; + } } diff --git a/screen-job/src/main/resources/mapper/CityConfigWeatherForecastMapper.xml b/screen-job/src/main/resources/mapper/CityConfigWeatherForecastMapper.xml new file mode 100644 index 0000000..bdfc8a5 --- /dev/null +++ b/screen-job/src/main/resources/mapper/CityConfigWeatherForecastMapper.xml @@ -0,0 +1,14 @@ +<?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.api.mapper.CityConfigWeatherForecastMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.CityConfigWeatherForecast"> + <id column="id" property="id"/> + <result column="city_code" property="cityCode"/> + <result column="city_name" property="cityName"/> + <result column="location_id" property="locationId"/> + <result column="is_delete" property="isDelete"/> + </resultMap> + +</mapper> \ No newline at end of file diff --git a/screen-job/src/main/resources/mapper/CityWeatherForecastMapper.xml b/screen-job/src/main/resources/mapper/CityWeatherForecastMapper.xml new file mode 100644 index 0000000..3e68ac0 --- /dev/null +++ b/screen-job/src/main/resources/mapper/CityWeatherForecastMapper.xml @@ -0,0 +1,12 @@ +<?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.api.mapper.CityWeatherForecastMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.CityWeatherForecast"> + <result column="city_code" property="cityCode"/> + <result column="time" property="time"/> + <result column="value" property="value"/> + </resultMap> + +</mapper> \ No newline at end of file -- Gitblit v1.8.0