fix:文件回收站功能:删除到回收站,7天(设置时间)后自动删除;回收站中也可以手动删除

This commit is contained in:
2026-02-06 09:28:40 +08:00
parent 10d3384ccd
commit 5673c31564
5 changed files with 45 additions and 21 deletions

View File

@@ -478,9 +478,17 @@ public class DataStorageAnalysisImpl implements DataStorageAnalysis {
// 处理标签查询使用AOP自动填充的dictTagIdsCache
if (queryBigFileReq.getDictTags() != null && !queryBigFileReq.getDictTags().isEmpty()) {
List<Long> fileIds = extractFileIdsByTags(queryBigFileReq);
if (fileIds != null) {
queryBigFileReq.setFileIds(fileIds);
// 传入了标签但没有任何匹配的文件ID直接返回空结果避免查询出所有未打标签的文件
if (ObjectUtils.isEmpty(fileIds)) {
PageInfo<FileStorage> emptyPage = new PageInfo<>(Collections.emptyList());
emptyPage.setPageNum(queryBigFileReq.getCurrent());
emptyPage.setPageSize(queryBigFileReq.getSize());
emptyPage.setTotal(0);
return emptyPage;
}
queryBigFileReq.setFileIds(fileIds);
}
Long tenantId = ThreadLocalContext.getTenantId();

View File

@@ -46,14 +46,18 @@ public class DeleteApproveStrategy implements ApproveStrategy {
}
/**
* 处理文件删除审批通过 - 移入回收站
* 处理文件删除审批通过 - 更新审批状态并移入回收站
*/
private boolean handleFileDeletion(ApproveContext context, FileMetadataInfo metadata, int type) {
IFileMetadataInfoService service = context.getFileMetadataInfoService();
// 移入回收站
LocalDateTime now = LocalDateTime.now();
LocalDateTime expireAt = now.plusDays(recycleRetentionDays);
// 更新审批状态 + 移入回收站
metadata.setTempMetadata(null);
metadata.setApprovalStatus(ApprovalFileDataStatusEnum.APPROVED.getKey());
metadata.setApproveType(ApproveFileDataTypeEnum.COMPLETED.getCode());
metadata.setDeletedAt(now);
metadata.setRecycleExpireAt(expireAt);
metadata.setUpdateTime(now);
@@ -64,7 +68,7 @@ public class DeleteApproveStrategy implements ApproveStrategy {
}
/**
* 处理目录删除审批通过 - 移入回收站
* 处理目录删除审批通过 - 更新审批状态并移入回收站
*/
private boolean handleDirDeletion(ApproveContext context, FileMetadataInfo rootDirMetadata) {
IFileMetadataInfoService service = context.getFileMetadataInfoService();
@@ -80,10 +84,13 @@ public class DeleteApproveStrategy implements ApproveStrategy {
LocalDateTime now = LocalDateTime.now();
LocalDateTime expireAt = now.plusDays(recycleRetentionDays);
// 批量更新回收站状态
// 批量更新审批状态 + 回收站状态
if (CollectionUtils.isNotEmpty(allFileIds)) {
List<FileMetadataInfo> allMetadataList = service.listByIds(allFileIds);
allMetadataList.forEach(item -> {
item.setTempMetadata(null);
item.setApprovalStatus(ApprovalFileDataStatusEnum.APPROVED.getKey());
item.setApproveType(ApproveFileDataTypeEnum.COMPLETED.getCode());
item.setDeletedAt(now);
item.setRecycleExpireAt(expireAt);
item.setUpdateTime(now);
@@ -96,18 +103,18 @@ public class DeleteApproveStrategy implements ApproveStrategy {
}
/**
* 处理审批拒绝
* 处理审批拒绝 - 只更新审批状态,不移入回收站
*/
private boolean handleRejection(ApproveContext context, FileMetadataInfo metadata) {
IFileMetadataInfoService service = context.getFileMetadataInfoService();
// 如果是目录,需要递归恢复所有子项状态
// 如果是目录,需要递归更新所有子项审批状态
if (Objects.equals(DataTypeEnum.DIRECTORY.getValue(), metadata.getDataType())) {
Set<Long> allFileIds = new HashSet<>();
Set<Long> allDirIds = new HashSet<>();
collectRecursiveIds(service, metadata.getId(), allFileIds, allDirIds);
// 批量恢复状态
// 批量更新审批状态(不移入回收站)
if (CollectionUtils.isNotEmpty(allFileIds)) {
List<FileMetadataInfo> allMetadataList = service.listByIds(allFileIds);
allMetadataList.forEach(item -> {
@@ -119,16 +126,16 @@ public class DeleteApproveStrategy implements ApproveStrategy {
service.updateBatchById(allMetadataList);
}
log.info("审批拒绝,已恢复目录及所有子项状态: id={}", metadata.getId());
log.info("审批拒绝,已更新目录及所有子项审批状态(未移入回收站): id={}", metadata.getId());
} else {
// 单文件恢复状态
// 单文件更新审批状态(不移入回收站)
metadata.setTempMetadata(null);
metadata.setApprovalStatus(ApprovalFileDataStatusEnum.REJECTED.getKey());
metadata.setApproveType(ApproveFileDataTypeEnum.COMPLETED.getCode());
metadata.setUpdateTime(LocalDateTime.now());
service.updateById(metadata);
log.info("审批拒绝,已恢复文件状态: id={}", metadata.getId());
log.info("审批拒绝,已更新文件审批状态(未移入回收站): id={}", metadata.getId());
}
return true;