kaiyu
2021-11-22 62e7442abe2ad4b296d0211e6f0cd327865fe24f
screen-api
完成柱状图数据和表格的逻辑代码
2 files renamed
2 files deleted
4 files added
3 files modified
637 ■■■■ changed files
screen-api/src/main/java/com/moral/api/controller/AqiController.java 233 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartOfPollutionLevelVO.java 26 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartTableOfPollutionLevelVO.java 53 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/MonthlyPollutionLevel.java 26 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PollutionDaysAndProportion.java 29 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryChartOfPollutionLevelForm.java 2 ●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartOfPollutionLevelVO.java 61 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java 95 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/PieChartOfPollutionLevelVO.java 2 ●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/CityAqiDailyService.java 17 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java 93 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/AqiController.java
@@ -1,9 +1,10 @@
package com.moral.api.controller;
import com.moral.api.pojo.dto.cityAQI.BarChartOfPollutionLevelVO;
import com.moral.api.pojo.dto.cityAQI.BarChartTableOfPollutionLevelVO;
import com.moral.api.pojo.dto.cityAQI.PieChartOfPollutionLevelVO;
import com.moral.api.pojo.form.aqi.QueryPieChartOfPollutionLevelForm;
import com.moral.api.pojo.dto.cityAQI.MonthlyPollutionLevel;
import com.moral.api.pojo.vo.cityAQI.BarChartOfPollutionLevelVO;
import com.moral.api.pojo.vo.cityAQI.BarChartTableOfPollutionLevelVO;
import com.moral.api.pojo.vo.cityAQI.PieChartOfPollutionLevelVO;
import com.moral.api.pojo.form.aqi.QueryChartOfPollutionLevelForm;
import com.moral.api.service.CityAqiDailyService;
import io.swagger.annotations.Api;
@@ -98,7 +99,7 @@
     * @Date: 2021/11/11
     */
    @GetMapping("queryPieChartOfPollutionLevel")
    public ResultMessage queryPieChartOfPollutionLevel(QueryPieChartOfPollutionLevelForm form) {
    public ResultMessage queryPieChartOfPollutionLevel(QueryChartOfPollutionLevelForm form) {
        //判断是否缺少参数
        if (!form.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
@@ -108,213 +109,33 @@
        return ResultMessage.ok(VO);
    }
    @GetMapping("test1")
    public ResultMessage test1(){
        List<PieChartOfPollutionLevelVO> dtos = new ArrayList<>();
        PieChartOfPollutionLevelVO dto = new PieChartOfPollutionLevelVO();
        dto.setTime("2021-11");
        dto.setTotalDays(10);
        List<Map<String,Object>> list = new ArrayList<>();
        Map<String,Object> map = new HashMap<>();
        map.put("proportion","40%");
        map.put("days",4);
        map.put("pollution",0);
        list.add(map);
        Map<String,Object> map1 = new HashMap<>();
        map1.put("proportion","30%");
        map1.put("days",3);
        map1.put("pollution",1);
        list.add(map1);
        Map<String,Object> map2 = new HashMap<>();
        map2.put("proportion","30%");
        map2.put("days",3);
        map2.put("pollution",2);
        list.add(map2);
        Map<String,Object> map3 = new HashMap<>();
        map3.put("proportion","0%");
        map3.put("days",0);
        map3.put("pollution",3);
        list.add(map3);
        Map<String,Object> map4 = new HashMap<>();
        map4.put("proportion","0%");
        map4.put("days",0);
        map4.put("pollution",4);
        list.add(map4);
        Map<String,Object> map5 = new HashMap<>();
        map5.put("proportion","0%");
        map5.put("days",0);
        map5.put("pollution",5);
        list.add(map5);
        dto.setValues(list);
        PieChartOfPollutionLevelVO dto1 = new PieChartOfPollutionLevelVO();
        dto1.setTime("2021-11");
        List<Map<String,Object>> list1 = new ArrayList<>();
        Map<String,Object> map11 = new HashMap<>();
        map11.put("proportion","40%");
        map11.put("days",4);
        map11.put("pollution",0);
        list1.add(map11);
        Map<String,Object> map12 = new HashMap<>();
        map12.put("proportion","30%");
        map12.put("days",3);
        map12.put("pollution",1);
        list1.add(map12);
        Map<String,Object> map13 = new HashMap<>();
        map13.put("proportion","30%");
        map13.put("days",3);
        map13.put("pollution",2);
        list1.add(map13);
        Map<String,Object> map14 = new HashMap<>();
        map14.put("proportion","0%");
        map14.put("days",0);
        map14.put("pollution",3);
        list1.add(map14);
        Map<String,Object> map15 = new HashMap<>();
        map15.put("proportion","0%");
        map15.put("days",0);
        map15.put("pollution",4);
        list1.add(map15);
        Map<String,Object> map16 = new HashMap<>();
        map16.put("proportion","0%");
        map16.put("days",0);
        map16.put("pollution",5);
        list1.add(map16);
        dto1.setValues(list1);
        dto1.setTotalDays(10);
        dtos.add(dto);
        dtos.add(dto1);
        return ResultMessage.ok(dtos);
    }
    @GetMapping("queryBarChartOfPollutionLevel")
    public ResultMessage queryBarChartOfPollutionLevel(){
        BarChartOfPollutionLevelVO dto = new BarChartOfPollutionLevelVO();
        List<String> time = new ArrayList<>();
        time.add("2021-10");
        time.add("2021-11");
        List<Map<String,Object>> values = new ArrayList<>();
        Map<String,Object> map1 = new HashMap<>();
        map1.put("pollution",0);
        List<Integer> days1 = new ArrayList<>();
        days1.add(4);
        days1.add(6);
        List<String> proportion1 = new ArrayList<>();
        proportion1.add("40%");
        proportion1.add("60%");
        map1.put("days",days1);
        map1.put("proportion",proportion1);
        Map<String,Object> map2 = new HashMap<>();
        map2.put("pollution",1);
        List<Integer> days2 = new ArrayList<>();
        days2.add(1);
        days2.add(0);
        List<String> proportion2 = new ArrayList<>();
        proportion2.add("10%");
        proportion2.add("0%");
        map2.put("days",days2);
        map2.put("proportion",proportion2);
        Map<String,Object> map3 = new HashMap<>();
        map3.put("pollution",2);
        List<Integer> days3 = new ArrayList<>();
        days3.add(1);
        days3.add(0);
        List<String> proportion3 = new ArrayList<>();
        proportion3.add("10%");
        proportion3.add("0%");
        map3.put("days",days3);
        map3.put("proportion",proportion3);
        Map<String,Object> map4 = new HashMap<>();
        map4.put("pollution",3);
        List<Integer> days4 = new ArrayList<>();
        days4.add(2);
        days4.add(2);
        List<String> proportion4 = new ArrayList<>();
        proportion4.add("20%");
        proportion4.add("20%");
        map4.put("days",days4);
        map4.put("proportion",proportion4);
        Map<String,Object> map5 = new HashMap<>();
        map5.put("pollution",4);
        List<Integer> days5 = new ArrayList<>();
        days5.add(2);
        days5.add(2);
        List<String> proportion5 = new ArrayList<>();
        proportion5.add("20%");
        proportion5.add("20%");
        map5.put("days",days5);
        map5.put("proportion",proportion5);
        Map<String,Object> map6 = new HashMap<>();
        map6.put("pollution",5);
        List<Integer> days6 = new ArrayList<>();
        days6.add(0);
        days6.add(0);
        List<String> proportion6 = new ArrayList<>();
        proportion6.add("0%");
        proportion6.add("0%");
        map6.put("days",days6);
        map6.put("proportion",proportion6);
        values.add(map1);
        values.add(map2);
        values.add(map3);
        values.add(map4);
        values.add(map5);
        values.add(map6);
        dto.setTime(time);
        dto.setValues(values);
        return ResultMessage.ok(dto);
    public ResultMessage queryBarChartOfPollutionLevel(QueryChartOfPollutionLevelForm form){
        //判断是否缺少参数
        if (!form.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //查询数据
        List<MonthlyPollutionLevel> datas = cityAqiDailyService.queryBarChartOfPollutionLevels(form);
        //数据格式转换
        BarChartOfPollutionLevelVO vo = BarChartOfPollutionLevelVO.convert(datas);
        return ResultMessage.ok(vo);
    }
    @GetMapping("queryBarChatTableOfPollutionLevel")
    public ResultMessage queryBarChatTableOfPollutionLevel(){
    public ResultMessage queryBarChatTableOfPollutionLevel(QueryChartOfPollutionLevelForm form){
        //判断是否缺少参数
        if (!form.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //查询数据
        List<MonthlyPollutionLevel> datas = cityAqiDailyService.queryBarChartOfPollutionLevels(form);
        List<BarChartTableOfPollutionLevelVO> vos = new ArrayList<>();
        BarChartTableOfPollutionLevelVO vo1 = new BarChartTableOfPollutionLevelVO();
        BarChartTableOfPollutionLevelVO vo2 = new BarChartTableOfPollutionLevelVO();
        vo1.setExcellent("4(40%)");
        vo1.setGood("1(10%)");
        vo1.setMild("1(10%)");
        vo1.setMiddle("2(20%)");
        vo1.setSerious("2(20%)");
        vo1.setServer("0(0%)");
        vo1.setTotal("10(100%)");
        vo1.setTime("2021年10月");
        vo2.setExcellent("6(60%)");
        vo2.setGood("0(0%)");
        vo2.setMild("0(0%)");
        vo2.setMiddle("2(20%)");
        vo2.setSerious("2(20%)");
        vo2.setServer("0(0%)");
        vo2.setTotal("10(100%)");
        vo2.setTime("2021年11月");
        vos.add(vo1);
        vos.add(vo2);
        for (MonthlyPollutionLevel data : datas) {
            BarChartTableOfPollutionLevelVO vo = BarChartTableOfPollutionLevelVO.convert(data);
            vos.add(vo);
        }
        return ResultMessage.ok(vos);
    }
screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartOfPollutionLevelVO.java
File was deleted
screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartTableOfPollutionLevelVO.java
File was deleted
screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/MonthlyPollutionLevel.java
New file
@@ -0,0 +1,26 @@
package com.moral.api.pojo.dto.cityAQI;
import lombok.Data;
import java.util.List;
/**
 * @ClassName MonthlyPollutionLevel
 * @Description 每个月的污染信息
 * @Author 陈凯裕
 * @Date 2021/11/22 9:52
 * @Version TODO
 **/
@Data
public class MonthlyPollutionLevel {
    /*
    * 格式yyyy年MM月
    * */
    private String time;
    /*
    * 每个污染等级的天数和占比
    * */
    private List<PollutionDaysAndProportion> pollutionDaysAndProportions;
}
screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PollutionDaysAndProportion.java
New file
@@ -0,0 +1,29 @@
package com.moral.api.pojo.dto.cityAQI;
import lombok.Data;
/**
 * @ClassName PollutionDaysAndProportion
 * @Description 污染天气以及占比
 * @Author 陈凯裕
 * @Date 2021/11/22 9:50
 * @Version TODO
 **/
@Data
public class PollutionDaysAndProportion {
    /*
    * 污染等级
    * */
    private String pollutionLevel;
    /*
    * 污染天数
    * */
    private Integer days;
    /*
    * 占比
    * */
    private String proportion;
}
screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryChartOfPollutionLevelForm.java
File was renamed from screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryPieChartOfPollutionLevelForm.java
@@ -15,7 +15,7 @@
 * @Version TODO
 **/
@Data
public class QueryPieChartOfPollutionLevelForm {
public class QueryChartOfPollutionLevelForm {
    /*
     * 地区码 必传
screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartOfPollutionLevelVO.java
New file
@@ -0,0 +1,61 @@
package com.moral.api.pojo.vo.cityAQI;
import com.moral.api.pojo.dto.cityAQI.MonthlyPollutionLevel;
import com.moral.api.pojo.dto.cityAQI.PollutionDaysAndProportion;
import lombok.Data;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @ClassName BarChartOfPollutionLevelDTO
 * @Description 柱状图数据DTO
 * @Author 陈凯裕
 * @Date 2021/11/19 8:31
 * @Version TODO
 **/
@Data
public class BarChartOfPollutionLevelVO {
    /*时间集合*/
    List<String> time;
    /*污染信息,一共有5个Map,分别对应五个污染等级
     * Map中有三个字段
     * pollution表示污染等级
     * days存放天数集合
     * proportion存放天数占比的集合*/
    List<Map<String, Object>> values;
    public static BarChartOfPollutionLevelVO convert(List<MonthlyPollutionLevel> datas) {
        BarChartOfPollutionLevelVO vo = new BarChartOfPollutionLevelVO();
        List<String> time = new ArrayList<>();
        List<Map<String, Object>> values= new ArrayList<>();
        //6个污染等级循环获取数据
        for (int i = 0; i <= 5; i++) {
            Map<String,Object> map = new HashMap<>();
            List<String> proportion = new ArrayList<>();
            List<Integer> days = new ArrayList<>();
            String pollution = String.valueOf(i);
            for (MonthlyPollutionLevel data : datas) {
                if(!time.contains(data.getTime()))
                    time.add(data.getTime());
                List<PollutionDaysAndProportion> pollutionDaysAndProportions = data.getPollutionDaysAndProportions();
                for (PollutionDaysAndProportion pollutionDaysAndProportion : pollutionDaysAndProportions) {
                    if(pollutionDaysAndProportion.getPollutionLevel().equals(pollution)){
                        proportion.add(pollutionDaysAndProportion.getProportion());
                        days.add(pollutionDaysAndProportion.getDays());
                    }
                }
            }
            map.put("proportion",proportion);
            map.put("days",days);
            map.put("pollution",pollution);
            values.add(map);
        }
        vo.setTime(time);
        vo.setValues(values);
        return vo;
    }
}
screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java
New file
@@ -0,0 +1,95 @@
package com.moral.api.pojo.vo.cityAQI;
import com.moral.api.pojo.dto.cityAQI.MonthlyPollutionLevel;
import com.moral.api.pojo.dto.cityAQI.PollutionDaysAndProportion;
import lombok.Data;
import java.util.List;
/**
 * @ClassName BarChartTableOfPollutionLevelVO
 * @Description 柱状图数据表格的VO
 * @Author 陈凯裕
 * @Date 2021/11/22 9:05
 * @Version TODO
 **/
@Data
public class BarChartTableOfPollutionLevelVO {
    /*
    * 时间
    * */
    private String time;
    /*
    * 优
    * */
    private String excellent;
    /*
    * 良
    * */
    private String good;
    /*
    * 轻度污染
    * */
    private String mild;
    /*
    * 中度污染
    * */
    private String middle;
    /*
    * 重度污染
    * */
    private String serious;
    /*
    * 严重污染
    * */
    private String server;
    /*
    * 合计
    * */
    private String total;
    public static BarChartTableOfPollutionLevelVO convert(MonthlyPollutionLevel data){
        BarChartTableOfPollutionLevelVO vo = new BarChartTableOfPollutionLevelVO();
        vo.setTime(data.getTime().replaceAll("-","年")+"月");
        List<PollutionDaysAndProportion> pollutionDaysAndProportions = data.getPollutionDaysAndProportions();
        if(pollutionDaysAndProportions.size()!=6)
            return null;
        //拼接每个污染等级天数和百分比
        PollutionDaysAndProportion excellentProportion = pollutionDaysAndProportions.get(0);
        PollutionDaysAndProportion goodProportion = pollutionDaysAndProportions.get(1);
        PollutionDaysAndProportion mildProportion = pollutionDaysAndProportions.get(2);
        PollutionDaysAndProportion middleProportion = pollutionDaysAndProportions.get(3);
        PollutionDaysAndProportion seriousProportion = pollutionDaysAndProportions.get(4);
        PollutionDaysAndProportion serverProportion = pollutionDaysAndProportions.get(5);
        String excellent = excellentProportion.getDays()+"("+excellentProportion.getProportion()+")";
        String good = goodProportion.getDays()+"("+goodProportion.getProportion()+")";
        String mild = mildProportion.getDays()+"("+mildProportion.getProportion()+")";
        String middle = middleProportion.getDays()+"("+middleProportion.getProportion()+")";
        String serious = seriousProportion.getDays()+"("+seriousProportion.getProportion()+")";
        String server = serverProportion.getDays()+"("+serverProportion.getProportion()+")";
        //拼接共计天数
        Integer totalDays = excellentProportion.getDays()+
                goodProportion.getDays()+
                mildProportion.getDays()+
                middleProportion.getDays()+
                seriousProportion.getDays()+
                serverProportion.getDays();
        vo.setTotal(totalDays+"(100%)");
        vo.setExcellent(excellent);
        vo.setGood(good);
        vo.setMild(mild);
        vo.setMiddle(middle);
        vo.setSerious(serious);
        vo.setServer(server);
        return vo;
    }
}
screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/PieChartOfPollutionLevelVO.java
File was renamed from screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PieChartOfPollutionLevelVO.java
@@ -1,4 +1,4 @@
package com.moral.api.pojo.dto.cityAQI;
package com.moral.api.pojo.vo.cityAQI;
import lombok.Data;
screen-api/src/main/java/com/moral/api/service/CityAqiDailyService.java
@@ -2,8 +2,11 @@
import com.moral.api.entity.CityAqiDaily;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.pojo.dto.cityAQI.PieChartOfPollutionLevelVO;
import com.moral.api.pojo.form.aqi.QueryPieChartOfPollutionLevelForm;
import com.moral.api.pojo.dto.cityAQI.MonthlyPollutionLevel;
import com.moral.api.pojo.vo.cityAQI.PieChartOfPollutionLevelVO;
import com.moral.api.pojo.form.aqi.QueryChartOfPollutionLevelForm;
import java.util.List;
/**
 * <p>
@@ -22,6 +25,14 @@
            * @Author: 陈凯裕
            * @Date: 2021/11/9
            */
    PieChartOfPollutionLevelVO queryPieChartOfPollutionLevels(QueryPieChartOfPollutionLevelForm form);
    PieChartOfPollutionLevelVO queryPieChartOfPollutionLevels(QueryChartOfPollutionLevelForm form);
    /**
    * @Description: 查询污染等级的柱状图数据,包括天数和占比
            * @Param: [form]
            * @return: java.util.List<com.moral.api.pojo.dto.cityAQI.MonthlyPollutionLevel>
            * @Author: 陈凯裕
            * @Date: 2021/11/22
            */
    List<MonthlyPollutionLevel> queryBarChartOfPollutionLevels(QueryChartOfPollutionLevelForm form);
}
screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java
@@ -4,8 +4,10 @@
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.PieChartOfPollutionLevelVO;
import com.moral.api.pojo.form.aqi.QueryPieChartOfPollutionLevelForm;
import com.moral.api.pojo.dto.cityAQI.MonthlyPollutionLevel;
import com.moral.api.pojo.dto.cityAQI.PollutionDaysAndProportion;
import com.moral.api.pojo.vo.cityAQI.PieChartOfPollutionLevelVO;
import com.moral.api.pojo.form.aqi.QueryChartOfPollutionLevelForm;
import com.moral.api.service.CityAqiDailyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
@@ -14,7 +16,9 @@
import com.moral.util.MathUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -32,7 +36,7 @@
    CityAqiDailyMapper cityAqiDailyMapper;
    @Override
    public PieChartOfPollutionLevelVO queryPieChartOfPollutionLevels(QueryPieChartOfPollutionLevelForm form) {
    public PieChartOfPollutionLevelVO queryPieChartOfPollutionLevels(QueryChartOfPollutionLevelForm form) {
        //取参
        Integer regionCode = form.getRegionCode();
        Date startDate = form.getStartDate();
@@ -99,4 +103,87 @@
        VO.setTotalDays(totalDays);
        return VO;
    }
    @Override
    public List<MonthlyPollutionLevel> queryBarChartOfPollutionLevels(QueryChartOfPollutionLevelForm form) {
        //取参
        Integer regionCode = form.getRegionCode();
        Date startDate = form.getStartDate();
        Date endDate = form.getEndDate();
        //查询数据
        QueryWrapper<CityAqiDaily> wrapper = new QueryWrapper<>();
        wrapper.eq("city_code", regionCode);
        wrapper.between("time", startDate, endDate);
        wrapper.orderByAsc("time");
        List<CityAqiDaily> cityAqiDailies = cityAqiDailyMapper.selectList(wrapper);
        //如果数据的时间有重复则去重
        Map<String, CityAqiDaily> tmpMap = new LinkedHashMap<>();
        for (CityAqiDaily cityAqiDaily : cityAqiDailies) {
            String tmpTime = DateUtils.dateToDateString(cityAqiDaily.getTime(), "yyyy-MM-dd");
            tmpMap.put(tmpTime, cityAqiDaily);
        }
        cityAqiDailies = new ArrayList<CityAqiDaily>(tmpMap.values());
        //按照月份对数据进行分类
        Map<String, List<CityAqiDaily>> monthlyDataMap = new LinkedHashMap<>();
        cityAqiDailies.forEach(value -> {
            String month = DateUtils.dateToDateString(value.getTime(), "yyyy-MM");
            List<CityAqiDaily> dataList = monthlyDataMap.get(month);
            if (ObjectUtils.isEmpty(dataList))
                dataList = new ArrayList<>();
            dataList.add(value);
            monthlyDataMap.put(month, dataList);
        });
        //计算污染天数和比例
        List<MonthlyPollutionLevel> monthlyPollutionLevels = new ArrayList<>();
        Set<Map.Entry<String, List<CityAqiDaily>>> monthlyEntries = monthlyDataMap.entrySet();
        Iterator<Map.Entry<String, List<CityAqiDaily>>> monthlyIterator = monthlyEntries.iterator();
        while(monthlyIterator.hasNext()){
            Map.Entry<String, List<CityAqiDaily>> monthlyEntry = monthlyIterator.next();
            List<CityAqiDaily> monthlyValues = monthlyEntry.getValue();
            //用于统计各个污染等级的天数
            Map<String, Integer> 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 : monthlyValues) {
                Map<String, Object> 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<PollutionDaysAndProportion> pollutionDaysAndProportions = new ArrayList<>();
            Set<Map.Entry<String, Integer>> entries = pollutionDaysMap.entrySet();
            Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, Integer> entry = iterator.next();
                String pollution = entry.getKey();
                Integer days = entry.getValue();
                Double proportionTmp = MathUtils.division(Double.valueOf(days), Double.valueOf(monthlyValues.size()), 3);
                Double proportionD = MathUtils.mul(proportionTmp, 100);
                String proportion = proportionD.toString() + "%";
                PollutionDaysAndProportion pollutionDaysAndProportion = new PollutionDaysAndProportion();
                pollutionDaysAndProportion.setDays(days);
                pollutionDaysAndProportion.setPollutionLevel(pollution);
                pollutionDaysAndProportion.setProportion(proportion);
                pollutionDaysAndProportions.add(pollutionDaysAndProportion);
            }
            //封装返回对象
            MonthlyPollutionLevel monthlyPollutionLevel = new MonthlyPollutionLevel();
            monthlyPollutionLevel.setPollutionDaysAndProportions(pollutionDaysAndProportions);
            monthlyPollutionLevel.setTime(monthlyEntry.getKey());
            monthlyPollutionLevels.add(monthlyPollutionLevel);
        }
        return monthlyPollutionLevels;
    }
}