From 19d674cf9152fce6718ffcc5c6ae9067a20d6baf Mon Sep 17 00:00:00 2001 From: MAC <1162714483@qq.com> Date: Mon, 7 Aug 2023 22:56:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E5=8F=8A?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B5=81=E7=A8=8B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +- .../file/component/AsyncTaskComp.java | 16 +++++--- .../file/controller/FileController.java | 15 +++++++- .../com/qiwenshare/file/domain/Image.java | 2 +- .../file/service/FiletransferService.java | 37 +++++++++++++------ .../file/service/UserFileService.java | 16 +++++--- 6 files changed, 62 insertions(+), 28 deletions(-) diff --git a/pom.xml b/pom.xml index 891a977..83d2226 100644 --- a/pom.xml +++ b/pom.xml @@ -6,11 +6,11 @@ com.qiwenshare qiwenshare - 1.2.7 + 1.2.8 qiwen-file - 1.2.7-SNAPSHOT + 1.2.8-SNAPSHOT qiwen-file pan.qiwenshare.com jar diff --git a/src/main/java/com/qiwenshare/file/component/AsyncTaskComp.java b/src/main/java/com/qiwenshare/file/component/AsyncTaskComp.java index b9619e9..7cc36d6 100644 --- a/src/main/java/com/qiwenshare/file/component/AsyncTaskComp.java +++ b/src/main/java/com/qiwenshare/file/component/AsyncTaskComp.java @@ -75,12 +75,16 @@ public class AsyncTaskComp { if (filePointCount != null && filePointCount == 0 && userFileItem.getIsDir() == 0) { FileBean fileBean = fileMapper.selectById(userFileItem.getFileId()); - try { - filetransferService.deleteFile(fileBean); - fileMapper.deleteById(fileBean.getFileId()); - } catch (Exception e) { - log.error("删除本地文件失败:" + JSON.toJSONString(fileBean)); + if (fileBean != null) { + try { + filetransferService.deleteFile(fileBean); + fileMapper.deleteById(fileBean.getFileId()); + } catch (Exception e) { + log.error("删除本地文件失败:" + JSON.toJSONString(fileBean)); + } } + + } } } else { @@ -145,7 +149,7 @@ public class AsyncTaskComp { String saveFileUrl = ufopFactory.getCopier().copy(fileInputStream, createFile); FileBean tempFileBean = new FileBean(saveFileUrl, currentFile.length(), storageType, md5Str, userFile.getUserId()); -; + fileMapper.insert(tempFileBean); fileId = tempFileBean.getFileId(); } diff --git a/src/main/java/com/qiwenshare/file/controller/FileController.java b/src/main/java/com/qiwenshare/file/controller/FileController.java index 97b7b40..48bc952 100644 --- a/src/main/java/com/qiwenshare/file/controller/FileController.java +++ b/src/main/java/com/qiwenshare/file/controller/FileController.java @@ -7,7 +7,9 @@ import co.elastic.clients.elasticsearch.core.SearchResponse; import co.elastic.clients.elasticsearch.core.search.HighlighterEncoder; import co.elastic.clients.elasticsearch.core.search.Hit; import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.exception.QiwenException; @@ -51,6 +53,10 @@ import java.io.FileInputStream; import java.io.IOException; import java.net.URLDecoder; import java.util.*; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; +import java.util.stream.Stream; @Tag(name = "file", description = "该接口为文件接口,主要用来做一些文件的基本操作,如创建目录,删除,移动,复制等。") @RestController @@ -72,6 +78,9 @@ public class FileController { private ElasticsearchClient elasticsearchClient; @Value("${ufop.storage-type}") private Integer storageType; + + public static Executor executor = Executors.newFixedThreadPool(20); + public static final String CURRENT_MODULE = "文件接口"; @Operation(summary = "创建文件", description = "创建文件", tags = {"file"}) @@ -287,8 +296,12 @@ public class FileController { public RestResult deleteImageByIds(@RequestBody BatchDeleteFileDTO batchDeleteFileDto) { String userFileIds = batchDeleteFileDto.getUserFileIds(); String[] userFileIdList = userFileIds.split(","); + userFileService.update(new UpdateWrapper().lambda().set(UserFile::getDeleteFlag, 1).in(UserFile::getUserFileId, Arrays.asList(userFileIdList))); for (String userFileId : userFileIdList) { - userFileService.deleteUserFile(userFileId, SessionUtil.getUserId()); + executor.execute(()->{ + userFileService.deleteUserFile(userFileId, SessionUtil.getUserId()); + }); + fileDealComp.deleteESByUserFileId(userFileId); } diff --git a/src/main/java/com/qiwenshare/file/domain/Image.java b/src/main/java/com/qiwenshare/file/domain/Image.java index a81457a..3d4b6d0 100644 --- a/src/main/java/com/qiwenshare/file/domain/Image.java +++ b/src/main/java/com/qiwenshare/file/domain/Image.java @@ -23,7 +23,7 @@ public class Image { @TableId(type = IdType.AUTO) @Column(columnDefinition="bigint(20)") private Long imageId; - @Column(columnDefinition = "bigint(20) comment '文件id'") + @Column(columnDefinition = "varchar(20) comment '文件id'") private String fileId; @Column(columnDefinition="int(5) comment '图像的宽'") private Integer imageWidth; diff --git a/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/src/main/java/com/qiwenshare/file/service/FiletransferService.java index 87031f6..f11f2e8 100644 --- a/src/main/java/com/qiwenshare/file/service/FiletransferService.java +++ b/src/main/java/com/qiwenshare/file/service/FiletransferService.java @@ -1,6 +1,7 @@ package com.qiwenshare.file.service; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -35,6 +36,7 @@ import com.qiwenshare.ufop.operation.upload.domain.UploadFileResult; import com.qiwenshare.ufop.util.UFOPUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -107,11 +109,8 @@ public class FiletransferService implements IFiletransferService { userFileMapper.insert(userFile); fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); } catch (Exception e) { - log.warn("文件冲突重命名处理: {}", e.getMessage()); - String fileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); - userFile.setFileName(fileName); - userFileMapper.insert(userFile); - fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); + log.warn("极速上传文件冲突重命名处理: {}", JSON.toJSONString(userFile)); + } if (relativePath.contains("/")) { @@ -187,8 +186,12 @@ public class FiletransferService implements IFiletransferService { if (UploadFileStatusEnum.SUCCESS.equals(uploadFileResult.getStatus())){ FileBean fileBean = new FileBean(uploadFileResult); fileBean.setCreateUserId(userId); - fileMapper.insert(fileBean); - + try { + fileMapper.insert(fileBean); + } catch (Exception e) { + log.warn("identifier Duplicate: {}", fileBean.getIdentifier()); + fileBean = fileMapper.selectOne(new QueryWrapper().lambda().eq(FileBean::getIdentifier, fileBean.getIdentifier())); + } UserFile userFile = new UserFile(qiwenFile, userId, fileBean.getFileId()); @@ -197,11 +200,21 @@ public class FiletransferService implements IFiletransferService { userFileMapper.insert(userFile); fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); } catch (Exception e) { - log.warn("文件冲突重命名处理: {}", e.getMessage()); - String fileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); - userFile.setFileName(fileName); - userFileMapper.insert(userFile); - fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); + UserFile userFile1 = userFileMapper.selectOne(new QueryWrapper().lambda() + .eq(UserFile::getUserId, userFile.getUserId()) + .eq(UserFile::getFilePath, userFile.getFilePath()) + .eq(UserFile::getFileName, userFile.getFileName()) + .eq(UserFile::getExtendName, userFile.getExtendName()) + .eq(UserFile::getDeleteFlag, userFile.getDeleteFlag()) + .eq(UserFile::getIsDir, userFile.getIsDir())); + FileBean file1 = fileMapper.selectById(userFile1.getFileId()); + if (!StringUtils.equals(fileBean.getIdentifier(), file1.getIdentifier())) { + log.warn("文件冲突重命名处理: {}", JSON.toJSONString(userFile1)); + String fileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); + userFile.setFileName(fileName); + userFileMapper.insert(userFile); + fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); + } } diff --git a/src/main/java/com/qiwenshare/file/service/UserFileService.java b/src/main/java/com/qiwenshare/file/service/UserFileService.java index c2b53b2..946eef0 100644 --- a/src/main/java/com/qiwenshare/file/service/UserFileService.java +++ b/src/main/java/com/qiwenshare/file/service/UserFileService.java @@ -21,6 +21,7 @@ import com.qiwenshare.file.mapper.RecoveryFileMapper; import com.qiwenshare.file.mapper.UserFileMapper; import com.qiwenshare.file.vo.file.FileListVO; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -30,6 +31,7 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import java.util.stream.Collectors; @Slf4j @Service @@ -212,12 +214,11 @@ public class UserFileService extends ServiceImpl imple updateFileDeleteStateByFilePath(filePath, uuid, sessionUserId); } else { - UserFile userFileTemp = userFileMapper.selectById(userFileId); LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, RandomUtil.randomInt(1, FileConstant.deleteFileRandomSize)) .set(UserFile::getDeleteTime, DateUtil.getCurrentTime()) .set(UserFile::getDeleteBatchNum, uuid) - .eq(UserFile::getUserFileId, userFileTemp.getUserFileId()); + .eq(UserFile::getUserFileId, userFileId); userFileMapper.update(null, userFileLambdaUpdateWrapper); } @@ -238,17 +239,20 @@ public class UserFileService extends ServiceImpl imple private void updateFileDeleteStateByFilePath(String filePath, String deleteBatchNum, String userId) { executor.execute(() -> { List fileList = selectUserFileByLikeRightFilePath(filePath, userId); - for (int i = 0; i < fileList.size(); i++) { - UserFile userFileTemp = fileList.get(i); + List userFileIds = fileList.stream().map(UserFile::getUserFileId).collect(Collectors.toList()); + //标记删除标志 + if (CollectionUtils.isNotEmpty(userFileIds)) { LambdaUpdateWrapper userFileLambdaUpdateWrapper1 = new LambdaUpdateWrapper<>(); userFileLambdaUpdateWrapper1.set(UserFile::getDeleteFlag, RandomUtil.randomInt(FileConstant.deleteFileRandomSize)) .set(UserFile::getDeleteTime, DateUtil.getCurrentTime()) .set(UserFile::getDeleteBatchNum, deleteBatchNum) - .eq(UserFile::getUserFileId, userFileTemp.getUserFileId()) + .in(UserFile::getUserFileId, userFileIds) .eq(UserFile::getDeleteFlag, 0); userFileMapper.update(null, userFileLambdaUpdateWrapper1); - + } + for (String userFileId : userFileIds) { + fileDealComp.deleteESByUserFileId(userFileId); } }); }