From c1773b6a90599503911f0e9b28402537913fc5b5 Mon Sep 17 00:00:00 2001 From: panbaolin Date: Thu, 2 Jul 2026 10:40:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:1.=E4=BF=AE=E6=94=B9=E5=A4=A9=E6=B0=94?= =?UTF-8?q?=E9=A2=84=E6=8A=A5=E4=B8=BB=E6=A8=A1=E5=9D=97=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=85=B3=E8=81=94=E6=B0=94=E8=B1=A1?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=92=8C=E6=9F=A5=E8=AF=A2=E5=85=B3=E8=81=94?= =?UTF-8?q?=E6=B0=94=E8=B1=A1=E6=95=B0=E6=8D=AE=E6=97=A5=E5=BF=97=E6=8E=A5?= =?UTF-8?q?=E5=8F=A32.=E4=BF=AE=E6=94=B9=E6=96=B0=E5=A2=9E=E5=92=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A2=84=E6=B5=8B=E4=BB=BB=E5=8A=A1=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/base/entity/WeatherData.java | 6 ++ .../modules/base/entity/WeatherTask.java | 10 --- .../wrf/service/impl/WrfServiceImpl.java | 13 ++-- .../controller/WeatherDataController.java | 13 ++-- .../controller/WeatherTaskController.java | 4 +- .../org/jeecg/service/WeatherDataService.java | 7 --- .../service/WeatherLinkedDataLogService.java | 31 ++++++++++ .../service/impl/WeatherDataServiceImpl.java | 61 +++++++++---------- .../impl/WeatherLinkedDataLogServiceImpl.java | 56 +++++++++++++++++ .../service/impl/WeatherTaskServiceImpl.java | 22 ++++++- 10 files changed, 158 insertions(+), 65 deletions(-) create mode 100644 jeecg-module-weather/src/main/java/org/jeecg/service/WeatherLinkedDataLogService.java create mode 100644 jeecg-module-weather/src/main/java/org/jeecg/service/impl/WeatherLinkedDataLogServiceImpl.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/WeatherData.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/WeatherData.java index f167ecb..b1cd39a 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/WeatherData.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/WeatherData.java @@ -76,4 +76,10 @@ public class WeatherData implements Serializable { */ @TableField(value = "time_batch") private String timeBatch; + + /** + * MD5值 + */ + @TableField(value = "md5_value") + private String md5Value; } \ No newline at end of file diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/WeatherTask.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/WeatherTask.java index 4fd8cae..7e4c345 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/WeatherTask.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/WeatherTask.java @@ -103,11 +103,6 @@ public class WeatherTask{ @TableField(exist = false) private MultipartFile file; - /** - * 创建人 - */ - private String createBy; - /** * 创建时间 */ @@ -115,11 +110,6 @@ public class WeatherTask{ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; - /** - * 更新人 - */ - private String updateBy; - /** * 更新时间 */ diff --git a/jeecg-module-event/src/main/java/org/jeecg/wrf/service/impl/WrfServiceImpl.java b/jeecg-module-event/src/main/java/org/jeecg/wrf/service/impl/WrfServiceImpl.java index 19bb3a5..40bbd7d 100644 --- a/jeecg-module-event/src/main/java/org/jeecg/wrf/service/impl/WrfServiceImpl.java +++ b/jeecg-module-event/src/main/java/org/jeecg/wrf/service/impl/WrfServiceImpl.java @@ -86,19 +86,18 @@ public class WrfServiceImpl extends ServiceImpl implements WrfSe public WeatherPathVO getWeatherPaths(Integer weatherDataType,String startTime, String endTime) { WeatherPathVO weatherPathVO = new WeatherPathVO(); - String weatherPath = systemStorageProperties.getRootPath() + File.separator; if (WeatherDataSourceEnum.PANGU.getKey().equals(weatherDataType)) { - weatherPathVO.setWeatherPath(weatherPath + systemStorageProperties.getPangu()); + weatherPathVO.setWeatherPath(systemStorageProperties.getPanguDataPath()); } else if (WeatherDataSourceEnum.GRAPHCAST.getKey().equals(weatherDataType)) { - weatherPathVO.setWeatherPath(weatherPath + systemStorageProperties.getGraphcast()); + weatherPathVO.setWeatherPath(systemStorageProperties.getGraphcastDataPath()); } else if (WeatherDataSourceEnum.CRA40.getKey().equals(weatherDataType)) { - weatherPathVO.setWeatherPath(weatherPath + systemStorageProperties.getCra40()); + weatherPathVO.setWeatherPath(systemStorageProperties.getCra40DataPath()); } else if (WeatherDataSourceEnum.NCEP.getKey().equals(weatherDataType)) { - weatherPathVO.setWeatherPath(weatherPath + systemStorageProperties.getNcep()); + weatherPathVO.setWeatherPath(systemStorageProperties.getNcepDataPath()); }else if (WeatherDataSourceEnum.FNL.getKey().equals(weatherDataType)) { - weatherPathVO.setWeatherPath(weatherPath + systemStorageProperties.getFnl()); + weatherPathVO.setWeatherPath(systemStorageProperties.getFnlDataPath()); } else if (WeatherDataSourceEnum.T1H.getKey().equals(weatherDataType)) { - weatherPathVO.setWeatherPath(weatherPath + systemStorageProperties.getT1h()); + weatherPathVO.setWeatherPath(systemStorageProperties.getT1hDataPath()); } // 将String类型的时间转换为LocalDateTime LocalDateTime start = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); diff --git a/jeecg-module-weather/src/main/java/org/jeecg/controller/WeatherDataController.java b/jeecg-module-weather/src/main/java/org/jeecg/controller/WeatherDataController.java index fe84cf5..3cdfe6d 100644 --- a/jeecg-module-weather/src/main/java/org/jeecg/controller/WeatherDataController.java +++ b/jeecg-module-weather/src/main/java/org/jeecg/controller/WeatherDataController.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.v3.oas.annotations.Operation; import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; @@ -14,6 +15,7 @@ import org.jeecg.job.DownloadT1hJob; import org.jeecg.modules.base.entity.WeatherData; import org.jeecg.modules.base.entity.WeatherLinkedDataLog; import org.jeecg.service.WeatherDataService; +import org.jeecg.service.WeatherLinkedDataLogService; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -30,6 +32,7 @@ import java.util.stream.Collectors; public class WeatherDataController { private final WeatherDataService weatherDataService; + private final WeatherLinkedDataLogService weatherLinkedDataLogService; @Resource private DownloadT1hJob downloadT1hJob; @@ -147,9 +150,9 @@ public class WeatherDataController { @AutoLog(value = "关联气象数据") @Operation(summary = "关联气象数据") @PutMapping("linkedData") - public Result linkedData(Integer dataType, - @DateTimeFormat(iso=DateTimeFormat.ISO.DATE) LocalDate startDate, - @DateTimeFormat(iso=DateTimeFormat.ISO.DATE)LocalDate endDate){ + public Result linkedData(@NotNull(message = "数据类型不能为空") Integer dataType, + @NotNull(message = "开始日期不能为空") @DateTimeFormat(iso=DateTimeFormat.ISO.DATE) LocalDate startDate, + @NotNull(message = "结束日期不能为空") @DateTimeFormat(iso=DateTimeFormat.ISO.DATE)LocalDate endDate){ weatherDataService.linkedData(dataType,startDate,endDate); return Result.OK(); } @@ -157,8 +160,8 @@ public class WeatherDataController { @AutoLog(value = "查询关联气象数据日志") @Operation(summary = "查询关联气象数据日志") @GetMapping("getLinkedDataLog") - public Result getLinkedDataLog(){ - List result = weatherDataService.getLinkedDataLog(); + public Result getLinkedDataLog(Integer lastId){ + List result = weatherLinkedDataLogService.getLinkedDataLog(lastId); return Result.OK(result); } } diff --git a/jeecg-module-weather/src/main/java/org/jeecg/controller/WeatherTaskController.java b/jeecg-module-weather/src/main/java/org/jeecg/controller/WeatherTaskController.java index 2726e12..1b15270 100644 --- a/jeecg-module-weather/src/main/java/org/jeecg/controller/WeatherTaskController.java +++ b/jeecg-module-weather/src/main/java/org/jeecg/controller/WeatherTaskController.java @@ -75,7 +75,7 @@ public class WeatherTaskController { @AutoLog(value = "启动任务") @Operation(summary = "启动任务") @PutMapping("runTask") - public Result runTask(@NotBlank(message = "任务ID不能为空") Integer taskId){ + public Result runTask(@NotNull(message = "任务ID不能为空") Integer taskId){ weatherTaskService.runTask(taskId); return Result.OK(); } @@ -83,7 +83,7 @@ public class WeatherTaskController { @AutoLog(value = "获取天气预测任务过程日志") @Operation(summary = "获取天气预测任务过程日志") @GetMapping("getTaskLog") - public Result getTaskLog(@NotBlank(message = "预测任务ID不能为空") Integer taskId){ + public Result getTaskLog(@NotNull(message = "预测任务ID不能为空") Integer taskId){ return Result.OK(weatherTaskService.getTaskLog(taskId)); } } diff --git a/jeecg-module-weather/src/main/java/org/jeecg/service/WeatherDataService.java b/jeecg-module-weather/src/main/java/org/jeecg/service/WeatherDataService.java index ce6adb7..e1d41ce 100644 --- a/jeecg-module-weather/src/main/java/org/jeecg/service/WeatherDataService.java +++ b/jeecg-module-weather/src/main/java/org/jeecg/service/WeatherDataService.java @@ -38,13 +38,6 @@ public interface WeatherDataService extends IService { * 处理静态气象数据入库接口,比上传快 */ void handleStaticDataToDB(String path,Integer dataSource); - - /** - * 查询关联气象数据日志 - * @return - */ - List getLinkedDataLog(); - /** * 关联气象数据 * @param dataType diff --git a/jeecg-module-weather/src/main/java/org/jeecg/service/WeatherLinkedDataLogService.java b/jeecg-module-weather/src/main/java/org/jeecg/service/WeatherLinkedDataLogService.java new file mode 100644 index 0000000..78f1c68 --- /dev/null +++ b/jeecg-module-weather/src/main/java/org/jeecg/service/WeatherLinkedDataLogService.java @@ -0,0 +1,31 @@ +package org.jeecg.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.WeatherLinkedDataLog; + +import java.util.List; + +/** + * grib文件关联数据表 + */ +public interface WeatherLinkedDataLogService extends IService { + + /** + * 保存关联过程日志 + * @param dataType + * @param logContent + */ + void create(Integer dataType,String logContent); + + /** + * 获取关联过程日志 + * @param lastId + * @return + */ + List getLinkedDataLog(Integer lastId); + + /** + * 清空表日志 + */ + void cleanTable(); +} diff --git a/jeecg-module-weather/src/main/java/org/jeecg/service/impl/WeatherDataServiceImpl.java b/jeecg-module-weather/src/main/java/org/jeecg/service/impl/WeatherDataServiceImpl.java index 43cb543..9836d0d 100644 --- a/jeecg-module-weather/src/main/java/org/jeecg/service/impl/WeatherDataServiceImpl.java +++ b/jeecg-module-weather/src/main/java/org/jeecg/service/impl/WeatherDataServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.WeatherStepConstants; import org.jeecg.common.constant.enums.*; @@ -21,8 +22,8 @@ import org.jeecg.common.util.NcUtil; import org.jeecg.modules.base.entity.WeatherData; import org.jeecg.modules.base.entity.WeatherLinkedDataLog; import org.jeecg.modules.base.mapper.WeatherDataMapper; -import org.jeecg.modules.base.mapper.WeatherLinkedDataLogMapper; import org.jeecg.service.WeatherDataService; +import org.jeecg.service.WeatherLinkedDataLogService; import org.jeecg.utils.WindRoseDataGenerator; import org.jeecg.vo.*; import org.springframework.stereotype.Service; @@ -48,7 +49,7 @@ import static org.jeecg.common.constant.LatLonSizeConstants.*; public class WeatherDataServiceImpl extends ServiceImpl implements WeatherDataService { private final WeatherDataMapper weatherDataMapper; - private final WeatherLinkedDataLogMapper weatherLinkedDataLogMapper; + private final WeatherLinkedDataLogService weatherLinkedDataLogService; private final SystemStorageProperties systemStorageProperties; /** @@ -399,18 +400,6 @@ public class WeatherDataServiceImpl extends ServiceImpl getLinkedDataLog() { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.select(WeatherLinkedDataLog::getCreateTime,WeatherLinkedDataLog::getLogContent); - return weatherLinkedDataLogMapper.selectList(queryWrapper); - } - /** * 关联气象数据 * @@ -421,7 +410,7 @@ public class WeatherDataServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(WeatherData::getMd5Value, gribFileMD5); + WeatherData queryResult = this.baseMapper.selectOne(queryWrapper); + if (Objects.nonNull(queryResult)) { + weatherLinkedDataLogService.create(dataType,file.getAbsolutePath()+"已存在"); + continue; + } WeatherData weatherData = new WeatherData(); weatherData.setFileName(file.getName()); weatherData.setFileExt(file.getName().substring(file.getName().lastIndexOf(".")+1)); @@ -483,26 +479,27 @@ public class WeatherDataServiceImpl extends ServiceImpl implements WeatherLinkedDataLogService { + + /** + * 保存关联过程日志 + * + * @param dataType + * @param logContent + */ + @Transactional(rollbackFor = RuntimeException.class) + @Override + public void create(Integer dataType, String logContent) { + WeatherLinkedDataLog linkedLog = new WeatherLinkedDataLog(); + linkedLog.setDataType(dataType); + linkedLog.setLogContent(logContent); + this.baseMapper.insert(linkedLog); + } + + /** + * 获取关联过程日志 + * + * @param lastId + * @return + */ + @Override + public List getLinkedDataLog(Integer lastId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.gt(Objects.nonNull(lastId),WeatherLinkedDataLog::getId,lastId); + queryWrapper.select(WeatherLinkedDataLog::getCreateTime,WeatherLinkedDataLog::getLogContent); + queryWrapper.orderByAsc(WeatherLinkedDataLog::getId); + queryWrapper.last("LIMIT 10"); + return this.baseMapper.selectList(queryWrapper); + } + + /** + * 清空表日志 + */ + @Transactional(rollbackFor = RuntimeException.class) + @Override + public void cleanTable() { + this.baseMapper.delete(null); + } +} diff --git a/jeecg-module-weather/src/main/java/org/jeecg/service/impl/WeatherTaskServiceImpl.java b/jeecg-module-weather/src/main/java/org/jeecg/service/impl/WeatherTaskServiceImpl.java index 75d40ab..bbcf0f5 100644 --- a/jeecg-module-weather/src/main/java/org/jeecg/service/impl/WeatherTaskServiceImpl.java +++ b/jeecg-module-weather/src/main/java/org/jeecg/service/impl/WeatherTaskServiceImpl.java @@ -20,10 +20,12 @@ import org.jeecg.modules.base.mapper.WeatherDataMapper; import org.jeecg.modules.base.mapper.WeatherTaskLogMapper; import org.jeecg.modules.base.mapper.WeatherTaskMapper; import org.jeecg.service.WeatherTaskService; +import org.reflections.vfs.Vfs; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.File; +import java.io.FileFilter; import java.io.IOException; import java.time.LocalDate; import java.time.LocalDateTime; @@ -104,9 +106,10 @@ public class WeatherTaskServiceImpl extends ServiceImpl files = FileUtil.loopFiles(this.systemStorageProperties.getForecastFileTmpPath(), new FileFilter() { + @Override + public boolean accept(File file) { + String flag = "_"+weatherTask.getId(); + return file.getName().contains(flag); + } + }); + if (CollUtil.isNotEmpty(files)) { + for (File delFile : files) { + delFile.delete(); + } + } } } file.transferTo(storageFile);