From 4006e4cdd8dff206b5a014de324ecf1c3ed3e79f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com> Date: Sun, 30 May 2021 16:48:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=80=BB=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- .../qiwenshare/file/api/IStorageService.java | 9 ++ .../file/controller/FileController.java | 39 +------- .../controller/FiletransferController.java | 22 ++--- .../qiwenshare/file/domain/StorageBean.java | 3 + .../com/qiwenshare/file/domain/SysParam.java | 26 ++++++ .../qiwenshare/file/dto/UploadFileDTO.java | 6 -- .../file/mapper/SysParamMapper.java | 10 ++ .../file/service/FiletransferService.java | 15 --- .../file/service/StorageService.java | 92 +++++++++++++++++++ src/main/resources/database/data.sql | 5 +- 11 files changed, 157 insertions(+), 74 deletions(-) create mode 100644 src/main/java/com/qiwenshare/file/api/IStorageService.java create mode 100644 src/main/java/com/qiwenshare/file/domain/SysParam.java create mode 100644 src/main/java/com/qiwenshare/file/mapper/SysParamMapper.java create mode 100644 src/main/java/com/qiwenshare/file/service/StorageService.java diff --git a/.gitignore b/.gitignore index 2460a65..c10fda7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /.idea /release /*.log -/file-common/target -/file-office/target +/target +/file-web.iml diff --git a/src/main/java/com/qiwenshare/file/api/IStorageService.java b/src/main/java/com/qiwenshare/file/api/IStorageService.java new file mode 100644 index 0000000..c230a06 --- /dev/null +++ b/src/main/java/com/qiwenshare/file/api/IStorageService.java @@ -0,0 +1,9 @@ +package com.qiwenshare.file.api; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qiwenshare.file.domain.StorageBean; + +public interface IStorageService extends IService { + public Long getTotalStorageSize(Long userId); + boolean checkStorage(Long userId, Long fileSize); +} diff --git a/src/main/java/com/qiwenshare/file/controller/FileController.java b/src/main/java/com/qiwenshare/file/controller/FileController.java index ce65d2b..b35a6ce 100644 --- a/src/main/java/com/qiwenshare/file/controller/FileController.java +++ b/src/main/java/com/qiwenshare/file/controller/FileController.java @@ -72,14 +72,9 @@ public class FileController { @MyLog(operation = "创建文件", module = CURRENT_MODULE) @ResponseBody public RestResult createFile(@RequestBody CreateFileDTO createFileDto, @RequestHeader("token") String token) { - if (!operationCheck(token).getSuccess()){ - return operationCheck(token); - } UserBean sessionUserBean = userService.getUserBeanByToken(token); - if (sessionUserBean == null) { - throw new NotLoginException(); - } + List userFiles = userFileService.selectUserFileByNameAndPath(createFileDto.getFileName(), createFileDto.getFilePath(), sessionUserBean.getUserId()); if (userFiles != null && !userFiles.isEmpty()) { return RestResult.fail().message("同名文件已存在"); @@ -144,9 +139,7 @@ public class FileController { @MyLog(operation = "文件重命名", module = CURRENT_MODULE) @ResponseBody public RestResult renameFile(@RequestBody RenameFileDTO renameFileDto, @RequestHeader("token") String token) { - if (!operationCheck(token).getSuccess()){ - return operationCheck(token); - } + UserBean sessionUserBean = userService.getUserBeanByToken(token); if (sessionUserBean == null) { throw new NotLoginException(); @@ -254,9 +247,6 @@ public class FileController { @ResponseBody public RestResult deleteImageByIds(@RequestBody BatchDeleteFileDTO batchDeleteFileDto, @RequestHeader("token") String token) { - if (!operationCheck(token).getSuccess()) { - return operationCheck(token); - } UserBean sessionUserBean = userService.getUserBeanByToken(token); if (sessionUserBean == null) { throw new NotLoginException(); @@ -279,10 +269,6 @@ public class FileController { @ResponseBody public RestResult deleteFile(@RequestBody DeleteFileDTO deleteFileDto, @RequestHeader("token") String token) { - if (!operationCheck(token).getSuccess()){ - return operationCheck(token); - } - UserBean sessionUserBean = userService.getUserBeanByToken(token); if (sessionUserBean == null) { throw new NotLoginException(); @@ -300,9 +286,6 @@ public class FileController { @ResponseBody public RestResult unzipFile(@RequestBody UnzipFileDTO unzipFileDto, @RequestHeader("token") String token) { - if (!operationCheck(token).getSuccess()){ - return operationCheck(token); - } UserBean sessionUserBean = userService.getUserBeanByToken(token); if (sessionUserBean == null) { throw new NotLoginException(); @@ -385,10 +368,6 @@ public class FileController { @ResponseBody public RestResult moveFile(@RequestBody MoveFileDTO moveFileDto, @RequestHeader("token") String token) { - if (!operationCheck(token).getSuccess()){ - return operationCheck(token); - } - UserBean sessionUserBean = userService.getUserBeanByToken(token); if (sessionUserBean == null) { throw new NotLoginException(); @@ -409,9 +388,6 @@ public class FileController { @ResponseBody public RestResult batchMoveFile(@RequestBody BatchMoveFileDTO batchMoveFileDto, @RequestHeader("token") String token) { - if (!operationCheck(token).getSuccess()) { - return operationCheck(token); - } UserBean sessionUserBean = userService.getUserBeanByToken(token); if (sessionUserBean == null) { throw new NotLoginException(); @@ -429,18 +405,7 @@ public class FileController { } - public RestResult operationCheck(String token){ - RestResult result = new RestResult(); - UserBean sessionUserBean = userService.getUserBeanByToken(token); - if (sessionUserBean == null){ - result.setSuccess(false); - result.setMessage("未登录"); - return result; - } - result.setSuccess(true); - return result; - } @Operation(summary = "通过文件类型选择文件", description = "该接口可以实现文件格式分类查看", tags = {"file"}) @RequestMapping(value = "/selectfilebyfiletype", method = RequestMethod.GET) diff --git a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java index 92c330d..7ae99a6 100644 --- a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java +++ b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java @@ -18,6 +18,7 @@ import com.qiwenshare.file.domain.UserFile; import com.qiwenshare.file.dto.DownloadFileDTO; import com.qiwenshare.file.dto.UploadFileDTO; import com.qiwenshare.file.dto.file.PreviewDTO; +import com.qiwenshare.file.service.StorageService; import com.qiwenshare.file.vo.file.UploadFileVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -42,9 +43,6 @@ public class FiletransferController { @Resource IFiletransferService filetransferService; - @Resource - FileController fileController; - @Resource IFileService fileService; @Resource @@ -53,6 +51,8 @@ public class FiletransferController { IUserFileService userFileService; @Resource FileDealComp fileDealComp; + @Resource + StorageService storageService; public static final String CURRENT_MODULE = "文件传输接口"; @Operation(summary = "极速上传", description = "校验文件MD5判断文件是否存在,如果存在直接上传成功并返回skipUpload=true,如果不存在返回skipUpload=false需要再次调用该接口的POST方法", tags = {"filetransfer"}) @@ -62,14 +62,12 @@ public class FiletransferController { public RestResult uploadFileSpeed(UploadFileDTO uploadFileDto, @RequestHeader("token") String token) { UserBean sessionUserBean = userService.getUserBeanByToken(token); - if (sessionUserBean == null) { - throw new NotLoginException(); + + boolean isCheckSuccess = storageService.checkStorage(sessionUserBean.getUserId(), uploadFileDto.getTotalSize()); + if (!isCheckSuccess) { + return RestResult.fail().message("存储空间不足"); } - RestResult operationCheckResult = fileController.operationCheck(token); - if (!operationCheckResult.getSuccess()){ - return RestResult.fail().message("没权限,请联系管理员!"); - } UploadFileVo uploadFileVo = new UploadFileVo(); Map param = new HashMap(); param.put("identifier", uploadFileDto.getIdentifier()); @@ -111,10 +109,6 @@ public class FiletransferController { if (sessionUserBean == null) { throw new NotLoginException(); } - RestResult operationCheckResult = fileController.operationCheck(token); - if (!operationCheckResult.getSuccess()){ - return RestResult.fail().message("没权限,请联系管理员!"); - } filetransferService.uploadFile(request, uploadFileDto, sessionUserBean.getUserId()); @@ -201,6 +195,8 @@ public class FiletransferController { StorageBean storage = new StorageBean(); storage.setUserId(sessionUserBean.getUserId()); storage.setStorageSize(storageSize); + Long totalStorageSize = storageService.getTotalStorageSize(sessionUserBean.getUserId()); + storage.setTotalStorageSize(totalStorageSize * 1024); return RestResult.success().data(storage); } diff --git a/src/main/java/com/qiwenshare/file/domain/StorageBean.java b/src/main/java/com/qiwenshare/file/domain/StorageBean.java index c698a5e..bbc7fc9 100644 --- a/src/main/java/com/qiwenshare/file/domain/StorageBean.java +++ b/src/main/java/com/qiwenshare/file/domain/StorageBean.java @@ -28,6 +28,9 @@ public class StorageBean { @Column(columnDefinition="bigint(20)") private Long storageSize; + @Column(columnDefinition="bigint(20)") + private Long totalStorageSize; + public StorageBean() { } diff --git a/src/main/java/com/qiwenshare/file/domain/SysParam.java b/src/main/java/com/qiwenshare/file/domain/SysParam.java new file mode 100644 index 0000000..3b9cf11 --- /dev/null +++ b/src/main/java/com/qiwenshare/file/domain/SysParam.java @@ -0,0 +1,26 @@ +package com.qiwenshare.file.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import javax.persistence.*; + +@Data +@Table(name = "sysparam") +@Entity +@TableName("sysparam") +public class SysParam { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(columnDefinition="bigint(20)") + @TableId(type = IdType.AUTO) + private Long sysParamId; + @Column(columnDefinition="varchar(50)") + private String sysParamKey; + @Column(columnDefinition="varchar(50)") + private String sysParamValue; + @Column(columnDefinition="varchar(50)") + private String sysParamDesc; +} diff --git a/src/main/java/com/qiwenshare/file/dto/UploadFileDTO.java b/src/main/java/com/qiwenshare/file/dto/UploadFileDTO.java index d41862f..7f4703e 100644 --- a/src/main/java/com/qiwenshare/file/dto/UploadFileDTO.java +++ b/src/main/java/com/qiwenshare/file/dto/UploadFileDTO.java @@ -32,12 +32,6 @@ public class UploadFileDTO { @Schema(description = "文件名") private String filename; - /** - * 文件大小 - */ - @Schema(description = "文件大小") - private Long fileSize; - @Schema(description = "切片数量") private int chunkNumber; diff --git a/src/main/java/com/qiwenshare/file/mapper/SysParamMapper.java b/src/main/java/com/qiwenshare/file/mapper/SysParamMapper.java new file mode 100644 index 0000000..d0b5813 --- /dev/null +++ b/src/main/java/com/qiwenshare/file/mapper/SysParamMapper.java @@ -0,0 +1,10 @@ +package com.qiwenshare.file.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qiwenshare.file.domain.SysParam; + +public interface SysParamMapper extends BaseMapper { + + +} diff --git a/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/src/main/java/com/qiwenshare/file/service/FiletransferService.java index 5ced324..4564ac4 100644 --- a/src/main/java/com/qiwenshare/file/service/FiletransferService.java +++ b/src/main/java/com/qiwenshare/file/service/FiletransferService.java @@ -88,8 +88,6 @@ public class FiletransferService implements IFiletransferService { if (uploadFile.getSuccess() == 1){ fileBean.setFileUrl(uploadFile.getUrl()); fileBean.setFileSize(uploadFile.getFileSize()); - //fileBean.setUploadTime(DateUtil.getCurrentTime()); -// fileBean.setIsOSS(uploadFile.getIsOSS()); fileBean.setStorageType(uploadFile.getStorageType()); fileBean.setPointCount(1); fileMapper.insert(fileBean); @@ -105,19 +103,6 @@ public class FiletransferService implements IFiletransferService { userFileMapper.insert(userFile); fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); - synchronized (FiletransferService.class) { - - StorageBean storageBean = selectStorageBean(new StorageBean(userId)); - if (storageBean == null) { - StorageBean storage = new StorageBean(userId); - storage.setStorageSize(fileBean.getFileSize()); - insertStorageBean(storage); - } else { - storageBean.setStorageSize(storageBean.getStorageSize() + uploadFile.getFileSize()); - updateStorageBean(storageBean); - } - } - } } diff --git a/src/main/java/com/qiwenshare/file/service/StorageService.java b/src/main/java/com/qiwenshare/file/service/StorageService.java new file mode 100644 index 0000000..f40cda5 --- /dev/null +++ b/src/main/java/com/qiwenshare/file/service/StorageService.java @@ -0,0 +1,92 @@ +package com.qiwenshare.file.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qiwenshare.file.api.IShareService; +import com.qiwenshare.file.api.IStorageService; +import com.qiwenshare.file.domain.Share; +import com.qiwenshare.file.domain.StorageBean; +import com.qiwenshare.file.domain.SysParam; +import com.qiwenshare.file.dto.sharefile.ShareListDTO; +import com.qiwenshare.file.mapper.ShareMapper; +import com.qiwenshare.file.mapper.StorageMapper; +import com.qiwenshare.file.mapper.SysParamMapper; +import com.qiwenshare.file.mapper.UserFileMapper; +import com.qiwenshare.file.vo.share.ShareListVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +@Slf4j +@Service +@Transactional(rollbackFor=Exception.class) +public class StorageService extends ServiceImpl implements IStorageService { + @Resource + StorageMapper storageMapper; + @Resource + SysParamMapper sysParamMapper; + @Resource + UserFileMapper userFileMapper; + + public Long getTotalStorageSize(Long userId) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(StorageBean::getUserId, userId); + + StorageBean storageBean = storageMapper.selectOne(lambdaQueryWrapper); + Long totalStorageSize = null; + if (storageBean == null || storageBean.getTotalStorageSize() == null) { + LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); + lambdaQueryWrapper1.eq(SysParam::getSysParamKey, "totalStorageSize"); + SysParam sysParam = sysParamMapper.selectOne(lambdaQueryWrapper1); + totalStorageSize = Long.parseLong(sysParam.getSysParamValue()); + storageBean = new StorageBean(); + storageBean.setUserId(userId); + storageBean.setTotalStorageSize(totalStorageSize); + storageMapper.insert(storageBean); + } else { + totalStorageSize = storageBean.getTotalStorageSize(); + } + + if (totalStorageSize != null) { + totalStorageSize = totalStorageSize * 1024; + } + return totalStorageSize; + } + + public boolean checkStorage(Long userId, Long fileSize) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(StorageBean::getUserId, userId); + + StorageBean storageBean = storageMapper.selectOne(lambdaQueryWrapper); + Long totalStorageSize = null; + if (storageBean == null || storageBean.getTotalStorageSize() == null) { + LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); + lambdaQueryWrapper1.eq(SysParam::getSysParamKey, "totalStorageSize"); + SysParam sysParam = sysParamMapper.selectOne(lambdaQueryWrapper1); + totalStorageSize = Long.parseLong(sysParam.getSysParamValue()); + storageBean = new StorageBean(); + storageBean.setUserId(userId); + storageBean.setTotalStorageSize(totalStorageSize); + storageMapper.insert(storageBean); + } else { + totalStorageSize = storageBean.getTotalStorageSize(); + } + + if (totalStorageSize != null) { + totalStorageSize = totalStorageSize * 1024; + } + + Long storageSize = userFileMapper.selectStorageSizeByUserId(userId); + if (storageSize == null ){ + storageSize = 0L; + } + if (storageSize + fileSize > totalStorageSize) { + return false; + } + return true; + + } +} diff --git a/src/main/resources/database/data.sql b/src/main/resources/database/data.sql index 9480920..83eec1e 100644 --- a/src/main/resources/database/data.sql +++ b/src/main/resources/database/data.sql @@ -6,4 +6,7 @@ insert ignore into permission (permissionId, permission) values (1, 'admin'),(2, delete from user_role where userId = 1 and roleId = 1; insert into user_role (userId, roleId) values (1, 1); delete from role_permission where roleId = 1 and permissionId = 1; -insert into role_permission (roleId, permissionId) values (1, 1); \ No newline at end of file +insert into role_permission (roleId, permissionId) values (1, 1); + +delete from sysparam where sysParamId = 1; +insert into sysparam (sysParamId, sysParamKey, sysParamValue, sysParamDesc) values (1, 'totalStorageSize', '1024', '总存储大小(单位M)'); \ No newline at end of file