Sfoglia il codice sorgente

修改为北京时间和下载频率

hdc 2 anni fa
parent
commit
19558507b4

+ 5 - 34
tongfei_river_data_collection/src/main/java/com/ublinkage/datacollection/ScheduledTaskConfig.java

@@ -59,19 +59,19 @@ public class ScheduledTaskConfig {
     /**
      * 下载气象预报数据
      */
-    @Scheduled(cron = "0 0 1,7,13,19 * * ?")
+    @Scheduled(cron = "0 0 */1 * * ?")
     public void downloadQxybDataTask() {
-        String startTime = getLatestPublishTime();
-        String endTime = getLatestPublishTime();
+        String startTime = Util.getLatestPublishTime();
+        String endTime = Util.getLatestPublishTime();
         qxybDataService.downloadQxybData(startTime, endTime);
     }
 
     /**
      * 下载澜沧江上游高程带融雪覆盖预报
      */
-    @Scheduled(cron = "0 0 1,7,13,19 * * ?")
+    @Scheduled(cron = "0 0 1 * * ?")
     public void downloadSnowCoverTask() {
-        String publishDt = getPublishDt();
+        String publishDt = Util.getPublishDt();
         qxybDataService.downloadSnowCover(publishDt);
     }
 
@@ -100,33 +100,4 @@ public class ScheduledTaskConfig {
     }
 
 
-
-    public static String getLatestPublishTime(){
-        LocalDateTime localDateTime = getLatestPublishLateTime();
-        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        return pattern.format(localDateTime);
-    }
-
-    @NotNull
-    private static LocalDateTime getLatestPublishLateTime() {
-        //LocalDateTime now = LocalDateTime.of(2023, 6, 27, 1, 0);
-        LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
-        long seconds = now.toEpochSecond(ZoneOffset.of("+8"));
-        long hours = seconds / (60 * 60);
-        long newHours = (hours / 6) * 6;
-        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(newHours * (60 * 60), 0, ZoneOffset.UTC);
-        localDateTime=localDateTime.plusHours(8);
-        return localDateTime;
-    }
-
-    public static String getPublishDt(){
-        //LocalDateTime now = LocalDateTime.of(2023, 6, 27, 1, 0);
-        LocalDateTime localDateTime = getLatestPublishLateTime();
-        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH_192");
-        return pattern.format(localDateTime);
-    }
-
-    public static void main(String[] args) {
-        System.out.println(getLatestPublishTime());
-    }
 }

+ 43 - 0
tongfei_river_data_collection/src/main/java/com/ublinkage/datacollection/Util.java

@@ -0,0 +1,43 @@
+package com.ublinkage.datacollection;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.time.Clock;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+
+public class Util {
+    private Util(){
+
+    }
+
+    public static String getLatestPublishTime(){
+        LocalDateTime localDateTime = getLatestPublishLateTime();
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        return pattern.format(localDateTime);
+    }
+
+    @NotNull
+    private static LocalDateTime getLatestPublishLateTime() {
+        //LocalDateTime now = LocalDateTime.of(2023, 6, 27, 1, 0);
+        LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
+        long seconds = now.toEpochSecond(ZoneOffset.of("+8"));
+        long hours = seconds / (60 * 60);
+        long newHours = (hours / 6) * 6;
+        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(newHours * (60 * 60), 0, ZoneOffset.UTC);
+        localDateTime=localDateTime.plusHours(8);
+        return localDateTime;
+    }
+
+    public static String getPublishDt(){
+        //LocalDateTime now = LocalDateTime.of(2023, 6, 27, 1, 0);
+        LocalDateTime localDateTime = getLatestPublishLateTime();
+        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH_192");
+        return pattern.format(localDateTime);
+    }
+
+    public static void main(String[] args) {
+        System.out.println(getLatestPublishTime());
+    }
+}

+ 3 - 17
tongfei_river_data_collection/src/main/java/com/ublinkage/datacollection/controller/QxybController.java

@@ -1,5 +1,6 @@
 package com.ublinkage.datacollection.controller;
 
+import com.ublinkage.datacollection.Util;
 import com.ublinkage.datacollection.service.QxybDataService;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,29 +25,14 @@ public class QxybController {
     public String download(@RequestParam(value = "startTime", required = false) String startTime,
                            @RequestParam(value = "endTime", required = false) String endTime) {
         if (startTime == null || endTime == null) {
-            startTime = getLatestPublishTime();
-            endTime = getLatestPublishTime();
+            startTime = Util.getLatestPublishTime();
+            endTime = startTime;
         }
         qxybDataService.downloadQxybData(startTime, endTime);
         return "OK";
     }
 
-    public static String getLatestPublishTime() {
-        LocalDateTime localDateTime = getLatestPublishLateTime();
-        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        return pattern.format(localDateTime);
-    }
 
-    @NotNull
-    private static LocalDateTime getLatestPublishLateTime() {
-        //LocalDateTime now = LocalDateTime.of(2023, 6, 27, 1, 0);
-        LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
-        long seconds = now.toEpochSecond(ZoneOffset.of("+8"));
-        long hours = seconds / (60 * 60);
-        long newHours = (hours / 6) * 6;
-        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(newHours * (60 * 60), 0, ZoneOffset.UTC);
-        return localDateTime;
-    }
 
 
 }

