| | |
| | | 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> |
| | |
| | | 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] |