jinpengyong
2021-12-22 9d91dc402f279630eaa100024fd3b1542fbeb41c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package com.moral.api.service.impl;
 
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.GovMonitorPoint;
import com.moral.api.entity.HistoryAqi;
import com.moral.api.mapper.HistoryAqiMapper;
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;
 
/**
 * <p>
 * 国控aqi数据表 服务实现类
 * </p>
 *
 * @author moral
 * @since 2021-06-15
 */
@Service
@Slf4j
public class HistoryAqiServiceImpl extends ServiceImpl<HistoryAqiMapper, HistoryAqi> implements HistoryAqiService {
 
    @Autowired
    private HistoryAqiMapper historyAqiMapper;
 
    @Autowired
    private RestTemplate restTemplate;
 
    @Autowired
    private GovMonitorPointService govMonitorPointService;
 
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Override
    @Transactional
    public void insertHistoryAqi() {
        //设置请求头
        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);
        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);
        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}&pubtime={2}", HttpMethod.GET, requestEntity, String.class, guid, timeStr);
            } 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");
            if (ObjectUtils.isEmpty(map)) {
                continue;
            }
            HistoryAqi historyAqi = new HistoryAqi();
            historyAqi.setGuid(guid);
            historyAqi.setTime(DateUtils.addHours(time, -1));
            //存入数据库
            historyAqi.setValue(JSONObject.toJSONString(map));
            historyAqiMapper.insert(historyAqi);
 
            Map<String, Object> value = new HashMap<>();
            Object pm2_5 = map.get("pm2_5");
            Object pm10 = map.get("pm10");
            Object so2 = map.get("so2");
            Object no2 = map.get("no2");
            Object co = map.get("co");
            Object o3 = map.get("o3");
            if (!ObjectUtils.isEmpty(pm2_5)) {
                value.put(Constants.SENSOR_CODE_PM25, pm2_5);
            }
 
            if (!ObjectUtils.isEmpty(pm10)) {
                value.put(Constants.SENSOR_CODE_PM10, pm10);
            }
 
            if (!ObjectUtils.isEmpty(so2)) {
                value.put(Constants.SENSOR_CODE_SO2, so2);
            }
 
            if (!ObjectUtils.isEmpty(no2)) {
                value.put(Constants.SENSOR_CODE_NO2, no2);
            }
 
            if (!ObjectUtils.isEmpty(co)) {
                value.put(Constants.SENSOR_CODE_CO, Double.parseDouble(co.toString()));
            }
 
            if (!ObjectUtils.isEmpty(o3)) {
                value.put(Constants.SENSOR_CODE_O3, o3);
            }
 
            //aqi数据存入redis
            redisTemplate.opsForHash().put(RedisConstants.AQI_DATA, guid, value);
        }
    }
 
    @Override
    public HistoryAqi getHistoryApiByTimeAndGuid(String guid, String time) {
        QueryWrapper<HistoryAqi> wrapper_historyAqi = new QueryWrapper<>();
        wrapper_historyAqi.eq("guid", guid).eq("time", time);
        HistoryAqi historyAqi = new HistoryAqi();
        if (historyAqiMapper.selectCount(wrapper_historyAqi) == 1) {
            historyAqi = historyAqiMapper.selectOne(wrapper_historyAqi);
        }
        return historyAqi;
    }
}