From 2a3b4ca19ffbfb6df2fb85732d1e497bb55ef37b Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Tue, 30 Dec 2025 10:49:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(video):=20=E4=BF=AE=E5=A4=8D=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E8=A7=86=E9=A2=91=E8=BF=9E=E7=BB=AD=E6=80=A7=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E7=BC=93=E5=AD=98=E8=A6=86=E7=9B=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为VideoContinuityReportReq的gaps字段添加空列表默认值 - 在设备不支持连续性检查时检查Redis中是否已存在外部上报的缓存记录 - 避免已有的外部上报缓存被内部检查结果覆盖 - 保持已有缓存记录的完整性,仅在无缓存时进行存储 --- .../pc/device/req/VideoContinuityReportReq.java | 5 ++++- .../basic/task/DeviceVideoContinuityCheckTask.java | 12 +++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ycwl/basic/model/pc/device/req/VideoContinuityReportReq.java b/src/main/java/com/ycwl/basic/model/pc/device/req/VideoContinuityReportReq.java index 09c6a6f1..76c72565 100644 --- a/src/main/java/com/ycwl/basic/model/pc/device/req/VideoContinuityReportReq.java +++ b/src/main/java/com/ycwl/basic/model/pc/device/req/VideoContinuityReportReq.java @@ -6,6 +6,9 @@ import lombok.NoArgsConstructor; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; + +import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -72,7 +75,7 @@ public class VideoContinuityReportReq { /** * 间隙列表(选填,当continuous=false时应提供) */ - private List gaps; + private List gaps = Collections.emptyList(); /** * 间隙信息 diff --git a/src/main/java/com/ycwl/basic/task/DeviceVideoContinuityCheckTask.java b/src/main/java/com/ycwl/basic/task/DeviceVideoContinuityCheckTask.java index 7d0a03e4..65dd0a37 100644 --- a/src/main/java/com/ycwl/basic/task/DeviceVideoContinuityCheckTask.java +++ b/src/main/java/com/ycwl/basic/task/DeviceVideoContinuityCheckTask.java @@ -158,13 +158,23 @@ public class DeviceVideoContinuityCheckTask { // 执行连续性检查(允许2秒间隙) VideoContinuityResult result = operator.checkVideoContinuity(startDate, endDate, 2000L); + // 如果设备不支持连续性检查,检查是否已有外部上报的缓存记录 + String redisKey = REDIS_KEY_PREFIX + device.getId(); + if (!result.isSupport()) { + String existingCache = redisTemplate.opsForValue().get(redisKey); + if (existingCache != null) { + // 已有缓存记录(可能是外部工具上报的),不覆盖 + log.debug("设备 {} 不支持内部连续性检查,但已有缓存记录,跳过覆盖", device.getId()); + return false; + } + } + // 创建缓存对象 DeviceVideoContinuityCache cache = DeviceVideoContinuityCache.fromResult( device.getId(), result, startDate, endDate ); // 存储到Redis - String redisKey = REDIS_KEY_PREFIX + device.getId(); String cacheJson = objectMapper.writeValueAsString(cache); redisTemplate.opsForValue().set(redisKey, cacheJson, CACHE_TTL_HOURS, TimeUnit.HOURS);