+ 29 - 82
tongfei_river_data_collection/src/main/java/com/ublinkage/datacollection/service/QxybDataService.java

@@ -13,7 +13,6 @@ import org.springframework.util.StringUtils;
 
 import java.io.File;
 import java.io.IOException;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
@@ -32,6 +31,7 @@ public class QxybDataService {
     public static final String BASE_URL = "http://111.198.2.202:6657";
     public static final DateTimeFormatter DATE_TIME_FORMATTER1 = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH_mm_ss");
     public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
     /**
      * 下载路径
      */
@@ -351,9 +351,7 @@ public class QxybDataService {
             String[] strings = publishDT.split("_");
             String timeFlg = strings[1];
             LocalDateTime ldtPulishTime = LocalDateTime.parse(publishTime, DATE_TIME_FORMATTER);
-            LocalDate date = ldtPulishTime.toLocalDate();
-
-            List<LocalDateTime> hoursForGridRain = getHoursForGridRain(timeFlg, date);
+            List<LocalDateTime> hoursForGridRain = getHoursForGridRain(timeFlg, ldtPulishTime);
             hoursForGridRain.forEach(hour -> {
                 try {
                     String dt1 = hour.format(DATE_TIME_FORMATTER1);
@@ -373,21 +371,11 @@ public class QxybDataService {
                 }
             });
 
-            List<LocalDate> daysForGridRain = getDaysForGridRain(timeFlg, date);
+            List<LocalDateTime> daysForGridRain = getDaysForGridRain(timeFlg, ldtPulishTime);
             daysForGridRain.forEach(day -> {
                 try {
-                    LocalTime time = LocalTime.of(0, 0);
-                    if ("00".equals(timeFlg)) {
-                        time = LocalTime.of(12, 0);
-                    } else if ("06".equals(timeFlg)) {
-                        time = LocalTime.of(18, 0);
-                    } else if ("12".equals(timeFlg)) {
-                        time = LocalTime.of(0, 0);
-                    } else if ("18".equals(timeFlg)) {
-                        time = LocalTime.of(6, 0);
-                    }
-                    String dt1 = LocalDateTime.of(day, time).format(DATE_TIME_FORMATTER1);
-                    String dt2 = LocalDateTime.of(day.plusDays(1), time).format(DATE_TIME_FORMATTER1);
+                    String dt1 = day.format(DATE_TIME_FORMATTER1);
+                    String dt2 = day.plusDays(1).format(DATE_TIME_FORMATTER1);
                     String url2 = BASE_URL + "/getForecastMatrixByWrfRDField?RDField=" + RDField + "&publishDT=" + publishInfo.getPublishDT() + "&ensemble=" + publishInfo.getEnsemble() + "&domain=" + domain + "&content=precipitation&DT1=" + dt1 + "&DT2=" + dt2 + "&step=" + 24;
                     log.info("下载网格降水预报数据(日尺度):{}", url2);
                     String result = getResult(url2);
@@ -403,7 +391,7 @@ public class QxybDataService {
                 }
             });
 
-            List<LocalDateTime> hoursForGridTemp = getHoursForGridTemp(timeFlg, date);
+            List<LocalDateTime> hoursForGridTemp = getHoursForGridTemp(timeFlg, ldtPulishTime);
             hoursForGridTemp.forEach(hour -> {
                 try {
                     String dt1 = hour.format(DATE_TIME_FORMATTER1);
@@ -510,62 +498,25 @@ public class QxybDataService {
         return FileUtil.readUtf8Lines(path);
     }
 
-    /**
-     * 流域15分区网格降水预报(日尺度)日期序列
-     *
-     * @param timeFlg 日批次:00、06、12、18
-     * @param date    发布日期
-     * @return
-     */
-    private static List<LocalDate> getDaysForDiv15Rain(String timeFlg, LocalDate date) {
-        List<LocalDate> list = new ArrayList<>();
-        LocalDate startDate = date.plusDays(1);
-        int days = 0;
-        switch (timeFlg) {
-            case "00":
-            case "06":
-            case "18":
-                days = 3;
-                break;
-            case "12":
-                days = 14;
-                break;
-            default:
-                throw new RuntimeException("日批次号无效");
-                //break;
-        }
-        for (int i = 0; i < days; list.add(startDate.plusDays(i++))) ;
-        return list;
-    }
-
-
     /**
      * 流域网格降水预报(小时尺度)小时序列
      *
      * @param timeFlg 日批次:00、06、12、18
-     * @param date    发布日期
+     * @param time    发布时间(北京时间)
      * @return
      */
-    private static List<LocalDateTime> getHoursForGridRain(String timeFlg, LocalDate date) {
+    private static List<LocalDateTime> getHoursForGridRain(String timeFlg, LocalDateTime time) {
         List<LocalDateTime> list = new ArrayList<>();
-        LocalDateTime startTime = null;
+        LocalDateTime startTime = time.plusHours(12);
         int hours = 0;
         switch (timeFlg) {
             case "00":
-                hours = 84;
-                startTime = LocalDateTime.of(date, LocalTime.of(12, 0, 0));
-                break;
             case "06":
+            case "18":
                 hours = 84;
-                startTime = LocalDateTime.of(date, LocalTime.of(18, 0, 0));
                 break;
             case "12":
                 hours = 348;
-                startTime = LocalDateTime.of(date.plusDays(1), LocalTime.of(0, 0, 0));
-                break;
-            case "18":
-                hours = 84;
-                startTime = LocalDateTime.of(date.plusDays(1), LocalTime.of(6, 0, 0));
                 break;
             default:
                 throw new RuntimeException("日批次号无效");
@@ -579,29 +530,21 @@ public class QxybDataService {
      * 流域网格气温预报(小时尺度)小时序列
      *
      * @param timeFlg 日批次:00、06、12、18
-     * @param date    发布日期
+     * @param time    发布时间(北京时间)
      * @return
      */
-    private static List<LocalDateTime> getHoursForGridTemp(String timeFlg, LocalDate date) {
+    private static List<LocalDateTime> getHoursForGridTemp(String timeFlg, LocalDateTime time) {
         List<LocalDateTime> list = new ArrayList<>();
-        LocalDateTime startTime = null;
+        LocalDateTime startTime = time.plusHours(12);
         int hours = 0;
         switch (timeFlg) {
             case "00":
-                hours = 85;
-                startTime = LocalDateTime.of(date, LocalTime.of(12, 0, 0));
-                break;
             case "06":
+            case "18":
                 hours = 85;
-                startTime = LocalDateTime.of(date, LocalTime.of(18, 0, 0));
                 break;
             case "12":
-                hours = 340;
-                startTime = LocalDateTime.of(date.plusDays(1), LocalTime.of(0, 0, 0));
-                break;
-            case "18":
-                hours = 85;
-                startTime = LocalDateTime.of(date.plusDays(1), LocalTime.of(6, 0, 0));
+                hours = 349;
                 break;
             default:
                 throw new RuntimeException("日批次号无效");
@@ -615,33 +558,37 @@ public class QxybDataService {
      * 流域网格降水预报(日尺度)日期序列
      *
      * @param timeFlg 日批次:00、06、12、18
-     * @param date    发布日期
+     * @param time    发布时间(北京时间)
      * @return
      */
-    private static List<LocalDate> getDaysForGridRain(String timeFlg, LocalDate date) {
-        List<LocalDate> list = new ArrayList<>();
+    private static List<LocalDateTime> getDaysForGridRain(String timeFlg, LocalDateTime time) {
+        time = time.plusHours(-8);
+        List<LocalDateTime> list = new ArrayList<>();
 
-        LocalDate startDate = null;
+        LocalDateTime startTime = null;
         int days = 0;
         switch (timeFlg) {
             case "00":
-            case "06":
                 days = 3;
-                startDate = date;
+                startTime = LocalDateTime.of(time.toLocalDate(), LocalTime.of(20, 0));
                 break;
-            case "18":
+            case "06":
                 days = 3;
-                startDate = date.plusDays(1);
+                startTime = LocalDateTime.of(time.toLocalDate().plusDays(1), LocalTime.of(2, 0));
                 break;
             case "12":
-                startDate = date.plusDays(1);
                 days = 14;
+                startTime = LocalDateTime.of(time.toLocalDate().plusDays(1), LocalTime.of(14, 0));
+                break;
+            case "18":
+                days = 3;
+                startTime = LocalDateTime.of(time.toLocalDate().plusDays(1), LocalTime.of(8, 0));
                 break;
             default:
                 throw new RuntimeException("日批次号无效");
                 //break;
         }
-        for (int i = 0; i < days; list.add(startDate.plusDays(i++))) ;
+        for (int i = 0; i < days; list.add(startTime.plusDays(i++))) ;
         return list;
     }