From e418fa18abc98a1890b4e0a06b5e2cac03b12671 Mon Sep 17 00:00:00 2001 From: yufengshuo Date: Fri, 20 Mar 2026 16:54:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E6=B0=94=E8=B1=A1=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=90=8C=E6=AD=A5=E4=BF=AE=E6=94=B9=EF=BC=9A=E5=8E=BB?= =?UTF-8?q?=E9=99=A4=E5=90=8C=E6=AD=A5=E5=9B=BD=E5=AE=B6=E6=B0=94=E8=B1=A1?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/RegionalWeatherDataSyncService.java | 116 ++++-------------- 1 file changed, 21 insertions(+), 95 deletions(-) diff --git a/src/main/java/com/southern/power/grid/service/impl/RegionalWeatherDataSyncService.java b/src/main/java/com/southern/power/grid/service/impl/RegionalWeatherDataSyncService.java index cf17b29..2496be4 100644 --- a/src/main/java/com/southern/power/grid/service/impl/RegionalWeatherDataSyncService.java +++ b/src/main/java/com/southern/power/grid/service/impl/RegionalWeatherDataSyncService.java @@ -1,11 +1,12 @@ package com.southern.power.grid.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.southern.power.grid.dao.NationalWeatherStationMapper; import com.southern.power.grid.dao.RegionalWeatherDataMapper; import com.southern.power.grid.dao.RegionalWeatherStationMapper; import com.southern.power.grid.dao.WeatherSiteAreaConfigurationMapper; -import com.southern.power.grid.entity.*; +import com.southern.power.grid.entity.RegionalWeatherData; +import com.southern.power.grid.entity.RegionalWeatherStation; +import com.southern.power.grid.entity.WeatherSiteAreaConfiguration; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -17,7 +18,6 @@ import java.math.RoundingMode; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; -import java.util.stream.Stream; @Service @Slf4j @@ -25,25 +25,22 @@ import java.util.stream.Stream; public class RegionalWeatherDataSyncService extends ServiceImpl { private final RegionalWeatherStationMapper regionalWeatherStationMapper; - private final NationalWeatherStationMapper nationalWeatherStationMapper; - private final Map weatherAreaMap = new ConcurrentHashMap<>(); private final WeatherSiteAreaConfigurationMapper weatherSiteAreaConfigurationMapper; + private final Map weatherAreaMap = new ConcurrentHashMap<>(); @Transactional(rollbackFor = Exception.class) public void syncWeatherData(String dateTime) { try { List regionalWeatherStations = regionalWeatherStationMapper.getSyncData(dateTime); - List nationalWeatherStations = nationalWeatherStationMapper.getSyncData(dateTime); - if (CollectionUtils.isEmpty(regionalWeatherStations) && CollectionUtils.isEmpty(nationalWeatherStations)) { + if (CollectionUtils.isEmpty(regionalWeatherStations)) { log.warn("【区域天气数据同步任务】没有查询到天气数据:{}", dateTime); return; } - List list = convertToSyncList(regionalWeatherStations, nationalWeatherStations); - if (CollectionUtils.isEmpty(list)) { + List dataList = convert(regionalWeatherStations, dateTime); + if (CollectionUtils.isEmpty(dataList)) { return; } - List dataList = convert(list, dateTime); this.saveBatch(dataList, 700); } catch (Exception e) { log.error("定时同步区域气象数据失败:{}", e.getMessage(), e); @@ -51,21 +48,23 @@ public class RegionalWeatherDataSyncService extends ServiceImpl convert(List list, String prevHourDate) { + public List convert(List list, String prevHourDate) { if (list == null || list.isEmpty()) { return Collections.emptyList(); } - // 1. 按 orgCode 分组 - Map> groupMap = - list.stream().collect(Collectors.groupingBy(SyncWeatherDataVO::getOrgCode)); + // 1. 过滤掉未匹配区域编码的记录,按 orgCode 分组 + Map> groupMap = list.stream() + .filter(item -> weatherAreaMap.containsKey(buildKey(item.getProvince(), item.getCity(), item.getDistrict()))) + .collect(Collectors.groupingBy(item -> + weatherAreaMap.get(buildKey(item.getProvince(), item.getCity(), item.getDistrict())))); // 2. 分组处理 List result = new ArrayList<>(); - for (Map.Entry> entry : groupMap.entrySet()) { + for (Map.Entry> entry : groupMap.entrySet()) { String orgCode = entry.getKey(); - List groupList = entry.getValue(); + List groupList = entry.getValue(); int size = groupList.size(); @@ -76,13 +75,13 @@ public class RegionalWeatherDataSyncService extends ServiceImpl convertToSyncList( - List regionalList, - List nationalList) { - - Stream regionalStream = regionalList.stream() - .map(item -> buildVO( - item.getProvince(), - item.getCity(), - item.getDistrict(), - item.getDataTime(), - item.getTemperature(), - item.getHourlyMaxTemperature(), - item.getHourlyMinTemperature(), - item.getHourlyPrecipitation(), - item.getDailyPrecipitation(), - item.getExtremeWindSpeedHourly(), - weatherAreaMap - )) - .filter(Objects::nonNull); - - Stream nationalStream = nationalList.stream() - .map(item -> buildVO( - item.getProvince(), - item.getCity(), - item.getDistrict(), - item.getDataTime(), - item.getTemperature(), - item.getHourlyMaxTemperature(), - item.getHourlyMinTemperature(), - item.getHourlyPrecipitation(), - item.getDailyPrecipitation(), - item.getExtremeWindSpeedHourly(), - weatherAreaMap - )) - .filter(Objects::nonNull); - - return Stream.concat(regionalStream, nationalStream) - .collect(Collectors.toList()); - } - - private static SyncWeatherDataVO buildVO( - String province, - String city, - String district, - String dataTime, - String temperature, - String hourlyMaxTemperature, - String hourlyMinTemperature, - String hourlyPrecipitation, - String dailyPrecipitation, - String extremeWindSpeedHourly, - Map weatherAreaMap) { - - String key = buildKey(province, city, district); - String orgCode = weatherAreaMap.get(key); - - // 没匹配上区域编码,直接丢弃 - if (orgCode == null) { - return null; - } - - SyncWeatherDataVO vo = new SyncWeatherDataVO(); - vo.setOrgCode(orgCode); - vo.setDataTime(dataTime); - vo.setTemperature(temperature); - vo.setHourlyMaxTemperature(hourlyMaxTemperature); - vo.setHourlyMinTemperature(hourlyMinTemperature); - vo.setHourlyPrecipitation(hourlyPrecipitation); - vo.setDailyPrecipitation(dailyPrecipitation); - vo.setExtremeWindSpeedHourly(extremeWindSpeedHourly); - - return vo; - } private static String buildKey(String province, String city, String district) { return String.join(":",