Explorar o código

调整SysFile

tsurumure hai 6 meses
pai
achega
084194b247
Modificáronse 37 ficheiros con 1872 adicións e 1848 borrados
  1. 27 0
      db/__sys_file.sql
  2. 21 0
      db/__sys_file_category.sql
  3. 9 12
      db/sys_file.sql
  4. 0 24
      db/sys_upload.sql
  5. 0 21
      db/sys_upload_category.sql
  6. 4 4
      src/main/java/com/backendsys/controller/Med/MedMaterialController.java
  7. 36 36
      src/main/java/com/backendsys/controller/Systems/SysFileController.java
  8. 112 112
      src/main/java/com/backendsys/controller/Systems/SysUserPointController.java
  9. 211 211
      src/main/java/com/backendsys/controller/Upload/UploadTencentCOSController.java
  10. 11 11
      src/main/java/com/backendsys/mapper/System/SysFileCategoryMapper.java
  11. 38 38
      src/main/java/com/backendsys/mapper/System/SysFileCategoryMapper.xml
  12. 15 15
      src/main/java/com/backendsys/mapper/System/SysFileMapper.java
  13. 130 130
      src/main/java/com/backendsys/mapper/System/SysFileMapper.xml
  14. 2 2
      src/main/java/com/backendsys/modules/sdk/douyincloud/tos/service/DouyinTosService.java
  15. 3 3
      src/main/java/com/backendsys/modules/sdk/douyincloud/tos/service/impl/DouyinTosServiceImpl.java
  16. 2 2
      src/main/java/com/backendsys/modules/sdk/tencentcloud/cos/service/TencentCosService.java
  17. 3 4
      src/main/java/com/backendsys/modules/sdk/tencentcloud/cos/service/impl/TencentCosServiceImpl.java
  18. 50 0
      src/main/java/com/backendsys/modules/upload/controller/SysFileController.java
  19. 6 7
      src/main/java/com/backendsys/modules/upload/controller/SysFileMultipartController.java
  20. 0 87
      src/main/java/com/backendsys/modules/upload/controller/SysUploadController.java
  21. 14 0
      src/main/java/com/backendsys/modules/upload/dao/SysFileDao.java
  22. 0 9
      src/main/java/com/backendsys/modules/upload/dao/SysUploadDao.java
  23. 2 3
      src/main/java/com/backendsys/modules/upload/entity/SysFile.java
  24. 1 1
      src/main/java/com/backendsys/modules/upload/entity/SysFileResult.java
  25. 1 2
      src/main/java/com/backendsys/modules/upload/service/SysFileMultipartService.java
  26. 5 5
      src/main/java/com/backendsys/modules/upload/service/SysFileService.java
  27. 26 26
      src/main/java/com/backendsys/modules/upload/service/impl/SysFileMultipartServiceImpl.java
  28. 46 43
      src/main/java/com/backendsys/modules/upload/service/impl/SysFileServiceImpl.java
  29. 1 1
      src/main/java/com/backendsys/service/Med/MedMaterialService.java
  30. 10 10
      src/main/java/com/backendsys/service/Med/MedMaterialServiceImpl.java
  31. 26 26
      src/main/java/com/backendsys/service/SDKService/SDKTencent/SDKTencentCOSService.java
  32. 750 755
      src/main/java/com/backendsys/service/SDKService/SDKTencent/SDKTencentCOSServiceImpl.java
  33. 22 22
      src/main/java/com/backendsys/service/System/SysFileService.java
  34. 57 57
      src/main/java/com/backendsys/service/System/SysFileServiceImpl.java
  35. 20 20
      src/main/java/com/backendsys/service/System/SysUserPointHistoryService.java
  36. 149 149
      src/main/java/com/backendsys/service/System/SysUserPointHistoryServiceImpl.java
  37. 62 0
      src/main/resources/mapper/upload/SysFileDao.xml

+ 27 - 0
db/__sys_file.sql

@@ -0,0 +1,27 @@
+# /**
+# Source Server Version: 8.0.31
+# Source Database: backendsys
+# Date: 2023/05/23 17:09:22
+# */
+#
+# DROP TABLE IF EXISTS `sys_file`;
+# CREATE TABLE `sys_file` (
+#     PRIMARY KEY (`id`),
+#     `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
+#     `category_id` BIGINT COMMENT '分类ID',
+#     `user_id` BIGINT COMMENT '拥有者',
+#     `name` VARCHAR(255) NOT NULL COMMENT '文件名称',
+#     `file_local_path` VARCHAR(255) COMMENT '本地路径',
+#     `file_remote_path` VARCHAR(255) COMMENT '远程路径',
+#     `file_remote_path_thumb` VARCHAR(255) COMMENT '远程路径 (缩略图)',
+#     `file_key` VARCHAR(255) COMMENT '腾讯云COS路径',
+#     `size` INT COMMENT '文件大小',
+#     `md5` VARCHAR(255) COMMENT '文件MD5',
+#     `chunk_upload_id` VARCHAR(255) COMMENT '文件分片任务ID',
+#     `chunk_count` INT COMMENT '文件分片数量',
+#     `chunk_current_index` INT COMMENT '当前文件分片索引',
+#     `notes` VARCHAR(255) COMMENT '备注',
+#     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+#     `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
+# ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统文件表';
+#

+ 21 - 0
db/__sys_file_category.sql

@@ -0,0 +1,21 @@
+# /**
+# Source Server Version: 8.0.31
+# Source Database: backendsys
+# Date: 2023/05/23 17:09:22
+# */
+#
+# DROP TABLE IF EXISTS `sys_file_category`;
+# CREATE TABLE `sys_file_category` (
+#     PRIMARY KEY (`id`),
+#     `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
+#     `category_name` VARCHAR(255) NOT NULL COMMENT '分类名称',
+#     `suffix` VARCHAR(1000) NOT NULL COMMENT '文件后缀',
+#     `sort` INT DEFAULT '1' COMMENT '排序',
+#     `status` TINYINT(1) DEFAULT '1' COMMENT '资讯状态 (-1禁用, 1启用)'
+# ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统文件分类表';
+#
+# INSERT INTO sys_file_category(category_name, suffix) VALUES
+#     ('图片', 'jpg, jpeg, png, gif, bmp, tiff, webp'),
+#     ('视频', 'mp4, avi, mov, mkv, wmv, flv, webm'),
+#     ('音频', 'mp3, wav, ogg, aac')
+# ;

+ 9 - 12
db/sys_file.sql

@@ -9,19 +9,16 @@ CREATE TABLE `sys_file` (
     PRIMARY KEY (`id`),
     `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
     `category_id` BIGINT COMMENT '分类ID',
-    `user_id` BIGINT COMMENT '拥有者',
-    `name` VARCHAR(255) NOT NULL COMMENT '文件名称',
-    `file_local_path` VARCHAR(255) COMMENT '本地路径',
-    `file_remote_path` VARCHAR(255) COMMENT '远程路径',
-    `file_remote_path_thumb` VARCHAR(255) COMMENT '远程路径 (缩略图)',
-    `file_key` VARCHAR(255) COMMENT '腾讯云COS路径',
+    `request_id` VARCHAR(100) COMMENT '请求响应ID',
+    `upload_id` VARCHAR(100) COMMENT '分块上传ID',
+    `user_id` BIGINT COMMENT '上传用户ID',
+    `name` VARCHAR(255) COMMENT '文件名称',
+    `content_type` VARCHAR(255) COMMENT '文件类型',
+    `url` VARCHAR(1000) COMMENT 'URL',
+    `object_key` VARCHAR(500) NOT NULL COMMENT 'ObjectKey',
     `size` INT COMMENT '文件大小',
     `md5` VARCHAR(255) COMMENT '文件MD5',
-    `chunk_upload_id` VARCHAR(255) COMMENT '文件分片任务ID',
-    `chunk_count` INT COMMENT '文件分片数量',
-    `chunk_current_index` INT COMMENT '当前文件分片索引',
-    `notes` VARCHAR(255) COMMENT '备注',
+    `target` INT COMMENT '上传目标 (-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云)',
     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
-) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统文件表';
-
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统上传文件表';

+ 0 - 24
db/sys_upload.sql

@@ -1,24 +0,0 @@
-/**
-Source Server Version: 8.0.31
-Source Database: backendsys
-Date: 2023/05/23 17:09:22
-*/
-
-DROP TABLE IF EXISTS `sys_upload`;
-CREATE TABLE `sys_upload` (
-    PRIMARY KEY (`id`),
-    `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
-    `category_id` BIGINT COMMENT '分类ID',
-    `request_id` VARCHAR(100) COMMENT '请求响应ID',
-    `upload_id` VARCHAR(100) COMMENT '分块上传ID',
-    `user_id` BIGINT COMMENT '上传用户ID',
-    `name` VARCHAR(255) COMMENT '文件名称',
-    `content_type` VARCHAR(255) COMMENT '文件类型',
-    `url` VARCHAR(1000) COMMENT 'URL',
-    `object_key` VARCHAR(500) NOT NULL COMMENT 'ObjectKey',
-    `size` INT COMMENT '文件大小',
-    `md5` VARCHAR(255) COMMENT '文件MD5',
-    `target` INT COMMENT '上传目标 (-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云)',
-    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
-) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统上传文件表';

+ 0 - 21
db/sys_upload_category.sql

