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