支持跳过景区文件删除,跳过重复adapter

This commit is contained in:
2025-06-13 15:01:02 +08:00
parent 4d8236afa1
commit d245d09837

View File

@ -33,11 +33,13 @@ import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import static com.ycwl.basic.constant.FaceConstant.USER_FACE_DB_NAME; import static com.ycwl.basic.constant.FaceConstant.USER_FACE_DB_NAME;
import static com.ycwl.basic.constant.StorageConstant.VIID_FACE;
@Component @Component
@EnableScheduling @EnableScheduling
@ -58,6 +60,7 @@ public class FaceCleaner {
private FaceMapper faceMapper; private FaceMapper faceMapper;
@Autowired @Autowired
private ScenicService scenicService; private ScenicService scenicService;
public static final List<String> disableDeleteScenicIds = List.of("3955650120997015552");
@Scheduled(cron = "0 0 1 * * ?") @Scheduled(cron = "0 0 1 * * ?")
public void deleteExpireSample(){ public void deleteExpireSample(){
@ -217,9 +220,9 @@ public class FaceCleaner {
} }
private void cleanFaceSampleOss() { private void cleanFaceSampleOss() {
log.info("开始清理人脸文件"); log.info("开始清理人脸文件");
List<FaceSampleRespVO> faceSampleRespVOS = faceSampleMapper.list(new FaceSampleReqQuery()); List<FaceSampleRespVO> list = faceSampleMapper.list(new FaceSampleReqQuery());
IStorageAdapter adapter = StorageFactory.use("faces"); IStorageAdapter adapter = StorageFactory.use("faces");
List<StorageFileObject> fileObjectList = adapter.listDir("user-face"); List<StorageFileObject> fileObjectList = adapter.listDir(VIID_FACE);
fileObjectList.parallelStream().forEach(fileObject -> { fileObjectList.parallelStream().forEach(fileObject -> {
if (fileObject.getModifyTime() != null) { if (fileObject.getModifyTime() != null) {
// 如果是一天以内修改的,则跳过 // 如果是一天以内修改的,则跳过
@ -227,7 +230,7 @@ public class FaceCleaner {
return; return;
} }
} }
if(faceSampleRespVOS.parallelStream().noneMatch(faceSampleRespVO -> faceSampleRespVO.getFaceUrl().contains(fileObject.getName()))){ if(list.parallelStream().noneMatch(faceSampleRespVO -> faceSampleRespVO.getFaceUrl().contains(fileObject.getName()))){
log.info("删除人脸文件:{}", fileObject); log.info("删除人脸文件:{}", fileObject);
adapter.deleteFile(fileObject.getFullPath()); adapter.deleteFile(fileObject.getFullPath());
} }
@ -236,8 +239,20 @@ public class FaceCleaner {
public void cleanSourceOss() { public void cleanSourceOss() {
log.info("开始清理源视频素材文件"); log.info("开始清理源视频素材文件");
List<SourceRespVO> list = sourceMapper.list(new SourceReqQuery()); List<SourceRespVO> list = sourceMapper.list(new SourceReqQuery());
ArrayList<String> adapterIdentity = new ArrayList<>();
scenicMapper.list(new ScenicReqQuery()).forEach(scenic -> { scenicMapper.list(new ScenicReqQuery()).forEach(scenic -> {
if (disableDeleteScenicIds.contains(scenic.getId().toString())) {
log.info("景区【{}】禁止删除文件,跳过!", scenic.getName());
return;
}
IStorageAdapter adapter = scenicService.getScenicStorageAdapter(scenic.getId()); IStorageAdapter adapter = scenicService.getScenicStorageAdapter(scenic.getId());
String identity = adapter.identity();
if (!adapterIdentity.contains(identity)) {
log.info("因为Identity相同,跳过");
adapterIdentity.add(identity);
} else {
return;
}
log.info("开始清理视频文件"); log.info("开始清理视频文件");
List<StorageFileObject> fileObjectList = adapter.listDir(StorageConstant.VIDEO_PIECE_PATH); List<StorageFileObject> fileObjectList = adapter.listDir(StorageConstant.VIDEO_PIECE_PATH);
fileObjectList.parallelStream().forEach(fileObject -> { fileObjectList.parallelStream().forEach(fileObject -> {
@ -275,8 +290,20 @@ public class FaceCleaner {
public void cleanVideoOss() { public void cleanVideoOss() {
log.info("开始清理视频文件"); log.info("开始清理视频文件");
List<VideoRespVO> list = videoMapper.list(new VideoReqQuery()); List<VideoRespVO> list = videoMapper.list(new VideoReqQuery());
ArrayList<String> adapterIdentity = new ArrayList<>();
scenicMapper.list(new ScenicReqQuery()).forEach(scenic -> { scenicMapper.list(new ScenicReqQuery()).forEach(scenic -> {
if (disableDeleteScenicIds.contains(scenic.getId().toString())) {
log.info("景区【{}】禁止删除文件,跳过!", scenic.getName());
return;
}
IStorageAdapter adapter = scenicService.getScenicStorageAdapter(scenic.getId()); IStorageAdapter adapter = scenicService.getScenicStorageAdapter(scenic.getId());
String identity = adapter.identity();
if (!adapterIdentity.contains(identity)) {
adapterIdentity.add(identity);
} else {
log.info("因为Identity相同,跳过");
return;
}
log.info("开始清理视频文件"); log.info("开始清理视频文件");
List<StorageFileObject> fileObjectList = adapter.listDir(StorageConstant.VLOG_PATH); List<StorageFileObject> fileObjectList = adapter.listDir(StorageConstant.VLOG_PATH);
fileObjectList.parallelStream().forEach(fileObject -> { fileObjectList.parallelStream().forEach(fileObject -> {