@Component
@EventBusListener
@Slf4j
public class WeatherInfoListener {
private static String requestUrl = "https://restapi.amap.com/v3/weather/weatherInfo";
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private RecruitEventBusImpl recruitEventBus;
@Subscribe
private void send(WeatherInfoEvent weatherInfoEvent) {
log.error("send->1WeatherInfoListenerWeatherInfoListenerWeatherInfoListenerWeatherInfoListenerWeatherInfoListenerWeatherInfoListenerWeatherInfoListenerWeatherInfoListener");
String param = "key=" + weatherInfoEvent.getKey() + "&city=" + weatherInfoEvent.getCity();
String response = HttpUtils.sendGet(requestUrl,param);
Gson gson = new Gson();
WeatherInfoBo weatherInfoBo = gson.fromJson(response,
new TypeToken<WeatherInfoBo>(){}.getType());
if (weatherInfoBo != null) {
WeatherInfoLiveBo weatherInfoLiveBo = Optional.ofNullable(weatherInfoBo.getLives())
.orElse(Lists.newArrayList())
.stream()
.findFirst()
.orElse(WeatherInfoLiveBo.builder().build());
StringBuffer mes = new StringBuffer();
mes.append("天气预报: -> \n");
mes.append(">地区 : <font color="warning">");
mes.append(weatherInfoLiveBo.getProvince()+weatherInfoLiveBo.getCity() + "</font>\n ");
mes.append(">天气现象 : <font color="warning">");
mes.append(weatherInfoLiveBo.getWeather() + "</font>\n ");
mes.append(">实时气温(单位:摄氏度) : <font color="warning">");
mes.append(weatherInfoLiveBo.getTemperature() + "</font> \n");
mes.append(">风向描述 : <font color="warning">");
mes.append(weatherInfoLiveBo.getWinddirection() + "</font>\n ");
mes.append(">风力级别(单位:级) : <font color="warning">");
mes.append(weatherInfoLiveBo.getWindpower() + "</font>\n ");
mes.append(">空气湿度 : <font color="warning">");
mes.append(weatherInfoLiveBo.getHumidity() + "</font>\n ");
mes.append(">数据发布的时间 : <font color="warning">");
mes.append(weatherInfoLiveBo.getReporttime() + "</font> ");
String redisKey = "WeatherJobHandler" + LocalDate.now();
if(StringUtilx.isBlank(getValue(redisKey))) {
setValue(redisKey);
recruitEventBus.postSync(EnterpriseWxSendEvent.builder()
.robotKey("机器人id")
.msgType(EnterpriseWxSendListener.MSG_TYPE_MARKDOWN)
.message(mes.toString())
.build());
}
}
}
public static void main(String[] args) {
String param = "key=39f459229d56a82e8bef6ca677b7bb54&city=210200&extensions=all";
String response = HttpUtils.sendGet(requestUrl,param);
Gson gson = new Gson();
WeatherInfoBo weatherInfoBo = gson.fromJson(response,
new TypeToken<WeatherInfoBo>(){}.getType());
System.out.println("@@@@@@@@@@@@");
}
private boolean hasKey(String redisKey) {
return stringRedisTemplate.hasKey(redisKey);
}
private String getValue(String redisKey){
return stringRedisTemplate.opsForValue().get(redisKey);
}
private void setValue(String redisKey) {
LocalDateTime now = LocalDateTime.now();
long time = LocalDateTimeUtils.between(now, LocalDateTimeUtils.endOfDay(now), ChronoUnit.SECONDS);
stringRedisTemplate.opsForValue().set(redisKey,redisKey, time, TimeUnit.SECONDS);
}
}