screen-job/src/main/java/com/moral/api/entity/CityAqi.java
New file @@ -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> * 城市aqi实测小时数据表 * </p> * * @author moral * @since 2021-10-11 */ @Data @EqualsAndHashCode(callSuper = false) public class CityAqi extends Model<CityAqi> { private static final long serialVersionUID = 1L; /** * 城市id */ private String cityCode; /** * 时间 */ private Date time; /** * 数据 */ private String value; @Override protected Serializable pkVal() { return null; } } screen-job/src/main/java/com/moral/api/entity/CityConfig.java
File was renamed from screen-job/src/main/java/com/moral/api/entity/CityAqiConfig.java @@ -9,15 +9,15 @@ /** * <p> * 墨迹天气aqi城市配置 * 城市配置表,用于从第三方接口获取数据 * </p> * * @author moral * @since 2021-06-15 * @since 2021-10-11 */ @Data @EqualsAndHashCode(callSuper = false) public class CityAqiConfig extends Model<CityAqiConfig> { public class CityConfig extends Model<CityConfig> { private static final long serialVersionUID = 1L; @@ -38,10 +38,21 @@ private String cityName; /** * 墨迹天气接口中城市id * 从墨迹获取数据 */ private Integer cityId; /** * 从和风天气获取数据 */ private Integer locationId; /** * 逻辑删除,0:不删除;1:删除 */ private String isDelete; @Override protected Serializable pkVal() { return this.id; screen-job/src/main/java/com/moral/api/entity/CityWeather.java
New file @@ -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-10-11 */ @Data @EqualsAndHashCode(callSuper = false) public class CityWeather extends Model<CityWeather> { private static final long serialVersionUID = 1L; /** * 城市code */ private String cityCode; /** * 时间 */ private Date time; /** * 数据 */ private String value; @Override protected Serializable pkVal() { return null; } } screen-job/src/main/java/com/moral/api/mapper/CityAqiConfigMapper.java
File was deleted screen-job/src/main/java/com/moral/api/mapper/CityAqiMapper.java
New file @@ -0,0 +1,16 @@ package com.moral.api.mapper; import com.moral.api.entity.CityAqi; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * 城市aqi实测小时数据表 Mapper 接口 * </p> * * @author moral * @since 2021-10-11 */ public interface CityAqiMapper extends BaseMapper<CityAqi> { } screen-job/src/main/java/com/moral/api/mapper/CityConfigMapper.java
New file @@ -0,0 +1,16 @@ package com.moral.api.mapper; import com.moral.api.entity.CityConfig; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * 城市配置表,用于从第三方接口获取数据 Mapper 接口 * </p> * * @author moral * @since 2021-10-11 */ public interface CityConfigMapper extends BaseMapper<CityConfig> { } screen-job/src/main/java/com/moral/api/mapper/CityWeatherMapper.java
New file @@ -0,0 +1,16 @@ package com.moral.api.mapper; import com.moral.api.entity.CityWeather; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * 城市实测小时气象数据表 Mapper 接口 * </p> * * @author moral * @since 2021-10-11 */ public interface CityWeatherMapper extends BaseMapper<CityWeather> { } screen-job/src/main/java/com/moral/api/service/CityAqiConfigService.java
File was deleted screen-job/src/main/java/com/moral/api/service/CityAqiService.java
New file @@ -0,0 +1,19 @@ package com.moral.api.service; import com.moral.api.entity.CityAqi; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 城市aqi实测小时数据表 服务类 * </p> * * @author moral * @since 2021-10-11 */ public interface CityAqiService extends IService<CityAqi> { //aqi数据按城市insert void insertCityAqi(); } screen-job/src/main/java/com/moral/api/service/CityConfigService.java
New file @@ -0,0 +1,16 @@ package com.moral.api.service; import com.moral.api.entity.CityConfig; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 城市配置表,用于从第三方接口获取数据 服务类 * </p> * * @author moral * @since 2021-10-11 */ public interface CityConfigService extends IService<CityConfig> { } screen-job/src/main/java/com/moral/api/service/CityWeatherService.java
New file @@ -0,0 +1,19 @@ package com.moral.api.service; import com.moral.api.entity.CityWeather; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 城市实测小时气象数据表 服务类 * </p> * * @author moral * @since 2021-10-11 */ public interface CityWeatherService extends IService<CityWeather> { //实时城市气象数据insert void insertCityWeather(); } screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java
@@ -5,7 +5,7 @@ public interface HistoryAqiService extends IService<HistoryAqi> { //墨迹aqi数据insert //aqi数据按国控站接入 void insertHistoryAqi(); } screen-job/src/main/java/com/moral/api/service/impl/CityAqiConfigServiceImpl.java
File was deleted screen-job/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java
New file @@ -0,0 +1,62 @@ package com.moral.api.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.CityAqi; import com.moral.api.entity.CityConfig; import com.moral.api.entity.CityWeather; import com.moral.api.mapper.CityAqiMapper; import com.moral.api.service.CityAqiService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.service.CityConfigService; 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> * 城市aqi实测小时数据表 服务实现类 * </p> * * @author moral * @since 2021-10-11 */ @Service public class CityAqiServiceImpl extends ServiceImpl<CityAqiMapper, CityAqi> implements CityAqiService { @Autowired private CityAqiMapper cityAqiMapper; @Autowired private CityConfigService cityConfigService; @Autowired private RestTemplate restTemplate; @Override public void insertCityAqi() { //获取城市配置 QueryWrapper<CityConfig> wrapper = new QueryWrapper<>(); wrapper.select("city_code", "location_id").eq("is_delete", Constants.NOT_DELETE); List<CityConfig> list = cityConfigService.list(wrapper); for (CityConfig cityConfig : list) { String cityCode = cityConfig.getCityCode(); Integer locationId = cityConfig.getLocationId(); Map<String, Object> data = restTemplate.getForObject("https://api.qweather.com/v7/air/now?key=da05c6c4852d4f7aa3364a9236ee9e26&gzip=n&location={1}", Map.class, locationId); Map<String, Object> now = (Map<String, Object>) data.get("now"); CityAqi cityAqi = new CityAqi(); cityAqi.setCityCode(cityCode); cityAqi.setValue(JSONObject.toJSONString(now)); Date time = DateUtils.dataToTimeStampTime(new Date(), DateUtils.yyyy_MM_dd_HH_EN); cityAqi.setTime(time); cityAqiMapper.insert(cityAqi); } } } screen-job/src/main/java/com/moral/api/service/impl/CityConfigServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.moral.api.service.impl; import com.moral.api.entity.CityConfig; import com.moral.api.mapper.CityConfigMapper; import com.moral.api.service.CityConfigService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * 城市配置表,用于从第三方接口获取数据 服务实现类 * </p> * * @author moral * @since 2021-10-11 */ @Service public class CityConfigServiceImpl extends ServiceImpl<CityConfigMapper, CityConfig> implements CityConfigService { } screen-job/src/main/java/com/moral/api/service/impl/CityWeatherServiceImpl.java
New file @@ -0,0 +1,67 @@ package com.moral.api.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.CityConfig; import com.moral.api.entity.CityWeather; import com.moral.api.mapper.CityWeatherMapper; import com.moral.api.service.CityConfigService; import com.moral.api.service.CityWeatherService; 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.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; /** * <p> * 城市实测小时气象数据表 服务实现类 * </p> * * @author moral * @since 2021-10-11 */ @Service public class CityWeatherServiceImpl extends ServiceImpl<CityWeatherMapper, CityWeather> implements CityWeatherService { @Autowired private CityWeatherMapper cityWeatherMapper; @Autowired private CityConfigService cityConfigService; @Autowired private RestTemplate restTemplate; @Override public void insertCityWeather() { //获取城市配置 QueryWrapper<CityConfig> wrapper = new QueryWrapper<>(); wrapper.select("city_code", "location_id").eq("is_delete", Constants.NOT_DELETE); List<CityConfig> list = cityConfigService.list(wrapper); for (CityConfig cityConfig : list) { String cityCode = cityConfig.getCityCode(); Integer locationId = cityConfig.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()); windSpeed = windSpeed * 1000 / 3600; String format = String.format("%.1f", windSpeed); now.put("windSpeed", format); cityWeather.setValue(JSONObject.toJSONString(now)); Date time = DateUtils.dataToTimeStampTime(new Date(), DateUtils.yyyy_MM_dd_HH_EN); cityWeather.setTime(time); cityWeatherMapper.insert(cityWeather); } } } screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java
@@ -2,11 +2,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.CityAqiConfig; import com.moral.api.entity.GovMonitorPoint; import com.moral.api.entity.HistoryAqi; import com.moral.api.mapper.HistoryAqiMapper; import com.moral.api.service.CityAqiConfigService; import com.moral.api.service.GovMonitorPointService; import com.moral.api.service.HistoryAqiService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; screen-job/src/main/java/com/moral/api/task/AqiInsertTask.java
New file @@ -0,0 +1,44 @@ package com.moral.api.task; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.moral.api.service.CityAqiService; import com.moral.api.service.HistoryAqiService; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; @Component public class AqiInsertTask { @Autowired private HistoryAqiService historyAqiService; @Autowired private CityAqiService cityAqiService; //aqi数据按国控站接入 @XxlJob("insertHistoryAqi") public ReturnT insertHistoryAqi() { try { historyAqiService.insertHistoryAqi(); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } //aqi数据按城市接入 @XxlJob("insertCityAqi") public ReturnT insertCityAqi() { try { cityAqiService.insertCityAqi(); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); } return ReturnT.SUCCESS; } } screen-job/src/main/java/com/moral/api/task/WeatherTask.java
File was renamed from screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java @@ -3,22 +3,23 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.moral.api.service.HistoryAqiService; import com.moral.api.service.CityConfigService; import com.moral.api.service.CityWeatherService; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; @Component public class HistoryAqiInsertTask { public class WeatherTask { @Autowired private HistoryAqiService historyAqiService; private CityWeatherService cityWeatherService; //墨迹小时aqi数据接入 @XxlJob("insertHistoryAqi") public ReturnT insertHistoryAqi() { //城市气象实测数据insert @XxlJob("insertCityWeather") public ReturnT insertCityWeather(){ try { historyAqiService.insertHistoryAqi(); cityWeatherService.insertCityWeather(); } catch (Exception e) { XxlJobHelper.log(e.getMessage()); return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); screen-job/src/main/resources/mapper/CityAqiMapper.xml
New file @@ -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.CityAqiMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.moral.api.entity.CityAqi"> <result column="city_code" property="cityCode" /> <result column="time" property="time" /> <result column="value" property="value" /> </resultMap> </mapper> screen-job/src/main/resources/mapper/CityConfigMapper.xml
File was renamed from screen-job/src/main/resources/mapper/CityAqiConfigMapper.xml @@ -1,13 +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.api.mapper.CityAqiConfigMapper"> <mapper namespace="com.moral.api.mapper.CityConfigMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.moral.api.entity.CityAqiConfig"> <resultMap id="BaseResultMap" type="com.moral.api.entity.CityConfig"> <id column="id" property="id"/> <result column="city_code" property="cityCode"/> <result column="city_name" property="cityName"/> <result column="city_id" property="cityId"/> <result column="location_id" property="locationId"/> <result column="is_delete" property="isDelete"/> </resultMap> </mapper> screen-job/src/main/resources/mapper/CityWeatherMapper.xml
New file @@ -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.CityWeatherMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.moral.api.entity.CityWeather"> <result column="city_code" property="cityCode"/> <result column="time" property="time"/> <result column="value" property="value"/> </resultMap> </mapper>