Ver Fonte

一体化云端:
修改给北京中央研究院上传sftp

zhangchenglong há 3 semanas atrás
pai
commit
05704c0e6c

+ 54 - 0
in-cloud/src/main/java/com/jiayue/insu/incloud/job/data/push/SftpPushDqNwpDataJob.java

@@ -0,0 +1,54 @@
+package com.jiayue.insu.incloud.job.data.push;
+
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.jiayue.insu.incloud.constants.CommonStant;
+import com.jiayue.insu.incloud.constants.enums.QNHLEnum;
+import com.jiayue.insu.incloud.entity.Record;
+import com.jiayue.insu.incloud.entity.Station;
+import com.jiayue.insu.incloud.pushdata.PushDataToSftp;
+import com.jiayue.insu.incloud.service.RecordService;
+import com.jiayue.insu.incloud.service.StationService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalDateTime;
+
+/** SFTPPUSHDQNWPDATA
+ * 推送短期和nwp文件到指定sftp
+ *
+ * @author yh
+ * @version 1.0
+ * @since 2022/5/22 11:29
+ */
+public class SftpPushDqNwpDataJob implements Job {
+
+    @Autowired
+    private PushDataToSftp pushDataToSftp;
+    @Autowired
+    private StationService stationService;
+    @Autowired
+    private RecordService recordService;
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        String code = jobExecutionContext.getTrigger().getJobKey().getName();
+        String[] split = code.split("-");
+        if(split!=null && split.length>0){
+            String stationCode = split[0];
+            Station one = stationService.findByStationCode(stationCode);
+            if (one != null) {
+                //查询是否有今天成功记录 (为提高稳定性,该定时任务采取在规定时间段内 重复循环执行的定时策略,故:需要查询是否存在成功记录)
+                Record successRecord = recordService.findTimeAndTypeAndStateAndStation(
+                        LocalDateTimeUtil.beginOfDay(LocalDateTime.now()),
+                        CommonStant.RECORD_TYPE_PUSH_INIT,
+                        QNHLEnum.REQUEST_SUCCESS.getSign(), stationCode);
+                //没有成功记录进行业务
+                if(successRecord == null) {
+                    pushDataToSftp.pushDQAndNWPData(one);
+                }
+            }
+        }
+
+    }
+}

+ 55 - 50
in-cloud/src/main/java/com/jiayue/insu/incloud/pushdata/PushCommon.java

