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.CityAqiMonthly;
import com.moral.api.mapper.CityAqiMonthlyMapper;
import com.moral.api.service.CityAqiDailyService;
import com.moral.api.service.CityAqiMonthlyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
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.Arrays;
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-11-04
*/
@Service
public class CityAqiMonthlyServiceImpl extends ServiceImpl implements CityAqiMonthlyService {
@Autowired
private CityAqiMonthlyMapper cityAqiMonthlyMapper;
@Autowired
private CityAqiDailyService cityAqiDailyService;
@Override
public void insertCityAqiMonthly() {
//需要均值计算的因子
List sensors = Arrays.asList("PM2_5", "PM10", "SO2", "NO2");
//开始时间,上月1号
Date start = DateUtils.getFirstDayOfLastMonth();
//上上月
Date lastLastMonth = DateUtils.addMonths(start, -1);
//结束时间,本月1号
Date end = DateUtils.addMonths(start, 1);
//如果是1号,先删除上月数据再统计
//不是1号,统计的是本月累计值,先删除本月数据
int day = DateUtils.getDay(new Date());
UpdateWrapper cityAqiMonthlyUpdateWrapper = new UpdateWrapper<>();
if (day == 1) {
cityAqiMonthlyUpdateWrapper.eq("time", start);
} else {
start = end;
end = DateUtils.addMonths(start, 1);
lastLastMonth = DateUtils.addMonths(start, -1);
cityAqiMonthlyUpdateWrapper.eq("time", start);
}
cityAqiMonthlyMapper.delete(cityAqiMonthlyUpdateWrapper);
//获取所有城市aqi小时数据
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.select("city_code", "time", "value")
.ge("time", start)
.lt("time", end);
List