| | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.moral.api.config.properties.SpecialCitiesProperties; |
| | | import com.moral.api.entity.CityAqiDaily; |
| | | import com.moral.api.entity.SysArea; |
| | | import com.moral.api.mapper.CityAqiDailyMapper; |
| | |
| | | import com.moral.api.pojo.dto.cityAQI.MonthlyPollutionLevel; |
| | | import com.moral.api.pojo.dto.cityAQI.PollutionDaysAndProportion; |
| | | import com.moral.api.pojo.form.aqi.AreaPollutionLevelForm; |
| | | import com.moral.api.pojo.form.aqi.SpecialCitiesPollutionLevelForm; |
| | | import com.moral.api.pojo.vo.cityAQI.PieChartOfPollutionLevelVO; |
| | | import com.moral.api.pojo.form.aqi.ChartOfPollutionLevelForm; |
| | | import com.moral.api.service.CityAqiDailyService; |
| | |
| | | CityAqiDailyMapper cityAqiDailyMapper; |
| | | @Autowired |
| | | SysAreaService sysAreaService; |
| | | @Autowired |
| | | SpecialCitiesProperties specialCitiesProperties; |
| | | |
| | | @Override |
| | | public PieChartOfPollutionLevelVO queryPieChartOfPollutionLevels(ChartOfPollutionLevelForm form) { |
| | |
| | | return resultMap; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<CityPollutionLevel> queryAreaPollutionLevel(AreaPollutionLevelForm form) { |
| | | //取参 |
| | |
| | | List<CityPollutionLevel> datas = new ArrayList<>(); |
| | | //遍历每个县级市 查询数据 |
| | | for (SysArea area : allAreas) { |
| | | //查询数据 |
| | | QueryWrapper<CityAqiDaily> wrapper = new QueryWrapper<>(); |
| | | wrapper.eq("city_code", area.getAreaCode()); |
| | | 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, 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 : cityAqiDailies) { |
| | | 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); |
| | | } |
| | | //封装对象 |
| | | CityPollutionLevel cityPollutionLevel = new CityPollutionLevel(); |
| | | cityPollutionLevel.setRegionName(area.getAreaName()); |
| | | cityPollutionLevel.setExcellentWeatherDays(pollutionDaysMap.get(Constants.EXCELLENT_WEATHER_CODE)); |
| | | cityPollutionLevel.setGoodWeatherDays(pollutionDaysMap.get(Constants.GOOD_WEATHER_CODE)); |
| | | cityPollutionLevel.setMildWeatherDays(pollutionDaysMap.get(Constants.MILD_WEATHER_CODE)); |
| | | cityPollutionLevel.setMiddleWeatherDays(pollutionDaysMap.get(Constants.MIDDLE_WEATHER_CODE)); |
| | | cityPollutionLevel.setSeriousWeatherDays(pollutionDaysMap.get(Constants.SERIOUS_WEATHER_CODE)); |
| | | cityPollutionLevel.setServerWeatherDays(pollutionDaysMap.get(Constants.SERVER_WEATHER_CODE)); |
| | | CityPollutionLevel cityPollutionLevel = calculateDaysByTimeAndCityCode(area,startDate,endDate); |
| | | datas.add(cityPollutionLevel); |
| | | } |
| | | return datas; |
| | | } |
| | | |
| | | @Override |
| | | public List<CityPollutionLevel> querySpecialCitiesPollutionLevel(SpecialCitiesPollutionLevelForm form) { |
| | | //取参 |
| | | Date startDate = form.getStartDate(); |
| | | Date endDate = form.getEndDate(); |
| | | List<SysArea> areas = specialCitiesProperties.getTwentyEightCities(); |
| | | //创建返回数据对象 |
| | | List<CityPollutionLevel> datas = new ArrayList<>(); |
| | | //遍历每个县级市 查询数据 |
| | | for (SysArea area : areas) { |
| | | CityPollutionLevel cityPollutionLevel = calculateDaysByTimeAndCityCode(area,startDate,endDate); |
| | | datas.add(cityPollutionLevel); |
| | | } |
| | | return datas; |
| | | } |
| | | |
| | | /** |
| | | * @Description: 根据地区对象和开始结束时间计算污染天气 |
| | | * @Param: [area, startDate, endDate] |
| | | * @return: com.moral.api.pojo.dto.cityAQI.CityPollutionLevel |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/12/31 |
| | | */ |
| | | private CityPollutionLevel calculateDaysByTimeAndCityCode(SysArea area, Date startDate, Date endDate) { |
| | | //查询数据 |
| | | QueryWrapper<CityAqiDaily> wrapper = new QueryWrapper<>(); |
| | | wrapper.eq("city_code", area.getAreaCode()); |
| | | 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, 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 : cityAqiDailies) { |
| | | 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); |
| | | } |
| | | //封装对象 |
| | | CityPollutionLevel cityPollutionLevel = new CityPollutionLevel(); |
| | | cityPollutionLevel.setRegionName(area.getAreaName()); |
| | | cityPollutionLevel.setExcellentWeatherDays(pollutionDaysMap.get(Constants.EXCELLENT_WEATHER_CODE)); |
| | | cityPollutionLevel.setGoodWeatherDays(pollutionDaysMap.get(Constants.GOOD_WEATHER_CODE)); |
| | | cityPollutionLevel.setMildWeatherDays(pollutionDaysMap.get(Constants.MILD_WEATHER_CODE)); |
| | | cityPollutionLevel.setMiddleWeatherDays(pollutionDaysMap.get(Constants.MIDDLE_WEATHER_CODE)); |
| | | cityPollutionLevel.setSeriousWeatherDays(pollutionDaysMap.get(Constants.SERIOUS_WEATHER_CODE)); |
| | | cityPollutionLevel.setServerWeatherDays(pollutionDaysMap.get(Constants.SERVER_WEATHER_CODE)); |
| | | return cityPollutionLevel; |
| | | } |
| | | |
| | | } |