From 528479f7779cc965cfd3f722074fef540d459065 Mon Sep 17 00:00:00 2001 From: hekaiyu <13673834656@163.com> Date: Wed, 12 Nov 2025 08:54:34 +0800 Subject: [PATCH] =?UTF-8?q?H=E4=BA=8B=E4=BB=B6=E8=B6=85=E8=BF=8724?= =?UTF-8?q?=E5=B0=8F=E6=97=B6=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DiffusionDataServiceImpl.java | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/jeecg-module-event/src/main/java/org/jeecg/diffusion/service/impl/DiffusionDataServiceImpl.java b/jeecg-module-event/src/main/java/org/jeecg/diffusion/service/impl/DiffusionDataServiceImpl.java index 698f0d4..36b353a 100644 --- a/jeecg-module-event/src/main/java/org/jeecg/diffusion/service/impl/DiffusionDataServiceImpl.java +++ b/jeecg-module-event/src/main/java/org/jeecg/diffusion/service/impl/DiffusionDataServiceImpl.java @@ -13,6 +13,7 @@ import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.properties.DiffusionProperties; import org.jeecg.common.properties.EventServerProperties; import org.jeecg.common.properties.SystemStorageProperties; +import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.NcUtil; import org.jeecg.diffusion.service.DiffusionDataService; import org.jeecg.diffusion.vo.DiffusionResultVO; @@ -32,7 +33,9 @@ import ucar.nc2.dataset.NetcdfDataset; import java.io.File; import java.io.IOException; +import java.text.ParseException; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.List; @@ -51,18 +54,36 @@ public class DiffusionDataServiceImpl implements DiffusionDataService { @Override public DiffusionResultVO getDiffusionResult(String enginId, int hour, int layer) { Engineering engineering = engineeringMapper.selectById(enginId); - Wrf wrf = wrfMapper.selectOne(new LambdaQueryWrapper().eq(Wrf::getEnginId,enginId)); - String wrfFilePath = baseAPIService.buildEngineeringFilePath(eventServerProperties.getResultFilePrefix() ,engineering.getCreateBy(), engineering.getEngineeringName()); - String cmaqFilePath = baseAPIService.buildEngineeringFilePath(eventServerProperties.getResultFilePrefix() ,engineering.getCreateBy(), engineering.getEngineeringName()); + Wrf wrf = wrfMapper.selectOne(new LambdaQueryWrapper().eq(Wrf::getEnginId, enginId)); + String wrfFilePath = baseAPIService.buildEngineeringFilePath(eventServerProperties.getResultFilePrefix(), engineering.getCreateBy(), engineering.getEngineeringName()); + String cmaqFilePath = baseAPIService.buildEngineeringFilePath(eventServerProperties.getResultFilePrefix(), engineering.getCreateBy(), engineering.getEngineeringName()); + // 处理hour大于等于24的情况 + int actualHour = hour % 24; + int daysToAdd = hour / 24; + Date startTimeDate = null; + try { + startTimeDate = DateUtils.parseDate(wrf.getStartTime(),"yyyy-MM-dd HH:mm:ss"); + } catch (ParseException e) { + throw new RuntimeException(e); + } - try (NetcdfFile wrfNcFile = getWrfNetcdfFile(wrfFilePath, wrf.getStartTime()); - NetcdfFile cmaqNcFile = getCmaqNetcdfFile(cmaqFilePath, wrf.getStartTime());){ + // 如果hour大于等于24,需要调整日期 + if (daysToAdd > 0) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startTimeDate); + calendar.add(Calendar.DAY_OF_MONTH, daysToAdd); + startTimeDate = calendar.getTime(); + } + + String startTime = DateUtils.formatDate(startTimeDate, "yyyy-MM-dd HH:mm:ss"); + try (NetcdfFile wrfNcFile = getWrfNetcdfFile(wrfFilePath, startTime); + NetcdfFile cmaqNcFile = getCmaqNetcdfFile(cmaqFilePath, startTime)) { DiffusionResultVO diffusionResultVO = new DiffusionResultVO(); - List> values = NcUtil.get2DNCByName(cmaqNcFile, "CO", layer, hour); - List> xlats = NcUtil.get2DNCByName(wrfNcFile, "XLAT", layer, hour); - List> xlons = NcUtil.get2DNCByName(wrfNcFile, "XLONG", layer, hour); + List> values = NcUtil.get2DNCByName(cmaqNcFile, "CO", layer, actualHour); + List> xlats = NcUtil.get2DNCByName(wrfNcFile, "XLAT", layer, actualHour); + List> xlons = NcUtil.get2DNCByName(wrfNcFile, "XLONG", layer, actualHour); getDataInfo(xlats, xlons, values, 1, diffusionResultVO); diffusionResultVO.setSn(values.size()); diffusionResultVO.setWe(values.get(0).size());