Skip to content

Commit 971e392

Browse files
committed
fix(system/file): 修复回收站为空或 MyBatis Plus 触发防全表更新插件拦截导致清空回收站报错的问题
Closes #202
1 parent 4b5fa9b commit 971e392

1 file changed

Lines changed: 29 additions & 18 deletions

File tree

continew-system/src/main/java/top/continew/admin/system/service/impl/FileRecycleServiceImpl.java

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
package top.continew.admin.system.service.impl;
1818

19+
import cn.hutool.core.collection.CollUtil;
1920
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
21+
import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy;
22+
import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
2023
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
2124
import lombok.RequiredArgsConstructor;
2225
import org.dromara.x.file.storage.core.FileInfo;
@@ -94,25 +97,33 @@ public void delete(Long id) {
9497
@Override
9598
@Transactional(rollbackFor = Exception.class)
9699
public void clean() {
97-
// 查询文件
100+
// 查询回收站记录
98101
List<FileDO> list = fileMapper.selectListInRecycleBin();
99-
// 删除记录
100-
fileMapper.cleanRecycleBin(UserContextHolder.getUserId());
101-
// 删除文件
102-
// 批量获取存储配置
103-
Map<Long, List<FileDO>> fileListGroup = list.stream().collect(Collectors.groupingBy(FileDO::getStorageId));
104-
List<StorageDO> storageList = storageService.listByIds(fileListGroup.keySet());
105-
Map<Long, StorageDO> storageGroup = storageList.stream()
106-
.collect(Collectors.toMap(StorageDO::getId, Function.identity(), (existing, replacement) -> existing));
107-
// 删除文件
108-
for (Map.Entry<Long, List<FileDO>> entry : fileListGroup.entrySet()) {
109-
StorageDO storage = storageGroup.get(entry.getKey());
110-
// 清空回收站
111-
FileInfo fileInfo = new FileInfo();
112-
fileInfo.setPlatform(storage.getCode());
113-
fileInfo.setBasePath(StringConstants.EMPTY);
114-
fileInfo.setPath(storage.getRecycleBinPath());
115-
fileStorageService.delete(fileInfo);
102+
if (CollUtil.isEmpty(list)) {
103+
return;
104+
}
105+
try {
106+
InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().blockAttack(true).build());
107+
// 删除记录
108+
fileMapper.cleanRecycleBin(UserContextHolder.getUserId());
109+
// 删除文件
110+
// 批量获取存储配置
111+
Map<Long, List<FileDO>> fileListGroup = list.stream().collect(Collectors.groupingBy(FileDO::getStorageId));
112+
List<StorageDO> storageList = storageService.listByIds(fileListGroup.keySet());
113+
Map<Long, StorageDO> storageGroup = storageList.stream()
114+
.collect(Collectors.toMap(StorageDO::getId, Function.identity(), (existing, replacement) -> existing));
115+
// 删除文件
116+
for (Map.Entry<Long, List<FileDO>> entry : fileListGroup.entrySet()) {
117+
StorageDO storage = storageGroup.get(entry.getKey());
118+
// 清空回收站
119+
FileInfo fileInfo = new FileInfo();
120+
fileInfo.setPlatform(storage.getCode());
121+
fileInfo.setBasePath(StringConstants.EMPTY);
122+
fileInfo.setPath(storage.getRecycleBinPath());
123+
fileStorageService.delete(fileInfo);
124+
}
125+
} finally {
126+
InterceptorIgnoreHelper.clearIgnoreStrategy();
116127
}
117128
}
118129

0 commit comments

Comments
 (0)