refactor(storage): 简化存储适配器配置逻辑并移除降级机制

- 移除默认存储配置常量 DEFAULT_STORAGE
- 简化 UploadStage 中的存储适配器获取逻辑,直接使用 StorageFactory.use()
- 移除降级到默认存储的处理机制
- 在 PuzzleGenerateServiceImpl 中复用存储适配器实例
- 移除 SourceRepository 中的 StorageUnsupportedException 导入
- 移除 GoodsServiceImpl 中的 StorageType 枚举导入
- 移除 SourceServiceImpl 中的 ScenicService 依赖注入
- 移除 PrinterServiceImpl 中的复杂存储适配器配置逻辑
- 在 TaskTaskServiceImpl 中统一使用景点存储适配器
- 在 FaceCleaner 中添加新的存储清理逻辑,使用独立的图片存储适配器
- 添加 sourceImageUrlMap 和 sourceScenicIdMap 来优化文件清理逻辑
This commit is contained in:
2026-02-05 14:16:16 +08:00
parent a85d6b0ead
commit 95c82cfcf2
8 changed files with 66 additions and 102 deletions

View File

@@ -34,7 +34,9 @@ import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import static com.ycwl.basic.constant.FaceConstant.USER_FACE_DB_NAME;
@@ -226,6 +228,16 @@ public class FaceCleaner {
public void cleanSourceOss() {
log.info("开始清理源视频素材文件");
List<SourceRespVO> list = sourceMapper.list(new SourceReqQuery());
Map<Long, String> sourceImageUrlMap = new HashMap<>();
Map<Long, Long> sourceScenicIdMap = new HashMap<>();
list.forEach(item -> {
if (item.getId() != null && item.getScenicId() != null) {
sourceScenicIdMap.put(item.getId(), item.getScenicId());
}
if (item.getId() != null) {
sourceImageUrlMap.put(item.getId(), item.getUrl());
}
});
ArrayList<String> adapterIdentity = new ArrayList<>();
ScenicReqQuery query = new ScenicReqQuery();
query.setPageSize(1000);
@@ -260,22 +272,45 @@ public class FaceCleaner {
log.info("文件存在关系:{},未删除", fileObject);
}
});
log.info("开始清理图片文件");
fileObjectList = adapter.listDir(StorageConstant.PHOTO_PATH);
fileObjectList.parallelStream().forEach(fileObject -> {
if (fileObject.getModifyTime() != null) {
// 如果是一天以内修改的,则跳过
if (DateUtil.between(fileObject.getModifyTime(), new Date(), DateUnit.DAY) <= 1) {
return;
}
});
log.info("开始清理图片文件");
IStorageAdapter imageAdapter = StorageFactory.use();
List<StorageFileObject> fileObjectList = imageAdapter.listDir(StorageConstant.PHOTO_PATH);
fileObjectList.parallelStream().forEach(fileObject -> {
if (fileObject.getModifyTime() != null) {
// 如果是一天以内修改的,则跳过
if (DateUtil.between(fileObject.getModifyTime(), new Date(), DateUnit.DAY) <= 1) {
return;
}
if (list.parallelStream().filter(videoRespVO -> Objects.nonNull(videoRespVO.getUrl())).noneMatch(videoRespVO -> videoRespVO.getUrl().contains(fileObject.getName()))){
log.info("删除文件:{}", fileObject);
adapter.deleteFile(fileObject.getFullPath());
} else {
log.info("文件存在关系:{},未删除", fileObject);
}
});
}
String name = fileObject.getName();
if (name == null) {
return;
}
int underscoreIndex = name.indexOf('_');
if (underscoreIndex <= 0) {
return;
}
Long sourceId;
try {
sourceId = Long.parseLong(name.substring(0, underscoreIndex));
} catch (NumberFormatException e) {
return;
}
Long scenicId = sourceScenicIdMap.get(sourceId);
if (scenicId == null || disableDeleteScenicIds.contains(scenicId.toString())) {
return;
}
String imageUrl = sourceImageUrlMap.get(sourceId);
if (imageUrl != null && imageUrl.contains(name)) {
log.info("文件存在关系:{},未删除", fileObject);
return;
}
log.info("删除文件:{}", fileObject);
imageAdapter.deleteFile(fileObject.getFullPath());
});
}
public void cleanVideoOss() {