package com.moral.api.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.CityAqi;
import com.moral.api.entity.CityConfigAqi;
import com.moral.api.mapper.CityAqiMapper;
import com.moral.api.service.CityAqiService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.service.CityConfigAqiService;
import com.moral.constant.Constants;
import com.moral.constant.RedisConstants;
import com.moral.pojo.AQI;
import com.moral.util.AQIUtils;
import com.moral.util.AmendUtils;
import com.moral.util.ComprehensiveIndexUtils;
import com.moral.util.DateUtils;
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.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
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;
import java.util.OptionalDouble;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
/**
 * 
 * 城市aqi实测小时数据表 服务实现类
 * 
 *
 * @author moral
 * @since 2021-10-11
 */
@Service
public class CityAqiServiceImpl extends ServiceImpl implements CityAqiService {
    @Autowired
    private CityAqiMapper cityAqiMapper;
    @Autowired
    private CityConfigAqiService cityConfigAqiService;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private RedisTemplate redisTemplate;
    //城市aqi数据来源于,阿里云市场:墨迹天气(基础版CityID)全国历史天气预报接口
    @Override
    public void insertCityAqi() {
        //pubtime=08的数据,是07-08之间的数据,存入数据库时的时间为07点
        Date now = new Date();
        Date time = DateUtils.dataToTimeStampTime(now, DateUtils.yyyy_MM_dd_HH_EN);
        //存入数据库是time字段实际时间
        Date dataTime = DateUtils.addHours(time, -1);
        Date start = null;
        if (DateUtils.getHour(time) >= 8 || DateUtils.getHour(time) == 0) {
            start = DateUtils.addHours(time, -8);
        }
        //获取城市配置
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.select("city_code", "city_id").eq("is_delete", Constants.NOT_DELETE);
        List list = cityConfigAqiService.list(wrapper);
        //获取历史数据,用于计算臭氧滑动值
        Map>> cityData = null;
        if (start != null) {
            QueryWrapper queryWrapper = new QueryWrapper<>();
            List cityCodes = list.stream().map(CityConfigAqi::getCityCode)
                    .collect(Collectors.toList());
            queryWrapper.select("city_code", "time", "value")
                    .ge("time", start)
                    .in("city_code", cityCodes);
            List