package com.moral.api.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.moral.api.entity.CityAqiDaily;
import com.moral.api.entity.CityAqiYearly;
import com.moral.api.mapper.CityAqiYearlyMapper;
import com.moral.api.service.CityAqiDailyService;
import com.moral.api.service.CityAqiYearlyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * 
 * 城市aqi年数据表 服务实现类
 * 
 *
 * @author moral
 * @since 2021-11-04
 */
@Service
public class CityAqiYearlyServiceImpl extends ServiceImpl implements CityAqiYearlyService {
    @Autowired
    private CityAqiDailyService cityAqiDailyService;
    @Autowired
    private CityAqiYearlyMapper cityAqiYearlyMapper;
    @Override
    public void insertCityAqiYearly() {
        /*
         * 年均值算法
         * PM2.5,PM10,CO,日均值95百分位
         * SO2,NO2,日均值98百分位
         * O3,日最大值90百分位
         * */
        //开始时间,去年1号
        Date start = DateUtils.getFirstDayOfLastYear();
        //上上年
        Date lastLastYear = DateUtils.getDate(DateUtils.getDateAddYear(DateUtils.dateToDateString(start, DateUtils.yyyy), -1), DateUtils.yyyy);
        //结束时间,本年1号
        Date end = DateUtils.getDate(DateUtils.getDateAddYear(DateUtils.dateToDateString(start, DateUtils.yyyy), 1), DateUtils.yyyy);
        //如果是1月1号,先删除去年数据
        //不是1月1号,统计的是本年累计值,先删除本年数据
        String monthAndDay = DateUtils.dateToDateString(new Date(), DateUtils.MM_dd_EN);
        UpdateWrapper cityAqiYearlyUpdateWrapper = new UpdateWrapper<>();
        if ("01-01".equals(monthAndDay)) {
            cityAqiYearlyUpdateWrapper.eq("time", start);
        } else {
            start = end;
            end = DateUtils.getDate(DateUtils.getDateAddYear(DateUtils.dateToDateString(start, DateUtils.yyyy), 1), DateUtils.yyyy);
            lastLastYear = DateUtils.getDate(DateUtils.getDateAddYear(DateUtils.dateToDateString(start, DateUtils.yyyy), -1), DateUtils.yyyy);
            cityAqiYearlyUpdateWrapper.eq("time", start);
        }
        cityAqiYearlyMapper.delete(cityAqiYearlyUpdateWrapper);
        //获取所有城市aqi日数据
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.select("city_code", "time", "value")
                .ge("time", start)
                .lt("time", end);
        List