From 62e7442abe2ad4b296d0211e6f0cd327865fe24f Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Mon, 22 Nov 2021 17:13:44 +0800 Subject: [PATCH] screen-api 完成柱状图数据和表格的逻辑代码 --- /dev/null | 53 ---- screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartOfPollutionLevelVO.java | 61 +++++ screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java | 95 +++++++ screen-api/src/main/java/com/moral/api/service/CityAqiDailyService.java | 17 + screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryChartOfPollutionLevelForm.java | 2 screen-api/src/main/java/com/moral/api/controller/AqiController.java | 233 ++----------------- screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PollutionDaysAndProportion.java | 29 ++ screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/MonthlyPollutionLevel.java | 26 ++ screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/PieChartOfPollutionLevelVO.java | 2 screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java | 151 +++++++++-- 10 files changed, 373 insertions(+), 296 deletions(-) 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 c3210a4..c248635 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 @@ -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); } diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartOfPollutionLevelVO.java b/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartOfPollutionLevelVO.java deleted file mode 100644 index 33b8e5e..0000000 --- a/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartOfPollutionLevelVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.moral.api.pojo.dto.cityAQI; - -import lombok.Data; - -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; -} diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartTableOfPollutionLevelVO.java b/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartTableOfPollutionLevelVO.java deleted file mode 100644 index 3492c21..0000000 --- a/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/BarChartTableOfPollutionLevelVO.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.moral.api.pojo.dto.cityAQI; - -import lombok.Data; - -/** - * @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; -} diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/MonthlyPollutionLevel.java b/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/MonthlyPollutionLevel.java new file mode 100644 index 0000000..e13644a --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/MonthlyPollutionLevel.java @@ -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; +} diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PollutionDaysAndProportion.java b/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PollutionDaysAndProportion.java new file mode 100644 index 0000000..7ecfcbd --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PollutionDaysAndProportion.java @@ -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; +} diff --git a/screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryPieChartOfPollutionLevelForm.java b/screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryChartOfPollutionLevelForm.java similarity index 97% rename from screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryPieChartOfPollutionLevelForm.java rename to screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryChartOfPollutionLevelForm.java index 20da5e5..2fde5d9 100644 --- a/screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryPieChartOfPollutionLevelForm.java +++ b/screen-api/src/main/java/com/moral/api/pojo/form/aqi/QueryChartOfPollutionLevelForm.java @@ -15,7 +15,7 @@ * @Version TODO **/ @Data -public class QueryPieChartOfPollutionLevelForm { +public class QueryChartOfPollutionLevelForm { /* * ��������� ������ diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartOfPollutionLevelVO.java b/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartOfPollutionLevelVO.java new file mode 100644 index 0000000..3625912 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartOfPollutionLevelVO.java @@ -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; + } +} diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java b/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java new file mode 100644 index 0000000..0c9a4b5 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java @@ -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; + } +} diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PieChartOfPollutionLevelVO.java b/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/PieChartOfPollutionLevelVO.java similarity index 95% rename from screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PieChartOfPollutionLevelVO.java rename to screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/PieChartOfPollutionLevelVO.java index f08dea9..1d687a0 100644 --- a/screen-api/src/main/java/com/moral/api/pojo/dto/cityAQI/PieChartOfPollutionLevelVO.java +++ b/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/PieChartOfPollutionLevelVO.java @@ -1,4 +1,4 @@ -package com.moral.api.pojo.dto.cityAQI; +package com.moral.api.pojo.vo.cityAQI; import lombok.Data; 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 046b3a7..aff00f4 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 @@ -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); } 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 a360244..29c0706 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 @@ -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,65 +36,65 @@ CityAqiDailyMapper cityAqiDailyMapper; @Override - public PieChartOfPollutionLevelVO queryPieChartOfPollutionLevels(QueryPieChartOfPollutionLevelForm form) { + public PieChartOfPollutionLevelVO queryPieChartOfPollutionLevels(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.eq("city_code", regionCode); + wrapper.between("time", startDate, endDate); List<CityAqiDaily> cityAqiDailies = cityAqiDailyMapper.selectList(wrapper); //���������������������,������������time - if(cityAqiDailies.size()==0) + 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; + 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<String,CityAqiDaily> tmpMap = new HashMap<>(); + Map<String, CityAqiDaily> tmpMap = new HashMap<>(); for (CityAqiDaily cityAqiDaily : cityAqiDailies) { - String tmpTime = DateUtils.dateToDateString(cityAqiDaily.getTime(),"yyyy-MM-dd"); - tmpMap.put(tmpTime,cityAqiDaily); + 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); + 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) + 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); + pollutionDaysMap.put(pollutionClass, days + 1); } //������������ - List<Map<String,Object>> valueMap = new ArrayList<>(); + List<Map<String, Object>> valueMap = new ArrayList<>(); Set<Map.Entry<String, Integer>> entries = pollutionDaysMap.entrySet(); Iterator<Map.Entry<String, Integer>> iterator = entries.iterator(); Integer totalDays = 0; - while(iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry<String, Integer> entry = iterator.next(); - Map<String,Object> pollutionMap = new HashMap<>(); + Map<String, Object> pollutionMap = new HashMap<>(); String pollution = entry.getKey(); Integer days = entry.getValue(); - Double proportionTmp = MathUtils.division(Double.valueOf(days),Double.valueOf(cityAqiDailies.size()),3); - Double proportionD = MathUtils.mul(proportionTmp,100); - String proportion = proportionD.toString()+"%"; - pollutionMap.put("proportion",proportion); - pollutionMap.put("pollution",pollution); - pollutionMap.put("days",days); + Double proportionTmp = MathUtils.division(Double.valueOf(days), Double.valueOf(cityAqiDailies.size()), 3); + Double proportionD = MathUtils.mul(proportionTmp, 100); + String proportion = proportionD.toString() + "%"; + pollutionMap.put("proportion", proportion); + pollutionMap.put("pollution", pollution); + pollutionMap.put("days", days); valueMap.add(pollutionMap); - totalDays+=days; + totalDays += days; } //������������������ PieChartOfPollutionLevelVO VO = new PieChartOfPollutionLevelVO(); @@ -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; + } + + } -- Gitblit v1.8.0