@@ -1,21 +0,0 @@
-/**
-Source Server Version: 8.0.31
-Source Database: backendsys
-Date: 2023/05/23 17:09:22
-*/
-
-DROP TABLE IF EXISTS `sys_upload_category`;
-CREATE TABLE `sys_upload_category` (
-    PRIMARY KEY (`id`),
-    `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
-    `category_name` VARCHAR(255) NOT NULL COMMENT '分类名称',
-    `suffix` VARCHAR(1000) NOT NULL COMMENT '文件后缀',
-    `sort` INT DEFAULT '1' COMMENT '排序',
-    `status` TINYINT(1) DEFAULT '1' COMMENT '资讯状态 (-1禁用, 1启用)'
-) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统文件分类表';
-
-INSERT INTO sys_upload_category(category_name, suffix) VALUES
-    ('图片', 'jpg, jpeg, png, gif, bmp, tiff, webp'),
-    ('视频', 'mp4, avi, mov, mkv, wmv, flv, webm'),
-    ('音频', 'mp3, wav, ogg, aac')
-;

+ 4 - 4
src/main/java/com/backendsys/controller/Med/MedMaterialController.java

@@ -77,10 +77,10 @@ public class MedMaterialController {
         return Result.success(medMaterialService.insertMaterial(medMaterialDTO), "创建成功");
     }
 
-    @GetMapping("/api/med/material/getTempCredentials")
-    public Result getTempCredentials() {
-        return Result.success(medMaterialService.getTempCredentials());
-    }
+//    @GetMapping("/api/med/material/getTempCredentials")
+//    public Result getTempCredentials() {
+//        return Result.success(medMaterialService.getTempCredentials());
+//    }
 
 
 

+ 36 - 36
src/main/java/com/backendsys/controller/Systems/SysFileController.java

@@ -1,36 +1,36 @@
-package com.backendsys.controller.Systems;
-
-import com.backendsys.entity.PageDTO;
-import com.backendsys.entity.System.SysFile.SysFileCategoryDTO;
-import com.backendsys.entity.System.SysFile.SysFileDTO;
-import com.backendsys.service.System.SysFileService;
-import com.backendsys.utils.response.Result;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@Validated
-@RestController
-public class SysFileController {
-
-    @Autowired
-    private SysFileService sysFileService;
-
-    /**
-     * 获得上传文件列表
-     */
-    @GetMapping("/api/upload/getUploadFileList")
-    public Result getUploadFileList(@Validated PageDTO pageDTO, @Validated SysFileDTO sysFileDTO) {
-        return Result.success(sysFileService.getUploadFileList(pageDTO.getPage_num(), pageDTO.getPage_size(), sysFileDTO));
-    }
-
-    /**
-     * 获得上传文件分类列表
-     */
-    @GetMapping("/api/upload/getUploadFileCategoryList")
-    public Result getUploadFileCategoryList(@Validated PageDTO pageDTO, @Validated SysFileCategoryDTO sysFileCategoryDTO) {
-        return Result.success(sysFileService.getUploadFileCategoryList(sysFileCategoryDTO));
-    }
-
-}
+//package com.backendsys.controller.Systems;
+//
+//import com.backendsys.entity.PageDTO;
+//import com.backendsys.entity.System.SysFile.SysFileCategoryDTO;
+//import com.backendsys.entity.System.SysFile.SysFileDTO;
+//import com.backendsys.service.System.SysFileService;
+//import com.backendsys.utils.response.Result;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//
+//@Validated
+//@RestController
+//public class SysFileController {
+//
+//    @Autowired
+//    private SysFileService sysFileService;
+//
+//    /**
+//     * 获得上传文件列表
+//     */
+//    @GetMapping("/api/upload/getUploadFileList")
+//    public Result getUploadFileList(@Validated PageDTO pageDTO, @Validated SysFileDTO sysFileDTO) {
+//        return Result.success(sysFileService.getUploadFileList(pageDTO.getPage_num(), pageDTO.getPage_size(), sysFileDTO));
+//    }
+//
+//    /**
+//     * 获得上传文件分类列表
+//     */
+//    @GetMapping("/api/upload/getUploadFileCategoryList")
+//    public Result getUploadFileCategoryList(@Validated PageDTO pageDTO, @Validated SysFileCategoryDTO sysFileCategoryDTO) {
+//        return Result.success(sysFileService.getUploadFileCategoryList(sysFileCategoryDTO));
+//    }
+//
+//}

+ 112 - 112
src/main/java/com/backendsys/controller/Systems/SysUserPointController.java

@@ -1,112 +1,112 @@
-package com.backendsys.controller.Systems;
-
-import com.backendsys.aspect.HttpRequestAspect;
-import com.backendsys.exception.CustException;
-import com.backendsys.entity.PageDTO;
-import com.backendsys.entity.System.SysUserPointsDTO;
-import com.backendsys.enums.UserPointActivityType;
-import com.backendsys.enums.UserPointOperatorType;
-import com.backendsys.mapper.System.SysUserPointsHistoryMapper;
-import com.backendsys.modules.common.config.security.utils.SecurityUtil;
-import com.backendsys.service.System.SysUserPointHistoryService;
-import com.backendsys.utils.response.Result;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Map;
-
-@Validated
-@RestController
-public class SysUserPointController {
-
-    @Autowired
-    private HttpRequestAspect httpRequestAspect;
-
-    @Autowired
-    private SysUserPointHistoryService sysUserPointHistoryService;
-
-    @Autowired
-    private SysUserPointsHistoryMapper sysUserPointsHistoryMapper;
-
-    /**
-     * 检查积分操作,制定相应规则:
-     * - 判断如果该值为空值,则获取自己
-     * - 判断如果查询的不是自己,则判断是否为超管,都不是则抛出异常
-     */
-    private void inspectPointOperation(SysUserPointsDTO sysUserPointsDTO) {
-        Long user_id = httpRequestAspect.getUserId();
-        // 如果目标用户ID为空,则设置为当前用户ID
-
-        if (sysUserPointsDTO.getTarget_user_id() == null) {
-            sysUserPointsDTO.setTarget_user_id(user_id);
-        }
-        // 检查是否为超级管理员
-        boolean isSuper = SecurityUtil.isSuper();
-        // 如果非超级管理员且目标用户ID与当前用户ID不匹配,则抛出权限异常
-        if (!isSuper && sysUserPointsDTO.getTarget_user_id() != null && !sysUserPointsDTO.getTarget_user_id().equals(user_id)) {
-            throw new CustException("当前用户没有权限查看或操作其他用户积分");
-        }
-    }
-
-    /**
-     * 操作用户积分 (增加/减少)
-     */
-    @Transactional
-    @PreAuthorize("@sr.hasPermission('3.3.8')")
-    @PutMapping("/api/system/user/adjustmentUserPoint")
-    public Result adjustmentUserPoint(@Validated(SysUserPointsDTO.Adjustment.class) @RequestBody SysUserPointsDTO sysUserPointsDTO) {
-
-        // 检查积分操作
-        inspectPointOperation(sysUserPointsDTO);
-
-        Map<String, Object> resp = sysUserPointHistoryService.adjustmentUserPoint(sysUserPointsDTO);
-
-        // -- 积分操作记录 ----------------------------------------------------------
-        // 触发事件类型 (枚举)
-        sysUserPointsDTO.setActivity_type(UserPointActivityType.BACKEND.getCode());
-        sysUserPointsDTO.setActivity_type_description(UserPointActivityType.BACKEND.getDescription());
-
-        // 操作人类型 (枚举)
-        sysUserPointsDTO.setOperator_type(UserPointOperatorType.USER.getCode());
-        // 操作人 (用户ID) (查询) 自身 UserId
-        Long user_id = httpRequestAspect.getUserId();
-        sysUserPointsDTO.setOperator_user_id(user_id);
-        sysUserPointsDTO.setActivity_detail("手动操作积分");
-        // [插入] 积分操作记录
-        System.out.println(sysUserPointsDTO);
-        sysUserPointsHistoryMapper.insertUserPointsHistory(sysUserPointsDTO);
-        // --------------------------------------------------------------------------
-
-        return Result.success(resp, "更新成功");
-    }
-
-    /**
-     * 查询单个用户积分 (超级管理员可查看其他人)
-     */
-    @PreAuthorize("@sr.hasPermission('3.3.9')")
-    @GetMapping("/api/system/user/getUserPoint")
-    public Result getUserPoint(@Validated(SysUserPointsDTO.Detail.class) SysUserPointsDTO sysUserPointsDTO) {
-        // 检查积分操作
-        inspectPointOperation(sysUserPointsDTO);
-        return Result.success(sysUserPointHistoryService.queryUserPoint(sysUserPointsDTO));
-    }
-
-    /**
-     * 查询用户积分操作记录列表
-     */
-    @PreAuthorize("@sr.hasPermission('3.3.10')")
-    @GetMapping("/api/system/user/getUserPointHistory")
-    public Result getUserPointHistory(@Validated PageDTO pageDTO, @Validated SysUserPointsDTO sysUserPointsDTO) {
-        // 检查积分操作
-        inspectPointOperation(sysUserPointsDTO);
-//        return Result.success(sysUserService.queryUserPointHistoryList(pageDTO.getPage_num(), pageDTO.getPage_size(), sysUserPointsDTO));
-        return Result.success(sysUserPointHistoryService.queryUserPointHistoryList(pageDTO.getPage_num(), pageDTO.getPage_size(), sysUserPointsDTO));
-    }
-
-}
+//package com.backendsys.controller.Systems;
+//
+//import com.backendsys.aspect.HttpRequestAspect;
+//import com.backendsys.exception.CustException;
+//import com.backendsys.entity.PageDTO;
+//import com.backendsys.entity.System.SysUserPointsDTO;
+//import com.backendsys.enums.UserPointActivityType;
+//import com.backendsys.enums.UserPointOperatorType;
+//import com.backendsys.mapper.System.SysUserPointsHistoryMapper;
+//import com.backendsys.modules.common.config.security.utils.SecurityUtil;
+//import com.backendsys.service.System.SysUserPointHistoryService;
+//import com.backendsys.utils.response.Result;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.security.access.prepost.PreAuthorize;
+//import org.springframework.transaction.annotation.Transactional;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.PutMapping;
+//import org.springframework.web.bind.annotation.RequestBody;
+//import org.springframework.web.bind.annotation.RestController;
+//
+//import java.util.Map;
+//
+//@Validated
+//@RestController
+//public class SysUserPointController {
+//
+//    @Autowired
+//    private HttpRequestAspect httpRequestAspect;
+//
+//    @Autowired
+//    private SysUserPointHistoryService sysUserPointHistoryService;
+//
+//    @Autowired
+//    private SysUserPointsHistoryMapper sysUserPointsHistoryMapper;
+//
+//    /**
+//     * 检查积分操作,制定相应规则:
+//     * - 判断如果该值为空值,则获取自己
+//     * - 判断如果查询的不是自己,则判断是否为超管,都不是则抛出异常
+//     */
+//    private void inspectPointOperation(SysUserPointsDTO sysUserPointsDTO) {
+//        Long user_id = httpRequestAspect.getUserId();
+//        // 如果目标用户ID为空,则设置为当前用户ID
+//
+//        if (sysUserPointsDTO.getTarget_user_id() == null) {
+//            sysUserPointsDTO.setTarget_user_id(user_id);
+//        }
+//        // 检查是否为超级管理员
+//        boolean isSuper = SecurityUtil.isSuper();
+//        // 如果非超级管理员且目标用户ID与当前用户ID不匹配,则抛出权限异常
+//        if (!isSuper && sysUserPointsDTO.getTarget_user_id() != null && !sysUserPointsDTO.getTarget_user_id().equals(user_id)) {
+//            throw new CustException("当前用户没有权限查看或操作其他用户积分");
+//        }
+//    }
+//
+//    /**
+//     * 操作用户积分 (增加/减少)
+//     */
+//    @Transactional
+//    @PreAuthorize("@sr.hasPermission('3.3.8')")
+//    @PutMapping("/api/system/user/adjustmentUserPoint")
+//    public Result adjustmentUserPoint(@Validated(SysUserPointsDTO.Adjustment.class) @RequestBody SysUserPointsDTO sysUserPointsDTO) {
+//
+//        // 检查积分操作
+//        inspectPointOperation(sysUserPointsDTO);
+//
+//        Map<String, Object> resp = sysUserPointHistoryService.adjustmentUserPoint(sysUserPointsDTO);
+//
+//        // -- 积分操作记录 ----------------------------------------------------------
+//        // 触发事件类型 (枚举)
+//        sysUserPointsDTO.setActivity_type(UserPointActivityType.BACKEND.getCode());
+//        sysUserPointsDTO.setActivity_type_description(UserPointActivityType.BACKEND.getDescription());
+//
+//        // 操作人类型 (枚举)
+//        sysUserPointsDTO.setOperator_type(UserPointOperatorType.USER.getCode());
+//        // 操作人 (用户ID) (查询) 自身 UserId
+//        Long user_id = httpRequestAspect.getUserId();
+//        sysUserPointsDTO.setOperator_user_id(user_id);
+//        sysUserPointsDTO.setActivity_detail("手动操作积分");
+//        // [插入] 积分操作记录
+//        System.out.println(sysUserPointsDTO);
+//        sysUserPointsHistoryMapper.insertUserPointsHistory(sysUserPointsDTO);
+//        // --------------------------------------------------------------------------
+//
+//        return Result.success(resp, "更新成功");
+//    }
+//
+//    /**
+//     * 查询单个用户积分 (超级管理员可查看其他人)
+//     */
+//    @PreAuthorize("@sr.hasPermission('3.3.9')")
+//    @GetMapping("/api/system/user/getUserPoint")
+//    public Result getUserPoint(@Validated(SysUserPointsDTO.Detail.class) SysUserPointsDTO sysUserPointsDTO) {
+//        // 检查积分操作
+//        inspectPointOperation(sysUserPointsDTO);
+//        return Result.success(sysUserPointHistoryService.queryUserPoint(sysUserPointsDTO));
+//    }
+//
+//    /**
+//     * 查询用户积分操作记录列表
+//     */
+//    @PreAuthorize("@sr.hasPermission('3.3.10')")
+//    @GetMapping("/api/system/user/getUserPointHistory")
+//    public Result getUserPointHistory(@Validated PageDTO pageDTO, @Validated SysUserPointsDTO sysUserPointsDTO) {
+//        // 检查积分操作
+//        inspectPointOperation(sysUserPointsDTO);
+////        return Result.success(sysUserService.queryUserPointHistoryList(pageDTO.getPage_num(), pageDTO.getPage_size(), sysUserPointsDTO));
+//        return Result.success(sysUserPointHistoryService.queryUserPointHistoryList(pageDTO.getPage_num(), pageDTO.getPage_size(), sysUserPointsDTO));
+//    }
+//
+//}

+ 211 - 211
src/main/java/com/backendsys/controller/Upload/UploadTencentCOSController.java

@@ -1,217 +1,217 @@
-package com.backendsys.controller.Upload;
-
-import com.backendsys.entity.System.SysFile.SysFileDTO;
-import com.backendsys.entity.Tencent.TencentCos.MultipartUploadDTO;
-import com.backendsys.service.SDKService.SDKTencent.SDKTencentCOSService;
-import com.backendsys.utils.CommonUtil;
-import com.backendsys.utils.response.Result;
-import com.backendsys.utils.response.ResultEnum;
-import com.qcloud.cos.COSClient;
-import com.qcloud.cos.ClientConfig;
-import com.qcloud.cos.auth.BasicCOSCredentials;
-import com.qcloud.cos.auth.COSCredentials;
-import com.qcloud.cos.model.*;
-import com.qcloud.cos.region.Region;
-
-import com.qcloud.cos.utils.IOUtils;
-import jakarta.validation.constraints.NotEmpty;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-@Validated
-@RestController
-public class UploadTencentCOSController {
-
-    @Value("${tencent.cos.max-size}")
-    private long maxSize;
-    @Value("${tencent.cos.secret-id}")
-    private String secretId;
-    @Value("${tencent.cos.secret-key}")
-    private String secretKey;
-    @Value("${tencent.cos.region}")
-    private String region;
-    @Value("${tencent.cos.bucket-name}")
-    private String bucketName;
-    @Value("${tencent.cos.accessible-domain}")
-    private String accessibleDomain;
-
-    @Autowired
-    private SDKTencentCOSService sdkTencentCOSService;
-
-
+//package com.backendsys.controller.Upload;
+//
+//import com.backendsys.entity.System.SysFile.SysFileDTO;
+//import com.backendsys.entity.Tencent.TencentCos.MultipartUploadDTO;
+//import com.backendsys.service.SDKService.SDKTencent.SDKTencentCOSService;
+//import com.backendsys.utils.CommonUtil;
+//import com.backendsys.utils.response.Result;
+//import com.backendsys.utils.response.ResultEnum;
+//import com.qcloud.cos.COSClient;
+//import com.qcloud.cos.ClientConfig;
+//import com.qcloud.cos.auth.BasicCOSCredentials;
+//import com.qcloud.cos.auth.COSCredentials;
+//import com.qcloud.cos.model.*;
+//import com.qcloud.cos.region.Region;
+//
+//import com.qcloud.cos.utils.IOUtils;
+//import jakarta.validation.constraints.NotEmpty;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.security.access.prepost.PreAuthorize;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.*;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import java.io.File;
+//import java.io.FileOutputStream;
+//import java.io.IOException;
+//import java.io.InputStream;
+//import java.text.SimpleDateFormat;
+//import java.util.Date;
+//import java.util.LinkedHashMap;
+//import java.util.Map;
+//
+//@Validated
+//@RestController
+//public class UploadTencentCOSController {
+//
+//    @Value("${tencent.cos.max-size}")
+//    private long maxSize;
+//    @Value("${tencent.cos.secret-id}")
+//    private String secretId;
+//    @Value("${tencent.cos.secret-key}")
+//    private String secretKey;
+//    @Value("${tencent.cos.region}")
+//    private String region;
+//    @Value("${tencent.cos.bucket-name}")
+//    private String bucketName;
+//    @Value("${tencent.cos.accessible-domain}")
+//    private String accessibleDomain;
+//
+//    @Autowired
+//    private SDKTencentCOSService sdkTencentCOSService;
+//
+//
+////    /**
+////     * 权限:待定
+////     * 获得临时上传密钥 (用于前端单文件上传、分片上传)
+////     */
+////    @GetMapping("/api/upload/getTempCredentials")
+////    public Result getTempCredentials() {
+////        return Result.success(sdkTencentCOSService.getTempCredentials("*"));
+////    }
+//
+//
+////    /**
+////     * 权限:待定
+////     * 获得素材文件列表
+////     */
+////    @GetMapping("/api/upload/getBucketList")
+////    public Result getBucketList(String next_marker) {
+////        return Result.success(sdkTencentCOSService.getBucketList(next_marker));
+////    }
+//
+//
+//    // 【腾讯云 COS】
+//    // 文档中心 > 对象存储 > API 文档 > Object 接口 > 基本操作 > PUT Object
+//    // https://cloud.tencent.com/document/product/436/7749
+//    // https://github.com/tencentyun/cos-java-sdk-v5/blob/master/src/main/java/com/qcloud/cos/demo/PutObjectDemo.java
+//
 //    /**
-//     * 权限:待定
-//     * 获得临时上传密钥 (用于前端单文件上传、分片上传)
+//     * 上传文件 (旧)
 //     */
-//    @GetMapping("/api/upload/getTempCredentials")
-//    public Result getTempCredentials() {
-//        return Result.success(sdkTencentCOSService.getTempCredentials("*"));
+//    @PreAuthorize("@sr.hasPermission(1.1)")
+//    @PostMapping("/api/tencent/cosUpload")
+//    public Result uploadTencentCOS(@RequestParam("file") MultipartFile file) {
+//
+//        // 检查上传的文件是否为空
+//        if (file.isEmpty()) {
+//            return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "文件不能为空");
+//        }
+//        // 判断文件大小是否超过
+//        if (file.getSize() > maxSize) {
+//            return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "文件不能大于 " + maxSize/1024/1024 + " MB");
+//        }
+//
+//        // 按日期作为文件目录 (腾讯云使用 /,所以不需要配置 File.separator)
+//        String dateDir = new SimpleDateFormat("yyyyMMdd").format(new Date()) + '/';
+//
+//        // 生成后缀名
+//        String originalFileName = file.getOriginalFilename();
+//        String suffix = originalFileName.substring(originalFileName.lastIndexOf("."));
+//
+//        // 生成新的文件名
+//        String newFileName = CommonUtil.generateFilename(suffix);
+//
+//        //
+//        String objectName = dateDir + newFileName;
+//
+//        // -- COS ------------------------------------------------------------------
+//        // 初始化用户身份信息(secretId, secretKey)
+//        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
+//
+//        // 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
+//        Region region1 = new Region(region);
+//        ClientConfig clientConfig = new ClientConfig(region1);
+//        clientConfig.setRegion(region1);
+//
+//        // 生成cos客户端
+//        COSClient cosClient = new COSClient(cred, clientConfig);
+//
+//        try {
+//
+//            // 获取文件内容
+//            InputStream inputStream = file.getInputStream();
+//
+//            // 将文件内容写入临时文件
+//            File tempFile = File.createTempFile("temp", null);
+//            try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
+//                IOUtils.copy(inputStream, outputStream);
+//            }
+//
+//            // 创建 PutObjectRequest 对象。
+//            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, tempFile);
+//
+//            ObjectMetadata objectMetadata = new ObjectMetadata();
+//            putObjectRequest.withMetadata(objectMetadata);
+//
+//            // 创建 PutObject 请求。(异步)
+//            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
+//
+//        } catch (IOException e) {
+//            System.out.println("IOException e:");
+//            System.out.println(e);
+//        } finally {
+//            if (cosClient != null) {
+//                cosClient.shutdown();
+//            }
+//        }
+//
+//        // 返回值 结构
+//        Map<String, Object> map = new LinkedHashMap<>();
+//        map.put("filename", newFileName);
+//        map.put("url", accessibleDomain + "/" + objectName); // File.separator
+//        map.put("type", suffix.replace(".", ""));
+//        map.put("size", file.getSize());
+//
+//        return Result.success(map);
+//
 //    }
-
-
+//
+//
 //    /**
-//     * 权限:待定
-//     * 获得素材文件列表
+//     * 简单上传文件
 //     */
-//    @GetMapping("/api/upload/getBucketList")
-//    public Result getBucketList(String next_marker) {
-//        return Result.success(sdkTencentCOSService.getBucketList(next_marker));
+//    @PreAuthorize("@sr.hasPermission(1.1)")
+//    @PostMapping("/api/upload/simpleUpload")
+//    public Result simpleUpload(@RequestParam("file") MultipartFile file) {
+//        return Result.success(sdkTencentCOSService.simpleUpload(file));
 //    }
-
-
-    // 【腾讯云 COS】
-    // 文档中心 > 对象存储 > API 文档 > Object 接口 > 基本操作 > PUT Object
-    // https://cloud.tencent.com/document/product/436/7749
-    // https://github.com/tencentyun/cos-java-sdk-v5/blob/master/src/main/java/com/qcloud/cos/demo/PutObjectDemo.java
-
-    /**
-     * 上传文件 (旧)
-     */
-    @PreAuthorize("@sr.hasPermission(1.1)")
-    @PostMapping("/api/tencent/cosUpload")
-    public Result uploadTencentCOS(@RequestParam("file") MultipartFile file) {
-
-        // 检查上传的文件是否为空
-        if (file.isEmpty()) {
-            return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "文件不能为空");
-        }
-        // 判断文件大小是否超过
-        if (file.getSize() > maxSize) {
-            return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "文件不能大于 " + maxSize/1024/1024 + " MB");
-        }
-
-        // 按日期作为文件目录 (腾讯云使用 /,所以不需要配置 File.separator)
-        String dateDir = new SimpleDateFormat("yyyyMMdd").format(new Date()) + '/';
-
-        // 生成后缀名
-        String originalFileName = file.getOriginalFilename();
-        String suffix = originalFileName.substring(originalFileName.lastIndexOf("."));
-
-        // 生成新的文件名
-        String newFileName = CommonUtil.generateFilename(suffix);
-
-        //
-        String objectName = dateDir + newFileName;
-
-        // -- COS ------------------------------------------------------------------
-        // 初始化用户身份信息(secretId, secretKey)
-        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
-
-        // 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
-        Region region1 = new Region(region);
-        ClientConfig clientConfig = new ClientConfig(region1);
-        clientConfig.setRegion(region1);
-
-        // 生成cos客户端
-        COSClient cosClient = new COSClient(cred, clientConfig);
-
-        try {
-
-            // 获取文件内容
-            InputStream inputStream = file.getInputStream();
-
-            // 将文件内容写入临时文件
-            File tempFile = File.createTempFile("temp", null);
-            try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
-                IOUtils.copy(inputStream, outputStream);
-            }
-
-            // 创建 PutObjectRequest 对象。
-            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, tempFile);
-
-            ObjectMetadata objectMetadata = new ObjectMetadata();
-            putObjectRequest.withMetadata(objectMetadata);
-
-            // 创建 PutObject 请求。(异步)
-            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
-
-        } catch (IOException e) {
-            System.out.println("IOException e:");
-            System.out.println(e);
-        } finally {
-            if (cosClient != null) {
-                cosClient.shutdown();
-            }
-        }
-
-        // 返回值 结构
-        Map<String, Object> map = new LinkedHashMap<>();
-        map.put("filename", newFileName);
-        map.put("url", accessibleDomain + "/" + objectName); // File.separator
-        map.put("type", suffix.replace(".", ""));
-        map.put("size", file.getSize());
-
-        return Result.success(map);
-
-    }
-
-
-    /**
-     * 简单上传文件
-     */
-    @PreAuthorize("@sr.hasPermission(1.1)")
-    @PostMapping("/api/upload/simpleUpload")
-    public Result simpleUpload(@RequestParam("file") MultipartFile file) {
-        return Result.success(sdkTencentCOSService.simpleUpload(file));
-    }
-
-
-    /**
-     * 大文件分块上传
-     */
-    @PreAuthorize("@sr.hasPermission(1.1)")
-    @PostMapping("/api/upload/multipartUpload")
-    public Result multipartUpload(@Validated(MultipartUploadDTO.Upload.class) MultipartUploadDTO multipartUploadDTO) {
-        return Result.success(sdkTencentCOSService.multipartUpload(multipartUploadDTO));
-    }
-
-    /**
-     * 查询已上传分块
-     */
-    @PreAuthorize("@sr.hasPermission(1.1)")
-    @GetMapping("/api/upload/listParts")
-    public Result listParts(@NotEmpty(message="upload_id 不能为空") String upload_id, @NotEmpty(message="key 不能为空") String key) {
-        return Result.success(sdkTencentCOSService.listParts(upload_id, key));
-    }
-
-    /**
-     * 查询分块上传任务ID
-     */
-    @PreAuthorize("@sr.hasPermission(1.1)")
-    @GetMapping("/api/upload/getMultipartUploadIds")
-    public Result getMultipartUploadIds(@NotEmpty(message="key 不能为空") String key) {
-        return Result.success(sdkTencentCOSService.listMultipartUploads(key));
-    }
-
-    /**
-     * 终止分块上传任务
-     */
-    @PreAuthorize("@sr.hasPermission(1.1)")
-    @PostMapping("/api/upload/abortMultipartUpload")
-    public Result abortMultipartUpload(@Validated(MultipartUploadDTO.Abort.class) @RequestBody MultipartUploadDTO multipartUploadDTO) {
-        return Result.success(sdkTencentCOSService.abortMultipartUpload(multipartUploadDTO));
-    }
-
-    /**
-     * 删除文件
-     */
-    @PreAuthorize("@sr.hasPermission(1.1)")
-    @DeleteMapping("/api/upload/removeUploadFile")
-    public Result removeUploadFile(@Validated(SysFileDTO.Remove.class) @RequestBody SysFileDTO sysFileDTO) {
-        return Result.success(sdkTencentCOSService.removeUploadFile(sysFileDTO));
-    }
-
-}
+//
+//
+//    /**
+//     * 大文件分块上传
+//     */
+//    @PreAuthorize("@sr.hasPermission(1.1)")
+//    @PostMapping("/api/upload/multipartUpload")
+//    public Result multipartUpload(@Validated(MultipartUploadDTO.Upload.class) MultipartUploadDTO multipartUploadDTO) {
+//        return Result.success(sdkTencentCOSService.multipartUpload(multipartUploadDTO));
+//    }
+//
+//    /**
+//     * 查询已上传分块
+//     */
+//    @PreAuthorize("@sr.hasPermission(1.1)")
+//    @GetMapping("/api/upload/listParts")
+//    public Result listParts(@NotEmpty(message="upload_id 不能为空") String upload_id, @NotEmpty(message="key 不能为空") String key) {
+//        return Result.success(sdkTencentCOSService.listParts(upload_id, key));
+//    }
+//
+//    /**
+//     * 查询分块上传任务ID
+//     */
+//    @PreAuthorize("@sr.hasPermission(1.1)")
+//    @GetMapping("/api/upload/getMultipartUploadIds")
+//    public Result getMultipartUploadIds(@NotEmpty(message="key 不能为空") String key) {
+//        return Result.success(sdkTencentCOSService.listMultipartUploads(key));
+//    }
+//
+//    /**
+//     * 终止分块上传任务
+//     */
+//    @PreAuthorize("@sr.hasPermission(1.1)")
+//    @PostMapping("/api/upload/abortMultipartUpload")
+//    public Result abortMultipartUpload(@Validated(MultipartUploadDTO.Abort.class) @RequestBody MultipartUploadDTO multipartUploadDTO) {
+//        return Result.success(sdkTencentCOSService.abortMultipartUpload(multipartUploadDTO));
+//    }
+//
+//    /**
+//     * 删除文件
+//     */
+//    @PreAuthorize("@sr.hasPermission(1.1)")
+//    @DeleteMapping("/api/upload/removeUploadFile")
+//    public Result removeUploadFile(@Validated(SysFileDTO.Remove.class) @RequestBody SysFileDTO sysFileDTO) {
+//        return Result.success(sdkTencentCOSService.removeUploadFile(sysFileDTO));
+//    }
+//
+//}

+ 11 - 11
src/main/java/com/backendsys/mapper/System/SysFileCategoryMapper.java

@@ -1,11 +1,11 @@
-package com.backendsys.mapper.System;
-
-import com.backendsys.entity.System.SysFile.SysFileCategoryDTO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-
-@Mapper
-public interface SysFileCategoryMapper {
-    List<SysFileCategoryDTO> queryFileCategoryList(SysFileCategoryDTO sysFileCategoryDTO);
-}
+//package com.backendsys.mapper.System;
+//
+//import com.backendsys.entity.System.SysFile.SysFileCategoryDTO;
+//import org.apache.ibatis.annotations.Mapper;
+//
+//import java.util.List;
+//
+//@Mapper
+//public interface SysFileCategoryMapper {
+//    List<SysFileCategoryDTO> queryFileCategoryList(SysFileCategoryDTO sysFileCategoryDTO);
+//}

+ 38 - 38
src/main/java/com/backendsys/mapper/System/SysFileCategoryMapper.xml

@@ -1,42 +1,42 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.backendsys.mapper.System.SysFileCategoryMapper">
+<!--<?xml version="1.0" encoding="utf-8" ?>-->
+<!--<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >-->
+<!--<mapper namespace="com.backendsys.mapper.System.SysFileCategoryMapper">-->
 
-    <sql id="includeFileCategory">
-        id,
-        id category_id,
-        category_name,
-        suffix,
-        sort,
-        status
-    </sql>
+<!--    <sql id="includeFileCategory">-->
+<!--        id,-->
+<!--        id category_id,-->
+<!--        category_name,-->
+<!--        suffix,-->
+<!--        sort,-->
+<!--        status-->
+<!--    </sql>-->
 
-<!--    type="java.util.LinkedHashMap"-->
-    <resultMap id="resultMapFileCategory" type="com.backendsys.entity.System.SysFile.SysFileCategoryDTO">
-        <id property="id" column="id" jdbcType="BIGINT" />
-        <result property="category_id" column="category_id" javaType="java.lang.Long"/>
-        <result property="category_name" column="category_name" />
-        <result property="suffix" column="suffix" />
-        <result property="sort" column="sort" javaType="java.lang.Integer"/>
-        <result property="status" column="status" javaType="java.lang.Integer"/>
-    </resultMap>
+<!--&lt;!&ndash;    type="java.util.LinkedHashMap"&ndash;&gt;-->
+<!--    <resultMap id="resultMapFileCategory" type="com.backendsys.entity.System.SysFile.SysFileCategoryDTO">-->
+<!--        <id property="id" column="id" jdbcType="BIGINT" />-->
+<!--        <result property="category_id" column="category_id" javaType="java.lang.Long"/>-->
+<!--        <result property="category_name" column="category_name" />-->
+<!--        <result property="suffix" column="suffix" />-->
+<!--        <result property="sort" column="sort" javaType="java.lang.Integer"/>-->
+<!--        <result property="status" column="status" javaType="java.lang.Integer"/>-->
+<!--    </resultMap>-->
 
-    <!-- 查询 列表 -->
-    <select id="queryFileCategoryList" resultMap="resultMapFileCategory">
-        SELECT <include refid="includeFileCategory" />
-        FROM sys_file_category
-        <where>
-            <if test="category_name != null and category_name != ''">
-                AND category_name = #{category_name}
-            </if>
-            <if test="suffix != null and suffix != ''">
-                AND suffix LIKE CONCAT('%', #{suffix}, '%')
-            </if>
-            <if test="status != null and status != ''">
-                AND status = #{status}
-            </if>
-        </where>
-        ORDER BY sort DESC
-    </select>
+<!--    &lt;!&ndash; 查询 列表 &ndash;&gt;-->
+<!--    <select id="queryFileCategoryList" resultMap="resultMapFileCategory">-->
+<!--        SELECT <include refid="includeFileCategory" />-->
+<!--        FROM sys_file_category-->
+<!--        <where>-->
+<!--            <if test="category_name != null and category_name != ''">-->
+<!--                AND category_name = #{category_name}-->
+<!--            </if>-->
+<!--            <if test="suffix != null and suffix != ''">-->
+<!--                AND suffix LIKE CONCAT('%', #{suffix}, '%')-->
+<!--            </if>-->
+<!--            <if test="status != null and status != ''">-->
+<!--                AND status = #{status}-->
+<!--            </if>-->
+<!--        </where>-->
+<!--        ORDER BY sort DESC-->
+<!--    </select>-->
 
-</mapper>
+<!--</mapper>-->

+ 15 - 15
src/main/java/com/backendsys/mapper/System/SysFileMapper.java

@@ -1,15 +1,15 @@
-package com.backendsys.mapper.System;
-
-import com.backendsys.entity.System.SysFile.SysFileDTO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-
-@Mapper
-public interface SysFileMapper {
-    List<SysFileDTO> queryFileList(SysFileDTO sysFileDTO);
-    SysFileDTO queryFileByKey(String file_key);
-    long insertFile(SysFileDTO sysFileDTO);
-    long updateFile(SysFileDTO sysFileDTO);
-    long deleteFile(String file_key);
-}
+//package com.backendsys.mapper.System;
+//
+//import com.backendsys.entity.System.SysFile.SysFileDTO;
+//import org.apache.ibatis.annotations.Mapper;
+//
+//import java.util.List;
+//
+//@Mapper
+//public interface SysFileMapper {
+//    List<SysFileDTO> queryFileList(SysFileDTO sysFileDTO);
+//    SysFileDTO queryFileByKey(String file_key);
+//    long insertFile(SysFileDTO sysFileDTO);
+//    long updateFile(SysFileDTO sysFileDTO);
+//    long deleteFile(String file_key);
+//}

+ 130 - 130
src/main/java/com/backendsys/mapper/System/SysFileMapper.xml

@@ -1,138 +1,138 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.backendsys.mapper.System.SysFileMapper">
+<!--<?xml version="1.0" encoding="utf-8" ?>-->
+<!--<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >-->
+<!--<mapper namespace="com.backendsys.mapper.System.SysFileMapper">-->
 
-    <sql id="includeFile">
-        sf.id id,
-        sf.id file_id,
-        COALESCE(sf.user_id, '') user_id,
-        COALESCE(sf.category_id, '') category_id,
-        COALESCE(sfc.category_name, '') category_name,
-        sf.name name,
-        COALESCE(sf.file_local_path, '') file_local_path,
-        COALESCE(sf.file_remote_path, '') file_remote_path,
-        COALESCE(sf.file_remote_path_thumb, '') file_remote_path_thumb,
-        COALESCE(sf.file_key, '') file_key,
-        COALESCE(sf.size, '') size,
-        COALESCE(sf.md5, '') md5,
-        COALESCE(sf.chunk_upload_id, '') chunk_upload_id,
-        COALESCE(sf.chunk_count, '') chunk_count,
-        COALESCE(sf.chunk_current_index, '') chunk_current_index,
-        COALESCE(sf.notes, '') notes,
-        sf.create_time create_time,
-        sf.update_time update_time
-    </sql>
+<!--    <sql id="includeFile">-->
+<!--        sf.id id,-->
+<!--        sf.id file_id,-->
+<!--        COALESCE(sf.user_id, '') user_id,-->
+<!--        COALESCE(sf.category_id, '') category_id,-->
+<!--        COALESCE(sfc.category_name, '') category_name,-->
+<!--        sf.name name,-->
+<!--        COALESCE(sf.file_local_path, '') file_local_path,-->
+<!--        COALESCE(sf.file_remote_path, '') file_remote_path,-->
+<!--        COALESCE(sf.file_remote_path_thumb, '') file_remote_path_thumb,-->
+<!--        COALESCE(sf.file_key, '') file_key,-->
+<!--        COALESCE(sf.size, '') size,-->
+<!--        COALESCE(sf.md5, '') md5,-->
+<!--        COALESCE(sf.chunk_upload_id, '') chunk_upload_id,-->
+<!--        COALESCE(sf.chunk_count, '') chunk_count,-->
+<!--        COALESCE(sf.chunk_current_index, '') chunk_current_index,-->
+<!--        COALESCE(sf.notes, '') notes,-->
+<!--        sf.create_time create_time,-->
+<!--        sf.update_time update_time-->
+<!--    </sql>-->
 
-<!--    type="java.util.LinkedHashMap"-->
-    <resultMap id="resultMapFile" type="com.backendsys.entity.System.SysFile.SysFileDTO">
-        <id property="id" column="id" jdbcType="BIGINT" />
-        <result property="file_id" column="file_id" javaType="java.lang.Long"/>
-        <result property="category_id" column="category_id" javaType="java.lang.Long"/>
-        <result property="category_name" column="category_name" />
-        <result property="user_id" column="user_id" javaType="java.lang.Long"/>
-        <result property="name" column="name" />
-        <result property="file_local_path" column="file_local_path" />
-        <result property="file_remote_path" column="file_remote_path" />
-        <result property="file_remote_path_thumb" column="file_remote_path_thumb" />
-        <result property="file_key" column="file_key" />
-        <result property="size" column="size" javaType="java.lang.Long"/>
-        <result property="md5" column="md5" />
-        <result property="chunk_upload_id" column="chunk_upload_id" />
-        <result property="chunk_count" column="chunk_count" javaType="java.lang.Integer"/>
-        <result property="chunk_current_index" column="chunk_current_index" javaType="java.lang.Integer"/>
-        <result property="notes" column="notes" />
-        <result property="create_time" column="create_time" />
-        <result property="update_time" column="update_time" />
-    </resultMap>
+<!--&lt;!&ndash;    type="java.util.LinkedHashMap"&ndash;&gt;-->
+<!--    <resultMap id="resultMapFile" type="com.backendsys.entity.System.SysFile.SysFileDTO">-->
+<!--        <id property="id" column="id" jdbcType="BIGINT" />-->
+<!--        <result property="file_id" column="file_id" javaType="java.lang.Long"/>-->
+<!--        <result property="category_id" column="category_id" javaType="java.lang.Long"/>-->
+<!--        <result property="category_name" column="category_name" />-->
+<!--        <result property="user_id" column="user_id" javaType="java.lang.Long"/>-->
+<!--        <result property="name" column="name" />-->
+<!--        <result property="file_local_path" column="file_local_path" />-->
+<!--        <result property="file_remote_path" column="file_remote_path" />-->
+<!--        <result property="file_remote_path_thumb" column="file_remote_path_thumb" />-->
+<!--        <result property="file_key" column="file_key" />-->
+<!--        <result property="size" column="size" javaType="java.lang.Long"/>-->
+<!--        <result property="md5" column="md5" />-->
+<!--        <result property="chunk_upload_id" column="chunk_upload_id" />-->
+<!--        <result property="chunk_count" column="chunk_count" javaType="java.lang.Integer"/>-->
+<!--        <result property="chunk_current_index" column="chunk_current_index" javaType="java.lang.Integer"/>-->
+<!--        <result property="notes" column="notes" />-->
+<!--        <result property="create_time" column="create_time" />-->
+<!--        <result property="update_time" column="update_time" />-->
+<!--    </resultMap>-->
 
 
-    <!-- 查询 列表 -->
-    <select id="queryFileList" resultMap="resultMapFile">
-        SELECT <include refid="includeFile" />
-        FROM sys_file sf
-        LEFT JOIN sys_file_category sfc ON sf.category_id = sfc.id
-        <where>
-            <if test="category_id != null and category_id != ''">
-                AND sf.category_id = #{category_id}
-            </if>
-            <if test="user_id != null and user_id != ''">
-                AND sf.user_id = #{user_id}
-            </if>
-            <if test="name != null and name != ''">
-                AND sf.name LIKE CONCAT('%', #{name}, '%')
-            </if>
-            <if test="md5 != null and md5 != ''">
-                AND sf.md5 = #{md5}
-            </if>
-            <if test="chunk_upload_id != null and chunk_upload_id != ''">
-                AND sf.chunk_upload_id = #{chunk_upload_id}
-            </if>
-        </where>
-        ORDER BY sf.create_time DESC
-    </select>
-    <!-- 查询 详情 -->
-    <select id="queryFileByKey" resultMap="resultMapFile">
-        SELECT <include refid="includeFile" />
-        FROM sys_file sf
-        LEFT JOIN sys_file_category sfc ON sf.category_id = sfc.id
-        WHERE sf.file_key = #{file_key}
-    </select>
+<!--    &lt;!&ndash; 查询 列表 &ndash;&gt;-->
+<!--    <select id="queryFileList" resultMap="resultMapFile">-->
+<!--        SELECT <include refid="includeFile" />-->
+<!--        FROM sys_file sf-->
+<!--        LEFT JOIN sys_file_category sfc ON sf.category_id = sfc.id-->
+<!--        <where>-->
+<!--            <if test="category_id != null and category_id != ''">-->
+<!--                AND sf.category_id = #{category_id}-->
+<!--            </if>-->
+<!--            <if test="user_id != null and user_id != ''">-->
+<!--                AND sf.user_id = #{user_id}-->
+<!--            </if>-->
+<!--            <if test="name != null and name != ''">-->
+<!--                AND sf.name LIKE CONCAT('%', #{name}, '%')-->
+<!--            </if>-->
+<!--            <if test="md5 != null and md5 != ''">-->
+<!--                AND sf.md5 = #{md5}-->
+<!--            </if>-->
+<!--            <if test="chunk_upload_id != null and chunk_upload_id != ''">-->
+<!--                AND sf.chunk_upload_id = #{chunk_upload_id}-->
+<!--            </if>-->
+<!--        </where>-->
+<!--        ORDER BY sf.create_time DESC-->
+<!--    </select>-->
+<!--    &lt;!&ndash; 查询 详情 &ndash;&gt;-->
+<!--    <select id="queryFileByKey" resultMap="resultMapFile">-->
+<!--        SELECT <include refid="includeFile" />-->
+<!--        FROM sys_file sf-->
+<!--        LEFT JOIN sys_file_category sfc ON sf.category_id = sfc.id-->
+<!--        WHERE sf.file_key = #{file_key}-->
+<!--    </select>-->
 
-    <!-- 创建 -->
-    <insert id="insertFile" parameterType="com.backendsys.entity.System.SysFile.SysFileDTO"
-        useGeneratedKeys="true" keyProperty="file_id">
-        INSERT INTO sys_file (name
-            <if test="user_id != null and user_id != ''">, user_id</if>
-            <if test="category_id != null and category_id != ''">, category_id</if>
-            <if test="file_local_path != null and file_local_path != ''">, file_local_path</if>
-            <if test="file_remote_path != null and file_remote_path != ''">, file_remote_path</if>
-            <if test="file_remote_path_thumb != null and file_remote_path_thumb != ''">, file_remote_path_thumb</if>
-            <if test="file_key != null and file_key != ''">, file_key</if>
-            <if test="size != null and size != ''">, size</if>
-            <if test="md5 != null and md5 != ''">, md5</if>
-            <if test="chunk_upload_id != null and chunk_upload_id != ''">, chunk_upload_id</if>
-            <if test="chunk_count != null and chunk_count != ''">, chunk_count</if>
-            <if test="chunk_current_index != null and chunk_current_index != ''">, chunk_current_index</if>
-            <if test="notes != null and notes != ''">, notes</if>
-        ) VALUES (#{name}
-            <if test="user_id != null and user_id != ''">, #{user_id}</if>
-            <if test="category_id != null and category_id != ''">, #{category_id}</if>
-            <if test="file_local_path != null and file_local_path != ''">, #{file_local_path}</if>
-            <if test="file_remote_path != null and file_remote_path != ''">, #{file_remote_path}</if>
-            <if test="file_remote_path_thumb != null and file_remote_path_thumb != ''">, #{file_remote_path_thumb}</if>
-            <if test="file_key != null and file_key != ''">, #{file_key}</if>
-            <if test="size != null and size != ''">, #{size}</if>
-            <if test="md5 != null and md5 != ''">, #{md5}</if>
-            <if test="chunk_upload_id != null and chunk_upload_id != ''">, #{chunk_upload_id}</if>
-            <if test="chunk_count != null and chunk_count != ''">, #{chunk_count}</if>
-            <if test="chunk_current_index != null and chunk_current_index != ''">, #{chunk_current_index}</if>
-            <if test="notes != null and notes != ''">, #{notes}</if>
-        )
-    </insert>
+<!--    &lt;!&ndash; 创建 &ndash;&gt;-->
+<!--    <insert id="insertFile" parameterType="com.backendsys.entity.System.SysFile.SysFileDTO"-->
+<!--        useGeneratedKeys="true" keyProperty="file_id">-->
+<!--        INSERT INTO sys_file (name-->
+<!--            <if test="user_id != null and user_id != ''">, user_id</if>-->
+<!--            <if test="category_id != null and category_id != ''">, category_id</if>-->
+<!--            <if test="file_local_path != null and file_local_path != ''">, file_local_path</if>-->
+<!--            <if test="file_remote_path != null and file_remote_path != ''">, file_remote_path</if>-->
+<!--            <if test="file_remote_path_thumb != null and file_remote_path_thumb != ''">, file_remote_path_thumb</if>-->
+<!--            <if test="file_key != null and file_key != ''">, file_key</if>-->
+<!--            <if test="size != null and size != ''">, size</if>-->
+<!--            <if test="md5 != null and md5 != ''">, md5</if>-->
+<!--            <if test="chunk_upload_id != null and chunk_upload_id != ''">, chunk_upload_id</if>-->
+<!--            <if test="chunk_count != null and chunk_count != ''">, chunk_count</if>-->
+<!--            <if test="chunk_current_index != null and chunk_current_index != ''">, chunk_current_index</if>-->
+<!--            <if test="notes != null and notes != ''">, notes</if>-->
+<!--        ) VALUES (#{name}-->
+<!--            <if test="user_id != null and user_id != ''">, #{user_id}</if>-->
+<!--            <if test="category_id != null and category_id != ''">, #{category_id}</if>-->
+<!--            <if test="file_local_path != null and file_local_path != ''">, #{file_local_path}</if>-->
+<!--            <if test="file_remote_path != null and file_remote_path != ''">, #{file_remote_path}</if>-->
+<!--            <if test="file_remote_path_thumb != null and file_remote_path_thumb != ''">, #{file_remote_path_thumb}</if>-->
+<!--            <if test="file_key != null and file_key != ''">, #{file_key}</if>-->
+<!--            <if test="size != null and size != ''">, #{size}</if>-->
+<!--            <if test="md5 != null and md5 != ''">, #{md5}</if>-->
+<!--            <if test="chunk_upload_id != null and chunk_upload_id != ''">, #{chunk_upload_id}</if>-->
+<!--            <if test="chunk_count != null and chunk_count != ''">, #{chunk_count}</if>-->
+<!--            <if test="chunk_current_index != null and chunk_current_index != ''">, #{chunk_current_index}</if>-->
+<!--            <if test="notes != null and notes != ''">, #{notes}</if>-->
+<!--        )-->
+<!--    </insert>-->
 
-    <!-- 编辑 -->
-    <update id="updateFile" parameterType="com.backendsys.entity.System.SysFile.SysFileDTO">
-        UPDATE sys_file SET
-            file_key = #{file_key},
-            chunk_count = #{chunk_count},
-            chunk_current_index = #{chunk_current_index}
-            <if test="name != null and name != ''">, name = #{name}</if>
-            <if test="category_id != null and category_id != ''">, category_id = #{category_id}</if>
-            <if test="user_id != null and user_id != ''">, user_id = #{user_id}</if>
-            <if test="file_local_path != null and file_local_path != ''">, file_local_path = #{file_local_path}</if>
-            <if test="file_remote_path != null and file_remote_path != ''">, file_remote_path = #{file_remote_path}</if>
-            <if test="file_remote_path_thumb != null and file_remote_path_thumb != ''">, file_remote_path_thumb = #{file_remote_path_thumb}</if>
-            <if test="file_key != null and file_key != ''">, file_key = #{file_key}</if>
-            <if test="size != null and size != ''">, size = #{size}</if>
-            <if test="md5 != null and md5 != ''">, md5 = #{md5}</if>
-            <if test="chunk_upload_id != null and chunk_upload_id != ''">, chunk_upload_id = #{chunk_upload_id}</if>
-            <if test="notes != null and notes != ''">, notes = #{notes}</if>
-        WHERE file_key = #{file_key}
-    </update>
+<!--    &lt;!&ndash; 编辑 &ndash;&gt;-->
+<!--    <update id="updateFile" parameterType="com.backendsys.entity.System.SysFile.SysFileDTO">-->
+<!--        UPDATE sys_file SET-->
+<!--            file_key = #{file_key},-->
+<!--            chunk_count = #{chunk_count},-->
+<!--            chunk_current_index = #{chunk_current_index}-->
+<!--            <if test="name != null and name != ''">, name = #{name}</if>-->
+<!--            <if test="category_id != null and category_id != ''">, category_id = #{category_id}</if>-->
+<!--            <if test="user_id != null and user_id != ''">, user_id = #{user_id}</if>-->
+<!--            <if test="file_local_path != null and file_local_path != ''">, file_local_path = #{file_local_path}</if>-->
+<!--            <if test="file_remote_path != null and file_remote_path != ''">, file_remote_path = #{file_remote_path}</if>-->
+<!--            <if test="file_remote_path_thumb != null and file_remote_path_thumb != ''">, file_remote_path_thumb = #{file_remote_path_thumb}</if>-->
+<!--            <if test="file_key != null and file_key != ''">, file_key = #{file_key}</if>-->
+<!--            <if test="size != null and size != ''">, size = #{size}</if>-->
+<!--            <if test="md5 != null and md5 != ''">, md5 = #{md5}</if>-->
+<!--            <if test="chunk_upload_id != null and chunk_upload_id != ''">, chunk_upload_id = #{chunk_upload_id}</if>-->
+<!--            <if test="notes != null and notes != ''">, notes = #{notes}</if>-->
+<!--        WHERE file_key = #{file_key}-->
+<!--    </update>-->
 
-    <!-- 删除 -->
-    <delete id="deleteFile" parameterType="java.lang.String">
-        DELETE FROM sys_file WHERE file_key = #{file_key};
-    </delete>
+<!--    &lt;!&ndash; 删除 &ndash;&gt;-->
+<!--    <delete id="deleteFile" parameterType="java.lang.String">-->
+<!--        DELETE FROM sys_file WHERE file_key = #{file_key};-->
+<!--    </delete>-->
 
-</mapper>
+<!--</mapper>-->

+ 2 - 2
src/main/java/com/backendsys/modules/sdk/douyincloud/tos/service/DouyinTosService.java

@@ -1,6 +1,6 @@
 package com.backendsys.modules.sdk.douyincloud.tos.service;
 
-import com.backendsys.modules.upload.entity.SysUploadResult;
+import com.backendsys.modules.upload.entity.SysFileResult;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -12,7 +12,7 @@ import java.io.IOException;
 public interface DouyinTosService {
 
     // [抖音云COS] 上传对象
-    SysUploadResult putObject(MultipartFile multipartFile, String object_key) throws IOException;
+    SysFileResult putObject(MultipartFile multipartFile, String object_key) throws IOException;
 
     // [抖音云COS] 删除对象
     void deleteObject(String object_key) throws IOException;

+ 3 - 3
src/main/java/com/backendsys/modules/sdk/douyincloud/tos/service/impl/DouyinTosServiceImpl.java

@@ -11,7 +11,7 @@ import com.backendsys.modules.sdk.tencentcloud.cos.entity.Progress;
 import com.backendsys.modules.sse.entity.SseResponse;
 import com.backendsys.modules.sse.entity.SseResponseEnum;
 import com.backendsys.modules.sse.utils.SseUtil;
-import com.backendsys.modules.upload.entity.SysUploadResult;
+import com.backendsys.modules.upload.entity.SysFileResult;
 import com.volcengine.tos.TOSV2;
 import com.volcengine.tos.TOSV2ClientBuilder;
 import com.volcengine.tos.TosClientException;
@@ -102,7 +102,7 @@ public class DouyinTosServiceImpl implements DouyinTosService {
      * [抖音云COS] 上传对象
      */
     @Override
-    public SysUploadResult putObject(MultipartFile multipartFile, String object_key) {
+    public SysFileResult putObject(MultipartFile multipartFile, String object_key) {
 
         if (multipartFile.isEmpty()) throw new CustException("file 上传文件不能为空");
 
@@ -142,7 +142,7 @@ public class DouyinTosServiceImpl implements DouyinTosService {
             PutObjectOutput output = tos.putObject(putObjectInput);
 
             // 自定义返回结果实体
-            SysUploadResult result = new SysUploadResult();
+            SysFileResult result = new SysFileResult();
             result.setKey(object_key);
             result.setRequest_id(output.getRequestInfo().getRequestId());
             result.setE_tag(output.getEtag());

+ 2 - 2
src/main/java/com/backendsys/modules/sdk/tencentcloud/cos/service/TencentCosService.java

@@ -1,6 +1,6 @@
 package com.backendsys.modules.sdk.tencentcloud.cos.service;
 
-import com.backendsys.modules.upload.entity.SysUploadResult;
+import com.backendsys.modules.upload.entity.SysFileResult;
 import com.qcloud.cos.model.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -11,7 +11,7 @@ import java.util.List;
 public interface TencentCosService {
 
     // [腾讯云COS] 上传对象
-    SysUploadResult putObject(MultipartFile multipartFile, String object_key) throws IOException;
+    SysFileResult putObject(MultipartFile multipartFile, String object_key) throws IOException;
 
     // [腾讯云COS] 删除对象
     void deleteObject(String object_key);

+ 3 - 4
src/main/java/com/backendsys/modules/sdk/tencentcloud/cos/service/impl/TencentCosServiceImpl.java

@@ -4,7 +4,6 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import com.backendsys.exception.CustException;
-import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.common.config.security.utils.SecurityUtil;
 import com.backendsys.modules.common.utils.CommonUtil;
 import com.backendsys.modules.sdk.tencentcloud.cos.entity.Progress;
@@ -13,7 +12,7 @@ import com.backendsys.modules.sdk.tencentcloud.cos.utils.TencentCosUtil;
 import com.backendsys.modules.sse.entity.SseResponse;
 import com.backendsys.modules.sse.entity.SseResponseEnum;
 import com.backendsys.modules.sse.utils.SseUtil;
-import com.backendsys.modules.upload.entity.SysUploadResult;
+import com.backendsys.modules.upload.entity.SysFileResult;
 import com.qcloud.cos.COSClient;
 import com.qcloud.cos.ClientConfig;
 import com.qcloud.cos.auth.BasicCOSCredentials;
@@ -117,7 +116,7 @@ public class TencentCosServiceImpl implements TencentCosService {
      * - 如果对象是图片,则同时产生缩略图
      */
     @Override
-    public SysUploadResult putObject(MultipartFile multipartFile, String object_key) {
+    public SysFileResult putObject(MultipartFile multipartFile, String object_key) {
 
         if (multipartFile.isEmpty()) throw new CustException("file 上传文件不能为空");
 
@@ -178,7 +177,7 @@ public class TencentCosServiceImpl implements TencentCosService {
             UploadResult uploadResult = upload.waitForUploadResult();   // 捕获可能出现的异常
 
             // 自定义返回结果实体
-            SysUploadResult result = new SysUploadResult();
+            SysFileResult result = new SysFileResult();
             result.setKey(object_key);
             result.setRequest_id(uploadResult.getRequestId());
             result.setE_tag(uploadResult.getETag());

+ 50 - 0
src/main/java/com/backendsys/modules/upload/controller/SysFileController.java

@@ -0,0 +1,50 @@
+package com.backendsys.modules.upload.controller;
+
+import com.backendsys.modules.common.aspect.SysLog;
+import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
+import com.backendsys.modules.common.utils.Result;
+import com.backendsys.modules.upload.entity.SysFile;
+import com.backendsys.modules.upload.service.SysFileService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+@Validated
+@RestController
+@Tag(name = "上传文件")
+public class SysFileController {
+
+    @Autowired
+    private SysFileService sysFileService;
+
+    /**
+     * 获取上传文件列表
+     * - 缩略图 (?imageView2/1/w/100/h/100/q/60)
+     */
+    @Operation(summary = "获取上传文件列表")
+    @GetMapping("/api/upload/getUploadFileList")
+    public Result getUploadFileList(@Validated SysFile sysFile) {
+        return Result.success().put("data", sysFileService.selectUploadFileList(sysFile));
+    }
+
+    @SysLog("上传文件 (普通上传)")
+    @Operation(summary = "上传文件 (普通上传,单文件上传不超过 100MB)")
+    @PreAuthorize("@sr.hasPermission(1.1)")
+    @PostMapping("/api/upload/uploadSmall")
+    public Result uploadSmall(@RequestParam("file") MultipartFile multipartFile, Long category_id, Integer target) {
+        return Result.success().put("data", sysFileService.uploadSmall(multipartFile, category_id, target));
+    }
+
+    @SysLog("删除上传文件")
+    @Operation(summary = "删除上传文件")
+    @PreAuthorize("@sr.hasPermission(1.1)")
+    @DeleteMapping("/api/upload/removeUploadFile")
+    public Result removeUploadFile(@Validated(SysFile.Delete.class) @RequestBody SysFile sysFile) {
+        return Result.success().put("data", sysFileService.removeUploadFile(sysFile));
+    }
+
+}

+ 6 - 7
src/main/java/com/backendsys/modules/upload/controller/SysUploadMultipartController.java → src/main/java/com/backendsys/modules/upload/controller/SysFileMultipartController.java

@@ -1,9 +1,8 @@
 package com.backendsys.modules.upload.controller;
 
-import com.backendsys.entity.Tencent.TencentCos.MultipartUploadDTO;
 import com.backendsys.modules.common.aspect.SysLog;
 import com.backendsys.modules.common.utils.Result;
-import com.backendsys.modules.upload.service.SysUploadMultipartService;
+import com.backendsys.modules.upload.service.SysFileMultipartService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,10 +18,10 @@ import org.springframework.web.multipart.MultipartFile;
 @Validated
 @RestController
 @Tag(name = "上传文件 (分块上传)")
-public class SysUploadMultipartController {
+public class SysFileMultipartController {
 
     @Autowired
-    private SysUploadMultipartService sysUploadMultipartService;
+    private SysFileMultipartService sysFileMultipartService;
 
     /*
         分块上传的流程:
@@ -36,7 +35,7 @@ public class SysUploadMultipartController {
     @PreAuthorize("@sr.hasPermission(1.1)")
     @PostMapping("/api/upload/initiateMultipartUpload")
     public Result initiateMultipartUpload(@RequestParam("file") MultipartFile multipartFile, Long category_id, Integer target) {
-        return Result.success().put("data", sysUploadMultipartService.initiateMultipartUpload(multipartFile, category_id, target));
+        return Result.success().put("data", sysFileMultipartService.initiateMultipartUpload(multipartFile, category_id, target));
     }
 
     @SysLog("上传分块")
@@ -44,14 +43,14 @@ public class SysUploadMultipartController {
     @PreAuthorize("@sr.hasPermission(1.1)")
     @PostMapping("/api/upload/uploadMultipart")
     public Result uploadMultipart(@RequestParam("file") MultipartFile multipartFile, String upload_id) {
-        return Result.success().put("data", sysUploadMultipartService.uploadMultipart(multipartFile, upload_id));
+        return Result.success().put("data", sysFileMultipartService.uploadMultipart(multipartFile, upload_id));
     }
 
     @Operation(summary = "查询分块上传情况")
     @PreAuthorize("@sr.hasPermission(1.1)")
     @GetMapping("/api/upload/getListParts")
     public Result getListParts(String upload_id, String object_key) {
-        return Result.success().put("data", sysUploadMultipartService.listParts(upload_id, object_key));
+        return Result.success().put("data", sysFileMultipartService.listParts(upload_id, object_key));
     }
 
 }

+ 0 - 87
src/main/java/com/backendsys/modules/upload/controller/SysUploadController.java

@@ -1,87 +0,0 @@
-package com.backendsys.modules.upload.controller;
-
-import cn.hutool.core.convert.Convert;
-import com.backendsys.modules.common.aspect.SysLog;
-import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
-import com.backendsys.modules.common.utils.Result;
-import com.backendsys.modules.sse.emitter.SseEmitterManager;
-import com.backendsys.modules.sse.utils.SseEmitterUTF8;
-import com.backendsys.modules.upload.entity.SysUpload;
-import com.backendsys.modules.upload.service.SysUploadService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-
-import java.io.IOException;
-
-@Validated
-@RestController
-@Tag(name = "上传文件")
-public class SysUploadController {
-
-    @Autowired
-    private HttpRequestUtil httpRequestUtil;
-    @Autowired
-    private SysUploadService sysUploadService;
-
-    /**
-     * 获取上传文件列表
-     * - 缩略图 (?imageView2/1/w/100/h/100/q/60)
-     */
-    @Operation(summary = "获取上传文件列表")
-    @GetMapping("/api/v2/upload/getUploadFileList")
-    public Result getUploadFileList(@Validated SysUpload sysUpload) {
-        return Result.success().put("data", sysUploadService.selectUploadList(sysUpload));
-    }
-
-    @SysLog("上传文件 (普通上传)")
-    @Operation(summary = "上传文件 (普通上传,单文件上传不超过 100MB)")
-    @PreAuthorize("@sr.hasPermission(1.1)")
-    @PostMapping("/api/upload/uploadSmall")
-    public Result uploadSmall(@RequestParam("file") MultipartFile multipartFile, Long category_id, Integer target) {
-        return Result.success().put("data", sysUploadService.uploadSmall(multipartFile, category_id, target));
-    }
-
-    @Operation(summary = "上传进度监听 (SSE)")
-    @GetMapping(value = "/api/sse/stream/upload", produces = "text/event-stream;charset=UTF-8")
-    public SseEmitter streamUpload() {
-        String userId = Convert.toStr(httpRequestUtil.getUserId());
-        SseEmitterUTF8 emitter = new SseEmitterUTF8(Long.MAX_VALUE);
-        SseEmitterManager manager = SseEmitterManager.getInstance();
-        manager.addEmitter(userId, emitter);
-        try {
-            // 创建新连接
-            manager.addEmitter(userId, emitter);
-            emitter.send(SseEmitter.event().data("Connected successfully! (连接成功)"));
-        } catch (IOException e) {
-            // 关闭连接
-            manager.emitters.remove(emitter);
-        }
-        return emitter;
-    }
-
-    @SysLog("删除上传文件")
-    @Operation(summary = "删除上传文件")
-    @PreAuthorize("@sr.hasPermission(1.1)")
-    @DeleteMapping("/api/v2/upload/removeUploadFile")
-    public Result removeUploadFile(@Validated(SysUpload.Delete.class) @RequestBody SysUpload sysUpload) {
-        return Result.success().put("data", sysUploadService.removeUploadFile(sysUpload));
-    }
-
-//    /**
-//     * [SSE] 测试发送
-//     */
-//    @Operation(summary = "测试发送 (SSE)")
-//    @GetMapping("/api/v2/sse/send")
-//    public String send() {
-//        String message = "{\"message\": \"Hello World\"}";
-//        sseUtil.send(httpRequestUtil.getUserId(), message);
-//        return "success";
-//    }
-
-}

+ 14 - 0
src/main/java/com/backendsys/modules/upload/dao/SysFileDao.java

@@ -0,0 +1,14 @@
+package com.backendsys.modules.upload.dao;
+
+import com.backendsys.modules.upload.entity.SysFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface SysFileDao extends BaseMapper<SysFile> {
+
+    List<SysFile> selectUploadFileList(SysFile sysFile);
+
+}

+ 0 - 9
src/main/java/com/backendsys/modules/upload/dao/SysUploadDao.java

@@ -1,9 +0,0 @@
-package com.backendsys.modules.upload.dao;
-
-import com.backendsys.modules.upload.entity.SysUpload;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface SysUploadDao extends BaseMapper<SysUpload> {
-}

+ 2 - 3
src/main/java/com/backendsys/modules/upload/entity/SysUpload.java → src/main/java/com/backendsys/modules/upload/entity/SysFile.java

@@ -1,15 +1,14 @@
 package com.backendsys.modules.upload.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import jakarta.validation.constraints.NotEmpty;
 import lombok.Data;
 
 @Data
-@TableName("sys_upload")
-public class SysUpload {
+@TableName("sys_file")
+public class SysFile {
 
     public static interface Delete{}
 

+ 1 - 1
src/main/java/com/backendsys/modules/upload/entity/SysUploadResult.java → src/main/java/com/backendsys/modules/upload/entity/SysFileResult.java

@@ -3,7 +3,7 @@ package com.backendsys.modules.upload.entity;
 import lombok.Data;
 
 @Data
-public class SysUploadResult {
+public class SysFileResult {
     private String request_id;
     private String key;
     private String e_tag;

+ 1 - 2
src/main/java/com/backendsys/modules/upload/service/SysUploadMultipartService.java → src/main/java/com/backendsys/modules/upload/service/SysFileMultipartService.java

@@ -1,12 +1,11 @@
 package com.backendsys.modules.upload.service;
 
-import com.qcloud.cos.model.InitiateMultipartUploadResult;
 import com.qcloud.cos.model.PartListing;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.Map;
 
-public interface SysUploadMultipartService {
+public interface SysFileMultipartService {
 
     // 初始化分块上传
     Map<String, Object> initiateMultipartUpload(MultipartFile multipartFile, Long category_id, Integer target);

+ 5 - 5
src/main/java/com/backendsys/modules/upload/service/SysUploadService.java → src/main/java/com/backendsys/modules/upload/service/SysFileService.java

@@ -1,19 +1,19 @@
 package com.backendsys.modules.upload.service;
 
-import com.backendsys.modules.upload.entity.SysUpload;
+import com.backendsys.modules.upload.entity.SysFile;
 import com.backendsys.utils.response.PageEntity;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.Map;
 
-public interface SysUploadService {
+public interface SysFileService {
 
     // 获取上传文件列表
-    PageEntity selectUploadList(SysUpload sysUpload);
+    PageEntity selectUploadFileList(SysFile sysFile);
 
     // 上传文件 (单文件大小不超过 n)
-    SysUpload uploadSmall(MultipartFile file, Long category_id, Integer target);
+    SysFile uploadSmall(MultipartFile file, Long category_id, Integer target);
 
     // 删除上传文件
-    Map<String, Object> removeUploadFile(SysUpload sysUpload);
+    Map<String, Object> removeUploadFile(SysFile sysFile);
 }

+ 26 - 26
src/main/java/com/backendsys/modules/upload/service/impl/SysUploadMultipartServiceImpl.java → src/main/java/com/backendsys/modules/upload/service/impl/SysFileMultipartServiceImpl.java

@@ -6,9 +6,9 @@ import cn.hutool.crypto.digest.DigestUtil;
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.sdk.tencentcloud.cos.service.TencentCosService;
-import com.backendsys.modules.upload.dao.SysUploadDao;
-import com.backendsys.modules.upload.entity.SysUpload;
-import com.backendsys.modules.upload.service.SysUploadMultipartService;
+import com.backendsys.modules.upload.dao.SysFileDao;
+import com.backendsys.modules.upload.entity.SysFile;
+import com.backendsys.modules.upload.service.SysFileMultipartService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qcloud.cos.model.*;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,14 +20,14 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 
 @Service
-public class SysUploadMultipartServiceImpl implements SysUploadMultipartService {
+public class SysFileMultipartServiceImpl implements SysFileMultipartService {
 
     @Autowired
     private HttpRequestUtil httpRequestUtil;
     @Autowired
     private TencentCosService tencentCosService;
     @Autowired
-    private SysUploadDao sysUploadDao;
+    private SysFileDao sysFileDao;
 
     // 初始化分块上传 (获得 upload_id, object_key)
     @Override
@@ -50,23 +50,23 @@ public class SysUploadMultipartServiceImpl implements SysUploadMultipartService
         try {
             // 根据文件MD5 判断是否上传过文件 (如果上传过,则仅更新记录,不再上传文件)
             String md5 = DigestUtil.md5Hex(multipartFile.getInputStream());
-            SysUpload sysUploadEntity = sysUploadDao.selectOne(new LambdaQueryWrapper<SysUpload>().eq(SysUpload::getMd5, md5));
-            if (sysUploadEntity == null) {
-                sysUploadEntity = new SysUpload();
-                sysUploadEntity.setCategory_id(category_id);
-                sysUploadEntity.setUser_id(httpRequestUtil.getUserId());
-                sysUploadEntity.setUpload_id(upload_id);
-                sysUploadEntity.setName(FileNameUtil.getName(object_key));
-                sysUploadEntity.setMd5(md5);
-                sysUploadEntity.setObject_key(object_key);
-                sysUploadDao.insert(sysUploadEntity);
+            SysFile sysFileEntity = sysFileDao.selectOne(new LambdaQueryWrapper<SysFile>().eq(SysFile::getMd5, md5));
+            if (sysFileEntity == null) {
+                sysFileEntity = new SysFile();
+                sysFileEntity.setCategory_id(category_id);
+                sysFileEntity.setUser_id(httpRequestUtil.getUserId());
+                sysFileEntity.setUpload_id(upload_id);
+                sysFileEntity.setName(FileNameUtil.getName(object_key));
+                sysFileEntity.setMd5(md5);
+                sysFileEntity.setObject_key(object_key);
+                sysFileDao.insert(sysFileEntity);
             } else {
                 // [更新] 上传文件记录
-                sysUploadEntity.setCategory_id(category_id);
-                sysUploadEntity.setUpload_id(upload_id);
-                sysUploadEntity.setName(FileNameUtil.getName(object_key));
-                sysUploadEntity.setObject_key(object_key);
-                sysUploadDao.updateById(sysUploadEntity);
+                sysFileEntity.setCategory_id(category_id);
+                sysFileEntity.setUpload_id(upload_id);
+                sysFileEntity.setName(FileNameUtil.getName(object_key));
+                sysFileEntity.setObject_key(object_key);
+                sysFileDao.updateById(sysFileEntity);
             }
         } catch (IOException e) {
             throw new RuntimeException(e);
@@ -84,10 +84,10 @@ public class SysUploadMultipartServiceImpl implements SysUploadMultipartService
 
         if (StrUtil.isEmpty(upload_id)) throw new CustException("upload_id 不能为空");
 
-        SysUpload sysUploadEntity = sysUploadDao.selectOne(new LambdaQueryWrapper<SysUpload>().eq(SysUpload::getUpload_id, upload_id));
-        if (sysUploadEntity == null) throw new CustException("upload_id 不存在");
+        SysFile sysFileEntity = sysFileDao.selectOne(new LambdaQueryWrapper<SysFile>().eq(SysFile::getUpload_id, upload_id));
+        if (sysFileEntity == null) throw new CustException("upload_id 不存在");
 
-        String object_key = sysUploadEntity.getObject_key();
+        String object_key = sysFileEntity.getObject_key();
 
         // 查询分块上传情况 (获得下次要上传的位置)
         PartListing partListing = listParts(upload_id, object_key);
@@ -117,10 +117,10 @@ public class SysUploadMultipartServiceImpl implements SysUploadMultipartService
 
         if (StrUtil.isEmpty(upload_id)) throw new CustException("upload_id 不能为空");
 
-        SysUpload sysUploadEntity = sysUploadDao.selectOne(new LambdaQueryWrapper<SysUpload>().eq(SysUpload::getUpload_id, upload_id));
-        if (sysUploadEntity == null) throw new CustException("upload_id 不存在");
+        SysFile sysFileEntity = sysFileDao.selectOne(new LambdaQueryWrapper<SysFile>().eq(SysFile::getUpload_id, upload_id));
+        if (sysFileEntity == null) throw new CustException("upload_id 不存在");
 
-        String object_key = sysUploadEntity.getObject_key();
+        String object_key = sysFileEntity.getObject_key();
 
 //        // 查询分块上传情况 (获得下次要上传的位置)
 //        PartListing partListing = listParts(upload_id, object_key);

+ 46 - 43
src/main/java/com/backendsys/modules/upload/service/impl/SysUploadServiceImpl.java → src/main/java/com/backendsys/modules/upload/service/impl/SysFileServiceImpl.java

@@ -3,16 +3,17 @@ package com.backendsys.modules.upload.service.impl;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.file.FileNameUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.sdk.douyincloud.tos.service.DouyinTosService;
 import com.backendsys.modules.sdk.tencentcloud.cos.service.TencentCosService;
 import com.backendsys.modules.system.service.SysCommonService;
-import com.backendsys.modules.upload.dao.SysUploadDao;
-import com.backendsys.modules.upload.entity.SysUpload;
-import com.backendsys.modules.upload.entity.SysUploadResult;
-import com.backendsys.modules.upload.service.SysUploadService;
+import com.backendsys.modules.upload.dao.SysFileDao;
+import com.backendsys.modules.upload.entity.SysFile;
+import com.backendsys.modules.upload.entity.SysFileResult;
+import com.backendsys.modules.upload.service.SysFileService;
 import com.backendsys.utils.response.PageEntity;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
@@ -28,7 +29,7 @@ import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 
 @Service
-public class SysUploadServiceImpl implements SysUploadService {
+public class SysFileServiceImpl implements SysFileService {
 
     @Autowired
     private HttpRequestUtil httpRequestUtil;
@@ -39,7 +40,7 @@ public class SysUploadServiceImpl implements SysUploadService {
     private DouyinTosService douyinTosService;
 
     @Autowired
-    private SysUploadDao sysUploadDao;
+    private SysFileDao sysFileDao;
     @Autowired
     private SysCommonService sysCommonService;
 
@@ -47,16 +48,16 @@ public class SysUploadServiceImpl implements SysUploadService {
      * 获取上传文件列表
      */
     @Override
-    public PageEntity selectUploadList(SysUpload sysUpload) {
+    public PageEntity selectUploadFileList(SysFile sysFile) {
         PageUtils.startPage();  // 分页
-        List<SysUpload> list = sysUploadDao.selectList(new QueryWrapper<SysUpload>().setEntity(sysUpload));
+        List<SysFile> list = sysFileDao.selectUploadFileList(sysFile);
         return new PageInfoResult(list).toEntity();
     }
 
     // [方法] 上传事件
-    private SysUpload uploadEvent(MultipartFile multipartFile, Long category_id, Integer target) {
+    private SysFile uploadEvent(MultipartFile multipartFile, Long category_id, Integer target) {
         try {
-            SysUploadResult uploadResult = new SysUploadResult();
+            SysFileResult uploadResult = new SysFileResult();
 
             // target: 上传目标 (-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云)
             if (target == 1) {
@@ -69,22 +70,24 @@ public class SysUploadServiceImpl implements SysUploadService {
             }
 
             // [新增] 上传文件记录
-            SysUpload sysUploadEntity = new SysUpload();
-            sysUploadEntity.setCategory_id(category_id);
-            sysUploadEntity.setRequest_id(uploadResult.getRequest_id());
-            sysUploadEntity.setUser_id(httpRequestUtil.getUserId());
-            sysUploadEntity.setObject_key(uploadResult.getKey());
-            sysUploadEntity.setName(FileNameUtil.getName(uploadResult.getKey()));
-            sysUploadEntity.setContent_type(multipartFile.getContentType());
-            sysUploadEntity.setUrl(uploadResult.getDomain() + "/" + uploadResult.getKey());
-            sysUploadEntity.setSize(multipartFile.getSize());
-            sysUploadEntity.setMd5(uploadResult.getE_tag().replace("\"", ""));
-            sysUploadEntity.setTarget(target);
-            sysUploadEntity.setCreate_time(DateUtil.now());
-            sysUploadEntity.setUpdate_time(DateUtil.now());
-            sysUploadDao.insert(sysUploadEntity);
-
-            return sysUploadEntity;
+            SysFile sysFileEntity = new SysFile();
+            sysFileEntity.setCategory_id(category_id);
+            sysFileEntity.setRequest_id(uploadResult.getRequest_id());
+            sysFileEntity.setUser_id(httpRequestUtil.getUserId());
+            sysFileEntity.setObject_key(uploadResult.getKey());
+            sysFileEntity.setName(FileNameUtil.getName(uploadResult.getKey()));
+            sysFileEntity.setContent_type(multipartFile.getContentType());
+            sysFileEntity.setUrl(uploadResult.getDomain() + "/" + uploadResult.getKey());
+            sysFileEntity.setSize(multipartFile.getSize());
+            if (StrUtil.isNotEmpty(uploadResult.getE_tag())) {
+                sysFileEntity.setMd5(uploadResult.getE_tag().replace("\"", ""));
+            }
+            sysFileEntity.setTarget(target);
+            sysFileEntity.setCreate_time(DateUtil.now());
+            sysFileEntity.setUpdate_time(DateUtil.now());
+            sysFileDao.insert(sysFileEntity);
+
+            return sysFileEntity;
 
         } catch (IOException e) {
             throw new RuntimeException(e);
@@ -96,7 +99,7 @@ public class SysUploadServiceImpl implements SysUploadService {
      * - target: 上传目标 (-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云)
      */
     @Override
-    public SysUpload uploadSmall(MultipartFile multipartFile, Long category_id, Integer target) {
+    public SysFile uploadSmall(MultipartFile multipartFile, Long category_id, Integer target) {
 
         if (target == null) throw new CustException("target 上传目标不能为空 (-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云)");
 
@@ -121,28 +124,28 @@ public class SysUploadServiceImpl implements SysUploadService {
                 // - 如果上传过,则仅更新记录,不再上传文件,仅更新文件分类
                 // - 如果存在
                 String md5 = DigestUtil.md5Hex(multipartFile.getInputStream());
-                List<SysUpload> sysUploadEntityList = sysUploadDao.selectList(new LambdaQueryWrapper<SysUpload>().eq(SysUpload::getMd5, md5));
-                if (sysUploadEntityList != null && sysUploadEntityList.size() > 1) {
-                    throw new CustException("存在 " + sysUploadEntityList.size() + " 个相同Md5 (" + md5 + ") 的文件,请先排重后再上传");
+                List<SysFile> sysFileEntityList = sysFileDao.selectList(new LambdaQueryWrapper<SysFile>().eq(SysFile::getMd5, md5));
+                if (sysFileEntityList != null && sysFileEntityList.size() > 1) {
+                    throw new CustException("存在 " + sysFileEntityList.size() + " 个相同Md5 (" + md5 + ") 的文件,请先排重后再上传");
                 }
 
-                SysUpload sysUploadEntity = (sysUploadEntityList != null && sysUploadEntityList.size() > 0) ? sysUploadEntityList.get(0) : null;
-                if (sysUploadEntity == null) {
+                SysFile sysFileEntity = (sysFileEntityList != null && sysFileEntityList.size() > 0) ? sysFileEntityList.get(0) : null;
+                if (sysFileEntity == null) {
                     // [方法] 上传事件
-                    sysUploadEntity = uploadEvent(multipartFile, category_id, target);
+                    sysFileEntity = uploadEvent(multipartFile, category_id, target);
                 } else {
                     // [更新] 上传文件记录 (更换文件分类)
-                    sysUploadEntity.setCategory_id(category_id);
-                    sysUploadEntity.setUpdate_time(DateUtil.now());
-                    sysUploadDao.updateById(sysUploadEntity);
+                    sysFileEntity.setCategory_id(category_id);
+                    sysFileEntity.setUpdate_time(DateUtil.now());
+                    sysFileDao.updateById(sysFileEntity);
                 }
-                return sysUploadEntity;
+                return sysFileEntity;
 
             } else {
                 // - 否
                 // [方法] 上传事件
-                SysUpload sysUploadEntity = uploadEvent(multipartFile, category_id, target);
-                return sysUploadEntity;
+                SysFile sysFileEntity = uploadEvent(multipartFile, category_id, target);
+                return sysFileEntity;
             }
 
         } catch (IOException e) {
@@ -155,14 +158,14 @@ public class SysUploadServiceImpl implements SysUploadService {
      * 删除上传文件 (包括缩略图,如果有的话)
      */
     @Override
-    public Map<String, Object> removeUploadFile(SysUpload sysUpload) {
+    public Map<String, Object> removeUploadFile(SysFile sysFile) {
 
-        String object_key = sysUpload.getObject_key();
+        String object_key = sysFile.getObject_key();
 
         // [Delete] 删除文件记录
-        SysUpload entity = sysUploadDao.selectOne(new LambdaQueryWrapper<SysUpload>().eq(SysUpload::getObject_key, object_key));
+        SysFile entity = sysFileDao.selectOne(new LambdaQueryWrapper<SysFile>().eq(SysFile::getObject_key, object_key));
         if (entity != null) {
-            sysUploadDao.delete(new LambdaQueryWrapper<SysUpload>().eq(SysUpload::getObject_key, object_key));
+            sysFileDao.delete(new LambdaQueryWrapper<SysFile>().eq(SysFile::getObject_key, object_key));
         }
 
         // [异步任务] 创建一个 CompletableFuture 来执行异步任务

+ 1 - 1
src/main/java/com/backendsys/service/Med/MedMaterialService.java

@@ -17,5 +17,5 @@ public interface MedMaterialService {
     Map<String, Object> deleteMaterial(MedMaterialDTO medMaterialDTO);
     Map<String, Object> deleteMaterialBatch(List<Long> ids);
 
-    TempCredentialsDTO getTempCredentials();
+//    TempCredentialsDTO getTempCredentials();
 }

+ 10 - 10
src/main/java/com/backendsys/service/Med/MedMaterialServiceImpl.java

@@ -129,15 +129,15 @@ public class MedMaterialServiceImpl implements MedMaterialService {
     }
 
 
-    /**
-     * 获得临时密钥 (权限目录:/materials/用户ID/文件类型/文件.xx)
-     */
-    @Override
-    public TempCredentialsDTO getTempCredentials() {
-        // [查询] 自身 UserId
-        Long user_id = httpRequestAspect.getUserId();
-//        return sdkTencentCOSService.getTempCredentials("materials/" + user_id + "/*");
-        return sdkTencentCOSService.getTempCredentials("temp/*");
-    }
+//    /**
+//     * 获得临时密钥 (权限目录:/materials/用户ID/文件类型/文件.xx)
+//     */
+//    @Override
+//    public TempCredentialsDTO getTempCredentials() {
+//        // [查询] 自身 UserId
+//        Long user_id = httpRequestAspect.getUserId();
+////        return sdkTencentCOSService.getTempCredentials("materials/" + user_id + "/*");
+//        return sdkTencentCOSService.getTempCredentials("temp/*");
+//    }
 
 }

+ 26 - 26
src/main/java/com/backendsys/service/SDKService/SDKTencent/SDKTencentCOSService.java

@@ -23,11 +23,11 @@ import java.util.Map;
  */
 public interface SDKTencentCOSService {
 
-    // 获取临时上传令牌 (仅用于前端单文件上传、分片上传)
-    TempCredentialsDTO getTempCredentials(String allowPrefix);
-
-    // [储存桶操作] 获得当前储存桶的文件列表
-    Map<String, Object> getBucketList(String next_marker);
+//    // 获取临时上传令牌 (仅用于前端单文件上传、分片上传)
+//    TempCredentialsDTO getTempCredentials(String allowPrefix);
+//
+//    // [储存桶操作] 获得当前储存桶的文件列表
+//    Map<String, Object> getBucketList(String next_marker);
 
 
 
@@ -47,26 +47,26 @@ public interface SDKTencentCOSService {
     File compressImage(InputStream inputStream, String suffix) throws IOException;
 
 
-    // -- 简单上传 -------------------------------------------------------
-    MultipartUploadRespDTO simpleUpload(MultipartFile file);
-
-    // -- 分块上传 -------------------------------------------------------
-
-    // 查询已上传分块
-    List<PartETag> listParts(String uploadId, String key);
-
-    // 查询分块上传任务 (获得全部分块任务ID - uploadId)
-    List<String> listMultipartUploads(String key);
-
-    // 初始化分块上传 -> 查询分块上传任务 -> 上传分块 -> 查询已上传分块任务 -> 完成分块上传 -> 终止分块上传
-    MultipartUploadRespDTO multipartUpload(MultipartUploadDTO multipartUploadDTO);
-
-    // 终止分块上传 (uploadId)
-    Map<String, Object> abortMultipartUpload(MultipartUploadDTO multipartUploadDTO);
-
-    // -- 文件列表 -------------------------------------------------------
-
-    // 删除文件
-    Map<String, Object> removeUploadFile(SysFileDTO sysFileDTO);
+//    // -- 简单上传 -------------------------------------------------------
+//    MultipartUploadRespDTO simpleUpload(MultipartFile file);
+
+//    // -- 分块上传 -------------------------------------------------------
+//
+//    // 查询已上传分块
+//    List<PartETag> listParts(String uploadId, String key);
+//
+//    // 查询分块上传任务 (获得全部分块任务ID - uploadId)
+//    List<String> listMultipartUploads(String key);
+//
+//    // 初始化分块上传 -> 查询分块上传任务 -> 上传分块 -> 查询已上传分块任务 -> 完成分块上传 -> 终止分块上传
+//    MultipartUploadRespDTO multipartUpload(MultipartUploadDTO multipartUploadDTO);
+//
+//    // 终止分块上传 (uploadId)
+//    Map<String, Object> abortMultipartUpload(MultipartUploadDTO multipartUploadDTO);
+//
+//    // -- 文件列表 -------------------------------------------------------
+//
+//    // 删除文件
+//    Map<String, Object> removeUploadFile(SysFileDTO sysFileDTO);
 
 }

+ 750 - 755
src/main/java/com/backendsys/service/SDKService/SDKTencent/SDKTencentCOSServiceImpl.java

@@ -14,9 +14,9 @@ import com.backendsys.entity.Tencent.TencentCos.TempCredentialsDTO;
 import com.backendsys.entity.Tencent.TencentCos.UploadOriginDTO;
 import com.backendsys.entity.Tencent.TencentCos.UploadOriginResp;
 import com.backendsys.exception.CustException;
-import com.backendsys.mapper.System.SysFileCategoryMapper;
-import com.backendsys.mapper.System.SysFileMapper;
-import com.backendsys.service.System.SysFileService;
+//import com.backendsys.mapper.System.SysFileCategoryMapper;
+//import com.backendsys.mapper.System.SysFileMapper;
+//import com.backendsys.service.System.SysFileService;
 import com.backendsys.utils.CommonUtil;
 import com.backendsys.utils.MapUtil;
 import com.qcloud.cos.COSClient;
@@ -83,14 +83,14 @@ public class SDKTencentCOSServiceImpl implements SDKTencentCOSService {
     @Autowired
     private SDKTencentService sdkTencentService;
 
-    @Autowired
-    private SysFileMapper sysFileMapper;
-
-    @Autowired
-    private SysFileService sysFileService;
+//    @Autowired
+//    private SysFileMapper sysFileMapper;
 
-    @Autowired
-    private SysFileCategoryMapper sysFileCategoryMapper;
+//    @Autowired
+//    private SysFileService sysFileService;
+//
+//    @Autowired
+//    private SysFileCategoryMapper sysFileCategoryMapper;
 
     /**
      * 生成cos客户端
@@ -111,179 +111,179 @@ public class SDKTencentCOSServiceImpl implements SDKTencentCOSService {
 
 
 
-    /**
-     * 临时密钥生成及使用指引
-     * https://www.tencentcloud.com/zh/document/product/436/14048
-     */
-    @Override
-    public TempCredentialsDTO getTempCredentials(String allowPrefix) {
-
-        TreeMap<String, Object> config = new TreeMap<String, Object>();
-        try {
-
-            // 密钥,使用子账号密钥,授权遵循最小权限指引
-            config.put("secretId", secretId);
-            config.put("secretKey", secretKey);
-
-            // 临时密钥有效时长,单位是秒,默认 120 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600)秒
-            Integer durationSeconds = 120;
-            config.put("durationSeconds", durationSeconds);
-            config.put("bucket", bucketName);
-            config.put("region", region);
-
-            // 获取当前时间戳(毫秒)
-            long nowDateTime = System.currentTimeMillis() / 1000L;
-            // 计算1800秒后的时间戳
-            long expireDateTime = nowDateTime + durationSeconds;
-
-            // 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径,例子:a.jpg 或者 a/* 或者 * 。
-            // 如果填写了“*”,将允许用户访问所有资源;除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。
-            config.put("allowPrefix", allowPrefix);
-
-            // 密钥的权限列表。简单上传、表单上传和分片上传需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
-            String[] allowActions = new String[] {
-                //简单上传操作
-                "name/cos:PutObject",
-                //表单上传对象
-                "name/cos:PostObject",
-                //分块上传:初始化分块操作
-                "name/cos:InitiateMultipartUpload",
-                //分块上传:List 进行中的分块上传
-                "name/cos:ListMultipartUploads",
-                //分块上传:List 已上传分块操作
-                "name/cos:ListParts",
-                //分块上传:上传分块操作
-                "name/cos:UploadPart",
-                //分块上传:完成所有分块上传操作
-                "name/cos:CompleteMultipartUpload",
-                //取消分块上传操作
-                "name/cos:AbortMultipartUpload"
-            };
-            // "name/cos:*"
-
-            config.put("allowActions", allowActions);
-
-            // -- 在后台 存储桶->设置策略 -------------------------------------------------------------
-
-            // 限制上传文件的大小(cos:content-length)
-            // 限制上传文件的类型(cos:content-type)
-            // https://cloud.tencent.com/document/product/436/71307#content-length
-
-
-
-            Response response = CosStsClient.getCredential(config);
-
-            TempCredentialsDTO dto = new TempCredentialsDTO();
-            dto.setRegion(region);
-            dto.setBucket(bucketName);
-            dto.setAllow_prefix(allowPrefix.replace("*", ""));
-            dto.setTmp_secret_id(response.credentials.tmpSecretId);
-            dto.setTmp_secret_key(response.credentials.tmpSecretKey);
-            dto.setSession_token(response.credentials.sessionToken);
-            dto.setStart_time(nowDateTime);
-            dto.setExpired_time(expireDateTime);
-            dto.setDuration_seconds(durationSeconds);
-
-            return dto;
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new CustException(e.getMessage());
-        }
-
-    }
-
-    /**
-     * [储存桶操作] 获得当前储存桶的文件列表
-     * https://cloud.tencent.com/document/product/436/65938
-     */
-    @Override
-    public Map<String, Object> getBucketList(String next_marker) {
-        COSClient cosClient = getClient(secretId, secretKey);
-
-        ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
-        // 设置 bucket 名称
-        listObjectsRequest.setBucketName(bucketName);
-
-
-
-
-
-        // 设置列出的对象名以 prefix 为前缀
-        listObjectsRequest.setPrefix("/materials/1/");
-//        listObjectsRequest.setPrefix("");
-
-
-
-
-
-        // 设置最大列出多少个对象, 一次 listobject 最大支持1000
-        listObjectsRequest.setMaxKeys(5);
-
-
-        // 设置被截断开始的位置
-        if (next_marker != null) {
-            listObjectsRequest.setMarker(next_marker);
-        }
-
-        // 保存列出的结果
-        ObjectListing objectListing = null;
-
-        try {
-            objectListing = cosClient.listObjects(listObjectsRequest);
-            System.out.println(objectListing);
-
-        } catch (CosServiceException e) {
-            e.printStackTrace();
-        }
-
-        // object summary 表示此次列出的对象列表
-        List<COSObjectSummary> cosObjectSummaries = objectListing.getObjectSummaries();
-        System.out.println(cosObjectSummaries);
-
-        List<Map<String, Object>> list = new ArrayList<>();
-
-        for (COSObjectSummary cosObjectSummary : cosObjectSummaries) {
-
-            // 对象的 key
-            String key = cosObjectSummary.getKey();
-            // 对象的 etag
-            String etag = cosObjectSummary.getETag();
-            // 对象的长度
-            long fileSize = cosObjectSummary.getSize();
-            // 对象的存储类型
-            String storageClasses = cosObjectSummary.getStorageClass();
-
-            System.out.println("key = " + key);
-            System.out.println("etag = " + etag);
-            System.out.println("fileSize = " + fileSize);
-            System.out.println("storageClasses = " + storageClasses);
-            System.out.println("------------------------------------------");
-
-            Map<String, Object> map = new LinkedHashMap<>();
-            map.put("key", cosObjectSummary.getKey());
-            map.put("etag", cosObjectSummary.getETag());
-            map.put("file_size", cosObjectSummary.getSize());
-            map.put("storage_classes", cosObjectSummary.getStorageClass());
-            list.add(map);
-
-        }
-
-        String nextMarker = null;
-        if (objectListing.isTruncated()) {
-            // 表示还没有列完,被截断了
-            // 下一次开始的位置
-            nextMarker = objectListing.getNextMarker();
-            System.out.println("isTruncated! nextMarker:");
-            System.out.println(nextMarker);
-        }
-
-        Map<String, Object> result = new LinkedHashMap<>();
-        result.put("next_marker", nextMarker);
-        result.put("list", list);
-
-        return result;
-    }
+//    /**
+//     * 临时密钥生成及使用指引
+//     * https://www.tencentcloud.com/zh/document/product/436/14048
+//     */
+//    @Override
+//    public TempCredentialsDTO getTempCredentials(String allowPrefix) {
+//
+//        TreeMap<String, Object> config = new TreeMap<String, Object>();
+//        try {
+//
+//            // 密钥,使用子账号密钥,授权遵循最小权限指引
+//            config.put("secretId", secretId);
+//            config.put("secretKey", secretKey);
+//
+//            // 临时密钥有效时长,单位是秒,默认 120 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600)秒
+//            Integer durationSeconds = 120;
+//            config.put("durationSeconds", durationSeconds);
+//            config.put("bucket", bucketName);
+//            config.put("region", region);
+//
+//            // 获取当前时间戳(毫秒)
+//            long nowDateTime = System.currentTimeMillis() / 1000L;
+//            // 计算1800秒后的时间戳
+//            long expireDateTime = nowDateTime + durationSeconds;
+//
+//            // 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径,例子:a.jpg 或者 a/* 或者 * 。
+//            // 如果填写了“*”,将允许用户访问所有资源;除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。
+//            config.put("allowPrefix", allowPrefix);
+//
+//            // 密钥的权限列表。简单上传、表单上传和分片上传需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
+//            String[] allowActions = new String[] {
+//                //简单上传操作
+//                "name/cos:PutObject",
+//                //表单上传对象
+//                "name/cos:PostObject",
+//                //分块上传:初始化分块操作
+//                "name/cos:InitiateMultipartUpload",
+//                //分块上传:List 进行中的分块上传
+//                "name/cos:ListMultipartUploads",
+//                //分块上传:List 已上传分块操作
+//                "name/cos:ListParts",
+//                //分块上传:上传分块操作
+//                "name/cos:UploadPart",
+//                //分块上传:完成所有分块上传操作
+//                "name/cos:CompleteMultipartUpload",
+//                //取消分块上传操作
+//                "name/cos:AbortMultipartUpload"
+//            };
+//            // "name/cos:*"
+//
+//            config.put("allowActions", allowActions);
+//
+//            // -- 在后台 存储桶->设置策略 -------------------------------------------------------------
+//
+//            // 限制上传文件的大小(cos:content-length)
+//            // 限制上传文件的类型(cos:content-type)
+//            // https://cloud.tencent.com/document/product/436/71307#content-length
+//
+//
+//
+//            Response response = CosStsClient.getCredential(config);
+//
+//            TempCredentialsDTO dto = new TempCredentialsDTO();
+//            dto.setRegion(region);
+//            dto.setBucket(bucketName);
+//            dto.setAllow_prefix(allowPrefix.replace("*", ""));
+//            dto.setTmp_secret_id(response.credentials.tmpSecretId);
+//            dto.setTmp_secret_key(response.credentials.tmpSecretKey);
+//            dto.setSession_token(response.credentials.sessionToken);
+//            dto.setStart_time(nowDateTime);
+//            dto.setExpired_time(expireDateTime);
+//            dto.setDuration_seconds(durationSeconds);
+//
+//            return dto;
+//
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            throw new CustException(e.getMessage());
+//        }
+//
+//    }
+
+//    /**
+//     * [储存桶操作] 获得当前储存桶的文件列表
+//     * https://cloud.tencent.com/document/product/436/65938
+//     */
+//    @Override
+//    public Map<String, Object> getBucketList(String next_marker) {
+//        COSClient cosClient = getClient(secretId, secretKey);
+//
+//        ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
+//        // 设置 bucket 名称
+//        listObjectsRequest.setBucketName(bucketName);
+//
+//
+//
+//
+//
+//        // 设置列出的对象名以 prefix 为前缀
+//        listObjectsRequest.setPrefix("/materials/1/");
+////        listObjectsRequest.setPrefix("");
+//
+//
+//
+//
+//
+//        // 设置最大列出多少个对象, 一次 listobject 最大支持1000
+//        listObjectsRequest.setMaxKeys(5);
+//
+//
+//        // 设置被截断开始的位置
+//        if (next_marker != null) {
+//            listObjectsRequest.setMarker(next_marker);
+//        }
+//
+//        // 保存列出的结果
+//        ObjectListing objectListing = null;
+//
+//        try {
+//            objectListing = cosClient.listObjects(listObjectsRequest);
+//            System.out.println(objectListing);
+//
+//        } catch (CosServiceException e) {
+//            e.printStackTrace();
+//        }
+//
+//        // object summary 表示此次列出的对象列表
+//        List<COSObjectSummary> cosObjectSummaries = objectListing.getObjectSummaries();
+//        System.out.println(cosObjectSummaries);
+//
+//        List<Map<String, Object>> list = new ArrayList<>();
+//
+//        for (COSObjectSummary cosObjectSummary : cosObjectSummaries) {
+//
+//            // 对象的 key
+//            String key = cosObjectSummary.getKey();
+//            // 对象的 etag
+//            String etag = cosObjectSummary.getETag();
+//            // 对象的长度
+//            long fileSize = cosObjectSummary.getSize();
+//            // 对象的存储类型
+//            String storageClasses = cosObjectSummary.getStorageClass();
+//
+//            System.out.println("key = " + key);
+//            System.out.println("etag = " + etag);
+//            System.out.println("fileSize = " + fileSize);
+//            System.out.println("storageClasses = " + storageClasses);
+//            System.out.println("------------------------------------------");
+//
+//            Map<String, Object> map = new LinkedHashMap<>();
+//            map.put("key", cosObjectSummary.getKey());
+//            map.put("etag", cosObjectSummary.getETag());
+//            map.put("file_size", cosObjectSummary.getSize());
+//            map.put("storage_classes", cosObjectSummary.getStorageClass());
+//            list.add(map);
+//
+//        }
+//
+//        String nextMarker = null;
+//        if (objectListing.isTruncated()) {
+//            // 表示还没有列完,被截断了
+//            // 下一次开始的位置
+//            nextMarker = objectListing.getNextMarker();
+//            System.out.println("isTruncated! nextMarker:");
+//            System.out.println(nextMarker);
+//        }
+//
+//        Map<String, Object> result = new LinkedHashMap<>();
+//        result.put("next_marker", nextMarker);
+//        result.put("list", list);
+//
+//        return result;
+//    }
 
 
 
@@ -545,10 +545,10 @@ public class SDKTencentCOSServiceImpl implements SDKTencentCOSService {
                 // -- 将文件流保存到对象储存桶 ------------------------------------------------------
                 COSClient cosClient = getClient(secretId, secretKey);
 
-                // 检查对象是否存在于存储桶中
-                if (checkObjectExist(cosClient, key)) {
-                    System.out.println(key + " 已存在,不需要上传");
-                } else {
+//                // 检查对象是否存在于存储桶中
+//                if (checkObjectExist(cosClient, key)) {
+//                    System.out.println(key + " 已存在,不需要上传");
+//                } else {
 
                     // 上传原图
                     PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, downloadFile);
@@ -576,583 +576,578 @@ public class SDKTencentCOSServiceImpl implements SDKTencentCOSService {
                     InputStream inputStream = new FileInputStream(downloadFile);
                     String md5 = DigestUtil.md5Hex(inputStream);
                     fileDTO.setMd5(md5);
-                    fileDTO.setCategory_id(getCategoryIdBySuffix(suffix));
+//                    fileDTO.setCategory_id(getCategoryIdBySuffix(suffix));
 
-                    sysFileMapper.insertFile(fileDTO);
+//                    sysFileMapper.insertFile(fileDTO);
                     System.out.println("insert success");
-                }
+//                }
             } catch (IOException e) {
                 throw new RuntimeException(e);
             }
         });
         return resp;
     }
-
-    /**
-     * 查询分块上传任务
-     */
-    public List<String> listMultipartUploads(String key){
-
-        COSClient cosClient = getClient(secretId, secretKey);
-
-        ListMultipartUploadsRequest listMultipartUploadsRequest = new ListMultipartUploadsRequest(bucketName);
-        // 每次请求最多列出多少个
-        listMultipartUploadsRequest.setMaxUploads(100);
-        // 设置要查询的分块上传任务的目标前缀,直接设置要查询的 key
-        listMultipartUploadsRequest.setPrefix(key);
-
-        MultipartUploadListing multipartUploadListing = null;
-
-        boolean found = false;
-        List<String> list = new ArrayList<>();
-        do {
-            multipartUploadListing = cosClient.listMultipartUploads(listMultipartUploadsRequest);
-            List<MultipartUpload> multipartUploads = multipartUploadListing.getMultipartUploads();
-
-            for (MultipartUpload mUpload : multipartUploads) {
-                if (mUpload.getKey().equals(key)) {
-                    System.out.println(mUpload.getUploadId());
-                    list.add(mUpload.getUploadId());
-                    //found = true;
-                    //break;
-                }
-            }
-
-            //if (found) {
-            //    break;
-            //}
-            listMultipartUploadsRequest.setKeyMarker(multipartUploadListing.getNextKeyMarker());
-            listMultipartUploadsRequest.setUploadIdMarker(multipartUploadListing.getNextUploadIdMarker());
-        } while (multipartUploadListing.isTruncated());
-
-        if (!found) {
-            System.out.printf("do not found upload task with key: %s\n", key);
-        }
-
-        return list;
-    }
-
-
-    /**
-     * 简单上传
-     */
-    public MultipartUploadRespDTO simpleUpload(MultipartFile file) {
-
-        // 检查上传的文件是否为空
-        if (file == null || file.isEmpty()) throw new CustException("file 上传文件不能为空");
-
-        // 判断文件大小是否超过
-        if (file.getSize() > maxSize) {
-            throw new CustException("上传文件不能大于 " + maxSize/1024/1024 + " MB,如有需要请使用大文件上传功能");
-        }
-
-        // 生成cos客户端
-        COSClient cosClient = getClient(secretId, secretKey);
-
-        MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
-        try {
-
-            String md5 = DigestUtil.md5Hex(file.getInputStream());
-            String suffix = FileUtil.extName(file.getOriginalFilename()).toLowerCase();
-            String filename = md5 + "." + suffix;
-            String filenameThumb = filename.replaceAll("." + suffix, "-thumb." + suffix);
-            String key = "temp/" + filename;
-            String keyThumb = "temp/" + filenameThumb;
-            String remotePath = accessibleDomain + "/" + key;
-            String remotePathThumb = accessibleDomain + "/" + keyThumb;
-
-
-
-
-
-
-            // 获得文件分类列表
-            SysFileCategoryDTO categoryDTO = new SysFileCategoryDTO();
-            List<SysFileCategoryDTO> categoryList = sysFileCategoryMapper.queryFileCategoryList(categoryDTO);
-
-            // 获得图片分类的后缀 (待做),再进行以下判断
-
-            // 还有删除也要同时删除缩略图
-
-            // 还有大文件分片也要做缩略图
-
-            // 还有 视频要做截图生成
-
-
-
-
-
-            boolean isImage = Arrays.asList("jpg", "jpeg", "png", "gif", "bmp", "tiff", "webp").contains(suffix.toLowerCase());
-
-
-
-
-
-
-
-            // 检查对象是否存在于存储桶中
-            if (checkObjectExist(cosClient, key)) {
-                // -- [COS] 对象存在时,直接返回路径 -------------------------------
-                resp.setIs_fast_upload(true);
-
-            } else {
-                // 获取文件内容
-                InputStream inputStream = file.getInputStream();
-
-                // 将文件内容写入临时文件
-                String tempFilename = CommonUtil.generateFilename(null);
-                File tempFile = File.createTempFile(tempFilename, null);
-                try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
-                    IOUtils.copy(inputStream, outputStream);
-                }
-                // 创建 PutObjectRequest 对象,PutObject 请求。(异步)
-                PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, tempFile);
-                cosClient.putObject(putObjectRequest);
-
-
-                // 创建缩略图
-                if (isImage) {
-                    File tempFileThumb = File.createTempFile(tempFilename, "." + suffix);
-                    String sourceFilePath = tempFileThumb.getPath();
-                    File sourceFile = new File(sourceFilePath);
-                    // 使用Thumbnailator生成缩略图并写入到临时文件
-                    Thumbnails.of(tempFile).size(60, 60).outputQuality(0.2).toFile(tempFileThumb);
-                    PutObjectRequest putObjectRequestThumb = new PutObjectRequest(bucketName, keyThumb, sourceFile);
-                    cosClient.putObject(putObjectRequestThumb);
-                    resp.setPath_thumb(remotePathThumb);
-                    tempFileThumb.delete();
-                }
-
-                tempFile.delete();
-
-            }
-
-            // -- [DB] 查询数据 ---------------------------------------------
-            SysFileDTO fileDetail = sysFileMapper.queryFileByKey(key);
-            // 如果表中没有数据,则添加数据
-            if (fileDetail == null) {
-                // -- [DB] 插入数据 -----------------------------------------
-                SysFileDTO fileDTO = new SysFileDTO();
-                fileDTO.setUser_id(httpRequestAspect.getUserId());
-                fileDTO.setName(filename);
-                fileDTO.setFile_key(key);
-                fileDTO.setFile_remote_path(remotePath);
-                if (isImage) {
-                    fileDTO.setFile_remote_path_thumb(remotePathThumb);
-                }
-                fileDTO.setCategory_id(getCategoryIdBySuffix(suffix));
-                fileDTO.setSize(file.getSize());
-                fileDTO.setMd5(md5);
-                sysFileMapper.insertFile(fileDTO);
-            }
-            // -------------------------------------------------------------
-
-            resp.setFilename(filename);
-            resp.setKey(key);
-            resp.setMd5(md5);
-            resp.setSize(file.getSize());
-            resp.setPath(remotePath);
-
-        } catch (IOException e) {
-            throw new CustException(e.getMessage());
-        } finally {
-            if (cosClient != null) {
-                cosClient.shutdown();
-            }
-        }
-        return resp;
-
-    }
-
-
-    // -- 检查对象是否存在于存储桶中 ---------------------------------------------------------------------
-    private Boolean checkObjectExist(COSClient cosClient, String key) {
-        try {
-            return cosClient.doesObjectExist(bucketName, key);
-        } catch (CosServiceException e) {
-            e.printStackTrace();
-        }
-        return false;
-    }
-    // -- 初始化分块任务 -------------------------------------------------------------------------------
-    private MultipartUploadRespDTO initiateMultipartUpload(COSClient cosClient, MultipartFile file, String key, String filename){
-        System.out.println("-- initiateMultipartUpload --");
-        try {
-            //
-            InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, key);
-            // 分块上传的过程中,仅能通过初始化分块指定文件上传之后的 metadata, 需要的头部可以在这里指定
-            ObjectMetadata objectMetadata = new ObjectMetadata();
-            request.setObjectMetadata(objectMetadata);
-            //
-            InitiateMultipartUploadResult initResult = cosClient.initiateMultipartUpload(request);
-
-            MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
-            resp.setUpload_id(initResult.getUploadId());
-            resp.setKey(key);
-            resp.setSize(file.getSize());
-            resp.setFilename(filename);
-            System.out.println("-------------");
-            System.out.println(filename);
-            System.out.println("-------------");
-            return resp;
-
-        } catch (CosServiceException e) {
-            throw new CustException(e.getMessage());
-        }
-    }
-    // -- 上传分块 ------------------------------------------------------------------------------------
-    private MultipartUploadRespDTO uploadPart(COSClient cosClient, MultipartUploadDTO multipartUploadDTO) {
-        System.out.println("-- uploadPart --");
-        try {
-            InputStream inputStream = multipartUploadDTO.getFile().getInputStream();
-
-            UploadPartRequest uploadPartRequest = new UploadPartRequest();
-            uploadPartRequest.setBucketName(bucketName);
-            uploadPartRequest.setKey(multipartUploadDTO.getKey());
-            uploadPartRequest.setUploadId(multipartUploadDTO.getUpload_id());
-            uploadPartRequest.setInputStream(inputStream);
-
-            // 设置分块的长度 (分块文件大小)
-            uploadPartRequest.setPartSize(multipartUploadDTO.getFile().getSize());
-            // 设置要上传的分块编号,从1开始
-            uploadPartRequest.setPartNumber(multipartUploadDTO.getIndex());
-
-            // [COS] 上传分块
-            UploadPartResult uploadPartResult = cosClient.uploadPart(uploadPartRequest);
-            PartETag partETag = uploadPartResult.getPartETag();
-
-            MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
-            resp.setUpload_id(multipartUploadDTO.getUpload_id());
-            resp.setKey(multipartUploadDTO.getKey());
-            resp.setIndex(partETag.getPartNumber());
-            resp.setCount(multipartUploadDTO.getCount());
-            resp.setChunk_md5(partETag.getETag());
-            resp.setChunk_size(uploadPartRequest.getPartSize());
-            return resp;
-
-        } catch (CosServiceException e) {
-            if ("NoSuchUpload".equals(e.getErrorCode())) {
-                throw new CustException("找不到相关的 upload_id 或 key 信息,任务已终止或已完成");
-            }
-            throw new CustException(e.getMessage());
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-    // -- 查询已上传的分块 ------------------------------------------------------------------------------
-    public List<PartETag> listParts(String uploadId, String key) {
-        COSClient cosClient = getClient(secretId, secretKey);
-
-        // 用于保存已上传的分片信息
-        List<PartETag> partETags = new LinkedList<>();
-
-        PartListing partListing = null;
-        ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName, key, uploadId);
-        do {
-            try {
-                partListing = cosClient.listParts(listPartsRequest);
-            } catch (CosServiceException e) {
-                throw e;
-            }
-            for (PartSummary partSummary : partListing.getParts()) {
-                partETags.add(new PartETag(partSummary.getPartNumber(), partSummary.getETag()));
-            }
-            listPartsRequest.setPartNumberMarker(partListing.getNextPartNumberMarker());
-        } while (partListing.isTruncated());
-        return partETags;
-    }
-    // -- 合并分块上传 ---------------------------------------------------------------------------------
-    private MultipartUploadRespDTO completeMultipartUpload(COSClient cosClient, MultipartUploadDTO multipartUploadDTO) {
-        System.out.println("-- completeMultipartUpload --");
-        // 保存已上传的分片信息,实际情况里,这里的内容是从上传分块接口中获取到的
-        List<PartETag> partETags = listParts(multipartUploadDTO.getUpload_id(), multipartUploadDTO.getKey());
-
-        // 分片上传结束后,调用 complete 完成分片上传
-        CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, multipartUploadDTO.getKey(), multipartUploadDTO.getUpload_id(), partETags);
-        try {
-            CompleteMultipartUploadResult completeResult = cosClient.completeMultipartUpload(completeMultipartUploadRequest);
-
-            MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
-            resp.setRequest_id(completeResult.getRequestId());
-            resp.setPath(accessibleDomain + "/" + multipartUploadDTO.getKey());
-            return resp;
-
-        } catch (CosServiceException e) {
-
-            // -- [DB] 删除 uploadId 对应的分块信息 ---------------------
-            sysFileMapper.deleteFile(multipartUploadDTO.getKey());
-
-            // 终止任务
-            abortMultipartUpload(multipartUploadDTO);
-
-            System.out.println("getErrorCode:");
-            System.out.println(e.getErrorCode());
-            System.out.println(e.getMessage());
-            throw new CustException("合并失败,无效的分块,请重新上传", 6001, "(" + e.getErrorCode() + ") " + e.getMessage());
-        }
-    }
-    // -- 获得分类 CategoryID (通过文件后缀名) -----------------------------------------------------------
-    private Long getCategoryIdBySuffix(String suffix) {
-        SysFileCategoryDTO sysFileCategoryDTO = new SysFileCategoryDTO();
-        List<SysFileCategoryDTO> categoryList = sysFileCategoryMapper.queryFileCategoryList(sysFileCategoryDTO);
-        Optional<Long> firstMatchedId = categoryList.stream().filter(dto -> dto.getSuffix().toLowerCase().contains(suffix)).map(SysFileCategoryDTO::getId).findFirst();
-        Long id = firstMatchedId.orElse(null);
-        return id;
-    }
-    // -----------------------------------------------------------------------------------------------
-
-    /**
-     * 分块上传 (1判断是否存在,2初始化,3上传分块,4合并分块)
-     * - https://cloud.tencent.com/document/product/436/65935
-     * - https://cloud.tencent.com/document/product/436/14112
-     * @param multipartUploadDTO
-     * @return
-     */
-    public MultipartUploadRespDTO multipartUpload(MultipartUploadDTO multipartUploadDTO) {
-
-        // -- 参数校验 ------------------------------------------------------
-        if (multipartUploadDTO.getFile() == null || multipartUploadDTO.getFile().isEmpty()) throw new CustException("file 上传文件不能为空");
-
-        // 当存在 uploadId 时,即是分块上传阶段
-        if (multipartUploadDTO.getUpload_id() != null) {
-            if (multipartUploadDTO.getKey() == null) throw new CustException("key 不能为空");
-            if (multipartUploadDTO.getIndex() == null) throw new CustException("index 不能为空");
-            if (multipartUploadDTO.getCount() == null) throw new CustException("count 不能为空");
-            if (multipartUploadDTO.getIndex() > multipartUploadDTO.getCount()) {
-                throw new CustException("index 不能大于 count");
-            }
-        }
-        // -----------------------------------------------------------------
-
-        COSClient cosClient = getClient(secretId, secretKey);
-
-        MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
-
-        // [秒传] 检查对象是否存在,存在即 "秒传"
-        try {
-
-            String md5 = DigestUtil.md5Hex(multipartUploadDTO.getFile().getInputStream());
-            String suffix = FileUtil.extName(multipartUploadDTO.getFile().getOriginalFilename()).toLowerCase();
-            String filename = md5 + "." + suffix;
-            String key = "temp/" + filename;
-
-            // 检查对象是否存在于存储桶中
-            if (checkObjectExist(cosClient, key)) {
-
-                String remotePath = accessibleDomain + "/" + key;
-
-                // -- [COS] 对象存在时,直接返回路径 -------------------------------
-                resp.setKey(key);
-                resp.setPath(remotePath);
-                resp.setIs_fast_upload(true);
-
-                // -- [DB] 查询数据 ---------------------------------------------
-                SysFileDTO fileDetail = sysFileMapper.queryFileByKey(key);
-                // 如果表中没有数据,则添加数据
-                if (fileDetail == null) {
-                    // -- [DB] 插入数据 -----------------------------------------
-                    SysFileDTO fileDTO = new SysFileDTO();
-                    fileDTO.setUser_id(httpRequestAspect.getUserId());
-                    fileDTO.setName(filename);
-                    fileDTO.setFile_key(key);
-                    fileDTO.setFile_remote_path(remotePath);
-                    fileDTO.setCategory_id(getCategoryIdBySuffix(suffix));
-
-                    // 获得文件大小
-                    fileDTO.setSize(CommonUtil.getRemoteFileSize(remotePath));
-
-                    fileDTO.setMd5(md5);
-                    sysFileMapper.insertFile(fileDTO);
-                }
-                // -------------------------------------------------------------
-
-            } else {
-
-                // 对象不存在时,走创建流程
-                String uploadId = multipartUploadDTO.getUpload_id();
-                if (uploadId == null || uploadId.isEmpty()) {
-
-                    // -- [DB] 查询数据 (By 文件Key) ------------------------------
-                    SysFileDTO fileDetail = sysFileMapper.queryFileByKey(key);
-                    if (fileDetail != null) {
-                        resp.setUpload_id(fileDetail.getChunk_upload_id());
-                        resp.setKey(fileDetail.getFile_key());
-                        resp.setSize(fileDetail.getSize());
-                        resp.setFilename(filename);
-//                        resp.setIndex(fileDetail.getChunk_current_index());
-//                        resp.setCount(fileDetail.getChunk_count());
-                        // 返回 { uploadId, key }
-                        // 缺少 { chunk_md5, chunk_size }
-                    } else {
-
-//                        // 上传要求每个分块大小必须大于 1MB,所以整个文件也不能小于 1MB
+//
+//    /**
+//     * 查询分块上传任务
+//     */
+//    public List<String> listMultipartUploads(String key){
+//
+//        COSClient cosClient = getClient(secretId, secretKey);
+//
+//        ListMultipartUploadsRequest listMultipartUploadsRequest = new ListMultipartUploadsRequest(bucketName);
+//        // 每次请求最多列出多少个
+//        listMultipartUploadsRequest.setMaxUploads(100);
+//        // 设置要查询的分块上传任务的目标前缀,直接设置要查询的 key
+//        listMultipartUploadsRequest.setPrefix(key);
+//
+//        MultipartUploadListing multipartUploadListing = null;
+//
+//        boolean found = false;
+//        List<String> list = new ArrayList<>();
+//        do {
+//            multipartUploadListing = cosClient.listMultipartUploads(listMultipartUploadsRequest);
+//            List<MultipartUpload> multipartUploads = multipartUploadListing.getMultipartUploads();
+//
+//            for (MultipartUpload mUpload : multipartUploads) {
+//                if (mUpload.getKey().equals(key)) {
+//                    System.out.println(mUpload.getUploadId());
+//                    list.add(mUpload.getUploadId());
+//                    //found = true;
+//                    //break;
+//                }
+//            }
+//
+//            //if (found) {
+//            //    break;
+//            //}
+//            listMultipartUploadsRequest.setKeyMarker(multipartUploadListing.getNextKeyMarker());
+//            listMultipartUploadsRequest.setUploadIdMarker(multipartUploadListing.getNextUploadIdMarker());
+//        } while (multipartUploadListing.isTruncated());
+//
+//        if (!found) {
+//            System.out.printf("do not found upload task with key: %s\n", key);
+//        }
+//
+//        return list;
+//    }
+
+
+//    /**
+//     * 简单上传
+//     */
+//    public MultipartUploadRespDTO simpleUpload(MultipartFile file) {
+//
+//        // 检查上传的文件是否为空
+//        if (file == null || file.isEmpty()) throw new CustException("file 上传文件不能为空");
+//
+//        // 判断文件大小是否超过
+//        if (file.getSize() > maxSize) {
+//            throw new CustException("上传文件不能大于 " + maxSize/1024/1024 + " MB,如有需要请使用大文件上传功能");
+//        }
+//
+//        // 生成cos客户端
+//        COSClient cosClient = getClient(secretId, secretKey);
+//
+//        MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
+//        try {
+//
+//            String md5 = DigestUtil.md5Hex(file.getInputStream());
+//            String suffix = FileUtil.extName(file.getOriginalFilename()).toLowerCase();
+//            String filename = md5 + "." + suffix;
+//            String filenameThumb = filename.replaceAll("." + suffix, "-thumb." + suffix);
+//            String key = "temp/" + filename;
+//            String keyThumb = "temp/" + filenameThumb;
+//            String remotePath = accessibleDomain + "/" + key;
+//            String remotePathThumb = accessibleDomain + "/" + keyThumb;
+//
+////            // 获得文件分类列表
+////            SysFileCategoryDTO categoryDTO = new SysFileCategoryDTO();
+////            List<SysFileCategoryDTO> categoryList = sysFileCategoryMapper.queryFileCategoryList(categoryDTO);
+//
+//            // 获得图片分类的后缀 (待做),再进行以下判断
+//
+//            // 还有删除也要同时删除缩略图
+//
+//            // 还有大文件分片也要做缩略图
+//
+//            // 还有 视频要做截图生成
+//
+//
+//
+//
+//
+//            boolean isImage = Arrays.asList("jpg", "jpeg", "png", "gif", "bmp", "tiff", "webp").contains(suffix.toLowerCase());
+//
+//
+//
+//
+//
+//
+//
+//            // 检查对象是否存在于存储桶中
+//            if (checkObjectExist(cosClient, key)) {
+//                // -- [COS] 对象存在时,直接返回路径 -------------------------------
+//                resp.setIs_fast_upload(true);
+//
+//            } else {
+//                // 获取文件内容
+//                InputStream inputStream = file.getInputStream();
+//
+//                // 将文件内容写入临时文件
+//                String tempFilename = CommonUtil.generateFilename(null);
+//                File tempFile = File.createTempFile(tempFilename, null);
+//                try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
+//                    IOUtils.copy(inputStream, outputStream);
+//                }
+//                // 创建 PutObjectRequest 对象,PutObject 请求。(异步)
+//                PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, tempFile);
+//                cosClient.putObject(putObjectRequest);
+//
+//
+//                // 创建缩略图
+//                if (isImage) {
+//                    File tempFileThumb = File.createTempFile(tempFilename, "." + suffix);
+//                    String sourceFilePath = tempFileThumb.getPath();
+//                    File sourceFile = new File(sourceFilePath);
+//                    // 使用Thumbnailator生成缩略图并写入到临时文件
+//                    Thumbnails.of(tempFile).size(60, 60).outputQuality(0.2).toFile(tempFileThumb);
+//                    PutObjectRequest putObjectRequestThumb = new PutObjectRequest(bucketName, keyThumb, sourceFile);
+//                    cosClient.putObject(putObjectRequestThumb);
+//                    resp.setPath_thumb(remotePathThumb);
+//                    tempFileThumb.delete();
+//                }
+//
+//                tempFile.delete();
+//
+//            }
+//
+//            // -- [DB] 查询数据 ---------------------------------------------
+////            SysFileDTO fileDetail = sysFileMapper.queryFileByKey(key);
+////            // 如果表中没有数据,则添加数据
+////            if (fileDetail == null) {
+//                // -- [DB] 插入数据 -----------------------------------------
+//                SysFileDTO fileDTO = new SysFileDTO();
+//                fileDTO.setUser_id(httpRequestAspect.getUserId());
+//                fileDTO.setName(filename);
+//                fileDTO.setFile_key(key);
+//                fileDTO.setFile_remote_path(remotePath);
+//                if (isImage) {
+//                    fileDTO.setFile_remote_path_thumb(remotePathThumb);
+//                }
+////                fileDTO.setCategory_id(getCategoryIdBySuffix(suffix));
+//                fileDTO.setSize(file.getSize());
+//                fileDTO.setMd5(md5);
+//                sysFileMapper.insertFile(fileDTO);
+////            }
+//            // -------------------------------------------------------------
+//
+//            resp.setFilename(filename);
+//            resp.setKey(key);
+//            resp.setMd5(md5);
+//            resp.setSize(file.getSize());
+//            resp.setPath(remotePath);
+//
+//        } catch (IOException e) {
+//            throw new CustException(e.getMessage());
+//        } finally {
+//            if (cosClient != null) {
+//                cosClient.shutdown();
+//            }
+//        }
+//        return resp;
+//
+//    }
+
+
+//    // -- 检查对象是否存在于存储桶中 ---------------------------------------------------------------------
+//    private Boolean checkObjectExist(COSClient cosClient, String key) {
+//        try {
+//            return cosClient.doesObjectExist(bucketName, key);
+//        } catch (CosServiceException e) {
+//            e.printStackTrace();
+//        }
+//        return false;
+//    }
+//    // -- 初始化分块任务 -------------------------------------------------------------------------------
+//    private MultipartUploadRespDTO initiateMultipartUpload(COSClient cosClient, MultipartFile file, String key, String filename){
+//        System.out.println("-- initiateMultipartUpload --");
+//        try {
+//            //
+//            InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, key);
+//            // 分块上传的过程中,仅能通过初始化分块指定文件上传之后的 metadata, 需要的头部可以在这里指定
+//            ObjectMetadata objectMetadata = new ObjectMetadata();
+//            request.setObjectMetadata(objectMetadata);
+//            //
+//            InitiateMultipartUploadResult initResult = cosClient.initiateMultipartUpload(request);
+//
+//            MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
+//            resp.setUpload_id(initResult.getUploadId());
+//            resp.setKey(key);
+//            resp.setSize(file.getSize());
+//            resp.setFilename(filename);
+//            System.out.println("-------------");
+//            System.out.println(filename);
+//            System.out.println("-------------");
+//            return resp;
+//
+//        } catch (CosServiceException e) {
+//            throw new CustException(e.getMessage());
+//        }
+//    }
+//    // -- 上传分块 ------------------------------------------------------------------------------------
+//    private MultipartUploadRespDTO uploadPart(COSClient cosClient, MultipartUploadDTO multipartUploadDTO) {
+//        System.out.println("-- uploadPart --");
+//        try {
+//            InputStream inputStream = multipartUploadDTO.getFile().getInputStream();
+//
+//            UploadPartRequest uploadPartRequest = new UploadPartRequest();
+//            uploadPartRequest.setBucketName(bucketName);
+//            uploadPartRequest.setKey(multipartUploadDTO.getKey());
+//            uploadPartRequest.setUploadId(multipartUploadDTO.getUpload_id());
+//            uploadPartRequest.setInputStream(inputStream);
+//
+//            // 设置分块的长度 (分块文件大小)
+//            uploadPartRequest.setPartSize(multipartUploadDTO.getFile().getSize());
+//            // 设置要上传的分块编号,从1开始
+//            uploadPartRequest.setPartNumber(multipartUploadDTO.getIndex());
+//
+//            // [COS] 上传分块
+//            UploadPartResult uploadPartResult = cosClient.uploadPart(uploadPartRequest);
+//            PartETag partETag = uploadPartResult.getPartETag();
+//
+//            MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
+//            resp.setUpload_id(multipartUploadDTO.getUpload_id());
+//            resp.setKey(multipartUploadDTO.getKey());
+//            resp.setIndex(partETag.getPartNumber());
+//            resp.setCount(multipartUploadDTO.getCount());
+//            resp.setChunk_md5(partETag.getETag());
+//            resp.setChunk_size(uploadPartRequest.getPartSize());
+//            return resp;
+//
+//        } catch (CosServiceException e) {
+//            if ("NoSuchUpload".equals(e.getErrorCode())) {
+//                throw new CustException("找不到相关的 upload_id 或 key 信息,任务已终止或已完成");
+//            }
+//            throw new CustException(e.getMessage());
+//        } catch (IOException e) {
+//            throw new RuntimeException(e);
+//        }
+//    }
+//    // -- 查询已上传的分块 ------------------------------------------------------------------------------
+//    public List<PartETag> listParts(String uploadId, String key) {
+//        COSClient cosClient = getClient(secretId, secretKey);
+//
+//        // 用于保存已上传的分片信息
+//        List<PartETag> partETags = new LinkedList<>();
+//
+//        PartListing partListing = null;
+//        ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName, key, uploadId);
+//        do {
+//            try {
+//                partListing = cosClient.listParts(listPartsRequest);
+//            } catch (CosServiceException e) {
+//                throw e;
+//            }
+//            for (PartSummary partSummary : partListing.getParts()) {
+//                partETags.add(new PartETag(partSummary.getPartNumber(), partSummary.getETag()));
+//            }
+//            listPartsRequest.setPartNumberMarker(partListing.getNextPartNumberMarker());
+//        } while (partListing.isTruncated());
+//        return partETags;
+//    }
+//    // -- 合并分块上传 ---------------------------------------------------------------------------------
+//    private MultipartUploadRespDTO completeMultipartUpload(COSClient cosClient, MultipartUploadDTO multipartUploadDTO) {
+//        System.out.println("-- completeMultipartUpload --");
+//        // 保存已上传的分片信息,实际情况里,这里的内容是从上传分块接口中获取到的
+//        List<PartETag> partETags = listParts(multipartUploadDTO.getUpload_id(), multipartUploadDTO.getKey());
+//
+//        // 分片上传结束后,调用 complete 完成分片上传
+//        CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, multipartUploadDTO.getKey(), multipartUploadDTO.getUpload_id(), partETags);
+//        try {
+//            CompleteMultipartUploadResult completeResult = cosClient.completeMultipartUpload(completeMultipartUploadRequest);
+//
+//            MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
+//            resp.setRequest_id(completeResult.getRequestId());
+//            resp.setPath(accessibleDomain + "/" + multipartUploadDTO.getKey());
+//            return resp;
+//
+//        } catch (CosServiceException e) {
+//
+//            // -- [DB] 删除 uploadId 对应的分块信息 ---------------------
+//            sysFileMapper.deleteFile(multipartUploadDTO.getKey());
+//
+//            // 终止任务
+//            abortMultipartUpload(multipartUploadDTO);
+//
+//            System.out.println("getErrorCode:");
+//            System.out.println(e.getErrorCode());
+//            System.out.println(e.getMessage());
+//            throw new CustException("合并失败,无效的分块,请重新上传", 6001, "(" + e.getErrorCode() + ") " + e.getMessage());
+//        }
+//    }
+////    // -- 获得分类 CategoryID (通过文件后缀名) -----------------------------------------------------------
+////    private Long getCategoryIdBySuffix(String suffix) {
+////        SysFileCategoryDTO sysFileCategoryDTO = new SysFileCategoryDTO();
+////        List<SysFileCategoryDTO> categoryList = sysFileCategoryMapper.queryFileCategoryList(sysFileCategoryDTO);
+////        Optional<Long> firstMatchedId = categoryList.stream().filter(dto -> dto.getSuffix().toLowerCase().contains(suffix)).map(SysFileCategoryDTO::getId).findFirst();
+////        Long id = firstMatchedId.orElse(null);
+////        return id;
+////    }
+//    // -----------------------------------------------------------------------------------------------
+//
+//    /**
+//     * 分块上传 (1判断是否存在,2初始化,3上传分块,4合并分块)
+//     * - https://cloud.tencent.com/document/product/436/65935
+//     * - https://cloud.tencent.com/document/product/436/14112
+//     * @param multipartUploadDTO
+//     * @return
+//     */
+//    public MultipartUploadRespDTO multipartUpload(MultipartUploadDTO multipartUploadDTO) {
+//
+//        // -- 参数校验 ------------------------------------------------------
+//        if (multipartUploadDTO.getFile() == null || multipartUploadDTO.getFile().isEmpty()) throw new CustException("file 上传文件不能为空");
+//
+//        // 当存在 uploadId 时,即是分块上传阶段
+//        if (multipartUploadDTO.getUpload_id() != null) {
+//            if (multipartUploadDTO.getKey() == null) throw new CustException("key 不能为空");
+//            if (multipartUploadDTO.getIndex() == null) throw new CustException("index 不能为空");
+//            if (multipartUploadDTO.getCount() == null) throw new CustException("count 不能为空");
+//            if (multipartUploadDTO.getIndex() > multipartUploadDTO.getCount()) {
+//                throw new CustException("index 不能大于 count");
+//            }
+//        }
+//        // -----------------------------------------------------------------
+//
+//        COSClient cosClient = getClient(secretId, secretKey);
+//
+//        MultipartUploadRespDTO resp = new MultipartUploadRespDTO();
+//
+//        // [秒传] 检查对象是否存在,存在即 "秒传"
+//        try {
+//
+//            String md5 = DigestUtil.md5Hex(multipartUploadDTO.getFile().getInputStream());
+//            String suffix = FileUtil.extName(multipartUploadDTO.getFile().getOriginalFilename()).toLowerCase();
+//            String filename = md5 + "." + suffix;
+//            String key = "temp/" + filename;
+//
+//            // 检查对象是否存在于存储桶中
+//            if (checkObjectExist(cosClient, key)) {
+//
+//                String remotePath = accessibleDomain + "/" + key;
+//
+//                // -- [COS] 对象存在时,直接返回路径 -------------------------------
+//                resp.setKey(key);
+//                resp.setPath(remotePath);
+//                resp.setIs_fast_upload(true);
+//
+//                // -- [DB] 查询数据 ---------------------------------------------
+////                SysFileDTO fileDetail = sysFileMapper.queryFileByKey(key);
+////                // 如果表中没有数据,则添加数据
+////                if (fileDetail == null) {
+//                    // -- [DB] 插入数据 -----------------------------------------
+//                    SysFileDTO fileDTO = new SysFileDTO();
+//                    fileDTO.setUser_id(httpRequestAspect.getUserId());
+//                    fileDTO.setName(filename);
+//                    fileDTO.setFile_key(key);
+//                    fileDTO.setFile_remote_path(remotePath);
+////                    fileDTO.setCategory_id(getCategoryIdBySuffix(suffix));
+//
+//                    // 获得文件大小
+//                    fileDTO.setSize(CommonUtil.getRemoteFileSize(remotePath));
+//
+//                    fileDTO.setMd5(md5);
+//                    sysFileMapper.insertFile(fileDTO);
+////                }
+//                // -------------------------------------------------------------
+//
+//            } else {
+//
+//                // 对象不存在时,走创建流程
+//                String uploadId = multipartUploadDTO.getUpload_id();
+//                if (uploadId == null || uploadId.isEmpty()) {
+//
+//                    // -- [DB] 查询数据 (By 文件Key) ------------------------------
+//                    SysFileDTO fileDetail = sysFileMapper.queryFileByKey(key);
+//                    if (fileDetail != null) {
+//                        resp.setUpload_id(fileDetail.getChunk_upload_id());
+//                        resp.setKey(fileDetail.getFile_key());
+//                        resp.setSize(fileDetail.getSize());
+//                        resp.setFilename(filename);
+////                        resp.setIndex(fileDetail.getChunk_current_index());
+////                        resp.setCount(fileDetail.getChunk_count());
+//                        // 返回 { uploadId, key }
+//                        // 缺少 { chunk_md5, chunk_size }
+//                    } else {
+//
+////                        // 上传要求每个分块大小必须大于 1MB,所以整个文件也不能小于 1MB
+////                        if (multipartUploadDTO.getFile().getSize() < 1 * 1024 * 1024) {
+////                            throw new CustException("上传文件不能小于1MB");
+////                        }
+//
+//                        // -- [初始化] 第一次上传,无 uploadId ---------------------
+//                        resp = initiateMultipartUpload(cosClient, multipartUploadDTO.getFile(), key, filename);
+//                        // 返回 { uploadId, key }
+//
+//                        // -- [DB] 插入数据 -------------------------------------
+//                        SysFileDTO fileDTO = new SysFileDTO();
+//                        fileDTO.setUser_id(httpRequestAspect.getUserId());
+//                        fileDTO.setName(filename);
+//                        fileDTO.setFile_key(key);
+//                        fileDTO.setChunk_upload_id(resp.getUpload_id());
+//                        fileDTO.setSize(resp.getSize());
+//                        fileDTO.setMd5(md5);
+////                        fileDTO.setCategory_id(getCategoryIdBySuffix(suffix));
+//                        sysFileMapper.insertFile(fileDTO);
+//                    }
+//                    // ---------------------------------------------------------
+//
+//                } else {
+//
+//                    // 分块上传要求每个分块大小必须大于 1MB (最后一个例外)
+//                    if (resp.getIndex() != resp.getCount()) {
 //                        if (multipartUploadDTO.getFile().getSize() < 1 * 1024 * 1024) {
-//                            throw new CustException("上传文件不能小于1MB");
+//                            throw new CustException("分块文件不能小于1MB");
 //                        }
-
-                        // -- [初始化] 第一次上传,无 uploadId ---------------------
-                        resp = initiateMultipartUpload(cosClient, multipartUploadDTO.getFile(), key, filename);
-                        // 返回 { uploadId, key }
-
-                        // -- [DB] 插入数据 -------------------------------------
-                        SysFileDTO fileDTO = new SysFileDTO();
-                        fileDTO.setUser_id(httpRequestAspect.getUserId());
-                        fileDTO.setName(filename);
-                        fileDTO.setFile_key(key);
-                        fileDTO.setChunk_upload_id(resp.getUpload_id());
-                        fileDTO.setSize(resp.getSize());
-                        fileDTO.setMd5(md5);
-                        fileDTO.setCategory_id(getCategoryIdBySuffix(suffix));
-                        sysFileMapper.insertFile(fileDTO);
-                    }
-                    // ---------------------------------------------------------
-
-                } else {
-
-                    // 分块上传要求每个分块大小必须大于 1MB (最后一个例外)
-                    if (resp.getIndex() != resp.getCount()) {
-                        if (multipartUploadDTO.getFile().getSize() < 1 * 1024 * 1024) {
-                            throw new CustException("分块文件不能小于1MB");
-                        }
-                    }
-
-                    // -- [DB] 查询数据 (By 直传Key) ------------------------------
-                    SysFileDTO fileDetail = sysFileMapper.queryFileByKey(multipartUploadDTO.getKey());
-
-                    // -- [分块上传] 带着 uploadId 来,开始上传分块 ------------------
-                    resp = uploadPart(cosClient, multipartUploadDTO);
-                    // 返回 { uploadId, key, index, part_etag, size }
-
-                    // -- [合并分块] 当最后一块上传完成时,合并分块 --------------------
-                    if (resp.getIndex() != null && resp.getCount() != null && resp.getIndex() == resp.getCount()) {
-
-                        MultipartUploadRespDTO complete = completeMultipartUpload(cosClient, multipartUploadDTO);
-
-                        // 附上最后一次上传的分块信息
-                        complete.setUpload_id(resp.getUpload_id());
-                        complete.setKey(resp.getKey());
-                        complete.setSize(resp.getSize());
-                        complete.setIndex(resp.getIndex());
-                        complete.setCount(resp.getCount());
-                        complete.setChunk_md5(resp.getChunk_md5());
-                        complete.setChunk_size(resp.getChunk_size());
-                        // 以及返回 { request_id, path }
-                        resp = complete;
-
-                    }
-
-
-                    if (fileDetail != null) {
-
-                        System.out.println("fileDetail != null !");
-                        // -- [DB] 更新数据 -------------------------------------
-
-                        SysFileDTO fileDTO = new SysFileDTO();
-                        fileDTO.setUser_id(httpRequestAspect.getUserId());
-                        fileDTO.setFile_key(resp.getKey());
-
-                        fileDTO.setChunk_current_index(resp.getIndex());
-                        fileDTO.setChunk_count(resp.getCount());
-
-                        // 没有完成分块时
-                        if (resp.getPath() != null) {
-
-                            Long size = fileDetail.getSize() != null ? fileDetail.getSize() : 0;
-                            fileDTO.setSize(size + resp.getChunk_size());
-
-                            fileDTO.setFile_remote_path(resp.getPath());
-                            fileDTO.setChunk_current_index(null);
-                            fileDTO.setChunk_count(null);
-                            fileDTO.setChunk_upload_id("");
-                        }
-
-                        sysFileMapper.updateFile(fileDTO);
-                    }
-
-                    // ------------------------------------------------------
-                }
-            }
-
-        } catch (IOException e) {
-            throw new CustException(e.getMessage());
-        } finally {
-            if (cosClient != null) {
-                cosClient.shutdown();
-            }
-        }
-
-        return resp;
-    }
-
-    /**
-     * 终止分块上传任务
-     */
-    public Map<String, Object> abortMultipartUpload(MultipartUploadDTO multipartUploadDTO){
-
-        COSClient cosClient = getClient(secretId, secretKey);
-
-        String key = multipartUploadDTO.getKey();
-        String uploadId = multipartUploadDTO.getUpload_id();
-
-        AbortMultipartUploadRequest abortMultipartUploadRequest = new AbortMultipartUploadRequest(bucketName, key, uploadId);
-        try {
-            cosClient.abortMultipartUpload(abortMultipartUploadRequest);
-        } catch (CosServiceException e) {
-            System.out.println("Service");
-            System.out.println(e.getErrorCode());
-            System.out.println(e.getMessage());
-            if ("NoSuchUpload".equals(e.getErrorCode())) {
-                throw new CustException("找不到相关的 upload_id 或 key 信息,任务已终止或已完成");
-            }
-            throw new CustException(e.getMessage());
-        }
-
-        // 确保不再使用 cosClient 之后,关闭即可
-        cosClient.shutdown();
-
-        // -- [DB] 删除数据 --------------------------------------------------
-        sysFileMapper.deleteFile(key);
-
-        Map<String, Object> resp = new LinkedHashMap<>();
-        resp.put("key", key);
-        resp.put("upload_id", uploadId);
-
-        return resp;
-    }
-
-
-
-    /**
-     * 删除文件
-     */
-    public Map<String, Object> removeUploadFile(SysFileDTO sysFileDTO) {
-
-        String name = sysFileDTO.getName();
-        String suffix = StringUtils.getFilenameExtension(name.toLowerCase());
-
-        String nameThumb = name.replaceAll("." + suffix, "-thumb." + suffix);
-
-        String key = "temp/" + name;
-        String keyThumb = "temp/" + nameThumb;
-
-        // -- [COS] 删除对象 --------------------------------------
-        COSClient cosClient = getClient(secretId, secretKey);
-        cosClient.deleteObject(bucketName, key);
-        cosClient.deleteObject(bucketName, keyThumb);
-        cosClient.shutdown();
-
-        // -- [DB] 判断记录是否存在 --------------------------------
-        SysFileDTO fileDetail = sysFileMapper.queryFileByKey(key);
-        if (fileDetail == null) throw new CustException("文件记录不存在");
-
-        // -- [DB] 删除存储桶中的文件 -------------------------------
-        // -- 创建异步上传任务 ---------------------------------------------------------------------
-        CompletableFuture.runAsync(() -> {
-            sysFileMapper.deleteFile(key);
-            sysFileMapper.deleteFile(keyThumb);
-        });
-
-        return Map.of("key", key);
-    }
+//                    }
+//
+//                    // -- [DB] 查询数据 (By 直传Key) ------------------------------
+//                    SysFileDTO fileDetail = sysFileMapper.queryFileByKey(multipartUploadDTO.getKey());
+//
+//                    // -- [分块上传] 带着 uploadId 来,开始上传分块 ------------------
+//                    resp = uploadPart(cosClient, multipartUploadDTO);
+//                    // 返回 { uploadId, key, index, part_etag, size }
+//
+//                    // -- [合并分块] 当最后一块上传完成时,合并分块 --------------------
+//                    if (resp.getIndex() != null && resp.getCount() != null && resp.getIndex() == resp.getCount()) {
+//
+//                        MultipartUploadRespDTO complete = completeMultipartUpload(cosClient, multipartUploadDTO);
+//
+//                        // 附上最后一次上传的分块信息
+//                        complete.setUpload_id(resp.getUpload_id());
+//                        complete.setKey(resp.getKey());
+//                        complete.setSize(resp.getSize());
+//                        complete.setIndex(resp.getIndex());
+//                        complete.setCount(resp.getCount());
+//                        complete.setChunk_md5(resp.getChunk_md5());
+//                        complete.setChunk_size(resp.getChunk_size());
+//                        // 以及返回 { request_id, path }
+//                        resp = complete;
+//
+//                    }
+//
+//
+//                    if (fileDetail != null) {
+//
+//                        System.out.println("fileDetail != null !");
+//                        // -- [DB] 更新数据 -------------------------------------
+//
+//                        SysFileDTO fileDTO = new SysFileDTO();
+//                        fileDTO.setUser_id(httpRequestAspect.getUserId());
+//                        fileDTO.setFile_key(resp.getKey());
+//
+//                        fileDTO.setChunk_current_index(resp.getIndex());
+//                        fileDTO.setChunk_count(resp.getCount());
+//
+//                        // 没有完成分块时
+//                        if (resp.getPath() != null) {
+//
+//                            Long size = fileDetail.getSize() != null ? fileDetail.getSize() : 0;
+//                            fileDTO.setSize(size + resp.getChunk_size());
+//
+//                            fileDTO.setFile_remote_path(resp.getPath());
+//                            fileDTO.setChunk_current_index(null);
+//                            fileDTO.setChunk_count(null);
+//                            fileDTO.setChunk_upload_id("");
+//                        }
+//
+//                        sysFileMapper.updateFile(fileDTO);
+//                    }
+//
+//                    // ------------------------------------------------------
+//                }
+//            }
+//
+//        } catch (IOException e) {
+//            throw new CustException(e.getMessage());
+//        } finally {
+//            if (cosClient != null) {
+//                cosClient.shutdown();
+//            }
+//        }
+//
+//        return resp;
+//    }
+//
+//    /**
+//     * 终止分块上传任务
+//     */
+//    public Map<String, Object> abortMultipartUpload(MultipartUploadDTO multipartUploadDTO){
+//
+//        COSClient cosClient = getClient(secretId, secretKey);
+//
+//        String key = multipartUploadDTO.getKey();
+//        String uploadId = multipartUploadDTO.getUpload_id();
+//
+//        AbortMultipartUploadRequest abortMultipartUploadRequest = new AbortMultipartUploadRequest(bucketName, key, uploadId);
+//        try {
+//            cosClient.abortMultipartUpload(abortMultipartUploadRequest);
+//        } catch (CosServiceException e) {
+//            System.out.println("Service");
+//            System.out.println(e.getErrorCode());
+//            System.out.println(e.getMessage());
+//            if ("NoSuchUpload".equals(e.getErrorCode())) {
+//                throw new CustException("找不到相关的 upload_id 或 key 信息,任务已终止或已完成");
+//            }
+//            throw new CustException(e.getMessage());
+//        }
+//
+//        // 确保不再使用 cosClient 之后,关闭即可
+//        cosClient.shutdown();
+//
+//        // -- [DB] 删除数据 --------------------------------------------------
+//        sysFileMapper.deleteFile(key);
+//
+//        Map<String, Object> resp = new LinkedHashMap<>();
+//        resp.put("key", key);
+//        resp.put("upload_id", uploadId);
+//
+//        return resp;
+//    }
+//
+//
+//
+//    /**
+//     * 删除文件
+//     */
+//    public Map<String, Object> removeUploadFile(SysFileDTO sysFileDTO) {
+//
+//        String name = sysFileDTO.getName();
+//        String suffix = StringUtils.getFilenameExtension(name.toLowerCase());
+//
+//        String nameThumb = name.replaceAll("." + suffix, "-thumb." + suffix);
+//
+//        String key = "temp/" + name;
+//        String keyThumb = "temp/" + nameThumb;
+//
+//        // -- [COS] 删除对象 --------------------------------------
+//        COSClient cosClient = getClient(secretId, secretKey);
+//        cosClient.deleteObject(bucketName, key);
+//        cosClient.deleteObject(bucketName, keyThumb);
+//        cosClient.shutdown();
+//
+//        // -- [DB] 判断记录是否存在 --------------------------------
+//        SysFileDTO fileDetail = sysFileMapper.queryFileByKey(key);
+//        if (fileDetail == null) throw new CustException("文件记录不存在");
+//
+//        // -- [DB] 删除存储桶中的文件 -------------------------------
+//        // -- 创建异步上传任务 ---------------------------------------------------------------------
+//        CompletableFuture.runAsync(() -> {
+//            sysFileMapper.deleteFile(key);
+//            sysFileMapper.deleteFile(keyThumb);
+//        });
+//
+//        return Map.of("key", key);
+//    }
 
 }

+ 22 - 22
src/main/java/com/backendsys/service/System/SysFileService.java

@@ -1,22 +1,22 @@
-package com.backendsys.service.System;
-
-import com.backendsys.entity.System.SysFile.SysFileCategoryDTO;
-import com.backendsys.entity.System.SysFile.SysFileDTO;
-
-import java.util.List;
-import java.util.Map;
-
-public interface SysFileService {
-
-
-    // 获得上传文件列表
-    Map<String, Object> getUploadFileList(Integer pageNum, Integer pageSize, SysFileDTO sysFileDTO);
-
-    // 获得上传文件分类列表
-    List<SysFileCategoryDTO> getUploadFileCategoryList(SysFileCategoryDTO sysFileCategoryDTO);
-
-    long insertFile(SysFileDTO sysFileDTO);
-    long updateFile(SysFileDTO sysFileDTO);
-
-
-}
+//package com.backendsys.service.System;
+//
+//import com.backendsys.entity.System.SysFile.SysFileCategoryDTO;
+//import com.backendsys.entity.System.SysFile.SysFileDTO;
+//
+//import java.util.List;
+//import java.util.Map;
+//
+//public interface SysFileService {
+//
+//
+//    // 获得上传文件列表
+//    Map<String, Object> getUploadFileList(Integer pageNum, Integer pageSize, SysFileDTO sysFileDTO);
+//
+//    // 获得上传文件分类列表
+//    List<SysFileCategoryDTO> getUploadFileCategoryList(SysFileCategoryDTO sysFileCategoryDTO);
+//
+//    long insertFile(SysFileDTO sysFileDTO);
+//    long updateFile(SysFileDTO sysFileDTO);
+//
+//
+//}

+ 57 - 57
src/main/java/com/backendsys/service/System/SysFileServiceImpl.java

@@ -1,57 +1,57 @@
-package com.backendsys.service.System;
-
-import com.backendsys.entity.System.SysFile.SysFileCategoryDTO;
-import com.backendsys.entity.System.SysFile.SysFileDTO;
-import com.backendsys.mapper.System.SysFileCategoryMapper;
-import com.backendsys.mapper.System.SysFileMapper;
-import com.backendsys.utils.response.PageInfoResult;
-import com.github.pagehelper.PageHelper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Map;
-
-@Service
-public class SysFileServiceImpl implements SysFileService{
-
-    @Autowired
-    private SysFileMapper sysFileMapper;
-
-    @Autowired
-    private SysFileCategoryMapper sysFileCategoryMapper;
-
-    /**
-     * 获得上传文件列表
-     */
-    public Map<String, Object> getUploadFileList(Integer pageNum, Integer pageSize, SysFileDTO sysFileDTO) {
-        // 分页查询
-        if (pageNum != null && pageSize != null) {
-            PageHelper.startPage(pageNum, pageSize);
-            PageHelper.getLocalPage().setPageSizeZero(true);
-        }
-        // 分页输出 (自定义)
-        List<SysFileDTO> list = sysFileMapper.queryFileList(sysFileDTO);
-        PageInfoResult pageInfoResult = new PageInfoResult(list);
-        return pageInfoResult.toMap();
-    }
-
-    /**
-     * 获得上传文件分类列表
-     */
-    public List<SysFileCategoryDTO> getUploadFileCategoryList(SysFileCategoryDTO sysFileCategoryDTO) {
-        return sysFileCategoryMapper.queryFileCategoryList(sysFileCategoryDTO);
-    }
-
-    @Async
-    public long insertFile(SysFileDTO sysFileDTO) {
-        return sysFileMapper.insertFile(sysFileDTO);
-    }
-
-    @Async
-    public long updateFile(SysFileDTO sysFileDTO) {
-        return sysFileMapper.updateFile(sysFileDTO);
-    }
-
-}
+//package com.backendsys.service.System;
+//
+//import com.backendsys.entity.System.SysFile.SysFileCategoryDTO;
+//import com.backendsys.entity.System.SysFile.SysFileDTO;
+//import com.backendsys.mapper.System.SysFileCategoryMapper;
+//import com.backendsys.mapper.System.SysFileMapper;
+//import com.backendsys.utils.response.PageInfoResult;
+//import com.github.pagehelper.PageHelper;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.scheduling.annotation.Async;
+//import org.springframework.stereotype.Service;
+//
+//import java.util.List;
+//import java.util.Map;
+//
+//@Service
+//public class SysFileServiceImpl implements SysFileService{
+//
+//    @Autowired
+//    private SysFileMapper sysFileMapper;
+//
+//    @Autowired
+//    private SysFileCategoryMapper sysFileCategoryMapper;
+//
+//    /**
+//     * 获得上传文件列表
+//     */
+//    public Map<String, Object> getUploadFileList(Integer pageNum, Integer pageSize, SysFileDTO sysFileDTO) {
+//        // 分页查询
+//        if (pageNum != null && pageSize != null) {
+//            PageHelper.startPage(pageNum, pageSize);
+//            PageHelper.getLocalPage().setPageSizeZero(true);
+//        }
+//        // 分页输出 (自定义)
+//        List<SysFileDTO> list = sysFileMapper.queryFileList(sysFileDTO);
+//        PageInfoResult pageInfoResult = new PageInfoResult(list);
+//        return pageInfoResult.toMap();
+//    }
+//
+//    /**
+//     * 获得上传文件分类列表
+//     */
+//    public List<SysFileCategoryDTO> getUploadFileCategoryList(SysFileCategoryDTO sysFileCategoryDTO) {
+//        return sysFileCategoryMapper.queryFileCategoryList(sysFileCategoryDTO);
+//    }
+//
+//    @Async
+//    public long insertFile(SysFileDTO sysFileDTO) {
+//        return sysFileMapper.insertFile(sysFileDTO);
+//    }
+//
+//    @Async
+//    public long updateFile(SysFileDTO sysFileDTO) {
+//        return sysFileMapper.updateFile(sysFileDTO);
+//    }
+//
+//}

+ 20 - 20
src/main/java/com/backendsys/service/System/SysUserPointHistoryService.java

@@ -1,20 +1,20 @@
-package com.backendsys.service.System;
-
-import com.backendsys.entity.System.SysUserPointsDTO;
-
-import java.util.Map;
-
-public interface SysUserPointHistoryService {
-
-
-    // 操作用户积分 (增加/减少)
-    Map<String, Object> adjustmentUserPoint(SysUserPointsDTO sysUserPointsDTO);
-    // 创建 [操作用户积分] 的操作记录
-//    Map<String, Object> insertUserPointHistory(SysUserPointsDTO sysUserPointsDTO);
-
-    // 查询单个用户积分
-    Map<String, Object> queryUserPoint(SysUserPointsDTO sysUserPointsDTO);
-    // 查询用户积分操作记录列表
-    Map<String, Object> queryUserPointHistoryList(Integer pageNum, Integer pageSize, SysUserPointsDTO sysUserPointsDTO);
-
-}
+//package com.backendsys.service.System;
+//
+//import com.backendsys.entity.System.SysUserPointsDTO;
+//
+//import java.util.Map;
+//
+//public interface SysUserPointHistoryService {
+//
+//
+//    // 操作用户积分 (增加/减少)
+//    Map<String, Object> adjustmentUserPoint(SysUserPointsDTO sysUserPointsDTO);
+//    // 创建 [操作用户积分] 的操作记录
+////    Map<String, Object> insertUserPointHistory(SysUserPointsDTO sysUserPointsDTO);
+//
+//    // 查询单个用户积分
+//    Map<String, Object> queryUserPoint(SysUserPointsDTO sysUserPointsDTO);
+//    // 查询用户积分操作记录列表
+//    Map<String, Object> queryUserPointHistoryList(Integer pageNum, Integer pageSize, SysUserPointsDTO sysUserPointsDTO);
+//
+//}

+ 149 - 149
src/main/java/com/backendsys/service/System/SysUserPointHistoryServiceImpl.java

@@ -1,156 +1,156 @@
-package com.backendsys.service.System;
-
-import com.backendsys.entity.System.SysUserPointsDTO;
-import com.backendsys.exception.CustException;
-import com.backendsys.mapper.System.SysUserMapper;
-import com.backendsys.mapper.System.SysUserPointsHistoryMapper;
-import com.backendsys.utils.response.PageInfoResult;
-import com.github.pagehelper.PageHelper;
-import org.redisson.api.RLock;
-import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-@Service
-public class SysUserPointHistoryServiceImpl implements SysUserPointHistoryService {
-
-    @Lazy
-    @Autowired
-    RedissonClient redissonClient;
-
-    @Autowired
-    private SysUserMapper sysUserMapper;
-
-    @Autowired
-    private SysUserPointsHistoryMapper sysUserPointsHistoryMapper;
-
-    /**
-     * 操作用户积分 (增加/减少) (其他操作扣除积分可使用此业务逻辑)
-     * SysUserPointsDTO sysUserPointsDTO = new SysUserPointsDTO();
-     * ..
-     * sysUserService.adjustmentUserPoint(sysUserPointsDTO);
-     */
-    public Map<String, Object> adjustmentUserPoint(SysUserPointsDTO sysUserPointsDTO) {
-        RLock lock = redissonClient.getLock("adjustmentPoint");
-        try {
-            lock.tryLock(3, TimeUnit.SECONDS);
-
-            // [查询] 用户当前信息
-            Map<String, Object> userDetail = sysUserMapper.queryUserDetail(sysUserPointsDTO.getTarget_user_id());
-            if (userDetail == null) {
-                throw new CustException("用户不存在");
-            }
-            if (!userDetail.get("audit_status").equals(2)) {
-                throw new CustException("用户未通过审核");
-            }
-            if (!userDetail.get("status").equals(1)) {
-                throw new CustException("用户未激活");
-            }
-
-            // -- 积分计算 (增加/减少) -------------------------------------------------
-            // 当前积分余额
-            Float point_balance = (Float) userDetail.get("point_balance");
-            // 积分变动额 (绝对值) (此处为增加积分)
-            Float point_adjustment = sysUserPointsDTO.getPoint_adjustment();
-            // 计算结果
-            Float point_blance_total = point_balance + point_adjustment;
-
-
-            if (point_blance_total < 0) {
-                // 判断:如果操作后积分小于0,则目标值等于0 (弃用)
-                // point_blance_total = (float) 0;
-
-                // 判断:如果操作后积分小于0,则抛出异常
-                throw new CustException("积分不足");
-            }
-
-            // 入参格式化
-            SysUserPointsDTO dto = sysUserPointsDTO;
-            dto.setPoint_balance(point_blance_total);
-            // ----------------------------------------------------------------------
-
-            // [编辑] 用户积分
-            sysUserMapper.updateUserPoint(dto);
-            Map<String, Object> resp = new LinkedHashMap<>();
-            resp.put("user_id", dto.getTarget_user_id());
-            resp.put("point_balance", point_balance);
-            resp.put("point_adjustment", point_adjustment);
-
-            return resp;
-
-        } catch (InterruptedException e) { throw new RuntimeException(e);
-        } finally { lock.unlock(); }
-    }
-
+//package com.backendsys.service.System;
+//
+//import com.backendsys.entity.System.SysUserPointsDTO;
+//import com.backendsys.exception.CustException;
+//import com.backendsys.mapper.System.SysUserMapper;
+//import com.backendsys.mapper.System.SysUserPointsHistoryMapper;
+//import com.backendsys.utils.response.PageInfoResult;
+//import com.github.pagehelper.PageHelper;
+//import org.redisson.api.RLock;
+//import org.redisson.api.RedissonClient;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.context.annotation.Lazy;
+//import org.springframework.stereotype.Service;
+//
+//import java.util.LinkedHashMap;
+//import java.util.List;
+//import java.util.Map;
+//import java.util.concurrent.TimeUnit;
+//
+//@Service
+//public class SysUserPointHistoryServiceImpl implements SysUserPointHistoryService {
+//
+//    @Lazy
+//    @Autowired
+//    RedissonClient redissonClient;
+//
+//    @Autowired
+//    private SysUserMapper sysUserMapper;
+//
+//    @Autowired
+//    private SysUserPointsHistoryMapper sysUserPointsHistoryMapper;
+//
 //    /**
-//     * 创建 [操作用户积分] 的操作记录
+//     * 操作用户积分 (增加/减少) (其他操作扣除积分可使用此业务逻辑)
+//     * SysUserPointsDTO sysUserPointsDTO = new SysUserPointsDTO();
+//     * ..
+//     * sysUserService.adjustmentUserPoint(sysUserPointsDTO);
 //     */
-//    public Map<String, Object> insertUserPointHistory(SysUserPointsDTO sysUserPointsDTO) {
-//        RLock lock = redissonClient.getLock("insertUserPointHistory");
-//        try { lock.tryLock(3, TimeUnit.SECONDS);
+//    public Map<String, Object> adjustmentUserPoint(SysUserPointsDTO sysUserPointsDTO) {
+//        RLock lock = redissonClient.getLock("adjustmentPoint");
+//        try {
+//            lock.tryLock(3, TimeUnit.SECONDS);
+//
+//            // [查询] 用户当前信息
+//            Map<String, Object> userDetail = sysUserMapper.queryUserDetail(sysUserPointsDTO.getTarget_user_id());
+//            if (userDetail == null) {
+//                throw new CustException("用户不存在");
+//            }
+//            if (!userDetail.get("audit_status").equals(2)) {
+//                throw new CustException("用户未通过审核");
+//            }
+//            if (!userDetail.get("status").equals(1)) {
+//                throw new CustException("用户未激活");
+//            }
 //
-//            System.out.println(sysUserPointsDTO);
-//            sysUserPointsHistoryMapper.insertUserPointsHistory(sysUserPointsDTO);
+//            // -- 积分计算 (增加/减少) -------------------------------------------------
+//            // 当前积分余额
+//            Float point_balance = (Float) userDetail.get("point_balance");
+//            // 积分变动额 (绝对值) (此处为增加积分)
+//            Float point_adjustment = sysUserPointsDTO.getPoint_adjustment();
+//            // 计算结果
+//            Float point_blance_total = point_balance + point_adjustment;
+//
+//
+//            if (point_blance_total < 0) {
+//                // 判断:如果操作后积分小于0,则目标值等于0 (弃用)
+//                // point_blance_total = (float) 0;
+//
+//                // 判断:如果操作后积分小于0,则抛出异常
+//                throw new CustException("积分不足");
+//            }
+//
+//            // 入参格式化
+//            SysUserPointsDTO dto = sysUserPointsDTO;
+//            dto.setPoint_balance(point_blance_total);
+//            // ----------------------------------------------------------------------
+//
+//            // [编辑] 用户积分
+//            sysUserMapper.updateUserPoint(dto);
+//            Map<String, Object> resp = new LinkedHashMap<>();
+//            resp.put("user_id", dto.getTarget_user_id());
+//            resp.put("point_balance", point_balance);
+//            resp.put("point_adjustment", point_adjustment);
+//
+//            return resp;
 //
-//            return Map.of("target_user_id", sysUserPointsDTO.getTarget_user_id());
 //        } catch (InterruptedException e) { throw new RuntimeException(e);
 //        } finally { lock.unlock(); }
 //    }
-
-    /**
-     * 查询单个用户积分 (积分余额、消耗积分、充值积分)
-     */
-    public Map<String, Object> queryUserPoint(SysUserPointsDTO sysUserPointsDTO) {
-
-        System.out.println(sysUserPointsDTO);
-
-        // 获得余额
-        Map<String, Object> respUser = sysUserMapper.queryUserPoint(sysUserPointsDTO);
-        Float point_balance = (Float) respUser.get("point_balance");
-
-        // 获得消耗的积分、购买/获赠的积分
-        List<Map<String, Object>> pointsHistory = sysUserPointsHistoryMapper.queryUserPointsHistoryList(sysUserPointsDTO);
-        double point_receive = 0;
-        double point_used = 0;
-        if (pointsHistory.size() > 0) {
-            // 计算正数的总和 (购买、获赠)
-            point_receive = pointsHistory.stream()
-                    .filter(map -> (Float) map.get("point_adjustment") > 0)
-                    .mapToDouble(map -> (Float) map.get("point_adjustment"))
-                    .sum();
-            // 计算负数的总和 (消耗)
-            point_used = pointsHistory.stream()
-                    .filter(map -> (Float) map.get("point_adjustment") < 0)
-                    .mapToDouble(map -> (Float) map.get("point_adjustment") * -1) // 将负数转换为正数进行求和
-                    .sum();
-        }
-
-        Map<String, Object> result = new LinkedHashMap<>();
-        result.put("point_balance", point_balance);
-        result.put("point_receive", point_receive);
-        result.put("point_used", point_used > 0 ? -(point_used) : 0);
-
-        return result;
-    }
-
-    /**
-     * 查询用户积分操作记录列表
-     */
-    public Map<String, Object> queryUserPointHistoryList(Integer pageNum, Integer pageSize, SysUserPointsDTO sysUserPointsDTO) {
-        // 分页查询
-        if (pageNum != null && pageSize != null) {
-            PageHelper.startPage(pageNum, pageSize);
-        }
-        // 分页输出 (自定义)
-        List<Map<String, Object>> list = sysUserPointsHistoryMapper.queryUserPointsHistoryList(sysUserPointsDTO);
-        PageInfoResult pageInfoResult = new PageInfoResult(list);
-        return pageInfoResult.toMap();
-    }
-
-}
+//
+////    /**
+////     * 创建 [操作用户积分] 的操作记录
+////     */
+////    public Map<String, Object> insertUserPointHistory(SysUserPointsDTO sysUserPointsDTO) {
+////        RLock lock = redissonClient.getLock("insertUserPointHistory");
+////        try { lock.tryLock(3, TimeUnit.SECONDS);
+////
+////            System.out.println(sysUserPointsDTO);
+////            sysUserPointsHistoryMapper.insertUserPointsHistory(sysUserPointsDTO);
+////
+////            return Map.of("target_user_id", sysUserPointsDTO.getTarget_user_id());
+////        } catch (InterruptedException e) { throw new RuntimeException(e);
+////        } finally { lock.unlock(); }
+////    }
+//
+//    /**
+//     * 查询单个用户积分 (积分余额、消耗积分、充值积分)
+//     */
+//    public Map<String, Object> queryUserPoint(SysUserPointsDTO sysUserPointsDTO) {
+//
+//        System.out.println(sysUserPointsDTO);
+//
+//        // 获得余额
+//        Map<String, Object> respUser = sysUserMapper.queryUserPoint(sysUserPointsDTO);
+//        Float point_balance = (Float) respUser.get("point_balance");
+//
+//        // 获得消耗的积分、购买/获赠的积分
+//        List<Map<String, Object>> pointsHistory = sysUserPointsHistoryMapper.queryUserPointsHistoryList(sysUserPointsDTO);
+//        double point_receive = 0;
+//        double point_used = 0;
+//        if (pointsHistory.size() > 0) {
+//            // 计算正数的总和 (购买、获赠)
+//            point_receive = pointsHistory.stream()
+//                    .filter(map -> (Float) map.get("point_adjustment") > 0)
+//                    .mapToDouble(map -> (Float) map.get("point_adjustment"))
+//                    .sum();
+//            // 计算负数的总和 (消耗)
+//            point_used = pointsHistory.stream()
+//                    .filter(map -> (Float) map.get("point_adjustment") < 0)
+//                    .mapToDouble(map -> (Float) map.get("point_adjustment") * -1) // 将负数转换为正数进行求和
+//                    .sum();
+//        }
+//
+//        Map<String, Object> result = new LinkedHashMap<>();
+//        result.put("point_balance", point_balance);
+//        result.put("point_receive", point_receive);
+//        result.put("point_used", point_used > 0 ? -(point_used) : 0);
+//
+//        return result;
+//    }
+//
+//    /**
+//     * 查询用户积分操作记录列表
+//     */
+//    public Map<String, Object> queryUserPointHistoryList(Integer pageNum, Integer pageSize, SysUserPointsDTO sysUserPointsDTO) {
+//        // 分页查询
+//        if (pageNum != null && pageSize != null) {
+//            PageHelper.startPage(pageNum, pageSize);
+//        }
+//        // 分页输出 (自定义)
+//        List<Map<String, Object>> list = sysUserPointsHistoryMapper.queryUserPointsHistoryList(sysUserPointsDTO);
+//        PageInfoResult pageInfoResult = new PageInfoResult(list);
+//        return pageInfoResult.toMap();
+//    }
+//
+//}

+ 62 - 0
src/main/resources/mapper/upload/SysFileDao.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.backendsys.modules.upload.dao.SysFileDao">
+
+    <sql id="includeFile">
+        id,
+        id file_id,
+        COALESCE(category_id, '') category_id,
+        COALESCE(request_id, '') request_id,
+        COALESCE(upload_id, '') upload_id,
+        user_id,
+        name,
+        content_type,
+        url,
+        COALESCE(object_key, '') object_key,
+        size,
+        md5,
+        target,
+        create_time,
+        update_time
+    </sql>
+
+    <resultMap id="resultMapFileList" type="java.util.LinkedHashMap">
+        <id property="id" column="id" jdbcType="BIGINT" />
+        <result property="file_id" column="file_id" javaType="java.lang.Long" />
+        <result property="category_id" column="category_id" javaType="java.lang.Long" />
+        <result property="request_id" column="request_id" />
+        <result property="upload_id" column="upload_id" />
+        <result property="user_id" column="user_id" javaType="java.lang.Long" />
+        <result property="name" column="name" />
+        <result property="content_type" column="content_type" />
+        <result property="url" column="url" />
+        <result property="object_key" column="object_key" />
+        <result property="size" column="size" javaType="java.lang.Long" />
+        <result property="md5" column="md5" />
+        <result property="target" column="target" javaType="java.lang.Integer" />
+        <result property="create_time" column="create_time" />
+        <result property="update_time" column="update_time" />
+    </resultMap>
+
+    <select id="selectUploadFileList" resultMap="resultMapFileList">
+        SELECT <include refid="includeFile" /> FROM sys_file
+        <where>
+            <if test="name != null and name != ''">
+                AND name LIKE CONCAT('%', #{name}, '%')
+            </if>
+            <if test="category_id != null and category_id != ''">
+                AND category_id = #{category_id}
+            </if>
+            <if test="user_id != null and user_id != ''">
+                AND user_id = #{user_id}
+            </if>
+            <if test="object_key != null and object_key != ''">
+                AND object_key = #{object_key}
+            </if>
+            <if test="target != null and target != ''">
+                AND target = #{target}
+            </if>
+        </where>
+    </select>
+
+</mapper>