From 6454c8c664f9a759d993abab82f6fcc2d7ec9f34 Mon Sep 17 00:00:00 2001 From: luyie Date: Mon, 1 Sep 2025 10:18:12 +0800 Subject: [PATCH] =?UTF-8?q?add:=E5=92=8C=E9=A3=8E=E5=A4=A9=E6=B0=94?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weather/schedule/StationWeatherSchedule.java | 241 ++++++++++----------- 1 file changed, 113 insertions(+), 128 deletions(-) diff --git a/hzims-service/weather/src/main/java/com/hnac/hzims/weather/schedule/StationWeatherSchedule.java b/hzims-service/weather/src/main/java/com/hnac/hzims/weather/schedule/StationWeatherSchedule.java index 54e763f..0b2d64d 100644 --- a/hzims-service/weather/src/main/java/com/hnac/hzims/weather/schedule/StationWeatherSchedule.java +++ b/hzims-service/weather/src/main/java/com/hnac/hzims/weather/schedule/StationWeatherSchedule.java @@ -1,16 +1,13 @@ package com.hnac.hzims.weather.schedule; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.VStationEntity; import com.hnac.hzims.hzimsweather.response.weather.Daily; 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.IDailyHeWeatherService; 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 lombok.AllArgsConstructor; 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.SpringUtil; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; -import org.springframework.util.Assert; -import java.lang.reflect.Method; + import java.util.List; import java.util.concurrent.*; -import static com.hnac.hzims.hzimsweather.constants.XxlJobConstant.STATION_DAILY_WEATHER; -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; +import static com.hnac.hzims.hzimsweather.constants.XxlJobConstant.*; /** * @author hx @@ -45,120 +32,118 @@ import static com.hnac.hzims.hzimsweather.constants.XxlJobConstant.STATION_7D_WE @Slf4j public class StationWeatherSchedule { - private final HeWeatherWeatherService weatherService; - private final IDailyHeWeatherService dailyHeWeatherService; - private final IStationService stationService; + private final HeWeatherWeatherService weatherService; + private final IDailyHeWeatherService dailyHeWeatherService; + private final IStationService stationService; - /** - * 获取各站点下七日内天气 存入缓存 - * @Scheduled(cron = "0 10 0/12 * * ?") - * @return - * @throws InterruptedException - */ - @XxlJob(STATION_7D_WEATHER) - public ReturnT save7dWeather(String param) throws InterruptedException { - List stationEntityList = stationService.getStationWithLocation(null); - ExecutorService executorService = new ThreadPoolExecutor(10,stationEntityList.size(),0,TimeUnit.SECONDS,new LinkedBlockingDeque<>()); - CountDownLatch downLatch = new CountDownLatch(stationEntityList.size()); - executorService.execute(()->stationEntityList.forEach(vStationEntity -> { - try{ - XxlJobLogger.log(vStationEntity.getName()+"获取七日天气开始,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); - String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd(); - HeWeatherWeatherDailyResponse weatherDailyResponse = weatherService.getWeather7d(location); - if(weatherDailyResponse.getCode().isOk()) { - List dailyList = weatherDailyResponse.getDaily(); - List weatherEntityList = Lists.newArrayList(); - for (Daily daily : dailyList) { - //查询数据库内是否存在这天的天气 - DailyHeWeatherEntity entity = JSONObject.parseObject(JSON.toJSONString(daily),DailyHeWeatherEntity.class); - DailyHeWeatherEntity dailyHeWeatherEntity = dailyHeWeatherService.getOne(Wrappers.lambdaQuery() - .eq(DailyHeWeatherEntity::getStationCode,vStationEntity.getCode()) - .eq(DailyHeWeatherEntity::getFxDate,entity.getFxDate()) - .last("limit 1;") - ); - if(ObjectUtil.isNotEmpty(dailyHeWeatherEntity)) { - entity.setId(dailyHeWeatherEntity.getId()); - } - else { - entity.setStationCode(vStationEntity.getCode()); - entity.setDeptId(vStationEntity.getRefDept()); - entity.setTenantId(vStationEntity.getTenantId()); - entity.setCreateUser(vStationEntity.getCreateUser()); - entity.setCreateDept(vStationEntity.getCreateDept()); - } - weatherEntityList.add(entity); - } - dailyHeWeatherService.saveOrUpdateBatch(weatherEntityList); - } - } - catch (Exception e) { - e.printStackTrace(); - XxlJobLogger.log(vStationEntity.getName()+"获取七日天气失败,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); - } - finally { - downLatch.countDown(); - } - })); - downLatch.await(); - executorService.shutdown(); - return ReturnT.SUCCESS; - } + /** + * 获取各站点下七日内天气 存入缓存 + * + * @return + * @throws InterruptedException + * @Scheduled(cron = "0 10 0/12 * * ?") + */ + @XxlJob(STATION_7D_WEATHER) + public ReturnT save7dWeather(String param) throws InterruptedException { + List stationEntityList = stationService.getStationWithLocation(null); + ExecutorService executorService = new ThreadPoolExecutor(10, stationEntityList.size(), 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); + CountDownLatch downLatch = new CountDownLatch(stationEntityList.size()); + executorService.execute(() -> stationEntityList.forEach(vStationEntity -> { + try { + XxlJobLogger.log(vStationEntity.getName() + "获取七日天气开始,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); + String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd(); + HeWeatherWeatherDailyResponse weatherDailyResponse = weatherService.getWeather7d(location); + if (weatherDailyResponse.getCode().isOk()) { + List dailyList = weatherDailyResponse.getDaily(); + List weatherEntityList = Lists.newArrayList(); + for (Daily daily : dailyList) { + //查询数据库内是否存在这天的天气 + DailyHeWeatherEntity entity = JSONObject.parseObject(JSON.toJSONString(daily), DailyHeWeatherEntity.class); + DailyHeWeatherEntity dailyHeWeatherEntity = dailyHeWeatherService.getOne(Wrappers.lambdaQuery() + .eq(DailyHeWeatherEntity::getStationCode, vStationEntity.getCode()) + .eq(DailyHeWeatherEntity::getFxDate, entity.getFxDate()) + .last("limit 1;") + ); + if (ObjectUtil.isNotEmpty(dailyHeWeatherEntity)) { + entity.setId(dailyHeWeatherEntity.getId()); + } else { + entity.setStationCode(vStationEntity.getCode()); + entity.setDeptId(vStationEntity.getRefDept()); + entity.setTenantId(vStationEntity.getTenantId()); + entity.setCreateUser(vStationEntity.getCreateUser()); + entity.setCreateDept(vStationEntity.getCreateDept()); + } + weatherEntityList.add(entity); + } + dailyHeWeatherService.saveOrUpdateBatch(weatherEntityList); + } + } catch (Exception e) { + log.error("{}获取七日天气失败,位置信息为:{},{}", vStationEntity.getName(), vStationEntity.getLgtd(), vStationEntity.getLttd()); + log.error("获取七日天气失败", e); + XxlJobLogger.log(vStationEntity.getName() + "获取七日天气失败,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); + } finally { + downLatch.countDown(); + } + })); + downLatch.await(); + executorService.shutdown(); + return ReturnT.SUCCESS; + } - /** - * 获取各站点下三日内天气 存入缓存 @Scheduled(cron = "0 5 0/1 * * ?") - * @return - * @throws InterruptedException - */ - @XxlJob(STATION_3D_WEATHER) - public ReturnT save3dWeather(String param) throws InterruptedException { - List stationEntityList = stationService.getStationWithLocation(null); - ExecutorService executorService = new ThreadPoolExecutor(10,stationEntityList.size(),0,TimeUnit.SECONDS,new LinkedBlockingDeque<>()); - CountDownLatch downLatch = new CountDownLatch(stationEntityList.size()); - executorService.execute(()->stationEntityList.forEach(vStationEntity -> { - try { - XxlJobLogger.log(vStationEntity.getName()+"获取三日天气开始,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); - String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd(); - weatherService.getWeather3d(location); - } - catch (Exception e) { - e.printStackTrace(); - XxlJobLogger.log(vStationEntity.getName()+"获取三日天气失败,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); - } - finally { - downLatch.countDown(); - } - })); - downLatch.await(); - executorService.shutdown(); - return ReturnT.SUCCESS; - } + /** + * 获取各站点下三日内天气 存入缓存 @Scheduled(cron = "0 5 0/1 * * ?") + * + * @return + * @throws InterruptedException + */ + @XxlJob(STATION_3D_WEATHER) + public ReturnT save3dWeather(String param) throws InterruptedException { + List stationEntityList = stationService.getStationWithLocation(null); + ExecutorService executorService = new ThreadPoolExecutor(10, stationEntityList.size(), 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); + CountDownLatch downLatch = new CountDownLatch(stationEntityList.size()); + executorService.execute(() -> stationEntityList.forEach(vStationEntity -> { + try { + XxlJobLogger.log(vStationEntity.getName() + "获取三日天气开始,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); + String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd(); + weatherService.getWeather3d(location); + } catch (Exception e) { + log.error("{}获取三日天气失败,位置信息为:{},{}", vStationEntity.getName(), vStationEntity.getLgtd(), vStationEntity.getLttd()); + log.error("获取三日天气失败", e); + XxlJobLogger.log(vStationEntity.getName() + "获取三日天气失败,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); + } finally { + downLatch.countDown(); + } + })); + downLatch.await(); + executorService.shutdown(); + return ReturnT.SUCCESS; + } - /** - * 获取各站点下实况天气 存入缓存 @Scheduled(cron = "0 0 0/1 * * ?") - * @return - * @throws InterruptedException - */ - @XxlJob(STATION_NOW_WEATHER) - public ReturnT saveNowWeather(String param) throws InterruptedException { - List stationEntityList = stationService.getStationWithLocation(null); - ExecutorService executorService = new ThreadPoolExecutor(10,stationEntityList.size(),0,TimeUnit.SECONDS,new LinkedBlockingDeque<>()); - CountDownLatch downLatch = new CountDownLatch(stationEntityList.size()); - executorService.execute(()->stationEntityList.forEach(vStationEntity -> { - try { - XxlJobLogger.log(vStationEntity.getName()+"获取实时天气开始,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); - String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd(); - weatherService.getWeatherNow(location); - } - catch(Exception e) { - e.printStackTrace(); - XxlJobLogger.log(vStationEntity.getName()+"获取实时天气失败,位置信息为:"+ vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); - } - finally { - downLatch.countDown(); - } - })); - downLatch.await(); - executorService.shutdown(); - return ReturnT.SUCCESS; - } + /** + * 获取各站点下实况天气 存入缓存 @Scheduled(cron = "0 0 0/1 * * ?") + * + * @return + * @throws InterruptedException + */ + @XxlJob(STATION_NOW_WEATHER) + public ReturnT saveNowWeather(String param) throws InterruptedException { + List stationEntityList = stationService.getStationWithLocation(null); + ExecutorService executorService = new ThreadPoolExecutor(10, stationEntityList.size(), 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); + CountDownLatch downLatch = new CountDownLatch(stationEntityList.size()); + executorService.execute(() -> stationEntityList.forEach(vStationEntity -> { + try { + XxlJobLogger.log(vStationEntity.getName() + "获取实时天气开始,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); + String location = vStationEntity.getLgtd() + "," + vStationEntity.getLttd(); + weatherService.getWeatherNow(location); + } catch (Exception e) { + log.error("获取实时天气失败", e); + XxlJobLogger.log(vStationEntity.getName() + "获取实时天气失败,位置信息为:" + vStationEntity.getLgtd() + "," + vStationEntity.getLttd()); + } finally { + downLatch.countDown(); + } + })); + downLatch.await(); + executorService.shutdown(); + return ReturnT.SUCCESS; + } }