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/CityAqiService.java | 9 ++++
screen-api/src/main/java/com/moral/api/controller/AqiController.java | 20 ++++++++++
screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java | 87 +++++++++++++++++++++++++++++++++----------
3 files changed, 96 insertions(+), 20 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 ae587b0..6024e57 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
@@ -43,9 +43,29 @@
return ResultMessage.ok(response);
}
+ /**
+ * @Description: ���������������6������aqi������
+ * @Param: [regionCode]
+ * @return: com.moral.constant.ResultMessage
+ * @Author: ���������
+ * @Date: 2021/11/1
+ */
@GetMapping("queryByRegionCode")
public ResultMessage queryByRegionCode(Integer regionCode){
Map<String, Object> value = cityAqiService.queryCityAqiByRegionCode(regionCode);
return ResultMessage.ok(value);
}
+
+ /**
+ * @Description: ������������24���������aqi������
+ * @Param: [regionCode]
+ * @return: com.moral.constant.ResultMessage
+ * @Author: ���������
+ * @Date: 2021/11/1
+ */
+ @GetMapping("query24HoursAQI")
+ public ResultMessage query24HoursAQIByRegionCode(Integer regionCode){
+ Map<String, Object> stringObjectMap = cityAqiService.query24HoursAqiByRegionCode(regionCode);
+ return ResultMessage.ok(stringObjectMap);
+ }
}
diff --git a/screen-api/src/main/java/com/moral/api/service/CityAqiService.java b/screen-api/src/main/java/com/moral/api/service/CityAqiService.java
index c87eff5..4f9d9d3 100644
--- a/screen-api/src/main/java/com/moral/api/service/CityAqiService.java
+++ b/screen-api/src/main/java/com/moral/api/service/CityAqiService.java
@@ -27,4 +27,13 @@
* @Date: 2021/10/28
*/
Map<String,Object> queryCityAqiByRegionCode(Integer regionCode);
+
+ /**
+ * @Description: ���������������������24���������aqi
+ * @Param: [regionCode]
+ * @return: java.util.Map<java.lang.String,java.lang.Object>
+ * @Author: ���������
+ * @Date: 2021/11/1
+ */
+ Map<String,Object> query24HoursAqiByRegionCode(Integer regionCode);
}
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