From dcaafdb079e3ccb8f6d2036950bfd44ff70a6ece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= Date: Wed, 16 Dec 2020 22:04:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E6=94=B6=E7=AB=99=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qiwenshare/file/FileApplication.java | 1 + .../com/qiwenshare/file/api/IFileService.java | 2 +- .../qiwenshare/file/api/IUserFileService.java | 1 + .../file/controller/FileController.java | 4 +- .../controller/FiletransferController.java | 2 + .../file/controller/TaskController.java | 53 +++++++++ .../qiwenshare/file/service/FileService.java | 18 ++- .../file/service/UserFileService.java | 105 +++++++++--------- .../mybatis/mapper/UserFileMapper.xml | 24 ++-- 9 files changed, 140 insertions(+), 70 deletions(-) create mode 100644 file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java diff --git a/file-web/src/main/java/com/qiwenshare/file/FileApplication.java b/file-web/src/main/java/com/qiwenshare/file/FileApplication.java index de7d185..89f8dc4 100644 --- a/file-web/src/main/java/com/qiwenshare/file/FileApplication.java +++ b/file-web/src/main/java/com/qiwenshare/file/FileApplication.java @@ -12,6 +12,7 @@ import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableFeignClients @MapperScan("com.qiwenshare.file.mapper") +@EnableScheduling @EnableDiscoveryClient public class FileApplication { diff --git a/file-web/src/main/java/com/qiwenshare/file/api/IFileService.java b/file-web/src/main/java/com/qiwenshare/file/api/IFileService.java index a70796a..23fe23b 100644 --- a/file-web/src/main/java/com/qiwenshare/file/api/IFileService.java +++ b/file-web/src/main/java/com/qiwenshare/file/api/IFileService.java @@ -19,7 +19,7 @@ public interface IFileService extends IService { // List selectFileListByPath(FileBean fileBean); - + void deleteLocalFile(FileBean fileBean); diff --git a/file-web/src/main/java/com/qiwenshare/file/api/IUserFileService.java b/file-web/src/main/java/com/qiwenshare/file/api/IUserFileService.java index 372e0b6..898339c 100644 --- a/file-web/src/main/java/com/qiwenshare/file/api/IUserFileService.java +++ b/file-web/src/main/java/com/qiwenshare/file/api/IUserFileService.java @@ -19,4 +19,5 @@ public interface IUserFileService extends IService { List selectFileTreeListLikeFilePath(String filePath); List selectFilePathTreeByUserId(Long userId); void deleteUserFile(UserFile userFile, UserBean sessionUserBean); + } 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 6e128da..46bbcb4 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 @@ -319,10 +319,10 @@ public class FileController { tempFileBean.setFileSize(currentFile.length()); tempFileBean.setTimeStampName(FileUtil.getFileNameNotExtend(currentFile.getName())); tempFileBean.setFileUrl(File.separator + (currentFile.getPath()).replace(PathUtil.getStaticPath(), "")); + tempFileBean.setPointCount(1); + fileService.save(tempFileBean); } - tempFileBean.setPointCount(1); - fileService.save(tempFileBean); userFile.setFileId(tempFileBean.getFileId()); userFile.setDeleteFlag(0); userFileService.save(userFile); diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java index d533287..8913949 100644 --- a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java +++ b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java @@ -89,6 +89,8 @@ public class FiletransferController { userFile.setFileName(fileName.substring(0, fileName.lastIndexOf("."))); userFile.setExtendName(FileUtil.getFileType(fileName)); userFile.setDeleteFlag(0); + userFile.setIsDir(0); + userFile.setUploadTime(DateUtil.getCurrentTime()); userFileService.save(userFile); fileService.increaseFilePointCount(file.getFileId()); uploadFileVo.setSkipUpload(true); 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 new file mode 100644 index 0000000..c5cdacb --- /dev/null +++ b/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java @@ -0,0 +1,53 @@ +package com.qiwenshare.file.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qiwenshare.file.domain.FileBean; +import com.qiwenshare.file.domain.UserFile; +import com.qiwenshare.file.service.FileService; +import com.qiwenshare.file.service.UserFileService; +import com.qiwenshare.file.service.UserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Controller; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; + +@Slf4j +@Controller +public class TaskController { + + @Resource + UserFileService userFileService; + + @Resource + FileService fileService; + + @Scheduled(cron = "* * * 0/1 * ?") + public void deleteFile() { + 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); + } + } + + log.info("11111"); + } +} diff --git a/file-web/src/main/java/com/qiwenshare/file/service/FileService.java b/file-web/src/main/java/com/qiwenshare/file/service/FileService.java index 9903bce..35bcd13 100644 --- a/file-web/src/main/java/com/qiwenshare/file/service/FileService.java +++ b/file-web/src/main/java/com/qiwenshare/file/service/FileService.java @@ -1,5 +1,6 @@ package com.qiwenshare.file.service; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -88,8 +89,21 @@ public class FileService extends ServiceImpl implements IF // .orderByDesc(FileBean::getIsDir); // return fileMapper.selectList(lambdaQueryWrapper); // } - - + @Override + public void deleteLocalFile(FileBean fileBean) { + log.info("删除本地文件:" + JSON.toJSONString(fileBean)); + //删除服务器文件 + if (fileBean.getFileUrl() != null && fileBean.getFileUrl().indexOf("upload") != -1){ + if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) { + AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1)); + } else { + FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl()); + if (FileUtil.isImageFile(FileUtil.getFileType(fileBean.getFileUrl()))) { + FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min")); + } + } + } + } 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 cb11ee4..896c6ec 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 @@ -4,7 +4,12 @@ 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.common.operation.FileOperation; +import com.qiwenshare.common.oss.AliyunOSSDelete; +import com.qiwenshare.common.util.FileUtil; +import com.qiwenshare.common.util.PathUtil; import com.qiwenshare.file.api.IUserFileService; +import com.qiwenshare.file.config.QiwenFileConfig; import com.qiwenshare.file.domain.FileBean; import com.qiwenshare.file.domain.StorageBean; import com.qiwenshare.file.domain.UserBean; @@ -17,6 +22,8 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Map; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; @Slf4j @Service @@ -26,9 +33,11 @@ public class UserFileService extends ServiceImpl impl @Resource FileMapper fileMapper; @Resource - FileService fileService; - @Resource FiletransferService filetransferService; + @Resource + QiwenFileConfig qiwenFileConfig; + + public static Executor executor = Executors.newFixedThreadPool(20); @Override @@ -121,61 +130,25 @@ public class UserFileService extends ServiceImpl impl @Override public void deleteUserFile(UserFile userFile, UserBean sessionUserBean) { StorageBean storageBean = filetransferService.selectStorageBean(new StorageBean(sessionUserBean.getUserId())); - long deleteSize = 0; if (userFile.getIsDir() == 1) { - //1、先删除子目录 - String filePath = userFile.getFilePath() + userFile.getFileName() + "/"; - List fileList = selectFileTreeListLikeFilePath(filePath); - for (int i = 0; i < fileList.size(); i++){ - UserFile userFileTemp = fileList.get(i); - - if (userFileTemp.getIsDir() != 1){ - FileBean fileBean = fileMapper.selectById(userFileTemp.getFileId()); - deleteSize += fileBean.getFileSize(); - 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 userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 1) - .set(UserFile::getDeleteTime, DateUtil.getCurrentTime()) - .eq(UserFile::getUserFileId, userFileTemp.getUserFileId()); - userFileMapper.update(null, userFileLambdaUpdateWrapper); - - } - - LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 1) - .set(UserFile::getDeleteTime, DateUtil.getCurrentTime()) + LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper(); + userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 1).set(UserFile::getDeleteTime, DateUtil.getCurrentTime()) .eq(UserFile::getUserFileId, userFile.getUserFileId()); userFileMapper.update(null, userFileLambdaUpdateWrapper); + + String filePath = userFile.getFilePath() + userFile.getFileName() + "/"; + updateFileDeleteStateByFilePath(filePath); + }else{ //userFileMapper.deleteById(userFile.getUserFileId()); UserFile userFileTemp = userFileMapper.selectById(userFile.getUserFileId()); FileBean fileBean = fileMapper.selectById(userFileTemp.getFileId()); - deleteSize = fileBean.getFileSize(); - //删除服务器文件 -// if (fileBean.getFileUrl() != null && fileBean.getFileUrl().indexOf("upload") != -1){ -// if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) { -// AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1)); -// } else { -// FileOperation.deleteFile(fileUrl); -// if (FileUtil.isImageFile(fileBean.getExtendName())) { -// FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min")); -// } -// } -// } + LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 1) @@ -188,14 +161,40 @@ public class UserFileService extends ServiceImpl impl .eq(FileBean::getFileId, fileBean.getFileId()); } - if (storageBean != null) { - long updateFileSize = storageBean.getStorageSize() - deleteSize; - if (updateFileSize < 0) { - updateFileSize = 0; - } - storageBean.setStorageSize(updateFileSize); - filetransferService.updateStorageBean(storageBean); - } } + private void updateFileDeleteStateByFilePath(String filePath) { + new Thread(()->{ + List fileList = selectFileTreeListLikeFilePath(filePath); + 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); + + } + } + //标记删除标志 + LambdaUpdateWrapper userFileLambdaUpdateWrapper1 = new LambdaUpdateWrapper<>(); + userFileLambdaUpdateWrapper1.set(UserFile::getDeleteFlag, 1) + .set(UserFile::getDeleteTime, DateUtil.getCurrentTime()) + .eq(UserFile::getUserFileId, userFileTemp.getUserFileId()); + userFileMapper.update(null, userFileLambdaUpdateWrapper1); + } + }); + + } + }).start(); + } + + + } diff --git a/file-web/src/main/resources/mybatis/mapper/UserFileMapper.xml b/file-web/src/main/resources/mybatis/mapper/UserFileMapper.xml index 4cf36ad..caa3b95 100644 --- a/file-web/src/main/resources/mybatis/mapper/UserFileMapper.xml +++ b/file-web/src/main/resources/mybatis/mapper/UserFileMapper.xml @@ -11,22 +11,22 @@ WHERE filepath LIKE N'${oldFilePath}%' and userId = #{userId}; - + select * from userfile a + left join file on file.fileId = a.fileId - - and userId = #{userId} + + and a.userId = #{userFile.userId} - - and filePath = #{filePath} + + and a.filePath = #{userFile.filePath} - - and extendName = #{extendName} + + and a.extendName = #{userFile.extendName} - and deleteFlag = 0 + and a.deleteFlag = 0 - limit #{beginCount} #{pageCount} + limit #{beginCount}, #{pageCount} @@ -72,7 +72,7 @@ \ No newline at end of file