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.CityConfigWeatherForecast;
import com.moral.api.entity.CityWeather;
import com.moral.api.entity.CityWeatherForecast;
import com.moral.api.entity.Forecast;
import com.moral.api.mapper.ForecastMapper;
import com.moral.api.service.CityAqiService;
import com.moral.api.service.CityConfigWeatherForecastService;
import com.moral.api.service.CityWeatherForecastService;
import com.moral.api.service.CityWeatherService;
import com.moral.api.service.ForecastService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
import com.moral.util.AmendUtils;
import com.moral.util.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
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.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;
/**
 * 
 * 预测小时数据 服务实现类
 * 
 *
 * @author moral
 * @since 2021-12-31
 */
@Service
public class ForecastServiceImpl extends ServiceImpl implements ForecastService {
    @Autowired
    private CityWeatherForecastService cityWeatherForecastService;
    @Autowired
    private CityConfigWeatherForecastService cityConfigWeatherForecastService;
    @Autowired
    private CityWeatherService cityWeatherService;
    @Autowired
    private CityAqiService cityAqiService;
    @Autowired
    private ForecastMapper forecastMapper;
    private static final Map weatherScore = new HashMap<>();
    static {
        weatherScore.put("晴", 100);
        weatherScore.put("雾", 90);
        weatherScore.put("多云", 80);
        weatherScore.put("霾", 70);
        weatherScore.put("阴", 60);
        weatherScore.put("扬沙", 60);
        weatherScore.put("浮尘", 60);
        weatherScore.put("阵雨", 45);
        weatherScore.put("雷阵雨", 40);
        weatherScore.put("雷阵雨转小雨", 30);
        weatherScore.put("阵雨转小雨", 30);
        weatherScore.put("小雨", 20);
        weatherScore.put("雨", 10);
        weatherScore.put("雷阵雨转中雨", 5);
        weatherScore.put("雷阵雨转大雨", 4);
        weatherScore.put("中雨", 0);
        weatherScore.put("大雨", 0);
        weatherScore.put("暴雨", 0);
        weatherScore.put("小雪", 0);
        weatherScore.put("中雪", 0);
        weatherScore.put("大雪", 0);
        weatherScore.put("暴雪", 0);
        weatherScore.put("雨夹雪", 0);
    }
    @Override
    public void forecastO3() {
        Date nextDay = DateUtils.addDays(new Date(), 1);
        String nextTime = DateUtils.dateToDateString(nextDay, DateUtils.yyyy_MM_dd_EN);
        //根据最近一个月历史数据来预测
        Date start = DateUtils.addMonths(DateUtils.getDate(nextTime), -1);
        //获取要预测的城市
        QueryWrapper cityConfigWeatherForecastQueryWrapper = new QueryWrapper<>();
        cityConfigWeatherForecastQueryWrapper.select("city_code")
                .eq("is_delete", Constants.NOT_DELETE);
        List