@@ -44,8 +44,6 @@ public class PushCommon {
     @Autowired
     private IntegrationCompanyService integrationCompanyService;
     @Autowired
-    private MinIoService minIoService;
-    @Autowired
     private FileUtils fileUtils;
     @Autowired
     private SFTPUtil sftpUtil;
@@ -78,41 +76,19 @@ public class PushCommon {
             recordService.save(record);
             return false;
         }
-        // 获取指定目录下的短期原始数据(/jiayue/insu/file/init/J00269/)
+
+        // 获取文件路径
         String filePath = initFilePath + stationCode + File.separatorChar;
-        File files = new File(filePath);
-        String[] fileNames = files.list();
-        // 如果文件名列表为空
-        if (fileNames == null || fileNames.length == 0) {
-            log.info("指定目录下无文件");
-            record.setState(StatusEnum.FILE_NULL.getSign());
-            record.setStateContent(StatusEnum.FILE_NULL.getMsg());
-            recordService.save(record);
-            return false;
-        }
-        // 获取当天日期
+
+        // 获取当时时间
         LocalDateTime today = LocalDateTime.now();
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
         DateTimeFormatter formatterSeparator = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         String todaySeparatorStr = today.format(formatterSeparator);
         String todayStr = today.format(formatter);
-        // 转为list并根据日期筛选排序
-        List<String> fileList = Arrays.stream(fileNames).collect(Collectors.toList());
-        List<String> filterFileList = fileList.stream().filter(s -> s.contains(todayStr)).filter(s -> s.contains("DQ")).collect(Collectors.toList());
-        // 如果筛选后无文件
-        if (filterFileList.size() == 0) {
-            log.info("无当日文件");
-            record.setState(StatusEnum.FILE_NULL.getSign());
-            record.setStateContent(StatusEnum.FILE_NULL.getMsg());
-            recordService.save(record);
-            return false;
-        }
-        filterFileList.sort(Collections.reverseOrder());
-        // 获取原始文件
-        File originalFile = new File(filterFileList.get(0));
-        // 读取文件
-        FileReader fileReader = new FileReader(filePath + originalFile);
-        List<String> originalContents = fileReader.readLines();
+
+        // 获取已经下载的预测文件内容
+        List<String> originalContents = getInitFileLines(todayStr,filePath,record,"DQ");
 
         List<Map<String, Object>> vList = new ArrayList<>();
         String dataTime[];
@@ -150,7 +126,7 @@ public class PushCommon {
 
         String fileType = todayStr + File.separatorChar + "dq";
         // 文件数据开始时间
-        String fileDateStr = DateUtil.format(DateUtil.beginOfDay(DateUtil.tomorrow()), "yyyyMMdd_HH:mm:ss");
+        String fileDateStr = DateUtil.format(DateUtil.beginOfDay(DateUtil.date()), "yyyyMMdd_HH:mm:ss");
         // 推送数据至sftp
         this.pushFileToSftp(record, vList, newFilePath, newFileName, templateName, station, fileType, companyCode, fileDateStr);
         return true;
@@ -167,29 +143,20 @@ public class PushCommon {
      * @return
      */
     public Boolean pushNWPData(Station station, String companyCode, String newFilePath, String newFileName, String templateName) {
-
-        JSONObject errMsg = new JSONObject();
-
         // 获取场站编号
         String stationCode = station.getStationCode();
         Record record = new Record(CommonStant.RECORD_TYPE_PUSH_INIT_TO_SFTP, companyCode, stationCode, null, LocalDateTime.now(), LocalDateTime.now(), null, null);
         record.setState(StatusEnum.SUCCESS.getSign());
 
-        String beginDate = DateUtil.today();
-        String endDate = DateUtil.format(DateUtil.tomorrow(), "yyyy-MM-dd");
-
-        // 从minIo获取文件
-        File originalFile = minIoService.downLoadFileFromMinIo(station, "nwp", beginDate, endDate, errMsg);
-
-        if(originalFile==null){
-            return false;
-        }
+        // 获取文件路径
         String filePath = initFilePath + stationCode + File.separatorChar;
 
-        String path11 = originalFile.getAbsolutePath();
-        // 读取文件
-        FileReader fileReader = new FileReader(originalFile.getAbsolutePath());
-        List<String> originalContents = fileReader.readLines();
+        // 获取当时时间
+        DateTime today = DateUtil.date();
+        String todayStr = today.toString("yyyyMMdd");
+
+        // 获取已经下载的预测文件内容
+        List<String> originalContents = getInitFileLines(todayStr,filePath,record,"NWP");
 
         List<Map<String, Object>> vList = new ArrayList<>();
         for (String originalContent : originalContents) {
@@ -231,8 +198,6 @@ public class PushCommon {
             }
         }
 
-        DateTime today = DateUtil.date();
-        String todayStr = today.toString("yyyyMMdd");
         String fileDateStr = DateUtil.format(DateUtil.beginOfDay(DateUtil.tomorrow()), "yyyyMMdd_HH:mm:ss");
         String fileType = todayStr + File.separatorChar + "nwp";
         this.pushFileToSftp(record, vList, newFilePath, newFileName, templateName, station, fileType, companyCode, fileDateStr);
@@ -309,4 +274,44 @@ public class PushCommon {
         return true;
     }
 
+    /**
+     * 获取已经下载的预测原始文件内容
+     * @return
+     */
+    public List<String> getInitFileLines(String todayStr,String filePath ,Record record ,String fileType){
+        List<String> originalContents = new ArrayList<>();
+        // 获取指定目录下的短期原始数据(/jiayue/insu/file/init/J00269/)
+        File files = new File(filePath);
+        String[] fileNames = files.list();
+        // 如果文件名列表为空
+        if (fileNames == null || fileNames.length == 0) {
+            log.info("指定目录下无文件");
+            record.setState(StatusEnum.FILE_NULL.getSign());
+            record.setStateContent(StatusEnum.FILE_NULL.getMsg());
+            recordService.save(record);
+            return originalContents;
+        }
+        // 获取当天日期
+
+        // 转为list并根据日期筛选排序
+        List<String> fileList = Arrays.stream(fileNames).collect(Collectors.toList());
+        List<String> filterFileList = fileList.stream().filter(s -> s.contains(todayStr)).filter(s -> s.contains(fileType)).collect(Collectors.toList());
+        // 如果筛选后无文件
+        if (filterFileList.size() == 0) {
+            log.info("无当日文件");
+            record.setState(StatusEnum.FILE_NULL.getSign());
+            record.setStateContent(StatusEnum.FILE_NULL.getMsg());
+            recordService.save(record);
+            return originalContents;
+        }
+        filterFileList.sort(Collections.reverseOrder());
+
+        // 获取原始文件
+        File originalFile = new File(filterFileList.get(0));
+        // 读取文件
+        FileReader fileReader = new FileReader(filePath + originalFile);
+        originalContents = fileReader.readLines();
+        return originalContents;
+    }
+
 }

+ 7 - 6
in-cloud/src/main/java/com/jiayue/insu/incloud/pushdata/PushDataToSftp.java

@@ -65,13 +65,14 @@ public class PushDataToSftp implements IPushInitForecastData {
      */
     @Override
     public Boolean pushDQData(Station station) {
+        Boolean result = false;
         String stationCode = station.getStationCode();
         String newFilePath = drFilePath + stationCode + File.separatorChar;
-        String tomorrowStr = DateUtil.format(DateUtil.tomorrow(), "yyyyMMdd");
-        String newFileName = "modeloutput-" + stationCode + "J001-" + tomorrowStr + "AM.txt";
+        String todayStr = DateUtil.format(DateUtil.date(), "yyyyMMdd");
+        String newFileName = "modeloutput-" + stationCode + "J001-" + todayStr + "AM.txt";
         String templateName = File.separatorChar + "vms" + File.separatorChar + "DR_DQ.vm";
-        pushCommon.pushDQData(station, station.getInCode(), newFilePath, newFileName, templateName);
-        return true;
+        result = pushCommon.pushDQData(station, station.getInCode(), newFilePath, newFileName, templateName);
+        return result;
     }
 
     @Override
@@ -79,8 +80,8 @@ public class PushDataToSftp implements IPushInitForecastData {
         Boolean result = false;
         String stationCode = station.getStationCode();
         String newFilePath = drFilePath + stationCode + File.separatorChar;
-        String tomorrowStr = DateUtil.format(DateUtil.tomorrow(), "yyyyMMdd");
-        String newFileName = "modeloutput-" + stationCode + "J001-" + tomorrowStr + "NWP.RB";
+        String todayStr = DateUtil.format(DateUtil.date(), "yyyyMMdd");
+        String newFileName = "modeloutput-" + stationCode + "J001-" + todayStr + "NWP.txt";
         String templateName = File.separatorChar + "vms" + File.separatorChar + "DR_NWP.vm";
         result = pushCommon.pushNWPData(station, station.getInCode(), newFilePath, newFileName, templateName);
         return result;