From a54daffd42f8d62eee0ac01b79d126d100f08e1d Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Tue, 09 Nov 2021 10:32:02 +0800
Subject: [PATCH] screen-api            增加获取今年天气污染等级比例接口

---
 screen-common/src/main/java/com/moral/util/DateUtils.java                                    |   21 +++++++
 screen-api/src/main/java/com/moral/api/service/CityAqiDailyService.java                      |   10 +++
 screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/PollutionLevelProportionDTO.java |   28 +++++++++
 screen-api/src/main/java/com/moral/api/controller/AqiController.java                         |   10 +++
 screen-common/src/main/java/com/moral/constant/Constants.java                                |   12 ++--
 screen-api/src/main/java/com/moral/api/service/impl/CityAqiDailyServiceImpl.java             |   74 ++++++++++++++++++++++++
 6 files changed, 149 insertions(+), 6 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 4222a87..172fbad 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,5 +1,7 @@
 package com.moral.api.controller;
 
+import com.moral.api.pojo.dto.dataDisplay.PollutionLevelProportionDTO;
+import com.moral.api.service.CityAqiDailyService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -29,6 +31,8 @@
 
     @Autowired
     private CityAqiService cityAqiService;
+    @Autowired
+    private CityAqiDailyService cityAqiDailyService;
 
     @GetMapping("compareO3")
     @ApiOperation(value = "���������������������������", notes = "���������������������������")
@@ -83,6 +87,12 @@
         return ResultMessage.ok(datas);
     }
 
+    @GetMapping("queryPollutionLevelsForThisYear")
+    public ResultMessage queryPollutionLevelsForThisYear(Integer regionCode){
+        PollutionLevelProportionDTO dto = cityAqiDailyService.queryPollutionLevelsForThisYear(regionCode);
+        return ResultMessage.ok(dto);
+    }
+
     @GetMapping("provincialRanking")
     @ApiOperation(value = "������������", notes = "������������")
     @ApiImplicitParams(value = {
diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/PollutionLevelProportionDTO.java b/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/PollutionLevelProportionDTO.java
new file mode 100644
index 0000000..56db4d0
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/PollutionLevelProportionDTO.java
@@ -0,0 +1,28 @@
+package com.moral.api.pojo.dto.dataDisplay;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName ProportionOfWeather
+ * @Description ������������������������DTO
+ * @Author ���������
+ * @Date 2021/11/9 8:49
+ * @Version TODO
+ **/
+@Data
+public class PollutionLevelProportionDTO {
+    /*������������yyyy-MM-dd ��� yyyy-MM-dd*/
+    private String time;
+
+    /*
+    * List������������6���map������������������������������������������������������������������������������������������������������������������
+    * List���Map���key������
+     *       pollution���������������������
+     *       days:���������������������������������
+     *       proportion:���������������������������������������������
+    * */
+    private List<Map<String,Object>> values;
+}
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 c83f804..9dedad1 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,6 +2,7 @@
 
 import com.moral.api.entity.CityAqiDaily;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.pojo.dto.dataDisplay.PollutionLevelProportionDTO;
 
 /**
  * <p>
@@ -13,4 +14,13 @@
  */
 public interface CityAqiDailyService extends IService<CityAqiDaily> {
 
+    /**
+    * @Description: ���������������������������������������������������
+            * @Param: [regionCode]
+            * @return: com.moral.api.pojo.dto.dataDisplay.PollutionLevelProportionDTO
+            * @Author: ���������
+            * @Date: 2021/11/9
+            */
+    PollutionLevelProportionDTO queryPollutionLevelsForThisYear(Integer regionCode);
+
 }
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 42e8956..d4c1c90 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
@@ -1,10 +1,19 @@
 package com.moral.api.service.impl;
 
+import com.alibaba.fastjson.JSON;
+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.dataDisplay.PollutionLevelProportionDTO;
 import com.moral.api.service.CityAqiDailyService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.util.AQIUtils;
+import com.moral.util.DateUtils;
+import com.moral.util.MathUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.*;
 
 /**
  * <p>
@@ -17,4 +26,69 @@
 @Service
 public class CityAqiDailyServiceImpl extends ServiceImpl<CityAqiDailyMapper, CityAqiDaily> implements CityAqiDailyService {
 
+    @Autowired
+    CityAqiDailyMapper cityAqiDailyMapper;
+
+    @Override
+    public PollutionLevelProportionDTO queryPollutionLevelsForThisYear(Integer regionCode) {
+        //������������  ��������������� ���
+        Date startDate = DateUtils.getFirstDayOfCurrYear();
+        Date endDate = DateUtils.getYesterdayDate();
+        //������������
+        QueryWrapper<CityAqiDaily> wrapper = new QueryWrapper<>();
+        wrapper.eq("city_code",regionCode);
+        wrapper.between("time",startDate,endDate);
+        List<CityAqiDaily> cityAqiDailies = cityAqiDailyMapper.selectList(wrapper);
+        //���������������������,������������time
+        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;
+        //������������������������������
+        Map<String,CityAqiDaily> tmpMap = new HashMap<>();
+        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 HashMap<>();
+        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.classOfPollutionByAqi(aqi);
+            Integer days = pollutionDaysMap.get(pollutionClass);
+            if(days==null){
+                pollutionDaysMap.put(pollutionClass,1);
+            }else{
+                pollutionDaysMap.put(pollutionClass,days+1);
+            }
+        }
+        //������������
+        List<Map<String,Object>> valueMap = 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();
+            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 proprtionD = MathUtils.mul(proportionTmp,100);
+            String proportion = proprtionD.toString()+"%";
+            pollutionMap.put("proportion",proportion);
+            pollutionMap.put("pollution",pollution);
+            pollutionMap.put("days",days);
+            valueMap.add(pollutionMap);
+        }
+        //������������������
+        PollutionLevelProportionDTO dto = new PollutionLevelProportionDTO();
+        dto.setTime(time);
+        dto.setValues(valueMap);
+        return dto;
+    }
 }
diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java
index 683d5b2..cba88d8 100644
--- a/screen-common/src/main/java/com/moral/constant/Constants.java
+++ b/screen-common/src/main/java/com/moral/constant/Constants.java
@@ -244,15 +244,15 @@
     * */
     public static final String NORMAL_FLAG = "N";
 
-    public static final String EXCELLENT = "���";
+    public static final String EXCELLENT_WEATHER = "���";
 
-    public static final String GOOD = "���";
+    public static final String GOOD_WEATHER = "���";
 
-    public static final String MILD = "������������";
+    public static final String MILD_WEATHER = "������������";
 
-    public static final String MIDDLE = "������������";
+    public static final String MIDDLE_WEATHER = "������������";
 
-    public static final String SERIOUS = "������������";
+    public static final String SERIOUS_WEATHER = "������������";
 
-    public static final String SERVER = "������������";
+    public static final String SERVER_WEATHER = "������������";
 }
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 fd9ffc8..8d792d2 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -939,6 +939,15 @@
         return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN));
     }
 
+    /*
+    * ������������������������
+    * */
+    public static Date getFirstDayOfCurrYear(){
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.DAY_OF_YEAR,1);
+        return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN));
+    }
+
     /**
      * ������������������������������
      *
@@ -1030,6 +1039,18 @@
         return df.format(calendar.getTime());
     }
 
+    /*
+    * ������������Date
+    * */
+    public static Date getYesterdayDate(){
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(new Date());
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.add(Calendar.DAY_OF_MONTH, -1);
+        return cal.getTime();
+    }
 
     /**
      * 10���������������������

--
Gitblit v1.8.0