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);