screen-job/src/main/java/com/moral/api/config/rest/RestConfig.java
New file @@ -0,0 +1,14 @@ package com.moral.api.config.rest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class RestConfig { @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); } } screen-job/src/main/java/com/moral/api/entity/GovMonitorPoint.java
New file @@ -0,0 +1,98 @@ 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 java.util.Date; import lombok.Data; import lombok.EqualsAndHashCode; /** * <p> * * </p> * * @author moral * @since 2021-09-10 */ @Data @EqualsAndHashCode(callSuper = false) public class GovMonitorPoint extends Model<GovMonitorPoint> { private static final long serialVersionUID = 1L; /** * id */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 政府站点code */ private String guid; /** * 名称 */ private String name; /** * 经度 */ private Double longitude; /** * 纬度 */ private Double latitude; /** * 省编码 */ private Integer provinceCode; /** * 市编码 */ private Integer cityCode; /** * 县/区编码 */ private Integer areaCode; /** * 政府站点类型:国控、省控、县控 */ private String stationLevel; /** * 创建时间 */ private Date createTime; /** * 更新时间 */ private Date updateTime; /** * 是否删除 */ private String isDelete; /** * 备注 */ private String desc; @Override protected Serializable pkVal() { return this.id; } } screen-job/src/main/java/com/moral/api/entity/HistoryAqi.java
@@ -24,7 +24,7 @@ /** * 城市code */ private String cityCode; private String guid; /** * 时间 screen-job/src/main/java/com/moral/api/mapper/GovMonitorPointMapper.java
New file @@ -0,0 +1,16 @@ package com.moral.api.mapper; import com.moral.api.entity.GovMonitorPoint; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * Mapper 接口 * </p> * * @author moral * @since 2021-09-10 */ public interface GovMonitorPointMapper extends BaseMapper<GovMonitorPoint> { } screen-job/src/main/java/com/moral/api/service/GovMonitorPointService.java
New file @@ -0,0 +1,16 @@ package com.moral.api.service; import com.moral.api.entity.GovMonitorPoint; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 服务类 * </p> * * @author moral * @since 2021-09-10 */ public interface GovMonitorPointService extends IService<GovMonitorPoint> { } screen-job/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.moral.api.service.impl; import com.moral.api.entity.GovMonitorPoint; import com.moral.api.mapper.GovMonitorPointMapper; import com.moral.api.service.GovMonitorPointService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author moral * @since 2021-09-10 */ @Service public class GovMonitorPointServiceImpl extends ServiceImpl<GovMonitorPointMapper, GovMonitorPoint> implements GovMonitorPointService { } screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java
@@ -1,23 +1,31 @@ package com.moral.api.service.impl; 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; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.util.DateUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.client.RestTemplate; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -38,7 +46,10 @@ private HistoryAqiMapper historyAqiMapper; @Autowired private CityAqiConfigService cityAqiConfigService; private RestTemplate restTemplate; @Autowired private GovMonitorPointService govMonitorPointService; @Autowired private RedisTemplate redisTemplate; @@ -46,35 +57,44 @@ @Override @Transactional public void insertHistoryAqi() { RestTemplate restTemplate = new RestTemplate(); //获取aqi城市配置 List<CityAqiConfig> cityAqiConfigs = cityAqiConfigService.getCityAqiConfigs(); for (CityAqiConfig cityAqiConfig : cityAqiConfigs) { Map<String, Object> mjMap = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=aqi", Map.class, cityAqiConfig.getCityId()); if (ObjectUtils.isEmpty(mjMap)) { //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "APPCODE 31b6ea8f804a4472be3b633cfee44849"); HttpEntity requestEntity = new HttpEntity<>(headers); QueryWrapper<GovMonitorPoint> queryWrapper = new QueryWrapper<>(); queryWrapper.select("guid").eq("is_delete", Constants.NOT_DELETE); //获取所有国控,省控,县控站点 List<GovMonitorPoint> govMonitorPoints = govMonitorPointService.list(queryWrapper); for (GovMonitorPoint govMonitorPoint : govMonitorPoints) { String guid = govMonitorPoint.getGuid(); ResponseEntity<String> response; try { //从第三方接口获取数据 response = restTemplate.exchange("http://chinair.market.alicloudapi.com/api/v1/air_all/station_realtime?guid={1}", HttpMethod.GET, requestEntity, String.class, guid); } catch (Exception e) { continue; } String body = response.getBody(); Map<String, Object> data = JSONObject.parseObject(body, Map.class); Map<String, Object> map = (Map<String, Object>) data.get("data"); HistoryAqi historyAqi = new HistoryAqi(); //city_code String cityCode = cityAqiConfig.getCityCode(); historyAqi.setCityCode(cityCode); Map<String, Object> value = new HashMap<>(); Map<String, Object> data = (Map<String, Object>) ((Map) mjMap.get("data")).get("aqi"); //数据时间 historyAqi.setTime(new Date(Long.parseLong(data.get("pubtime").toString()))); value.put("PM25", data.get("pm25C")); value.put("PM10", data.get("pm10C")); value.put("SO2", data.get("so2C")); value.put("NO2", data.get("no2C")); value.put("CO", data.get("coC")); value.put("O3", data.get("o3C")); value.put("AQI", data.get("value")); //数据 historyAqi.setValue(JSONObject.toJSONString(value)); //数据存入数据库 historyAqi.setGuid(guid); historyAqi.setTime(DateUtils.getDate(map.get("pubtime").toString(), DateUtils.yyyy_MM_dd_HH_mm_ss_EN)); //存入数据库 historyAqi.setValue(JSONObject.toJSONString(map)); historyAqiMapper.insert(historyAqi); //存入redis redisTemplate.opsForHash().put(RedisConstants.AQI_DATA, cityCode, value); Map<String, Object> value = new HashMap<>(); value.put(Constants.SENSOR_CODE_PM25, map.get("pm2_5")); value.put(Constants.SENSOR_CODE_PM10, map.get("pm10")); value.put(Constants.SENSOR_CODE_SO2, map.get("so2")); value.put(Constants.SENSOR_CODE_NO2, map.get("no2")); value.put(Constants.SENSOR_CODE_CO, Double.parseDouble(map.get("co").toString())); value.put(Constants.SENSOR_CODE_O3, map.get("o3")); //aqi数据存入redis redisTemplate.opsForHash().put(RedisConstants.AQI_DATA, guid, value); } } } screen-job/src/main/resources/mapper/GovMonitorPointMapper.xml
New file @@ -0,0 +1,22 @@ <?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.GovMonitorPointMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.moral.api.entity.GovMonitorPoint"> <id column="id" property="id"/> <result column="guid" property="guid"/> <result column="name" property="name"/> <result column="longitude" property="longitude"/> <result column="latitude" property="latitude"/> <result column="province_code" property="provinceCode"/> <result column="city_code" property="cityCode"/> <result column="area_code" property="areaCode"/> <result column="station_level" property="stationLevel"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> <result column="is_delete" property="isDelete"/> <result column="desc" property="desc"/> </resultMap> </mapper> screen-job/src/main/resources/mapper/HistoryAqiMapper.xml
@@ -4,7 +4,7 @@ <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryAqi"> <result column="city_code" property="cityCode"/> <result column="guid" property="guid"/> <result column="time" property="time"/> <result column="value" property="value"/> </resultMap>