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);