删除文件流程优化

This commit is contained in:
马超 2020-12-27 16:53:20 +08:00
parent 4d302a5f22
commit b6439b8ae1
8 changed files with 118 additions and 57 deletions

View File

@ -96,6 +96,9 @@ public abstract class Uploader {
}
protected String getFileName(String fileName){
if (!fileName.contains(".")) {
return fileName;
}
return fileName.substring(0, fileName.lastIndexOf("."));
}
}

View File

@ -1,5 +1,6 @@
package com.qiwenshare.common.upload.product;
import com.aliyuncs.utils.StringUtils;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.operation.ImageOperation;
import com.qiwenshare.common.upload.Uploader;
@ -54,7 +55,6 @@ public class NormalUploader extends Uploader {
e.printStackTrace();
}
return saveUploadFileList;
}
@ -76,8 +76,12 @@ public class NormalUploader extends Uploader {
uploadFile.setFileType(fileType);
uploadFile.setTimeStampName(timeStampName);
String saveFilePath = savePath + FILE_SEPARATOR + timeStampName + "." + fileType;
String minFilePath = savePath + FILE_SEPARATOR + timeStampName + "_min" + "." + fileType;
String saveFilePath = savePath + FILE_SEPARATOR + timeStampName;
String minFilePath = savePath + FILE_SEPARATOR + timeStampName;
if (StringUtils.isNotEmpty(fileType)) {
saveFilePath += "." + fileType;
minFilePath += "_min" + "." + fileType;
}
File file = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + saveFilePath);
File minFile = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + minFilePath);

View File

@ -2,7 +2,8 @@ package com.qiwenshare.file.api;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qiwenshare.file.domain.RecoveryFile;
import com.qiwenshare.file.domain.UserFile;
public interface IRecoveryFileService extends IService<RecoveryFile> {
public void deleteRecoveryFile(UserFile userFile);
}

View File

