提交 9f67971d authored 作者: xuyanqi's avatar xuyanqi

Merge branch 'dev' of http://39.96.70.20:8080/A7/aroad into dev

package com.elephant.framework.galaxy.aroad.config;
import com.elephant.framework.galaxy.aroad.support.WxMappingJackson2HttpMessageConverter;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @program: RestTemplate 配置类
* @description: 用于访问 Web Api
* @author: songwenjie
* @create: 2019-03-27 13:57
**/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){
RestTemplate restTemplate = restTemplateBuilder.build();
restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
return restTemplate;
}
}
package com.elephant.framework.galaxy.aroad.module.roadcondition.controller;
import com.elephant.framework.galaxy.aroad.module.roadcondition.dto.WeatherDto;
import com.elephant.framework.galaxy.aroad.module.roadcondition.dto.WeatherLivesDto;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import com.elephant.framework.galaxy.aroad.response.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
import java.util.*;
/**
* <p>
* 高德实时天气
* </p>
* @author xuzhitu
* @since 2019-04-23
*/
@RestController
@RequestMapping("/qxfw")
public class GlgzcxSstqController extends BaseController {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/cxqx")
public R getWeatherLivesOfShandong(){
//获取山东17地市的实时天气数据并写入缓存
List<WeatherLivesDto> weatherLives = new ArrayList<>();
weatherLives = (List)redisTemplate.opsForValue().get("weatherLives");
if(weatherLives == null || weatherLives.size() <= 0) {
System.out.println("111");
weatherLives = getWeatherLives();
redisTemplate.opsForValue().set("weatherLives", weatherLives);
// 实时天气Redis缓存时间设为1小时
redisTemplate.expire("weatherLives",3600l,java.util.concurrent.TimeUnit.SECONDS);
}
return new R<>(weatherLives);
}
private static Iterable<Object[]> getCityCodes() {
return Arrays.asList(new Object[][]{
//山东17地市
{370100, "济南市", "base"},
{370200, "青岛市", "base"},
{370300, "淄博市", "base"},
{370400, "枣庄市", "base"},
{370500, "东营市", "base"},
{370600, "烟台市", "base"},
{370700, "潍坊市", "base"},
{370800, "济宁市", "base"},
{370900, "泰安市", "base"},
{371000, "威海市", "base"},
{371100, "日照市", "base"},
{371300, "临沂市", "base"},
{371400, "德州市", "base"},
{371500, "聊城市", "base"},
{371600, "滨州市", "base"},
{371700, "菏泽市", "base"},
});
}
/**
* 获取实时天气
*/
private List<WeatherLivesDto> getWeatherLives() {
List<WeatherLivesDto> weatherLives = new ArrayList<>();
// RestTemplate restTemplate = new RestTemplate();
Map<String,Object> map = new HashMap();
map.put("key","88036e8e6a7f0d69cf8d38e84da278f5");
Iterable<Object[]> params = getCityCodes();
params.forEach(p->{
map.put("city", p[0]);
map.put("extensions", p[2]);
URI uri = UriComponentsBuilder
.fromUriString("https://restapi.amap.com/v3/weather/weatherInfo?" +
"city={city}&key={key}&extensions={extensions}")
.build(map);
WeatherDto weatherResponse = restTemplate.getForObject(uri, WeatherDto.class);
if(weatherResponse.getStatus() != 1) {
return;
}
//组装批量操作数据
weatherResponse.getLives().forEach(m ->{
weatherLives.add(
WeatherLivesDto.builder()
.province(m.getProvince())
.city(m.getCity())
.adcode(m.getAdcode())
.weather(m.getWeather())
.temperature(m.getTemperature())
.winddirection(m.getWinddirection())
.windpower(m.getWindpower())
.humidity(m.getHumidity())
.reporttime(m.getReporttime())
.build()
);
});
});
return weatherLives;
}
}
package com.elephant.framework.galaxy.aroad.module.roadcondition.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @program:
* @description:
* @author: xuzhitu
* @create: 2019-04-24 09:26
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CastInfo implements Serializable {
/**
* 日期
*/
private String date;
/**
* 星期几
*/
private String week;
/**
* 白天天气现象
*/
private String dayweather;
/**
* 晚上天气现象
*/
private String nightweather;
/**
* 白天温度
*/
private String daytemp;
/**
* 晚上温度
*/
private String nighttemp;
/**
* 白天风向
*/
private String daywind;
/**
* 晚上风向
*/
private String nightwind;
/**
* 白天风力
*/
private String daypower;
/**
* 晚上风力
*/
private String nightpower;
}
package com.elephant.framework.galaxy.aroad.module.roadcondition.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @program:
* @description:
* @author: xuzhitu
* @create: 2019-04-24 09:26
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WeatherDto implements Serializable {
/**
* 返回状态
*/
private Integer status;
/**
* 返回结果总数目
*/
private Integer count;
/**
* 返回的状态信息
*/
private String info;
/**
* 返回状态说明,10000代表正确
*/
private Integer infocode;
/**
* 实况天气数据信息
*/
private List<WeatherLivesDto> lives;
/**
* 预报天气信息数据
*/
private List<WeatherForecastDto> forecast;
}
package com.elephant.framework.galaxy.aroad.module.roadcondition.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @program:
* @description:
* @author: xuzhitu
* @create: 2019-04-24 09:26
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WeatherForecastDto implements Serializable {
/**
* 城市名称
*/
private String city;
/**
* 城市编码
*/
private Integer adcode;
/**
*
* 省份名称
*/
private String province;
/**
* 预报发布时间
*/
private String reporttime;
/**
* 预报数据list结构,元素cast,按顺序为当天、第二天、第三天的预报数据
*/
private List<CastInfo> casts;
}
package com.elephant.framework.galaxy.aroad.module.roadcondition.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @program:
* @description:
* @author: xuzhitu
* @create: 2019-04-24 09:26
**/
@Data@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WeatherLivesDto implements Serializable {
/**
* 省份名称
*/
private String province;
/**
* 城市名称
*/
private String city;
/**
* 区域编码
*/
private Integer adcode;
/**
* 天气现象(汉字描述)
*/
private String weather;
/**
* 实时气温,单位:摄氏度
*/
private String temperature;
/**
* 风向描述
*/
private String winddirection;
/**
* 风力级别,单位:级
*/
private String windpower;
/**
* 空气湿度
*/
private String humidity;
/**
* 预报发布时间
*/
private String reporttime;
}
package com.elephant.framework.galaxy.aroad.support;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.util.ArrayList;
import java.util.List;
/**
* @program:
* @description: restTemplate 媒体类型支持类
* @author: songwenjie
* @create: 2019-03-27 15:28
**/
public class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
public WxMappingJackson2HttpMessageConverter(){
List<MediaType> mediaTypes = new ArrayList<>();
// mediaTypes.add(MediaType.TEXT_PLAIN);
// mediaTypes.add(MediaType.TEXT_HTML); //加入text/html类型的支持
mediaTypes.add(MediaType.ALL);
setSupportedMediaTypes(mediaTypes);// tag6
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论