package com.moral.api.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.CityAqiDaily;
import com.moral.api.mapper.CityAqiDailyMapper;
import com.moral.api.pojo.dto.cityAQI.PieChartOfPollutionLevelDTO;
import com.moral.api.pojo.form.aqi.QueryPieChartOfPollutionLevelForm;
import com.moral.api.service.CityAqiDailyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
import com.moral.util.AQIUtils;
import com.moral.util.DateUtils;
import com.moral.util.MathUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
*
* 城市aqi日数据表 服务实现类
*
*
* @author moral
* @since 2021-11-01
*/
@Service
public class CityAqiDailyServiceImpl extends ServiceImpl implements CityAqiDailyService {
@Autowired
CityAqiDailyMapper cityAqiDailyMapper;
@Override
public PieChartOfPollutionLevelDTO queryPieChartOfPollutionLevels(QueryPieChartOfPollutionLevelForm form) {
//取参
Integer regionCode = form.getRegionCode();
Date startDate = form.getStartDate();
Date endDate = form.getEndDate();
//查询数据
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.eq("city_code",regionCode);
wrapper.between("time",startDate,endDate);
List cityAqiDailies = cityAqiDailyMapper.selectList(wrapper);
//取开始结束时间,拼装返回time
if(cityAqiDailies.size()==0)
return null;
String startTime = DateUtils.dateToDateString(cityAqiDailies.get(0).getTime(),"yyyy-MM-dd");
String endTime = DateUtils.dateToDateString(cityAqiDailies.get(cityAqiDailies.size()-1).getTime(),"yyyy-MM-dd");
String time = startTime+" 至 "+endTime;
//如果数据的时间有重复则去重
Map tmpMap = new HashMap<>();
for (CityAqiDaily cityAqiDaily : cityAqiDailies) {
String tmpTime = DateUtils.dateToDateString(cityAqiDaily.getTime(),"yyyy-MM-dd");
tmpMap.put(tmpTime,cityAqiDaily);
}
cityAqiDailies = new ArrayList(tmpMap.values());
//统计各污染等级的天数
Map pollutionDaysMap = new LinkedHashMap<>();
pollutionDaysMap.put(Constants.EXCELLENT_WEATHER_CODE,0);
pollutionDaysMap.put(Constants.GOOD_WEATHER_CODE,0);
pollutionDaysMap.put(Constants.MILD_WEATHER_CODE,0);
pollutionDaysMap.put(Constants.MIDDLE_WEATHER_CODE,0);
pollutionDaysMap.put(Constants.SERIOUS_WEATHER_CODE,0);
pollutionDaysMap.put(Constants.SERVER_WEATHER_CODE,0);
for (CityAqiDaily cityAqiDaily : cityAqiDailies) {
Map valueMap = JSON.parseObject(cityAqiDaily.getValue(),Map.class);
if(valueMap.get("AQI")==null)
continue;
Integer aqi = Integer.valueOf(valueMap.get("AQI").toString());
//计算AQI污染等级
String pollutionClass = AQIUtils.classCodeOfPollutionByAqi(aqi);
Integer days = pollutionDaysMap.get(pollutionClass);
pollutionDaysMap.put(pollutionClass,days+1);
}
//计算比例
List