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