From 82278e342046bf8a8b3b27fbd5ae5441c956773f Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Fri, 31 Dec 2021 10:32:07 +0800 Subject: [PATCH] screen-api 增加获取28城优良天气数接口 --- screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java | 113 ++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 73 insertions(+), 40 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java index 44e67e4..2fa600e 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java @@ -3,6 +3,7 @@ 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; @@ -10,6 +11,7 @@ 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; @@ -41,6 +43,8 @@ CityAqiDailyMapper cityAqiDailyMapper; @Autowired SysAreaService sysAreaService; + @Autowired + SpecialCitiesProperties specialCitiesProperties; @Override public PieChartOfPollutionLevelVO queryPieChartOfPollutionLevels(ChartOfPollutionLevelForm form) { @@ -283,6 +287,7 @@ return resultMap; } + @Override public List<CityPollutionLevel> queryAreaPollutionLevel(AreaPollutionLevelForm form) { //������ @@ -295,49 +300,77 @@ 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; + } + } -- Gitblit v1.8.0