@ -97,8 +97,7 @@ public class FileController {
return operationCheck(token);
}
UserBean sessionUserBean = userService.getUserBeanByToken(token);
// fileBean.setUserId(sessionUserBean.getUserId());
// fileBean.setUploadTime(DateUtil.getCurrentTime());
List<UserFile> userFiles = userFileService.selectUserFileByNameAndPath(renameFileDto.getFileName(), renameFileDto.getFilePath(), sessionUserBean.getUserId());
if (userFiles != null && !userFiles.isEmpty()) {
restResult.setErrorMessage("同名文件已存在");
@ -122,14 +121,12 @@ public class FileController {
FileBean file = fileService.getById(userFile.getFileId());
String fileUrl = file.getFileUrl();
String newFileUrl = fileUrl.replace(userFile.getFileName(), renameFileDto.getFileName());
// renameFileDto.setFileUrl(newFileUrl);
AliyunOSSRename.rename(qiwenFileConfig.getAliyun().getOss(),
fileUrl.substring(1),
newFileUrl.substring(1));
LambdaUpdateWrapper<FileBean> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper
// .set(FileBean::getFileName, renameFileDto.getFileName())
// .set(FileBean::getUploadTime, DateUtil.getCurrentTime())
.set(FileBean::getFileUrl, newFileUrl)
.eq(FileBean::getFileId, file.getFileId());
fileService.update(lambdaUpdateWrapper);
@ -151,18 +148,11 @@ public class FileController {
}
// fileService.updateFile(fileBean);
restResult.setSuccess(true);
return restResult;
}
// @Operation(summary = "文件重命名")
// @RequestMapping(value = "/recyclefile", method = RequestMethod.POST)
// @ResponseBody
// public RestResult<String> recycleFile(@RequestBody FileBean fileBean, @RequestHeader("token") String token) {
//
// return null;
// }
@Operation(summary = "获取文件列表", description = "用来做前台列表展示", tags = {"file"})
@RequestMapping(value = "/getfilelist", method = RequestMethod.GET)
@ -207,9 +197,9 @@ public class FileController {
}
UserBean sessionUserBean = userService.getUserBeanByToken(token);
List<UserFile> userFiles = JSON.parseArray(batchDeleteFileDto.getFiles(), UserFile.class);
String uuid = UUID.randomUUID().toString();
for (UserFile userFile : userFiles) {
String uuid = UUID.randomUUID().toString();
userFile.setDeleteBatchNum(uuid);
userFileService.deleteUserFile(userFile,sessionUserBean);

View File

@ -1,7 +1,10 @@
package com.qiwenshare.file.controller;
import com.qiwenshare.common.cbb.RestResult;
import com.qiwenshare.file.api.IRecoveryFileService;
import com.qiwenshare.file.api.IUserFileService;
import com.qiwenshare.file.domain.RecoveryFile;
import com.qiwenshare.file.domain.UserFile;
import com.qiwenshare.file.dto.BatchDeleteRecoveryFileDTO;
import com.qiwenshare.file.dto.DeleteRecoveryFileDTO;
import com.qiwenshare.file.service.RecoveryFileService;
@ -19,7 +22,9 @@ import java.util.List;
@RequestMapping("/recoveryfile")
public class RecoveryFileController {
@Resource
RecoveryFileService recoveryFileService;
IRecoveryFileService recoveryFileService;
@Resource
IUserFileService userFileService;
public RestResult<String> batchDeleteRecoveryFile(@RequestBody BatchDeleteRecoveryFileDTO batchDeleteRecoveryFileDto, @RequestHeader("token") String token) {
@ -33,8 +38,13 @@ public class RecoveryFileController {
@ResponseBody
public RestResult<String> deleteRecoveryFile(@RequestBody DeleteRecoveryFileDTO deleteRecoveryFileDTO, @RequestHeader("token") String token) {
RestResult<String> restResult = new RestResult<String>();
recoveryFileService.removeById(deleteRecoveryFileDTO.getRecoveryFileId());
RecoveryFile recoveryFile = recoveryFileService.getById(deleteRecoveryFileDTO.getRecoveryFileId());
UserFile userFile =userFileService.getById(recoveryFile.getUserFileId());
recoveryFileService.deleteRecoveryFile(userFile);
recoveryFileService.removeById(deleteRecoveryFileDTO.getRecoveryFileId());
restResult.setSuccess(true);
restResult.setData("删除成功");

View File

@ -1,5 +1,6 @@
package com.qiwenshare.file.controller;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.UserFile;
@ -25,29 +26,20 @@ public class TaskController {
@Resource
FileService fileService;
@Scheduled(cron = "0 0 0 0/1 * ?")
@Scheduled(cron = "0 0/1 * * * ?")
public void deleteFile() {
log.info("111112");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -3);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String threeDaysAgo = sdf.format(calendar.getTime());
LambdaQueryWrapper<UserFile> userFileLambdaQueryWrapper = new LambdaQueryWrapper<>();
userFileLambdaQueryWrapper.eq(UserFile::getDeleteFlag, 1)
.lt(UserFile::getDeleteTime, threeDaysAgo + " 00:00:00");
List<UserFile> userFiles = userFileService.list(userFileLambdaQueryWrapper);
for (UserFile userFile : userFiles) {
userFileService.removeById(userFile.getUserFileId());
FileBean fileBean = fileService.getById(userFile.getFileId());
Integer pointCount = fileBean.getPointCount();
if (pointCount <= 1) {
fileService.removeById(fileBean.getFileId());
fileService.deleteLocalFile(fileBean);
} else {
fileBean.setPointCount(fileBean.getPointCount() - 1);
fileService.updateById(fileBean);
}
LambdaQueryWrapper<FileBean> fileBeanLambdaQueryWrapper = new LambdaQueryWrapper<>();
fileBeanLambdaQueryWrapper.eq(FileBean::getPointCount, 0);
List<FileBean> fileBeanList = fileService.list(fileBeanLambdaQueryWrapper);
for (int i = 0; i < fileBeanList.size(); i++) {
FileBean fileBean = fileBeanList.get(i);
log.info("删除本地文件:" + JSON.toJSONString(fileBean));
fileService.deleteLocalFile(fileBean);
fileService.removeById(fileBean.getFileId());
}
fileService.remove(fileBeanLambdaQueryWrapper);
log.info("11111");
}

View File

@ -1,13 +1,86 @@
package com.qiwenshare.file.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qiwenshare.common.cbb.DateUtil;
import com.qiwenshare.file.api.IRecoveryFileService;
import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.RecoveryFile;
import com.qiwenshare.file.domain.UserBean;
import com.qiwenshare.file.domain.UserFile;
import com.qiwenshare.file.mapper.FileMapper;
import com.qiwenshare.file.mapper.RecoveryFileMapper;
import com.qiwenshare.file.mapper.UserFileMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@Slf4j
@Service
public class RecoveryFileService extends ServiceImpl<RecoveryFileMapper, RecoveryFile> implements IRecoveryFileService {
@Resource
UserFileMapper userFileMapper;
@Resource
FileMapper fileMapper;
public static Executor executor = Executors.newFixedThreadPool(20);
@Override
public void deleteRecoveryFile(UserFile userFile) {
if (userFile.getIsDir() == 1) {
updateFilePointCountByBatchNum(userFile.getDeleteBatchNum());
}else{
UserFile userFileTemp = userFileMapper.selectById(userFile.getUserFileId());
FileBean fileBean = fileMapper.selectById(userFileTemp.getFileId());
LambdaUpdateWrapper<FileBean> fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1)
.eq(FileBean::getFileId, fileBean.getFileId());
fileMapper.update(null, fileBeanLambdaUpdateWrapper);
}
LambdaQueryWrapper<UserFile> userFileLambdaQueryWrapper = new LambdaQueryWrapper<>();
userFileLambdaQueryWrapper.eq(UserFile::getDeleteBatchNum, userFile.getDeleteBatchNum());
userFileMapper.delete(userFileLambdaQueryWrapper);
}
private void updateFilePointCountByBatchNum(String deleteBatchNum) {
LambdaQueryWrapper<UserFile> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserFile::getDeleteBatchNum, deleteBatchNum);
List<UserFile> fileList = userFileMapper.selectList(lambdaQueryWrapper);
new Thread(()->{
for (int i = 0; i < fileList.size(); i++){
UserFile userFileTemp = fileList.get(i);
executor.execute(new Runnable() {
@Override
public void run() {
if (userFileTemp.getIsDir() != 1){
FileBean fileBean = fileMapper.selectById(userFileTemp.getFileId());
if (fileBean.getPointCount() != null) {
LambdaUpdateWrapper<FileBean> fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1)
.eq(FileBean::getFileId, fileBean.getFileId());
fileMapper.update(null, fileBeanLambdaUpdateWrapper);
}
}
}
});
}
}).start();
}
}

View File

@ -125,8 +125,6 @@ public class UserFileService extends ServiceImpl<UserFileMapper, UserFile> impl
@Override
public void deleteUserFile(UserFile userFile, UserBean sessionUserBean) {
StorageBean storageBean = filetransferService.selectStorageBean(new StorageBean(sessionUserBean.getUserId()));
if (userFile.getIsDir() == 1) {
LambdaUpdateWrapper<UserFile> userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<UserFile>();
userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 1)
@ -150,9 +148,9 @@ public class UserFileService extends ServiceImpl<UserFileMapper, UserFile> impl
.eq(UserFile::getUserFileId, userFileTemp.getUserFileId());
userFileMapper.update(null, userFileLambdaUpdateWrapper);
LambdaUpdateWrapper<FileBean> fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1)
.eq(FileBean::getFileId, fileBean.getFileId());
// LambdaUpdateWrapper<FileBean> fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
// fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1)
// .eq(FileBean::getFileId, fileBean.getFileId());
}
@ -166,23 +164,13 @@ public class UserFileService extends ServiceImpl<UserFileMapper, UserFile> impl
executor.execute(new Runnable() {
@Override
public void run() {
if (userFileTemp.getIsDir() != 1){
FileBean fileBean = fileMapper.selectById(userFileTemp.getFileId());
if (fileBean.getPointCount() != null) {
LambdaUpdateWrapper<FileBean> fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1)
.eq(FileBean::getFileId, fileBean.getFileId());
fileMapper.update(null, fileBeanLambdaUpdateWrapper);
}
}
//标记删除标志
LambdaUpdateWrapper<UserFile> userFileLambdaUpdateWrapper1 = new LambdaUpdateWrapper<>();
userFileLambdaUpdateWrapper1.set(UserFile::getDeleteFlag, 1)
.set(UserFile::getDeleteTime, DateUtil.getCurrentTime())
.set(UserFile::getDeleteBatchNum, deleteBatchNum)
.eq(UserFile::getUserFileId, userFileTemp.getUserFileId());
.eq(UserFile::getUserFileId, userFileTemp.getUserFileId())
.eq(UserFile::getDeleteFlag, 0);
userFileMapper.update(null, userFileLambdaUpdateWrapper1);
}
});