From b6439b8ae104da8d5e37d2445551c5600db0cc6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com> Date: Sun, 27 Dec 2020 16:53:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qiwenshare/common/upload/Uploader.java | 3 + .../common/upload/product/NormalUploader.java | 10 ++- .../file/api/IRecoveryFileService.java | 3 +- .../file/controller/FileController.java | 18 +---- .../controller/RecoveryFileController.java | 14 +++- .../file/controller/TaskController.java | 32 +++----- .../file/service/RecoveryFileService.java | 73 +++++++++++++++++++ .../file/service/UserFileService.java | 22 ++---- 8 files changed, 118 insertions(+), 57 deletions(-) diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java index 27502f1..c39fff8 100644 --- a/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java +++ b/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java @@ -96,6 +96,9 @@ public abstract class Uploader { } protected String getFileName(String fileName){ + if (!fileName.contains(".")) { + return fileName; + } return fileName.substring(0, fileName.lastIndexOf(".")); } } diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java index b680333..de9a3e1 100644 --- a/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java +++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java @@ -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); diff --git a/file-web/src/main/java/com/qiwenshare/file/api/IRecoveryFileService.java b/file-web/src/main/java/com/qiwenshare/file/api/IRecoveryFileService.java index 5b73a5b..ea77994 100644 --- a/file-web/src/main/java/com/qiwenshare/file/api/IRecoveryFileService.java +++ b/file-web/src/main/java/com/qiwenshare/file/api/IRecoveryFileService.java @@ -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 { - + public void deleteRecoveryFile(UserFile userFile); } diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java index d2e5cb6..a88199a 100644 --- a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java +++ b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java @@ -97,8 +97,7 @@ public class FileController { return operationCheck(token); } UserBean sessionUserBean = userService.getUserBeanByToken(token); -// fileBean.setUserId(sessionUserBean.getUserId()); -// fileBean.setUploadTime(DateUtil.getCurrentTime()); + List 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 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 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 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); diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java b/file-web/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java index b623115..f028a68 100644 --- a/file-web/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java +++ b/file-web/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java @@ -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 batchDeleteRecoveryFile(@RequestBody BatchDeleteRecoveryFileDTO batchDeleteRecoveryFileDto, @RequestHeader("token") String token) { @@ -33,8 +38,13 @@ public class RecoveryFileController { @ResponseBody public RestResult deleteRecoveryFile(@RequestBody DeleteRecoveryFileDTO deleteRecoveryFileDTO, @RequestHeader("token") String token) { RestResult restResult = new RestResult(); - 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("删除成功"); diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java b/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java index 815cec1..f3cc6f7 100644 --- a/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java +++ b/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java @@ -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 userFileLambdaQueryWrapper = new LambdaQueryWrapper<>(); - userFileLambdaQueryWrapper.eq(UserFile::getDeleteFlag, 1) - .lt(UserFile::getDeleteTime, threeDaysAgo + " 00:00:00"); - List 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 fileBeanLambdaQueryWrapper = new LambdaQueryWrapper<>(); + fileBeanLambdaQueryWrapper.eq(FileBean::getPointCount, 0); + + List 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"); } diff --git a/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java b/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java index 05b60af..6542f0e 100644 --- a/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java +++ b/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java @@ -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 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 fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1) + .eq(FileBean::getFileId, fileBean.getFileId()); + + fileMapper.update(null, fileBeanLambdaUpdateWrapper); + } + LambdaQueryWrapper userFileLambdaQueryWrapper = new LambdaQueryWrapper<>(); + userFileLambdaQueryWrapper.eq(UserFile::getDeleteBatchNum, userFile.getDeleteBatchNum()); + userFileMapper.delete(userFileLambdaQueryWrapper); + + + + } + + + private void updateFilePointCountByBatchNum(String deleteBatchNum) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(UserFile::getDeleteBatchNum, deleteBatchNum); + List 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 fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1) + .eq(FileBean::getFileId, fileBean.getFileId()); + fileMapper.update(null, fileBeanLambdaUpdateWrapper); + + } + } + } + }); + + } + }).start(); + } } diff --git a/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java b/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java index 8f60fd8..c083934 100644 --- a/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java +++ b/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java @@ -125,8 +125,6 @@ public class UserFileService extends ServiceImpl impl @Override public void deleteUserFile(UserFile userFile, UserBean sessionUserBean) { - StorageBean storageBean = filetransferService.selectStorageBean(new StorageBean(sessionUserBean.getUserId())); - if (userFile.getIsDir() == 1) { LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper(); userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 1) @@ -150,9 +148,9 @@ public class UserFileService extends ServiceImpl impl .eq(UserFile::getUserFileId, userFileTemp.getUserFileId()); userFileMapper.update(null, userFileLambdaUpdateWrapper); - LambdaUpdateWrapper fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1) - .eq(FileBean::getFileId, fileBean.getFileId()); +// LambdaUpdateWrapper fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); +// fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1) +// .eq(FileBean::getFileId, fileBean.getFileId()); } @@ -166,23 +164,13 @@ public class UserFileService extends ServiceImpl impl executor.execute(new Runnable() { @Override public void run() { - if (userFileTemp.getIsDir() != 1){ - FileBean fileBean = fileMapper.selectById(userFileTemp.getFileId()); - if (fileBean.getPointCount() != null) { - - LambdaUpdateWrapper fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1) - .eq(FileBean::getFileId, fileBean.getFileId()); - fileMapper.update(null, fileBeanLambdaUpdateWrapper); - - } - } //标记删除标志 LambdaUpdateWrapper 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); } });