From 0f41a81a6b28e591bfe734ccd8327a936f9c29e0 Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Mon, 01 Nov 2021 09:16:41 +0800
Subject: [PATCH] screen-api            增加获取一个城市24小时AQI接口

---
 screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java |   87 +++++++++++++++++++++++++++++++++----------
 1 files changed, 67 insertions(+), 20 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java
index 1bde34d..a507002 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java
@@ -18,11 +18,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -102,35 +98,86 @@
 
     @Override
     public Map<String, Object> queryCityAqiByRegionCode(Integer regionCode) {
-        Map<String,Object> value = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.CITY_AQI,String.valueOf(regionCode));
-        if(value==null)
+        Map<String, Object> value = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.CITY_AQI, String.valueOf(regionCode));
+        if (value == null)
             value = queryCityAqiByRegionCodeFromDB(regionCode);
         //������AQI������������������
-        if(value==null||value.get("aqi")==null)
+        if (value == null || value.get("aqi") == null)
             return null;
         Integer aqi = Integer.parseInt(value.get("aqi").toString());
         String category = AQIUtils.classOfPollutionByAqi(aqi);
-        value.put("category",category);
+        value.put("category", category);
         return value;
     }
 
+    @Override
+    public Map<String, Object> query24HoursAqiByRegionCode(Integer regionCode) {
+        //������������������������������������������������������
+        QueryWrapper<CityAqi> lastDataWrapper = new QueryWrapper<>();
+        lastDataWrapper.eq("city_code", regionCode);
+        lastDataWrapper.orderByDesc("time");
+        lastDataWrapper.last(true, "limit 1");
+        CityAqi cityAqi = cityAqiMapper.selectOne(lastDataWrapper);
+        //���������24������������������
+        Date endDate = cityAqi.getTime();
+        Date startDate = DateUtils.addHours(endDate, -23);
+        //������������
+        QueryWrapper<CityAqi> wrapper = new QueryWrapper<>();
+        wrapper.between("time", startDate, endDate);
+        wrapper.eq("city_code", regionCode);
+        List<CityAqi> cityAqis = cityAqiMapper.selectList(wrapper);
+        //������������������24���������������
+        if (cityAqis.size() != 24) {
+            Map<Date, CityAqi> dateCityAqiMap = new HashMap<>();
+            cityAqis.forEach(value -> dateCityAqiMap.put(value.getTime(), value));
+            for (int i = 0; i < 24; i++) {
+                Date date = DateUtils.addHours(startDate, i);
+                CityAqi cityAqi1 = dateCityAqiMap.get(date);
+                if (cityAqi1 == null) {
+                    CityAqi newCityAqi = new CityAqi();
+                    newCityAqi.setTime(date);
+                    cityAqis.add(newCityAqi);
+                }
+            }
+            //������������������������
+            cityAqis.sort(Comparator.comparing(CityAqi::getTime));
+        }
+        //������������������,map���key���HH:mm������������������value���aqi���������
+        Map<String, Object> result = new LinkedHashMap<>();
+        for (CityAqi aqi : cityAqis) {
+            String key = DateUtils.dateToDateString(aqi.getTime(), "HH:mm");
+            String allDataJson = aqi.getValue();
+            if (allDataJson == null) {
+                result.put(key, "");
+                continue;
+            }
+            Map<String, Object> allDataMap = JSON.parseObject(allDataJson, Map.class);
+            Object aqiData = allDataMap.get("aqi");
+            if (aqiData == null)
+                result.put(key, "");
+            else
+                result.put(key, aqiData);
+        }
+        return result;
+    }
+
     /**
-    * @Description: ������������������������
-            * @Param: [regionCode]
-            * @return: java.util.Map<java.lang.String,java.lang.Object>
-            * @Author: ���������
-            * @Date: 2021/10/28
-            */
+     * @Description: ������������������������
+     * @Param: [regionCode]
+     * @return: java.util.Map<java.lang.String       ,       java.lang.Object>
+     * @Author: ���������
+     * @Date: 2021/10/28
+     */
     private Map<String, Object> queryCityAqiByRegionCodeFromDB(Integer regionCode) {
         QueryWrapper<CityAqi> wrapper = new QueryWrapper();
-        wrapper.eq("city_code",regionCode);
+        wrapper.eq("city_code", regionCode);
         wrapper.orderByDesc("time");
-        wrapper.last(true,"limit 1");
+        wrapper.last(true, "limit 1");
         CityAqi cityAqi = cityAqiMapper.selectOne(wrapper);
-        if(cityAqi==null)
+        if (cityAqi == null)
             return null;
         String value = cityAqi.getValue();
-        redisTemplate.opsForHash().put(RedisConstants.CITY_AQI,regionCode,value);
-        return  JSON.parseObject(value,Map.class);
+        redisTemplate.opsForHash().put(RedisConstants.CITY_AQI, regionCode, value);
+        return JSON.parseObject(value, Map.class);
     }
 }

--
Gitblit v1.8.0