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.ArrayList;
|
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;
|
|
|
//国控站aqi数据来自阿里云市场,大中华地区空气质量API--单站点接口
|
@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);
|
|
List<HistoryAqi> historyAqis = new ArrayList<>();
|
|
for (GovMonitorPoint govMonitorPoint : govMonitorPoints) {
|
HistoryAqi historyAqi = new HistoryAqi();
|
String guid = govMonitorPoint.getGuid();
|
if (guid.equals("f42092ed-cdf3-4ddc-a56f-0ac80a560847") || guid.equals("cedf9934-f3b0-499d-81cd-a17a109aa100")) {
|
|
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, "525d6346-f6c9-40e2-b3b6-a86fb7c85855", 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.setGuid(guid);
|
historyAqi.setTime(DateUtils.addHours(time, -1));
|
//存入数据库
|
historyAqi.setValue(JSONObject.toJSONString(map));
|
|
historyAqis.add(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);
|
}else {
|
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.setGuid(guid);
|
historyAqi.setTime(DateUtils.addHours(time, -1));
|
//存入数据库
|
historyAqi.setValue(JSONObject.toJSONString(map));
|
|
historyAqis.add(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);
|
}
|
|
}
|
//存入数据库
|
historyAqiMapper.insertHistoryAqi(historyAqis);
|
}
|
|
@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;
|
}
|
|
@Override
|
public List<HistoryAqi> getHistoryAqi() {
|
String time = DateUtils.getDateStringOfHour(-1, DateUtils.yyyy_MM_dd_HH_EN) + ":00:00";
|
QueryWrapper<HistoryAqi> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("time", time);
|
return historyAqiMapper.selectList(queryWrapper);
|
}
|
}
|