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