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-common/src/main/java/com/moral/util/DateUtils.java | 2 screen-api/src/main/java/com/moral/api/pojo/form/aqi/SpecialCitiesPollutionLevelForm.java | 56 +++++++++ screen-api/src/main/java/com/moral/api/service/CityAqiDailyService.java | 12 + screen-api/src/main/resources/application-dev.yml | 3 screen-api/src/main/java/com/moral/api/config/properties/SpecialCitiesProperties.java | 23 +++ screen-api/src/main/java/com/moral/api/controller/AqiController.java | 20 +++ screen-api/src/main/java/com/moral/api/pojo/form/aqi/AreaPollutionLevelForm.java | 2 screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java | 113 ++++++++++++------ screen-api/src/main/resources/application-specialCity.yml | 77 ++++++++++++ 9 files changed, 262 insertions(+), 46 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/config/properties/SpecialCitiesProperties.java b/screen-api/src/main/java/com/moral/api/config/properties/SpecialCitiesProperties.java new file mode 100644 index 0000000..76e9c0c --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/config/properties/SpecialCitiesProperties.java @@ -0,0 +1,23 @@ +package com.moral.api.config.properties; + +import com.moral.api.entity.SysArea; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName + * @Description TODO + * @Author ��������� + * @Date 2021/12/31 8:56 + * @Version TODO + **/ +@Data +@ConfigurationProperties(prefix = "special-city") +@Component +public class SpecialCitiesProperties { + private List<SysArea> twentyEightCities; +} diff --git a/screen-api/src/main/java/com/moral/api/controller/AqiController.java b/screen-api/src/main/java/com/moral/api/controller/AqiController.java index b504c3b..75b1f05 100644 --- a/screen-api/src/main/java/com/moral/api/controller/AqiController.java +++ b/screen-api/src/main/java/com/moral/api/controller/AqiController.java @@ -3,6 +3,7 @@ import com.moral.api.pojo.dto.cityAQI.CityPollutionLevel; import com.moral.api.pojo.dto.cityAQI.MonthlyPollutionLevel; import com.moral.api.pojo.form.aqi.AreaPollutionLevelForm; +import com.moral.api.pojo.form.aqi.SpecialCitiesPollutionLevelForm; import com.moral.api.pojo.vo.cityAQI.BarChartOfPollutionLevelVO; import com.moral.api.pojo.vo.cityAQI.BarChartTableOfPollutionLevelVO; import com.moral.api.pojo.vo.cityAQI.PieChartOfPollutionLevelVO; @@ -213,7 +214,26 @@ ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); //������������������ List<CityPollutionLevel> datas = cityAqiDailyService.queryAreaPollutionLevel(form); + //������������ + return ResultMessage.ok(datas); + } + /** + * @Description: ������26+2������������������������ + * @Param: [form] + * @return: com.moral.constant.ResultMessage + * @Author: ��������� + * @Date: 2021/12/31 + */ + @GetMapping("qeury28CitiesPollutionLevel") + public ResultMessage qeury28CitiesPollutionLevel(SpecialCitiesPollutionLevelForm form){ + //������������������������ + if (!form.valid()) + return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), + ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + //������������������ + List<CityPollutionLevel> datas = cityAqiDailyService.querySpecialCitiesPollutionLevel(form); + //������������ return ResultMessage.ok(datas); } diff --git a/screen-api/src/main/java/com/moral/api/pojo/form/aqi/AreaPollutionLevelForm.java b/screen-api/src/main/java/com/moral/api/pojo/form/aqi/AreaPollutionLevelForm.java index 70b13bc..e0648fe 100644 --- a/screen-api/src/main/java/com/moral/api/pojo/form/aqi/AreaPollutionLevelForm.java +++ b/screen-api/src/main/java/com/moral/api/pojo/form/aqi/AreaPollutionLevelForm.java @@ -63,6 +63,4 @@ endDate = DateUtils.getLastDayOfMonth(month); return true; } - - } diff --git a/screen-api/src/main/java/com/moral/api/pojo/form/aqi/SpecialCitiesPollutionLevelForm.java b/screen-api/src/main/java/com/moral/api/pojo/form/aqi/SpecialCitiesPollutionLevelForm.java new file mode 100644 index 0000000..119d144 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/form/aqi/SpecialCitiesPollutionLevelForm.java @@ -0,0 +1,56 @@ +package com.moral.api.pojo.form.aqi; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.moral.util.DateUtils; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @ClassName SpecialCitiesPollutionLevel + * @Description ������28���74��������������������������� + * @Author ��������� + * @Date 2021/12/31 9:35 + * @Version TODO + **/ +@Data +public class SpecialCitiesPollutionLevelForm { + /* + * ��������������������������������������������� + * */ + @DateTimeFormat(pattern = "yyyy") + @JsonFormat(pattern = "yyyy", timezone = "GMT+8") + private Date year; + + /* + * ��������������������������������������������� + * */ + @DateTimeFormat(pattern = "yyyy-MM") + @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") + private Date month; + + /* + * ���������������������������������������form������������ + * */ + private Date startDate; + + /* + * ���������������������������������������form������������ + * */ + private Date endDate; + + public boolean valid() { + if ( (year == null && month == null)||(year != null && month != null)) + return false; + //������������ + if (year != null) { + startDate = DateUtils.getFirstDayOfYear(year); + endDate = DateUtils.getLastDayOfYear(year); + return true; + } + startDate = DateUtils.getFirstDayOfMonth(month); + endDate = DateUtils.getLastDayOfMonth(month); + return true; + } +} diff --git a/screen-api/src/main/java/com/moral/api/service/CityAqiDailyService.java b/screen-api/src/main/java/com/moral/api/service/CityAqiDailyService.java index 7dd6cef..54138d4 100644 --- a/screen-api/src/main/java/com/moral/api/service/CityAqiDailyService.java +++ b/screen-api/src/main/java/com/moral/api/service/CityAqiDailyService.java @@ -5,6 +5,7 @@ import com.moral.api.pojo.dto.cityAQI.CityPollutionLevel; import com.moral.api.pojo.dto.cityAQI.MonthlyPollutionLevel; 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; @@ -49,11 +50,20 @@ Map<String,Map<String,Object>> oneYearsData(Map map); /** - * @Description: ������������������������������������������������ + * @Description: ��������������������������������������������� * @Param: [AreaPollutionLevelForm] * @return: java.util.List<com.moral.api.pojo.dto.cityAQI.CityPollutionLevel> * @Author: ��������� * @Date: 2021/12/30 */ List<CityPollutionLevel> queryAreaPollutionLevel(AreaPollutionLevelForm form); + + /** + * @Description: ������28������������������ + * @Param: [form] + * @return: java.util.List<com.moral.api.pojo.dto.cityAQI.CityPollutionLevel> + * @Author: ��������� + * @Date: 2021/12/31 + */ + List<CityPollutionLevel> querySpecialCitiesPollutionLevel(SpecialCitiesPollutionLevelForm form); } 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; + } + } diff --git a/screen-api/src/main/resources/application-dev.yml b/screen-api/src/main/resources/application-dev.yml index e299b0c..2819277 100644 --- a/screen-api/src/main/resources/application-dev.yml +++ b/screen-api/src/main/resources/application-dev.yml @@ -13,8 +13,7 @@ spring: profiles: active: dev - include: - moduleFormColumn + include: specialCity application: name: screen-api redis: diff --git a/screen-api/src/main/resources/application-specialCity.yml b/screen-api/src/main/resources/application-specialCity.yml new file mode 100644 index 0000000..325faec --- /dev/null +++ b/screen-api/src/main/resources/application-specialCity.yml @@ -0,0 +1,77 @@ +special-city: + twentyEightCities: + - areaCode: 140400 + areaName: ��������� + - areaCode: 110000 + areaName: ��������� + - areaCode: 130900 + areaName: ��������� + - areaCode: 131000 + areaName: ��������� + - areaCode: 120000 + areaName: ��������� + - areaCode: 140300 + areaName: ��������� + - areaCode: 131100 + areaName: ��������� + - areaCode: 130200 + areaName: ��������� + - areaCode: 140500 + areaName: ��������� + - areaCode: 130600 + areaName: ��������� + - areaCode: 370800 + areaName: ��������� + - areaCode: 130400 + areaName: ��������� + - areaCode: 130500 + areaName: ��������� + - areaCode: 371600 + areaName: ��������� + - areaCode: 371500 + areaName: ��������� + - areaCode: 130100 + areaName: ������������ + - areaCode: 410200 + areaName: ��������� + - areaCode: 410900 + areaName: ��������� + - areaCode: 410000 + areaName: ��������� + - areaCode: 371400 + areaName: ��������� + - areaCode: 371700 + areaName: ��������� + - areaCode: 370100 + areaName: ��������� + - areaCode: 410600 + areaName: ��������� + - areaCode: 410800 + areaName: ��������� + - areaCode: 410700 + areaName: ��������� + - areaCode: 140100 + areaName: ��������� + - areaCode: 370300 + areaName: ��������� + - areaCode: 410500 + areaName: ��������� + + + + + + + + + + + + + + + + + + + diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java index 439c5d2..7776593 100644 --- a/screen-common/src/main/java/com/moral/util/DateUtils.java +++ b/screen-common/src/main/java/com/moral/util/DateUtils.java @@ -997,7 +997,7 @@ final Calendar cal = Calendar.getInstance(); cal.setTime(date); final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH); - cal.set(Calendar.DAY_OF_YEAR, last); + cal.set(Calendar.DAY_OF_MONTH, last); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); -- Gitblit v1.8.0