diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java index a4023f88..9000df11 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java @@ -81,6 +81,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.ycwl.basic.constant.FaceConstant.FACE_LOW_THRESHOLD_PFX; import static com.ycwl.basic.constant.FaceConstant.FACE_RECOGNITION_COUNT_PFX; @@ -490,7 +491,21 @@ public class FaceServiceImpl implements FaceService { return Collections.emptyList(); } - return sourceEntities.stream().map(sourceEntity -> { + List filteredSourceEntities = sourceEntities.stream() + .sorted(Comparator.comparing(SourceEntity::getCreateTime).reversed()) + .collect(Collectors.groupingBy(SourceEntity::getDeviceId)) + .entrySet() + .stream().flatMap(entry -> { + DeviceConfigManager configManager = deviceRepository.getDeviceConfigManager(entry.getKey()); + if (configManager.getInteger("limit_video", 0) > 0) { + return Stream.concat( + entry.getValue().stream().filter(item -> item.getType() == 2), + entry.getValue().stream().filter(item -> item.getType() == 1).limit(Math.min(entry.getValue().size(), configManager.getInteger("limit_video", 0))) + ); + } + return entry.getValue().stream(); + }).toList(); + return filteredSourceEntities.stream().map(sourceEntity -> { DeviceConfigManager deviceConfig = deviceRepository.getDeviceConfigManager(sourceEntity.getDeviceId()); MemberSourceEntity memberSourceEntity = new MemberSourceEntity(); memberSourceEntity.setScenicId(face.getScenicId()); @@ -645,7 +660,7 @@ public class FaceServiceImpl implements FaceService { return entry.getValue().stream(); }).toList() .stream().map(FaceSampleEntity::getId).toList(); - log.info("视频切分任务: faceId={}, 原始数量={}, 筛选后数量={}", faceId, sampleListIds.size(), faceSampleIds.size()); + log.info("视频切分任务: faceId={}, 原始数量={}, 筛选后数量={}", faceId, faceSampleList.size(), faceSampleIds.size()); log.debug("视频重切逻辑:视频数量 {}, 照片数量 {}", videoCount, photoCount); // 只有照片数量大于视频数量时才创建重切任务