Browse Source

add:和风天气格式

show
luyie 2 weeks ago
parent
commit
6454c8c664
  1. 241
      hzims-service/weather/src/main/java/com/hnac/hzims/weather/schedule/StationWeatherSchedule.java

241
hzims-service/weather/src/main/java/com/hnac/hzims/weather/schedule/StationWeatherSchedule.java

@ -1,16 +1,13 @@
package com.hnac.hzims.weather.schedule; package com.hnac.hzims.weather.schedule;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.hnac.hzims.hzimsweather.constants.WeatherConstant;
import com.hnac.hzims.hzimsweather.entity.DailyHeWeatherEntity; import com.hnac.hzims.hzimsweather.entity.DailyHeWeatherEntity;
import com.hnac.hzims.hzimsweather.entity.VStationEntity; import com.hnac.hzims.hzimsweather.entity.VStationEntity;
import com.hnac.hzims.hzimsweather.response.weather.Daily; import com.hnac.hzims.hzimsweather.response.weather.Daily;
import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse; import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse;
import com.hnac.hzims.weather.service.HeWeatherHistoricalService;
import com.hnac.hzims.weather.service.HeWeatherWeatherService; import com.hnac.hzims.weather.service.HeWeatherWeatherService;
import com.hnac.hzims.weather.service.IDailyHeWeatherService; import com.hnac.hzims.weather.service.IDailyHeWeatherService;
import com.hnac.hzims.weather.service.IStationService; import com.hnac.hzims.weather.service.IStationService;
@ -19,23 +16,13 @@ import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger; import com.xxl.job.core.log.XxlJobLogger;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.log.logger.BladeLogger;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.SpringUtil;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import java.lang.reflect.Method;
import java.util.List; import java.util.List;
import java.util.concurrent.*; import java.util.concurrent.*;
import static com.hnac.hzims.hzimsweather.constants.XxlJobConstant.STATION_DAILY_WEATHER; import static com.hnac.hzims.hzimsweather.constants.XxlJobConstant.*;
import static com.hnac.hzims.hzimsweather.constants.XxlJobConstant.STATION_3D_WEATHER;
import static com.hnac.hzims.hzimsweather.constants.XxlJobConstant.STATION_NOW_WEATHER;
import static com.hnac.hzims.hzimsweather.constants.XxlJobConstant.STATION_7D_WEATHER;
/** /**
* @author hx * @author hx
@ -45,120 +32,118 @@ import static com.hnac.hzims.hzimsweather.constants.XxlJobConstant.STATION_7D_WE
@Slf4j @Slf4j
public class StationWeatherSchedule { public class StationWeatherSchedule {
private final HeWeatherWeatherService weatherService; private final HeWeatherWeatherService weatherService;
private final IDailyHeWeatherService dailyHeWeatherService; private final IDailyHeWeatherService dailyHeWeatherService;
private final IStationService stationService; private final IStationService stationService;
/** /**
* 获取各站点下七日内天气 存入缓存 * 获取各站点下七日内天气 存入缓存
* @Scheduled(cron = "0 10 0/12 * * ?") *
* @return * @return
* @throws InterruptedException * @throws InterruptedException
*/ * @Scheduled(cron = "0 10 0/12 * * ?")
@XxlJob(STATION_7D_WEATHER) */
public ReturnT<String> save7dWeather(String param) throws InterruptedException { @XxlJob(STATION_7D_WEATHER)
List<VStationEntity> stationEntityList = stationService.getStationWithLocation(null); public ReturnT<String> save7dWeather(String param) throws InterruptedException {
ExecutorService executorService = new ThreadPoolExecutor(10,stationEntityList.size(),0,TimeUnit.SECONDS,new LinkedBlockingDeque<>()); List<VStationEntity> stationEntityList = stationService.getStationWithLocation(null);
CountDownLatch downLatch = new CountDownLatch(stationEntityList.size()); ExecutorService executorService = new ThreadPoolExecutor(10, stationEntityList.size(), 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
executorService.execute(()->stationEntityList.forEach(vStationEntity -> { CountDownLatch downLatch = new CountDownLatch(stationEntityList.size());
try{ executorService.execute(() -> stationEntityList.forEach(vStationEntity -> {
XxlJobLogger.log(vStationEntity.getName()+"获取七日天气开始,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); try {
String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd(); XxlJobLogger.log(vStationEntity.getName() + "获取七日天气开始,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd());
HeWeatherWeatherDailyResponse weatherDailyResponse = weatherService.getWeather7d(location); String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd();
if(weatherDailyResponse.getCode().isOk()) { HeWeatherWeatherDailyResponse weatherDailyResponse = weatherService.getWeather7d(location);
List<Daily> dailyList = weatherDailyResponse.getDaily(); if (weatherDailyResponse.getCode().isOk()) {
List<DailyHeWeatherEntity> weatherEntityList = Lists.newArrayList(); List<Daily> dailyList = weatherDailyResponse.getDaily();
for (Daily daily : dailyList) { List<DailyHeWeatherEntity> weatherEntityList = Lists.newArrayList();
//查询数据库内是否存在这天的天气 for (Daily daily : dailyList) {
DailyHeWeatherEntity entity = JSONObject.parseObject(JSON.toJSONString(daily),DailyHeWeatherEntity.class); //查询数据库内是否存在这天的天气
DailyHeWeatherEntity dailyHeWeatherEntity = dailyHeWeatherService.getOne(Wrappers.<DailyHeWeatherEntity>lambdaQuery() DailyHeWeatherEntity entity = JSONObject.parseObject(JSON.toJSONString(daily), DailyHeWeatherEntity.class);
.eq(DailyHeWeatherEntity::getStationCode,vStationEntity.getCode()) DailyHeWeatherEntity dailyHeWeatherEntity = dailyHeWeatherService.getOne(Wrappers.<DailyHeWeatherEntity>lambdaQuery()
.eq(DailyHeWeatherEntity::getFxDate,entity.getFxDate()) .eq(DailyHeWeatherEntity::getStationCode, vStationEntity.getCode())
.last("limit 1;") .eq(DailyHeWeatherEntity::getFxDate, entity.getFxDate())
); .last("limit 1;")
if(ObjectUtil.isNotEmpty(dailyHeWeatherEntity)) { );
entity.setId(dailyHeWeatherEntity.getId()); if (ObjectUtil.isNotEmpty(dailyHeWeatherEntity)) {
} entity.setId(dailyHeWeatherEntity.getId());
else { } else {
entity.setStationCode(vStationEntity.getCode()); entity.setStationCode(vStationEntity.getCode());
entity.setDeptId(vStationEntity.getRefDept()); entity.setDeptId(vStationEntity.getRefDept());
entity.setTenantId(vStationEntity.getTenantId()); entity.setTenantId(vStationEntity.getTenantId());
entity.setCreateUser(vStationEntity.getCreateUser()); entity.setCreateUser(vStationEntity.getCreateUser());
entity.setCreateDept(vStationEntity.getCreateDept()); entity.setCreateDept(vStationEntity.getCreateDept());
} }
weatherEntityList.add(entity); weatherEntityList.add(entity);
} }
dailyHeWeatherService.saveOrUpdateBatch(weatherEntityList); dailyHeWeatherService.saveOrUpdateBatch(weatherEntityList);
} }
} } catch (Exception e) {
catch (Exception e) { log.error("{}获取七日天气失败,位置信息为:{},{}", vStationEntity.getName(), vStationEntity.getLgtd(), vStationEntity.getLttd());
e.printStackTrace(); log.error("获取七日天气失败", e);
XxlJobLogger.log(vStationEntity.getName()+"获取七日天气失败,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); XxlJobLogger.log(vStationEntity.getName() + "获取七日天气失败,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd());
} } finally {
finally { downLatch.countDown();
downLatch.countDown(); }
} }));
})); downLatch.await();
downLatch.await(); executorService.shutdown();
executorService.shutdown(); return ReturnT.SUCCESS;
return ReturnT.SUCCESS; }
}
/** /**
* 获取各站点下三日内天气 存入缓存 @Scheduled(cron = "0 5 0/1 * * ?") * 获取各站点下三日内天气 存入缓存 @Scheduled(cron = "0 5 0/1 * * ?")
* @return *
* @throws InterruptedException * @return
*/ * @throws InterruptedException
@XxlJob(STATION_3D_WEATHER) */
public ReturnT<String> save3dWeather(String param) throws InterruptedException { @XxlJob(STATION_3D_WEATHER)
List<VStationEntity> stationEntityList = stationService.getStationWithLocation(null); public ReturnT<String> save3dWeather(String param) throws InterruptedException {
ExecutorService executorService = new ThreadPoolExecutor(10,stationEntityList.size(),0,TimeUnit.SECONDS,new LinkedBlockingDeque<>()); List<VStationEntity> stationEntityList = stationService.getStationWithLocation(null);
CountDownLatch downLatch = new CountDownLatch(stationEntityList.size()); ExecutorService executorService = new ThreadPoolExecutor(10, stationEntityList.size(), 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
executorService.execute(()->stationEntityList.forEach(vStationEntity -> { CountDownLatch downLatch = new CountDownLatch(stationEntityList.size());
try { executorService.execute(() -> stationEntityList.forEach(vStationEntity -> {
XxlJobLogger.log(vStationEntity.getName()+"获取三日天气开始,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); try {
String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd(); XxlJobLogger.log(vStationEntity.getName() + "获取三日天气开始,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd());
weatherService.getWeather3d(location); String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd();
} weatherService.getWeather3d(location);
catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("{}获取三日天气失败,位置信息为:{},{}", vStationEntity.getName(), vStationEntity.getLgtd(), vStationEntity.getLttd());
XxlJobLogger.log(vStationEntity.getName()+"获取三日天气失败,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); log.error("获取三日天气失败", e);
} XxlJobLogger.log(vStationEntity.getName() + "获取三日天气失败,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd());
finally { } finally {
downLatch.countDown(); downLatch.countDown();
} }
})); }));
downLatch.await(); downLatch.await();
executorService.shutdown(); executorService.shutdown();
return ReturnT.SUCCESS; return ReturnT.SUCCESS;
} }
/** /**
* 获取各站点下实况天气 存入缓存 @Scheduled(cron = "0 0 0/1 * * ?") * 获取各站点下实况天气 存入缓存 @Scheduled(cron = "0 0 0/1 * * ?")
* @return *
* @throws InterruptedException * @return
*/ * @throws InterruptedException
@XxlJob(STATION_NOW_WEATHER) */
public ReturnT<String> saveNowWeather(String param) throws InterruptedException { @XxlJob(STATION_NOW_WEATHER)
List<VStationEntity> stationEntityList = stationService.getStationWithLocation(null); public ReturnT<String> saveNowWeather(String param) throws InterruptedException {
ExecutorService executorService = new ThreadPoolExecutor(10,stationEntityList.size(),0,TimeUnit.SECONDS,new LinkedBlockingDeque<>()); List<VStationEntity> stationEntityList = stationService.getStationWithLocation(null);
CountDownLatch downLatch = new CountDownLatch(stationEntityList.size()); ExecutorService executorService = new ThreadPoolExecutor(10, stationEntityList.size(), 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
executorService.execute(()->stationEntityList.forEach(vStationEntity -> { CountDownLatch downLatch = new CountDownLatch(stationEntityList.size());
try { executorService.execute(() -> stationEntityList.forEach(vStationEntity -> {
XxlJobLogger.log(vStationEntity.getName()+"获取实时天气开始,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); try {
String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd(); XxlJobLogger.log(vStationEntity.getName() + "获取实时天气开始,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd());
weatherService.getWeatherNow(location); String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd();
} weatherService.getWeatherNow(location);
catch(Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("获取实时天气失败", e);
XxlJobLogger.log(vStationEntity.getName()+"获取实时天气失败,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); XxlJobLogger.log(vStationEntity.getName() + "获取实时天气失败,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd());
} } finally {
finally { downLatch.countDown();
downLatch.countDown(); }
} }));
})); downLatch.await();
downLatch.await(); executorService.shutdown();
executorService.shutdown(); return ReturnT.SUCCESS;
return ReturnT.SUCCESS; }
}
} }

Loading…
Cancel
Save