From 9e1c4979c0837e4b655c0ac6f25e87ec909a9f71 Mon Sep 17 00:00:00 2001 From: yarnom Date: Fri, 22 Aug 2025 21:19:27 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=20=E5=BB=B6=E9=95=BF=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=9F=E8=AE=A1=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/tools/exporter.go | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/internal/tools/exporter.go b/internal/tools/exporter.go index e526d17..ef48b19 100644 --- a/internal/tools/exporter.go +++ b/internal/tools/exporter.go @@ -61,9 +61,9 @@ func (e *Exporter) Start(ctx context.Context) error { } now := time.Now().In(e.loc) - // 下一个10分钟边界 + 1分钟(改为60秒延迟) - next := alignToNextBucketEnd(now, 10).Add(1 * time.Minute) - e.logger.Printf("调度: 当前=%s, 下次执行=%s (延迟1分钟)", now.Format("2006-01-02 15:04:05"), next.Format("2006-01-02 15:04:05")) + // 下一个10分钟边界 + 1分30秒 + next := alignToNextBucketEnd(now, 10).Add(60 * time.Second) + e.logger.Printf("调度: 当前=%s, 下次执行=%s (延迟1分)", now.Format("2006-01-02 15:04:05"), next.Format("2006-01-02 15:04:05")) delay := time.Until(next) if delay > 0 { timer := time.NewTimer(delay) @@ -75,13 +75,14 @@ func (e *Exporter) Start(ctx context.Context) error { } } - // 当前时间是桶末,需要导出的是刚结束的上一个桶 - // 例如:现在是21:01:00,应该导出的是20:50桶(表示20:50-21:00的数据) + // 修正:当前时间是21:11:30,应该导出的是21:00:00桶(表示21:00-21:10的数据) currentTime := time.Now().In(e.loc) - bucketEnd := alignToPrevBucketEnd(currentTime, 10) // 上一个桶末,如21:00 - bucketStart := bucketEnd.Add(-10 * time.Minute) // 上一个桶开始,如20:50 + // 先找到前一个桶末(如21:10:00) + bucketEnd := alignToPrevBucketEnd(currentTime, 10) + // 再找到对应的桶开始(如21:00:00) + bucketStart := bucketEnd.Add(-10 * time.Minute) - e.logger.Printf("当前时间=%s, 导出桶=%s-%s", + e.logger.Printf("当前时间=%s, 导出桶开始时间=%s, 桶结束时间=%s", currentTime.Format("2006-01-02 15:04:05"), bucketStart.Format("2006-01-02 15:04:05"), bucketEnd.Format("2006-01-02 15:04:05")) @@ -101,7 +102,10 @@ func (e *Exporter) exportBucket(ctx context.Context, bucketStart, bucketEnd time return err } activePath := filepath.Join(outDir, fmt.Sprintf("weather_data_%s.csv", utcDay)) - e.logger.Printf("开始导出: 桶=%s-%s, 文件=%s", bucketStart.Format("2006-01-02 15:04:05"), bucketEnd.Format("2006-01-02 15:04:05"), activePath) + e.logger.Printf("开始导出: 桶开始时间=%s, 桶结束时间=%s, 文件=%s", + bucketStart.Format("2006-01-02 15:04:05"), + bucketEnd.Format("2006-01-02 15:04:05"), + activePath) // 先查询所有符合条件的站点,用于后续比对缺失 var eligibleStations []struct { @@ -278,7 +282,7 @@ func (e *Exporter) exportBucket(ctx context.Context, bucketStart, bucketEnd time } } - e.logger.Printf("导出完成: 桶=%s-%s, 总行数=%d, ZTD命中=%d, ZTD未命中=%d, 缺失站点数=%d", + e.logger.Printf("导出完成: 桶开始时间=%s, 桶结束时间=%s, 总行数=%d, ZTD命中=%d, ZTD未命中=%d, 缺失站点数=%d", bucketStart.Format("2006-01-02 15:04:05"), bucketEnd.Format("2006-01-02 15:04:05"), total, ztdHit, ztdMiss, missingCount)