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 com.xxl.job.core.context.XxlJobHelper; 
 | 
  
 | 
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); 
 | 
//        String timeStr = DateUtils.dateToDateString(DateUtils.addHours(time, -1), 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); 
 | 
  
 | 
//                historyAqiMapper.insert(historyAqi); 
 | 
  
 | 
  
 | 
            }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.insert(historyAqi); 
 | 
  
 | 
            } 
 | 
  
 | 
        } 
 | 
        if (ObjectUtils.isEmpty(historyAqis)){ 
 | 
            XxlJobHelper.log("数据不存在"); 
 | 
        } 
 | 
        //存入数据库 
 | 
        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); 
 | 
    } 
 | 
} 
 |