jinpengyong
2021-09-10 3cda5b8c0618bcf4d81c0792e25563f77fa71d24
国控站aqi数据接入
6 files added
3 files modified
266 ■■■■ changed files
screen-job/src/main/java/com/moral/api/config/rest/RestConfig.java 14 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/entity/GovMonitorPoint.java 98 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/entity/HistoryAqi.java 2 ●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/mapper/GovMonitorPointMapper.java 16 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/service/GovMonitorPointService.java 16 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java 76 ●●●●● patch | view | raw | blame | history
screen-job/src/main/resources/mapper/GovMonitorPointMapper.xml 22 ●●●●● patch | view | raw | blame | history
screen-job/src/main/resources/mapper/HistoryAqiMapper.xml 2 ●●● patch | view | raw | blame | history
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>