package com.moral.api.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.moral.api.entity.CityAqiConfig;
import com.moral.api.entity.HistoryAqi;
import com.moral.api.mapper.HistoryAqiMapper;
import com.moral.api.service.CityAqiConfigService;
import com.moral.api.service.HistoryAqiService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.RedisConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
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 CityAqiConfigService cityAqiConfigService;
@Autowired
private RedisTemplate redisTemplate;
@Override
public void insertHistoryAqi() {
RestTemplate restTemplate = new RestTemplate();
//获取aqi城市配置
List cityAqiConfigs = cityAqiConfigService.getCityAqiConfigs();
for (CityAqiConfig cityAqiConfig : cityAqiConfigs) {
Map mjMap = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=aqi", Map.class, cityAqiConfig.getCityId());
if (ObjectUtils.isEmpty(mjMap)) {
continue;
}
HistoryAqi historyAqi = new HistoryAqi();
//city_code
String cityCode = cityAqiConfig.getCityCode();
historyAqi.setCityCode(cityCode);
Map value = new HashMap<>();
Map data = (Map) ((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));
//数据存入数据库
historyAqiMapper.insert(historyAqi);
//存入redis
redisTemplate.opsForHash().putAll(RedisConstants.AQI_DATA + cityCode, value);
}
}
}