package com.moral.api.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.CityConfigWeatherForecast; import com.moral.api.entity.CityWeatherForecast; import com.moral.api.mapper.CityWeatherForecastMapper; import com.moral.api.service.CityConfigWeatherForecastService; import com.moral.api.service.CityWeatherForecastService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.constant.Constants; import com.moral.util.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** *

* 城市预测气象数据表 服务实现类 *

* * @author moral * @since 2021-12-30 */ @Service public class CityWeatherForecastServiceImpl extends ServiceImpl implements CityWeatherForecastService { @Autowired private CityConfigWeatherForecastService cityConfigWeatherForecastService; @Autowired private CityWeatherForecastMapper cityWeatherForecastMapper; //城市预测气象数据来源于,和风天气,逐小时天气预报(未来72小时)商业版 @Override public void insertCityWeatherForecast() { RestTemplate restTemplate = new RestTemplate( new HttpComponentsClientHttpRequestFactory()); // 使用HttpClient,支持GZIP restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); Date nextDay = DateUtils.addDays(new Date(), 1); String nextTime = DateUtils.dateToDateString(nextDay, DateUtils.yyyy_MM_dd_EN); //获取城市配置 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.select("city_code", "location_id").eq("is_delete", Constants.NOT_DELETE); List list = cityConfigWeatherForecastService.list(wrapper); List cityWeatherForecasts = new ArrayList<>(); for (CityConfigWeatherForecast cityConfigWeatherForecast : list) { Integer cityCode = cityConfigWeatherForecast.getCityCode(); Integer locationId = cityConfigWeatherForecast.getLocationId(); //Map data = restTemplate.getForObject("https://api.qweather.com/v7/weather/72h?key=da05c6c4852d4f7aa3364a9236ee9e26&gzip=n&location={1}", Map.class, locationId); Map data = restTemplate.getForObject("https://devapi.qweather.com/v7/weather/24h?location="+locationId+"&key=2430ab9e636c4950a686fbd84e3ccb3a", Map.class); //Map data = restTemplate.getForObject(url,Map.class); List> hourly = (List>) data.get("hourly"); for (Map hourlyMap : hourly) { String fxTime = hourlyMap.get("fxTime").toString(); String dayTime = fxTime.split("T")[0]; //if (dayTime.equals(nextTime)) { String hourTime = fxTime.substring(0, 17).replaceAll("T", " "); CityWeatherForecast cityWeatherForecast = new CityWeatherForecast(); cityWeatherForecast.setCityCode(cityCode); cityWeatherForecast.setTime(DateUtils.getDate(hourTime, DateUtils.yyyy_MM_dd_HH_EN)); cityWeatherForecast.setValue(JSONObject.toJSONString(hourlyMap)); cityWeatherForecasts.add(cityWeatherForecast); //} } } cityWeatherForecastMapper.insertCityWeatherForecast(cityWeatherForecasts); } public static void main(String[] args) { String url = "https://devapi.qweather.com/v7/weather/24h?location=101010100&key=2430ab9e636c4950a686fbd84e3ccb3a"; //此处换为自己的地址 RestTemplate restTemplate = new RestTemplate( new HttpComponentsClientHttpRequestFactory()); // 使用HttpClient,支持GZIP restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); Map data = restTemplate.getForObject(url,Map.class); List> hourly = (List>) data.get("hourly"); int i = 0; //String url = "https://devapi.qweather.com/v7/weather/24h?location=101010100&key=2430ab9e636c4950a686fbd84e3ccb3a"; //此处换为自己的地址 // String response = restTemplate.getForObject(url,String.class); } }