From 12d34c5f79eda4b3df993eb43ea5dcdd4aed30ed Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Tue, 30 Dec 2025 10:50:34 +0800 Subject: [PATCH] =?UTF-8?q?refactor(continuity):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=BF=9E=E7=BB=AD=E6=80=A7=E6=A3=80=E6=9F=A5=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=92=8C=E6=97=B6=E9=97=B4=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将时间格式从 ISO 8601 修改为标准日期时间格式 - 修复连续性检查中 Gaps 字段的空数组初始化问题 - 重构连续性检查循环逻辑,启动时立即执行一次检查 - 提取连续性检查逻辑到独立的 performContinuityCheck 函数 - 优化检查时间范围的判断逻辑 --- api/continuity_report.go | 6 ++++-- core/continuity.go | 38 +++++++++++++++++++++++--------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/api/continuity_report.go b/api/continuity_report.go index 5e9b325..bc26731 100644 --- a/api/continuity_report.go +++ b/api/continuity_report.go @@ -156,8 +156,8 @@ func reportSingleDevice(ctx context.Context, result dto.ContinuityCheckResult) e // convertToReportRequest 将内部检查结果转换为接口请求格式 func convertToReportRequest(result dto.ContinuityCheckResult) dto.ContinuityReportRequest { - // 时间格式:ISO 8601 - const timeFormat = "2006-01-02T15:04:05" + // 时间格式 + const timeFormat = "2006-01-02 15:04:05" request := dto.ContinuityReportRequest{ DeviceNo: result.DeviceNo, @@ -182,6 +182,8 @@ func convertToReportRequest(result dto.ContinuityCheckResult) dto.ContinuityRepo GapEndTime: gap.NextStartTime.Format(timeFormat), }) } + } else { + request.Gaps = []dto.ContinuityReportGap{} } return request diff --git a/core/continuity.go b/core/continuity.go index 4a41cb9..9f8b7e7 100644 --- a/core/continuity.go +++ b/core/continuity.go @@ -47,31 +47,39 @@ func RunContinuityCheckLoop(ctx context.Context) { zap.Int("checkStartHour", checkStartHour), zap.Int("checkEndHour", checkEndHour)) + // 启动时立即执行一次检查 + performContinuityCheck(ctx) + for { select { case <-ctx.Done(): logger.Info("连续性检查循环已停止") return case <-ticker.C: - now := time.Now() + performContinuityCheck(ctx) + } + } +} - // 只在9点到18点之间执行检查 - currentHour := now.Hour() - if currentHour < checkStartHour || currentHour >= checkEndHour { - continue - } +// performContinuityCheck 执行一次连续性检查 +func performContinuityCheck(ctx context.Context) { + now := time.Now() - startTime := now.Add(-time.Duration(rangeStartMinutes) * time.Minute) - endTime := now.Add(-time.Duration(rangeEndMinutes) * time.Minute) + // 只在9点到18点之间执行检查 + currentHour := now.Hour() + if currentHour < checkStartHour || currentHour >= checkEndHour { + return + } - results := CheckAllDevicesContinuity(ctx, startTime, endTime) + startTime := now.Add(-time.Duration(rangeStartMinutes) * time.Minute) + endTime := now.Add(-time.Duration(rangeEndMinutes) * time.Minute) - // 上报结果 - if len(results) > 0 { - if err := api.ReportContinuityCheck(ctx, results); err != nil { - logger.Error("上报连续性检查结果失败", zap.Error(err)) - } - } + results := CheckAllDevicesContinuity(ctx, startTime, endTime) + + // 上报结果 + if len(results) > 0 { + if err := api.ReportContinuityCheck(ctx, results); err != nil { + logger.Error("上报连续性检查结果失败", zap.Error(err)) } } }