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;
/**
*
* 国控aqi数据表 服务实现类
*
*
* @author moral
* @since 2021-06-15
*/
@Service
@Slf4j
public class HistoryAqiServiceImpl extends ServiceImpl 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 queryWrapper = new QueryWrapper<>();
queryWrapper.select("guid").eq("is_delete", Constants.NOT_DELETE);
//获取所有国控,省控,县控站点
List 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 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 data = JSONObject.parseObject(body, Map.class);
Map map = (Map) data.get("data");
HistoryAqi historyAqi = new HistoryAqi();
historyAqi.setGuid(guid);
historyAqi.setTime(time);
//存入数据库
historyAqi.setValue(JSONObject.toJSONString(map));
historyAqiMapper.insert(historyAqi);
Map 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);
}
}
}