|
|
@ -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; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|