فهرست منبع

fix(存储配置、任务调度):
修改配置字段与前端配合
修复存储配置BUG
修改任务调度报错信息
删除冗余代码

18339543638 2 سال پیش
والد
کامیت
2c8f9de30c
48فایلهای تغییر یافته به همراه239 افزوده شده و 280 حذف شده
  1. 1 1
      tr-framework/src/main/java/cn/tr/core/enums/CreateEnum.java
  2. 5 0
      tr-modules/tr-module-export/pom.xml
  3. 2 0
      tr-modules/tr-module-quartz/src/main/java/cn/tr/module/quartz/job/controller/SysJobController.java
  4. 3 3
      tr-modules/tr-module-quartz/src/main/java/cn/tr/module/quartz/job/dto/SysJobDTO.java
  5. 10 4
      tr-modules/tr-module-quartz/src/main/java/cn/tr/module/quartz/utils/ScheduleUtils.java
  6. 0 15
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/properties/TrOAuth2Properties.java
  7. 0 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/psw/properties/TrOAuth2PswClientProperties.java
  8. 1 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/sms/controller/SysSmsTempController.java
  9. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/sms/service/impl/SysSmsTempServiceImpl.java
  10. 10 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/controller/FileDownloadController.java
  11. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/controller/StorageFileController.java
  12. 3 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/dto/SysStorageConfigQueryDTO.java
  13. 3 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/dto/SysStorageRecordDTO.java
  14. 3 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/dto/SysStorageRecordQueryDTO.java
  15. 20 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/properties/TrStorageProperties.java
  16. 7 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/repository/SysStorageRecordRepository.java
  17. 7 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/IStorageFileService.java
  18. 15 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/impl/StorageFileServiceImpl.java
  19. 2 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/impl/SysStorageConfigServiceImpl.java
  20. 2 9
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/impl/SysStorageRecordServiceImpl.java
  21. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/controller/SysTenantController.java
  22. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/controller/SysTenantPackageController.java
  23. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantPackageMenuServiceImpl.java
  24. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantServiceImpl.java
  25. 1 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysRoleController.java
  26. 2 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysPortalDTO.java
  27. 2 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysPortalPO.java
  28. 2 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysRolePO.java
  29. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysMenuServiceImpl.java
  30. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalMenuServiceImpl.java
  31. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalServiceImpl.java
  32. 2 3
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleMenuServiceImpl.java
  33. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleServiceImpl.java
  34. 63 0
      tr-modules/tr-module-system/src/main/resources/mapper/storage/SysStorageRecordMapper.xml
  35. 6 0
      tr-plugins/tr-spring-boot-starter-plugin-file/pom.xml
  36. 8 9
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/ali/AliFileClient.java
  37. 4 4
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/ali/AliFileClientConfig.java
  38. 4 4
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/db/DbFileClient.java
  39. 3 3
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/db/DbFileClientConfig.java
  40. 8 10
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/local/LocalFileClient.java
  41. 4 4
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/local/LocalFileClientConfig.java
  42. 8 9
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/minio/MinIoFileClient.java
  43. 4 4
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/minio/MinIoFileClientConfig.java
  44. 0 106
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/qiniu/QiNiuFileClient.java
  45. 0 34
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/qiniu/QiNiuFileClientConfig.java
  46. 0 6
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/enums/FileStorageEnum.java
  47. 12 28
      tr-plugins/tr-spring-boot-starter-plugin-file/src/test/java/cn/tr/plugin/file/config/FileClientTest.java
  48. 2 0
      tr-test/src/main/resources/application.yml

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/enums/CreateEnum.java → tr-framework/src/main/java/cn/tr/core/enums/CreateEnum.java

@@ -1,4 +1,4 @@
-package cn.tr.module.sys.user.enums;
+package cn.tr.core.enums;
 
 /**
  * @ClassName : CreateEnum

+ 5 - 0
tr-modules/tr-module-export/pom.xml

@@ -20,5 +20,10 @@
             <groupId>cn.tr</groupId>
             <artifactId>tr-spring-boot-starter-plugin-eventbus</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>cn.tr</groupId>
+            <artifactId>tr-spring-boot-starter-plugin-biz-excel</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 2 - 0
tr-modules/tr-module-quartz/src/main/java/cn/tr/module/quartz/job/controller/SysJobController.java

@@ -1,6 +1,7 @@
 package cn.tr.module.quartz.job.controller;
 
 import cn.hutool.core.util.StrUtil;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.quartz.constant.Constants;
@@ -67,6 +68,7 @@ public class SysJobController extends BaseController{
     @SaCheckPermission("quartz:job:add")
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysJobDTO source) throws SchedulerException, TaskException {
         validateSource(source);
+        source.setJobGroup(CreateEnum.custom.name());
         return CommonResult.success(sysJobService.insertSysJob(source));
     }
 

+ 3 - 3
tr-modules/tr-module-quartz/src/main/java/cn/tr/module/quartz/job/dto/SysJobDTO.java

@@ -40,11 +40,11 @@ public class SysJobDTO extends BaseDTO  {
     @NotBlank  (message = "cron执行表达式不能为空",groups = {Update.class,Insert.class})
     private String cronExpression;
 
-    @ApiModelProperty(value = "计划执行错误策略(1立即执行 2执行一次 3放弃执行)", position = 6,required = true)
-    @NotNull  (message = "计划执行错误策略不能为空",groups = {Update.class,Insert.class})
+    @ApiModelProperty(value = "补偿机制(1立即执行 2执行一次 3放弃执行)", position = 6,required = true)
+    @NotNull  (message = "补偿机制不能为空",groups = {Update.class,Insert.class})
     private String misfirePolicy;
 
-    @ApiModelProperty(value = "是否并发执行(0允许 1禁止)", position = 7,required = true)
+    @ApiModelProperty(value = "是否并发执行(1允许 0禁止)", position = 7,required = true)
     @NotNull  (message = "并发设置不能为空",groups = {Update.class,Insert.class})
     private Boolean concurrent;
 

+ 10 - 4
tr-modules/tr-module-quartz/src/main/java/cn/tr/module/quartz/utils/ScheduleUtils.java

@@ -11,6 +11,7 @@ import cn.tr.module.quartz.execution.QuartzDisallowConcurrentExecution;
 import cn.tr.module.quartz.execution.QuartzJobExecution;
 import cn.tr.module.quartz.job.dto.SysJobDTO;
 import org.quartz.*;
+import org.springframework.beans.BeansException;
 
 /**
  * 定时任务工具类
@@ -120,9 +121,14 @@ public class ScheduleUtils
         if (count > 1) {
             return StrUtil.containsAnyIgnoreCase(invokeTarget, Constants.JOB_WHITELIST_STR);
         }
-        Object obj = SpringUtil.getBean(CollectionUtil.getFirst(StrUtil.split(invokeTarget, ".")));
-        String beanPackageName = obj.getClass().getPackage().getName();
-        return StrUtil.containsAnyIgnoreCase(beanPackageName, Constants.JOB_WHITELIST_STR)
-                && !StrUtil.containsAnyIgnoreCase(beanPackageName, Constants.JOB_ERROR_STR);
+        String beanName = CollectionUtil.getFirst(StrUtil.split(invokeTarget, "."));
+        try {
+            Object obj = SpringUtil.getBean(beanName);
+            String beanPackageName = obj.getClass().getPackage().getName();
+            return StrUtil.containsAnyIgnoreCase(beanPackageName, Constants.JOB_WHITELIST_STR)
+                    && !StrUtil.containsAnyIgnoreCase(beanPackageName, Constants.JOB_ERROR_STR);
+        }catch (BeansException e){
+            throw new NullPointerException("beanName:{"+beanName+"}不存在");
+        }
     }
 }

+ 0 - 15
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/properties/TrOAuth2Properties.java

@@ -1,15 +0,0 @@
-package cn.tr.module.sys.oauth2.properties;
-
-import lombok.Data;
-
-/**
- * @ClassName : TrOAuthProperties
- * @Description :
- * @Author : LF
- * @Date: 2023年03月31日
- */
-
-@Data
-public class TrOAuth2Properties {
-
-}

+ 0 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/psw/properties/TrOAuth2PswClientProperties.java

@@ -1,6 +1,5 @@
 package cn.tr.module.sys.oauth2.psw.properties;
 
-import cn.dev33.satoken.oauth2.model.SaClientModel;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 

+ 1 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/sms/controller/SysSmsTempController.java

@@ -10,7 +10,7 @@ import cn.tr.module.sys.sms.dto.SysSmsTempDTO;
 import cn.tr.module.sys.sms.dto.SysSmsTempQueryDTO;
 import cn.tr.module.sys.sms.service.ISmsSendService;
 import cn.tr.module.sys.sms.service.ISysSmsTempService;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.plugin.mybatis.base.BaseController;
 import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@@ -22,7 +22,6 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.Collection;
-import java.util.List;
 
 /**
  * 短信模板控制器

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/sms/service/impl/SysSmsTempServiceImpl.java

@@ -10,7 +10,7 @@ import cn.tr.module.sys.sms.dto.SysSmsTempQueryDTO;
 import cn.tr.module.sys.sms.po.SysSmsTempPO;
 import cn.tr.module.sys.sms.repository.SysSmsTempRepository;
 import cn.tr.module.sys.sms.service.ISysSmsTempService;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.plugin.eventbus.annotation.Subscribe;
 import cn.tr.plugin.eventbus.config.EventBus;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;

+ 10 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/controller/FileDownloadController.java

@@ -3,6 +3,8 @@ package cn.tr.module.sys.storage.controller;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.tr.core.exception.ServiceException;
+import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.utils.JsonUtils;
 import cn.tr.module.sys.storage.dto.SysStorageConfigDTO;
 import cn.tr.module.sys.storage.service.ISysStorageConfigService;
@@ -48,7 +50,11 @@ public class FileDownloadController {
         SysStorageConfigDTO storageConfig = storageConfigService.selectSysStorageConfigById(configId);
         Map<String, Object> config = storageConfig.getConfig();
         LocalFileClientConfig localFileClientConfig = JsonUtils.parseObject(JsonUtils.toJsonString(config), LocalFileClientConfig.class);
-        writeFile(response,FileUtil.getInputStream(FileUtil.file(localFileClientConfig.getBasePath()+ File.separator+configId+File.separator+bizPath)));
+        File file = FileUtil.file(localFileClientConfig.getLocalBasePath() + File.separator + configId + File.separator + bizPath);
+        if(!file.exists()){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0404,"文件不存在");
+        }
+        writeFile(response,FileUtil.getInputStream(file));
     }
 
     @GetMapping("/db/{configId}/**")
@@ -59,6 +65,9 @@ public class FileDownloadController {
         SysStorageConfigDTO storageConfig = storageConfigService.selectSysStorageConfigById(configId);
         FileClient fileClient = fileClientFactory.createOrUpdateFileClient(storageConfig.getId(), storageConfig.getType(),parseClientConfig(storageConfig.getType(), storageConfig.getConfig()));
         FileContent fileContent = fileClient.getContent(bizPath);
+        if(fileContent.getContent()==null){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0404,"文件不存在");
+        }
         writeFile(response,IoUtil.toStream(fileContent.getContent()));
     }
 

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/controller/StorageFileController.java

@@ -55,7 +55,7 @@ public class StorageFileController {
     @GetMapping("/preview/{recordId}")
     @ApiOperation(value = "获取文件预览路径",notes = "权限:无")
     public  CommonResult<String> preview(@PathVariable("recordId") String recordId) throws Exception {
-        return CommonResult.success(fileService.obtainDownloadPath(recordId));
+        return CommonResult.success(fileService.obtainPreviewPath(recordId));
     }
 
 

+ 3 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/dto/SysStorageConfigQueryDTO.java

@@ -16,7 +16,9 @@ import lombok.Data;
 @ToString
 public class SysStorageConfigQueryDTO  {
     private static final long serialVersionUID = 1L;
-    @ApiModelProperty(value = "文件配置名称", position = 2)
+    @ApiModelProperty(value = "文件配置名称", position = 1)
     private String name;
+    @ApiModelProperty(value = "文件配置类型", position = 2)
+    private String type;
 
 }

+ 3 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/dto/SysStorageRecordDTO.java

@@ -39,7 +39,7 @@ public class SysStorageRecordDTO extends BaseDTO  {
     @ApiModelProperty(value = "存储配置id", position = 5)
     private String configId;
 
-    @ApiModelProperty(value = "文件大小", position = 6)
+    @ApiModelProperty(value = "文件大小(KB)", position = 6)
     private Integer size;
 
     @ApiModelProperty(value = "文件后缀", position = 7)
@@ -48,4 +48,6 @@ public class SysStorageRecordDTO extends BaseDTO  {
     @ApiModelProperty(value = "所属目录id", position = 9)
     private String cateId;
 
+    @ApiModelProperty(value = "存储配置名称", position = 10,readOnly = true)
+    private String configName;
 }

+ 3 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/dto/SysStorageRecordQueryDTO.java

@@ -16,7 +16,10 @@ import lombok.Data;
 @ToString
 public class SysStorageRecordQueryDTO  {
     private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "配置id", position = 1)
+    private String configId;
     @ApiModelProperty(value = "文件名称", position = 2)
     private String realName;
 
+
 }

+ 20 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/properties/TrStorageProperties.java

@@ -0,0 +1,20 @@
+package cn.tr.module.sys.storage.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @ClassName : TrStorageProperties
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年05月12日
+ */
+@Data
+@ConfigurationProperties(prefix = "tr.storage")
+public class TrStorageProperties {
+    /**
+     * 预览路径
+     */
+    private String previewUrl;
+}

+ 7 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/repository/SysStorageRecordRepository.java

@@ -1,9 +1,13 @@
 package cn.tr.module.sys.storage.repository;
 
+import cn.tr.module.sys.storage.dto.SysStorageRecordDTO;
+import cn.tr.module.sys.storage.dto.SysStorageRecordQueryDTO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 import cn.tr.module.sys.storage.po.SysStorageRecordPO;
+import java.util.*;
 /**
  * 存储记录Mapper接口
  *
@@ -13,4 +17,7 @@ import cn.tr.module.sys.storage.po.SysStorageRecordPO;
 @Repository
 @Mapper
 public interface SysStorageRecordRepository extends BaseMapper<SysStorageRecordPO> {
+    List<SysStorageRecordDTO> stdSelectList(@Param("query") SysStorageRecordQueryDTO query);
+
+    SysStorageRecordDTO stdSelectById(@Param("recordId") String recordId);
 }

+ 7 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/IStorageFileService.java

@@ -40,4 +40,11 @@ public interface IStorageFileService {
      * @return
      */
     String obtainDownloadPath(String recordId) throws Exception;
+
+    /**
+     * 获取预览路径
+     * @param recordId 文件存储id
+     * @return
+     */
+    String obtainPreviewPath(String recordId) throws Exception;
 }

+ 15 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/impl/StorageFileServiceImpl.java

@@ -1,12 +1,15 @@
 package cn.tr.module.sys.storage.service.impl;
 
+import cn.hutool.core.codec.Base64;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.util.URLUtil;
 import cn.tr.core.utils.JsonUtils;
 import cn.tr.module.sys.storage.dto.SysStorageConfigDTO;
 import cn.tr.module.sys.storage.dto.SysStorageRecordDTO;
+import cn.tr.module.sys.storage.properties.TrStorageProperties;
 import cn.tr.module.sys.storage.service.IStorageFileService;
 import cn.tr.module.sys.storage.service.ISysStorageConfigService;
 import cn.tr.module.sys.storage.service.ISysStorageRecordService;
@@ -16,11 +19,13 @@ import cn.tr.plugin.file.config.FileClientConfig;
 import cn.tr.plugin.file.config.FileClientFactory;
 import cn.tr.plugin.file.enums.FileStorageEnum;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
+import java.io.File;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -33,11 +38,15 @@ import java.util.stream.Collectors;
  * @Date: 2023年05月10日
  */
 @Service
+@EnableConfigurationProperties(TrStorageProperties.class)
 public class StorageFileServiceImpl implements IStorageFileService {
 
     //默认配置
     private SysStorageConfigDTO defaultConfig;
 
+    @Autowired
+    private TrStorageProperties storageProperties;
+
     @Autowired
     private FileClientFactory fileClientFactory;
 
@@ -73,7 +82,7 @@ public class StorageFileServiceImpl implements IStorageFileService {
                 .suffix(suffix)
                 .cateId(cateId)
                 .configId(defaultConfig.getId())
-                .size(content.length)
+                .size(content.length/1024)
                 .build();
         String recordId = storageRecordService.insertSysStorageRecordReturnId(record);
         record.setId(recordId);
@@ -105,6 +114,11 @@ public class StorageFileServiceImpl implements IStorageFileService {
         return fileClient.downUrl(record.getBizName());
     }
 
+    @Override
+    public String obtainPreviewPath(String recordId) throws Exception {
+        return   storageProperties.getPreviewUrl()+URLUtil.encode(Base64.encode(obtainDownloadPath(recordId)));
+    }
+
 
     private FileClient getClient(SysStorageConfigDTO storageConfig){
         return fileClientFactory.createOrUpdateFileClient(storageConfig.getId(), storageConfig.getType(),parseClientConfig(storageConfig.getType(), storageConfig.getConfig()));

+ 2 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/impl/SysStorageConfigServiceImpl.java

@@ -61,8 +61,8 @@ public class SysStorageConfigServiceImpl implements ISysStorageConfigService {
     public List<SysStorageConfigDTO> selectSysStorageConfigList(SysStorageConfigQueryDTO query){
         return SysStorageConfigMapper.INSTANCE.convertDtoList(
                 baseRepository.selectList(new LambdaQueryWrapper<SysStorageConfigPO>()
-                        .like(Objects.nonNull(query.getName()),SysStorageConfigPO::getName,
-                                query.getName())
+                        .like(Objects.nonNull(query.getName()),SysStorageConfigPO::getName, query.getName())
+                        .eq(Objects.nonNull(query.getType()),SysStorageConfigPO::getType, query.getType())
                 )
         );
     };

+ 2 - 9
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/service/impl/SysStorageRecordServiceImpl.java

@@ -1,10 +1,8 @@
 package cn.tr.module.sys.storage.service.impl;
 
-import cn.hutool.core.util.StrUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import cn.tr.module.sys.storage.repository.SysStorageRecordRepository;
 import cn.tr.module.sys.storage.po.SysStorageRecordPO;
 import cn.tr.module.sys.storage.dto.SysStorageRecordDTO;
@@ -32,12 +30,7 @@ public class SysStorageRecordServiceImpl implements ISysStorageRecordService {
      */
     @Override
     public List<SysStorageRecordDTO> selectSysStorageRecordList(SysStorageRecordQueryDTO query){
-        return SysStorageRecordMapper.INSTANCE.convertDtoList(
-                baseRepository.selectList(new LambdaQueryWrapper<SysStorageRecordPO>()
-                        .like(StrUtil.isNotEmpty(query.getRealName()),SysStorageRecordPO::getRealName,
-                                query.getRealName())
-                )
-        );
+        return baseRepository.stdSelectList(query);
     };
 
     /**
@@ -48,7 +41,7 @@ public class SysStorageRecordServiceImpl implements ISysStorageRecordService {
      */
     @Override
     public SysStorageRecordDTO selectSysStorageRecordById(String id){
-        return SysStorageRecordMapper.INSTANCE.convertDto(baseRepository.selectById(id));
+        return baseRepository.stdSelectById(id);
     }
 
     @Override

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/controller/SysTenantController.java

@@ -2,7 +2,7 @@ package cn.tr.module.sys.tenant.controller;
 
 import cn.tr.module.sys.tenant.dto.SysTenantAddDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import cn.dev33.satoken.annotation.SaCheckPermission;

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/controller/SysTenantPackageController.java

@@ -4,7 +4,7 @@ import cn.tr.core.pojo.TableDataInfo;
 import cn.tr.module.sys.tenant.dto.SysTenantPackageMenuAssignDTO;
 import cn.tr.module.sys.tenant.service.ISysTenantPackageMenuService;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import cn.dev33.satoken.annotation.SaCheckPermission;

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantPackageMenuServiceImpl.java

@@ -12,7 +12,7 @@ import cn.tr.module.sys.tenant.service.ISysTenantPackageMenuService;
 import cn.tr.module.sys.tenant.service.ISysTenantPackageService;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
 import cn.tr.module.sys.user.dto.SysRoleDTO;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.module.sys.user.service.ISysMenuService;
 import cn.tr.module.sys.user.service.ISysRoleService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantServiceImpl.java

@@ -12,7 +12,7 @@ import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantQueryDTO;
 import cn.tr.module.sys.tenant.service.ISysTenantPackageMenuService;
 import cn.tr.module.sys.user.dto.*;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.module.sys.user.enums.UserStatusEnum;
 import cn.tr.module.sys.tenant.po.SysTenantPO;
 import cn.tr.module.sys.tenant.repository.SysTenantRepository;

+ 1 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysRoleController.java

@@ -6,7 +6,7 @@ import cn.tr.core.pojo.TableDataInfo;
 import cn.tr.core.validation.Insert;
 import cn.tr.core.validation.Update;
 import cn.tr.module.sys.user.dto.*;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.module.sys.user.service.ISysRoleMenuService;
 import cn.tr.module.sys.user.service.ISysRoleService;
 import cn.tr.plugin.mybatis.base.BaseController;
@@ -20,7 +20,6 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @ClassName : SysRoleController

+ 2 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysPortalDTO.java

@@ -1,5 +1,6 @@
 package cn.tr.module.sys.user.dto;
 
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.core.validation.Update;
 import cn.tr.plugin.mybatis.pojo.BaseDTO;
 import io.swagger.annotations.ApiModelProperty;
@@ -26,7 +27,7 @@ public class SysPortalDTO  extends BaseDTO {
     private String name;
 
     /**
-     * {@link cn.tr.module.sys.user.enums.CreateEnum}
+     * {@link CreateEnum}
      */
     @ApiModelProperty(value = "门户类型 sys、系统门户 custom、自定义门户",readOnly = true)
     private String type;

+ 2 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysPortalPO.java

@@ -1,6 +1,7 @@
 package cn.tr.module.sys.user.po;
 
 import cn.tr.core.annotation.Comment;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.plugin.mybatis.pojo.TenantPO;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -28,7 +29,7 @@ public class SysPortalPO extends TenantPO {
     @Comment("门户首页菜单id")
     private String indexMenuId;
     /**
-     * {@link cn.tr.module.sys.user.enums.CreateEnum}
+     * {@link CreateEnum}
      */
     @Comment("门户类型 sys、系统门户 custom、自定义门户")
     private String type;

+ 2 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysRolePO.java

@@ -1,6 +1,7 @@
 package cn.tr.module.sys.user.po;
 
 import cn.tr.core.annotation.Comment;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.plugin.mybatis.config.handler.StringListTypeHandler;
 import cn.tr.plugin.mybatis.pojo.TenantPO;
 import cn.tr.plugin.numbering.strategy.core.annotation.Numbering;
@@ -39,7 +40,7 @@ public class SysRolePO extends TenantPO {
     private List<String> orgIds;
 
     /**
-     * {@link cn.tr.module.sys.user.enums.CreateEnum}
+     * {@link CreateEnum}
      */
     @Comment("角色类型 sys、系统角色 custom、自定义角色")
     private String type;

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysMenuServiceImpl.java

@@ -13,7 +13,7 @@ import cn.tr.module.sys.tenant.service.ISysTenantService;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
 import cn.tr.module.sys.user.dto.SysMenuQueryDTO;
 import cn.tr.module.sys.user.dto.SysRoleDTO;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.module.sys.user.po.SysMenuPO;
 import cn.tr.module.sys.user.repository.SysMenuRepository;
 import cn.tr.module.sys.user.service.*;

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalMenuServiceImpl.java

@@ -8,7 +8,7 @@ import cn.tr.module.sys.user.mapper.SysMenuMapper;
 import cn.tr.module.sys.tenant.service.ISysTenantService;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
 import cn.tr.module.sys.user.dto.SysPortalDTO;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.module.sys.user.po.SysPortalMenuPO;
 import cn.tr.module.sys.user.repository.SysMenuRepository;
 import cn.tr.module.sys.user.repository.SysPortalMenuRepository;

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalServiceImpl.java

@@ -7,7 +7,7 @@ import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.sys.user.mapper.SysPortalMapper;
 import cn.tr.module.sys.user.dto.SysPortalDTO;
 import cn.tr.module.sys.user.dto.SysPortalQueryDTO;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.module.sys.user.po.SysPortalMenuPO;
 import cn.tr.module.sys.user.po.SysPortalPO;
 import cn.tr.module.sys.user.repository.SysPortalMenuRepository;

+ 2 - 3
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleMenuServiceImpl.java

@@ -5,12 +5,10 @@ import cn.hutool.core.util.StrUtil;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.sys.user.mapper.SysMenuMapper;
-import cn.tr.module.sys.user.mapper.SysRoleMenuMapper;
 import cn.tr.module.sys.tenant.service.ISysTenantService;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
 import cn.tr.module.sys.user.dto.SysRoleDTO;
-import cn.tr.module.sys.user.dto.SysRoleMenuDTO;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.module.sys.user.po.SysRoleMenuPO;
 import cn.tr.module.sys.user.po.SysRolePO;
 import cn.tr.module.sys.user.repository.SysMenuRepository;
@@ -64,6 +62,7 @@ public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuRepository,Sy
         if (CollectionUtil.isNotEmpty(menuIds)) {
             List<SysRoleMenuPO> roleMenus = menuIds
                     .stream()
+                    .distinct()
                     .map(menuId -> {
                         SysRoleMenuPO result = new SysRoleMenuPO();
                         result.setMenuId(menuId);

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleServiceImpl.java

@@ -8,7 +8,7 @@ import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.sys.user.mapper.SysRoleMapper;
 import cn.tr.module.sys.user.dto.SysRoleDTO;
 import cn.tr.module.sys.user.dto.SysRoleQueryDTO;
-import cn.tr.module.sys.user.enums.CreateEnum;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.module.sys.user.po.SysRoleMenuPO;
 import cn.tr.module.sys.user.po.SysRolePO;
 import cn.tr.module.sys.user.repository.SysRoleMenuRepository;

+ 63 - 0
tr-modules/tr-module-system/src/main/resources/mapper/storage/SysStorageRecordMapper.xml

@@ -0,0 +1,63 @@
+<?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="cn.tr.module.sys.storage.repository.SysStorageRecordRepository">
+
+    <resultMap id="stdResult" type="cn.tr.module.sys.storage.dto.SysStorageRecordDTO">
+        <result property="id" column="id"/>
+        <result property="realName" column="real_name"/>
+        <result property="bizName" column="biz_name"/>
+        <result property="absolutePath" column="absolute_path"/>
+        <result property="configId" column="config_id"/>
+        <result property="configName" column="config_name"/>
+        <result property="size" column="size"/>
+        <result property="suffix" column="suffix"/>
+        <result property="cateId" column="cate_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="stdSelectList" resultMap="stdResult">
+        select
+        sr.id as id,
+        sr.real_name as real_name,
+        sr.biz_name as biz_name,
+        sr.absolute_path as absolute_path,
+        sr.config_id as config_id,
+        sr.config_name as config_name,
+        sr.size as size,
+        sr.suffix as suffix,
+        sr.cate_id as cate_id,
+        sr.create_time as create_time,
+        sr.update_time as update_time,
+        sc.`name` as config_name
+        from sys_storage_record as sr join sys_storage_config sc on sr.config_id=sc.id
+            <where>
+                <if test="query.configId != null">
+                    and st.config_id = #{query.configId}
+                </if>
+                <if test="query.realName != null">
+                   and st.real_name = #{query.realName}
+                </if>
+            </where>
+    </select>
+
+    <select id="stdSelectById" resultMap="stdResult">
+         select
+        sr.id as id,
+        sr.real_name as real_name,
+        sr.biz_name as biz_name,
+        sr.absolute_path as absolute_path,
+        sr.config_id as config_id,
+        sr.config_name as config_name,
+        sr.size as size,
+        sr.suffix as suffix,
+        sr.cate_id as cate_id,
+        sr.create_time as create_time,
+        sr.update_time as update_time,
+        sc.`name` as config_name
+        from sys_storage_record as sr join sys_storage_config sc on sr.config_id=sc.id
+        where sr.id = #{recordId}
+    </select>
+ </mapper>

+ 6 - 0
tr-plugins/tr-spring-boot-starter-plugin-file/pom.xml

@@ -26,6 +26,12 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
             <scope>provided</scope>
+            <exclusions>
+                <exclusion>
+                    <artifactId>spring-boot-starter-logging</artifactId>
+                    <groupId>org.springframework.boot</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>

+ 8 - 9
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/ali/AliFileClient.java

@@ -12,7 +12,6 @@ import lombok.extern.slf4j.Slf4j;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.util.Date;
 
 /**
  * @ClassName : AliFileClient
@@ -29,20 +28,20 @@ public class AliFileClient extends AbstractFileClient<AliFileClientConfig> {
 
     @Override
     public void doInit(AliFileClientConfig config) {
-        ossClient= new OSSClientBuilder().build(getConfig().getEndpoint(), getConfig().getAccessKey(), getConfig().getAccessSecret());
+        ossClient= new OSSClientBuilder().build(getConfig().getAliEndpoint(), getConfig().getAliAccessKey(), getConfig().getAliAccessSecret());
     }
 
     @Override
     public void upload(byte[] content, String bizPath) throws IOException {
         bizPath=parseBizPath(bizPath);
-        boolean exists = ossClient.doesBucketExist(getConfig().getBucketName());
+        boolean exists = ossClient.doesBucketExist(getConfig().getAliBucketName());
         if (!exists) {
-            ossClient.createBucket(getConfig().getBucketName());
-            ossClient.setBucketAcl(getConfig().getBucketName(), CannedAccessControlList.PublicReadWrite);
+            ossClient.createBucket(getConfig().getAliBucketName());
+            ossClient.setBucketAcl(getConfig().getAliBucketName(), CannedAccessControlList.PublicReadWrite);
         }
         ObjectMetadata objectMetadata = new ObjectMetadata();
         objectMetadata.setContentType(MediaTypeUtils.parseContentType(bizPath));
-        PutObjectRequest putObjectRequest = new PutObjectRequest(getConfig().getBucketName(), bizPath, IoUtil.toStream(content),objectMetadata);
+        PutObjectRequest putObjectRequest = new PutObjectRequest(getConfig().getAliBucketName(), bizPath, IoUtil.toStream(content),objectMetadata);
         ossClient.putObject(putObjectRequest);
         log.info("[{}]:[{}],文件[{}]上传成功",this.getClass().getCanonicalName(),getId(),bizPath);
     }
@@ -51,7 +50,7 @@ public class AliFileClient extends AbstractFileClient<AliFileClientConfig> {
     public void delete(String bizPath) {
         bizPath=parseBizPath(bizPath);
         try {
-            ossClient.deleteObject(getConfig().getBucketName(),bizPath);
+            ossClient.deleteObject(getConfig().getAliBucketName(),bizPath);
             log.info("[{}]:[{}],文件[{}]删除成功",this.getClass().getCanonicalName(),getId(),bizPath);
         }catch (Exception e){}
 
@@ -60,7 +59,7 @@ public class AliFileClient extends AbstractFileClient<AliFileClientConfig> {
     @Override
     public FileContent getContent(String bizPath) throws Exception {
         bizPath=parseBizPath(bizPath);
-        OSSObject result = ossClient.getObject(getConfig().getBucketName(), bizPath);
+        OSSObject result = ossClient.getObject(getConfig().getAliBucketName(), bizPath);
         if (!result.getResponse().isSuccessful()) {
             throw new FileNotFoundException(result.getResponse().getErrorResponseAsString());
         }
@@ -70,6 +69,6 @@ public class AliFileClient extends AbstractFileClient<AliFileClientConfig> {
     @Override
     public String previewUrl(String bizPath) throws Exception {
         bizPath=parseBizPath(bizPath);
-        return ossClient.generatePresignedUrl(getConfig().getBucketName(),bizPath, DateUtil.tomorrow()).toString();
+        return ossClient.generatePresignedUrl(getConfig().getAliBucketName(),bizPath, DateUtil.tomorrow()).toString();
     }
 }

+ 4 - 4
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/ali/AliFileClientConfig.java

@@ -17,24 +17,24 @@ public class AliFileClientConfig implements FileClientConfig {
      * accessKey
      */
     @NotBlank(message = "accessKey不能为空")
-    private String accessKey;
+    private String aliAccessKey;
 
     /**
      * accessSecret
      */
     @NotBlank(message = "accessSecret不能为空")
-    private String accessSecret;
+    private String aliAccessSecret;
 
     /**
      * 地域节点
      */
     @NotBlank(message = "地域节点不能为空")
-    private String endpoint;
+    private String aliEndpoint;
 
     /**
      * 桶名
      */
     @NotBlank(message = "桶名称不能为空")
-    private String bucketName;
+    private String aliBucketName;
 
 }

+ 4 - 4
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/db/DbFileClient.java

@@ -24,10 +24,10 @@ public class DbFileClient extends AbstractFileClient<DbFileClientConfig> {
 
     @Override
     public void doInit(DbFileClientConfig config) {
-        if (!config.getDomain().endsWith("/")) {
-            config.setDomain(config.getDomain() + "/");
+        if (!config.getDbDomain().endsWith("/")) {
+            config.setDbDomain(config.getDbDomain() + "/");
         }
-        config.setDomain(config.getDomain()+getId()+"/");
+        config.setDbDomain(config.getDbDomain()+getId()+"/");
     }
 
     @Override
@@ -53,7 +53,7 @@ public class DbFileClient extends AbstractFileClient<DbFileClientConfig> {
     @Override
     public String previewUrl(String bizPath) throws Exception {
         bizPath=parseBizPath(bizPath);
-        return  getConfig().getDomain()+bizPath;
+        return  getConfig().getDbDomain()+bizPath;
     }
 
 

+ 3 - 3
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/db/DbFileClientConfig.java

@@ -17,8 +17,8 @@ public class DbFileClientConfig implements FileClientConfig {
     /**
      * 自定义域名
      */
-    @NotEmpty(message = "domain 不能为空")
-    @URL(message = "domain 必须是 URL 格式")
-    private String domain;
+    @NotEmpty(message = "dbDomain 不能为空")
+    @URL(message = "dbDomain 必须是 URL 格式")
+    private String dbDomain;
 
 }

+ 8 - 10
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/local/LocalFileClient.java

@@ -2,12 +2,10 @@ package cn.tr.plugin.file.config.local;
 
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
-import cn.hutool.extra.spring.SpringUtil;
 import cn.tr.core.utils.MediaTypeUtils;
 import cn.tr.plugin.file.config.AbstractFileClient;
 import cn.tr.plugin.file.config.FileContent;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.web.ServerProperties;
 
 import java.io.*;
 
@@ -26,13 +24,13 @@ public class LocalFileClient extends AbstractFileClient<LocalFileClientConfig> {
     @Override
     public void doInit(LocalFileClientConfig config) {
         // 补全风格。例如说 Linux 是 /,Windows 是 \
-        if (!config.getBasePath().endsWith(File.separator)) {
-            config.setBasePath(config.getBasePath() + File.separator);
+        if (!config.getLocalBasePath().endsWith(File.separator)) {
+            config.setLocalBasePath(config.getLocalBasePath() + File.separator);
         }
-        if (!config.getDomain().endsWith("/")) {
-            config.setDomain(config.getDomain() + "/");
+        if (!config.getLocalDomain().endsWith("/")) {
+            config.setLocalDomain(config.getLocalDomain() + "/");
         }
-        config.setDomain(config.getDomain()+getId()+"/");
+        config.setLocalDomain(config.getLocalDomain()+getId()+"/");
     }
 
     @Override
@@ -70,13 +68,13 @@ public class LocalFileClient extends AbstractFileClient<LocalFileClientConfig> {
     @Override
     public String downUrl(String bizPath) {
         bizPath=parseBizPath(bizPath);
-        return getConfig().getDomain()+bizPath;
+        return getConfig().getLocalDomain()+bizPath;
     }
 
     @Override
     public String previewUrl(String bizPath) {
         bizPath=parseBizPath(bizPath);
-        return  getConfig().getDomain()+bizPath;
+        return  getConfig().getLocalDomain()+bizPath;
     }
 
     /**
@@ -85,6 +83,6 @@ public class LocalFileClient extends AbstractFileClient<LocalFileClientConfig> {
      * @return
      */
     private String getAbsPath(String bizPath){
-        return getConfig().getBasePath()+getId()+File.separator+bizPath;
+        return getConfig().getLocalBasePath()+getId()+File.separator+bizPath;
     }
 }

+ 4 - 4
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/local/LocalFileClientConfig.java

@@ -18,13 +18,13 @@ public class LocalFileClientConfig implements FileClientConfig {
      * 基础路径
      */
     @NotEmpty(message = "基础路径不能为空")
-    private String basePath;
+    private String localBasePath;
 
     /**
      * 自定义域名
      */
-    @NotEmpty(message = "domain 不能为空")
-    @URL(message = "domain 必须是 URL 格式")
-    private String domain;
+    @NotEmpty(message = "localDomain 不能为空")
+    @URL(message = "localDomain 必须是 URL 格式")
+    private String localDomain;
 
 }

+ 8 - 9
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/minio/MinIoFileClient.java

@@ -8,7 +8,6 @@ import io.minio.*;
 import io.minio.http.Method;
 import lombok.extern.slf4j.Slf4j;
 import java.io.ByteArrayInputStream;
-import java.util.concurrent.TimeUnit;
 
 /**
  * @ClassName : MinIoFileClient
@@ -29,19 +28,19 @@ public class MinIoFileClient extends AbstractFileClient<MinIoFileClientConfig> {
 
     @Override
     public void doInit(MinIoFileClientConfig config) {
-        if (!config.getHttpUrl().endsWith("/")) {
-            config.setHttpUrl(config.getHttpUrl() + "/");
+        if (!config.getMinioHttpUrl().endsWith("/")) {
+            config.setMinioHttpUrl(config.getMinioHttpUrl() + "/");
         }
         minioClient= MinioClient.builder()
-                .endpoint(config.getHttpUrl())
-                .credentials(config.getAccessKey(),config.getAccessSecret())
+                .endpoint(config.getMinioHttpUrl())
+                .credentials(config.getMinioAccessKey(),config.getMinioAccessSecret())
                 .build();
     }
 
     @Override
     public void upload(byte[] content, String bizPath) throws Exception {
         bizPath=parseBizPath(bizPath);
-        String bucketName = getConfig().getBucketName();
+        String bucketName = getConfig().getMinioBucketName();
         //先判断桶是否存在
         ByteArrayInputStream stream = IoUtil.toStream(content);
         try {
@@ -69,7 +68,7 @@ public class MinIoFileClient extends AbstractFileClient<MinIoFileClientConfig> {
         try {
             bizPath=parseBizPath(bizPath);
             RemoveObjectArgs objectArgs = RemoveObjectArgs.builder()
-                    .bucket(getConfig().getBucketName())
+                    .bucket(getConfig().getMinioBucketName())
                     .object(bizPath)
                     .build();
             minioClient.removeObject(objectArgs);
@@ -84,7 +83,7 @@ public class MinIoFileClient extends AbstractFileClient<MinIoFileClientConfig> {
     public FileContent getContent(String bizPath) throws Exception {
         bizPath=parseBizPath(bizPath);
         GetObjectResponse response = minioClient.getObject(GetObjectArgs.builder()
-                .bucket(getConfig().getBucketName())
+                .bucket(getConfig().getMinioBucketName())
                 .object(bizPath)
                 .build());
         return FileContent.of(IoUtil.readBytes(response),MediaTypeUtils.parseContentType(bizPath));
@@ -98,7 +97,7 @@ public class MinIoFileClient extends AbstractFileClient<MinIoFileClientConfig> {
     private String getPresignedObjectUrl(String bizPath) throws Exception {
         bizPath=parseBizPath(bizPath);
         return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
-                .bucket(getConfig().getBucketName())
+                .bucket(getConfig().getMinioBucketName())
                 .method(Method.GET)
                 .object(bizPath)
                 .build());

+ 4 - 4
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/minio/MinIoFileClientConfig.java

@@ -18,24 +18,24 @@ public class MinIoFileClientConfig implements FileClientConfig {
      * minio上传地址
      */
     @NotEmpty(message ="httpUrl不能为空" )
-    private String httpUrl;
+    private String minioHttpUrl;
 
     /**
      * accessKey
      */
     @NotEmpty(message ="accessKey不能为空" )
-    private String accessKey;
+    private String minioAccessKey;
 
     /**
      * 秘钥
      */
     @NotEmpty(message ="accessSecret不能为空" )
-    private String accessSecret;
+    private String minioAccessSecret;
 
     /**
      * 桶名称
      */
     @NotEmpty(message ="桶名称不能为空" )
-    private String bucketName;
+    private String minioBucketName;
 
 }

+ 0 - 106
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/qiniu/QiNiuFileClient.java

@@ -1,106 +0,0 @@
-package cn.tr.plugin.file.config.qiniu;
-
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.net.URLEncodeUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpUtil;
-import cn.tr.core.utils.MediaTypeUtils;
-import cn.tr.plugin.file.config.AbstractFileClient;
-import cn.tr.plugin.file.config.FileContent;
-import com.qiniu.storage.*;
-import com.qiniu.storage.model.AclType;
-import com.qiniu.util.Auth;
-import lombok.extern.slf4j.Slf4j;
-
-import java.io.IOException;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * @ClassName : QiNiuFileClient
- * @Description :
- * @Author : LF
- * @Date: 2023年03月13日
- */
-@Slf4j
-public class QiNiuFileClient extends AbstractFileClient<QiNiuFileClientConfig> {
-    /**
-     * 构造一个带指定 Region 对象的配置类
-     */
-    private final static Configuration cfg=new Configuration(Region.huabei());
-
-    private Auth auth=null;
-    private UploadManager uploadManager =null;
-    private BucketManager bucketManager=null;
-    private String domain=null;
-    static {
-        // 指定分片上传版本
-        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;
-    }
-
-    public QiNiuFileClient(String id, QiNiuFileClientConfig config) {
-        super(id, config);
-    }
-
-    @Override
-    public void doInit(QiNiuFileClientConfig config) {
-        this.auth = Auth.create(config.getAccessKey(), config.getAccessSecret());
-        this.uploadManager = new UploadManager(cfg);
-        this.bucketManager = new BucketManager(auth,cfg);
-        initBucketInfo();
-
-    }
-
-    @Override
-    public void upload(byte[] content, String bizPath) throws IOException {
-        bizPath=parseBizPath(bizPath);
-        try {
-            this.bucketManager.getBucketInfo(getConfig().getBucketName());
-        }catch (Exception e){
-            //不存在bucket
-            bucketManager.createBucket(getConfig().getBucketName(),"z1");
-            bucketManager.putBucketAccessMode(getConfig().getBucketName(), AclType.PUBLIC);
-        }
-        String upToken = this.auth.uploadToken(getConfig().getBucketName());
-        uploadManager.put(content,bizPath,upToken);
-        log.info("[{}]:[{}],文件[{}]上传成功",this.getClass().getCanonicalName(),getId(),bizPath);
-    }
-
-    @Override
-    public void delete(String bizPath) {
-        bizPath=parseBizPath(bizPath);
-        try {
-            bucketManager.delete(getConfig().getBucketName(),bizPath);
-            log.info("[{}]:[{}],文件[{}]删除成功",this.getClass().getCanonicalName(),getId(),bizPath);
-        }catch (Exception e){
-
-        }
-
-    }
-
-    @Override
-    public FileContent getContent(String bizPath) throws Exception {
-        bizPath=parseBizPath(bizPath);
-        initBucketInfo();
-        HttpRequest request = HttpUtil.createGet(URLEncodeUtil.encode(String.format("http://%s/%s",domain, bizPath)));
-        return FileContent.of(request.execute().bodyBytes(), MediaTypeUtils.parseContentType(bizPath));
-    }
-
-    @Override
-    public String previewUrl(String bizPath) throws Exception {
-        bizPath=parseBizPath(bizPath);
-        initBucketInfo();
-        return URLEncodeUtil.encode(String.format("http://%s/%s",domain, bizPath));
-    }
-
-    private void initBucketInfo(){
-        if(StrUtil.isEmpty(domain)){
-            try {
-                domain= CollectionUtil.getFirst(Stream.of(bucketManager.domainList(getConfig().getBucketName())).collect(Collectors.toList()));
-            }catch (Exception e){
-                throw new IllegalArgumentException("[{七牛云}]: bucket[{%s}]获取信息失败",e);
-            }
-        }
-    }
-}

+ 0 - 34
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/qiniu/QiNiuFileClientConfig.java

@@ -1,34 +0,0 @@
-package cn.tr.plugin.file.config.qiniu;
-
-import cn.tr.plugin.file.config.FileClientConfig;
-import lombok.Data;
-
-import javax.validation.constraints.NotEmpty;
-
-/**
- * @ClassName : MinioFileClientConfig
- * @Description :
- * @Author : LF
- * @Date: 2023年03月08日
- */
-@Data
-public class QiNiuFileClientConfig implements FileClientConfig {
-    /**
-     * accessKey
-     */
-    @NotEmpty(message ="accessKey不能为空" )
-    private String accessKey;
-
-    /**
-     * accessSecret
-     */
-    @NotEmpty(message ="accessSecret不能为空" )
-    private String accessSecret;
-
-    /**
-     * 桶名
-     */
-    @NotEmpty(message ="桶名称不能为空" )
-    private String bucketName;
-
-}

+ 0 - 6
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/enums/FileStorageEnum.java

@@ -12,8 +12,6 @@ import cn.tr.plugin.file.config.local.LocalFileClient;
 import cn.tr.plugin.file.config.local.LocalFileClientConfig;
 import cn.tr.plugin.file.config.minio.MinIoFileClient;
 import cn.tr.plugin.file.config.minio.MinIoFileClientConfig;
-import cn.tr.plugin.file.config.qiniu.QiNiuFileClient;
-import cn.tr.plugin.file.config.qiniu.QiNiuFileClientConfig;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -39,10 +37,6 @@ public enum  FileStorageEnum {
      * 本地存储
      */
     Local("local", LocalFileClientConfig.class, LocalFileClient.class),
-    /**
-     * 七牛云存储
-     */
-    QiNiu("qiniu", QiNiuFileClientConfig.class, QiNiuFileClient.class),
     /**
      * 数据库存储
      */

+ 12 - 28
tr-plugins/tr-spring-boot-starter-plugin-file/src/test/java/cn/tr/plugin/file/config/FileClientTest.java

@@ -1,7 +1,5 @@
 package cn.tr.plugin.file.config;
 
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.IoUtil;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpUtil;
 import cn.tr.core.utils.JsonUtils;
@@ -11,15 +9,12 @@ import cn.tr.plugin.file.config.local.LocalFileClient;
 import cn.tr.plugin.file.config.local.LocalFileClientConfig;
 import cn.tr.plugin.file.config.minio.MinIoFileClient;
 import cn.tr.plugin.file.config.minio.MinIoFileClientConfig;
-import cn.tr.plugin.file.config.qiniu.QiNiuFileClient;
-import cn.tr.plugin.file.config.qiniu.QiNiuFileClientConfig;
 import cn.tr.plugin.test.ut.BaseMockitoUnitTest;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 
@@ -52,8 +47,8 @@ public class FileClientTest extends BaseMockitoUnitTest {
     @Test
     public void getByFactory() throws Exception {
         clientConfig=new LocalFileClientConfig();
-        ((LocalFileClientConfig) clientConfig).setBasePath("E:\\量化");
-        ((LocalFileClientConfig) clientConfig).setDomain("http://www.baidu.com");
+        ((LocalFileClientConfig) clientConfig).setLocalBasePath("E:\\量化");
+        ((LocalFileClientConfig) clientConfig).setLocalDomain("http://www.baidu.com");
         FileClientConfig fileClientConfig = JsonUtils.parseObject(JsonUtils.toJsonString(clientConfig), FileClientConfig.class);
         fileClient = fileClientFactory.createOrUpdateFileClient("123", "3", fileClientConfig);
         test();
@@ -66,8 +61,8 @@ public class FileClientTest extends BaseMockitoUnitTest {
     @Test
     public void localFile() throws Exception {
         clientConfig=new LocalFileClientConfig();
-        ((LocalFileClientConfig)clientConfig).setBasePath("E:\\量化");
-        ((LocalFileClientConfig)clientConfig).setDomain("http://www.baidu.com");
+        ((LocalFileClientConfig)clientConfig).setLocalBasePath("E:\\量化");
+        ((LocalFileClientConfig)clientConfig).setLocalDomain("http://www.baidu.com");
         String s = JsonUtils.toJsonString(clientConfig);
 
         fileClient=new LocalFileClient("local",(LocalFileClientConfig)clientConfig);
@@ -79,10 +74,10 @@ public class FileClientTest extends BaseMockitoUnitTest {
     @Test
     public void minIoFile() throws Exception {
         clientConfig=new MinIoFileClientConfig();
-        ((MinIoFileClientConfig)clientConfig).setHttpUrl("http://192.168.100.32:7001");
-        ((MinIoFileClientConfig)clientConfig).setAccessKey("nbnetpump");
-        ((MinIoFileClientConfig)clientConfig).setAccessSecret("tuoren123");
-        ((MinIoFileClientConfig)clientConfig).setBucketName("local-test");
+        ((MinIoFileClientConfig)clientConfig).setMinioHttpUrl("http://192.168.100.32:7001");
+        ((MinIoFileClientConfig)clientConfig).setMinioAccessKey("nbnetpump");
+        ((MinIoFileClientConfig)clientConfig).setMinioAccessSecret("tuoren123");
+        ((MinIoFileClientConfig)clientConfig).setMinioBucketName("local-test");
         fileClient=new MinIoFileClient("local",(MinIoFileClientConfig)clientConfig);
         System.out.println(JsonUtils.toJsonString(clientConfig));
 //        ((MinIoFileClient) fileClient).init();
@@ -93,25 +88,14 @@ public class FileClientTest extends BaseMockitoUnitTest {
     @Test
     public void aliFile() throws Exception {
         clientConfig=new AliFileClientConfig();
-        ((AliFileClientConfig)clientConfig).setAccessKey("LTAI4G7FA9ytMc76oNkJ45YJ");
-        ((AliFileClientConfig)clientConfig).setAccessSecret("R7hOvMfiHb0PYroDqUDXAYgB9htQss");
-        ((AliFileClientConfig)clientConfig).setBucketName("test-4565");
-        ((AliFileClientConfig)clientConfig).setEndpoint("oss-cn-hangzhou.aliyuncs.com");
+        ((AliFileClientConfig)clientConfig).setAliAccessKey("LTAI4G7FA9ytMc76oNkJ45YJ");
+        ((AliFileClientConfig)clientConfig).setAliAccessSecret("R7hOvMfiHb0PYroDqUDXAYgB9htQss");
+        ((AliFileClientConfig)clientConfig).setAliBucketName("test-4565");
+        ((AliFileClientConfig)clientConfig).setAliEndpoint("oss-cn-hangzhou.aliyuncs.com");
         fileClient=new AliFileClient("local", (AliFileClientConfig) clientConfig);
         test();
     }
 
-    @Test
-    public void qiniuFile() throws Exception {
-        clientConfig=new QiNiuFileClientConfig();
-        ((QiNiuFileClientConfig)clientConfig).setAccessKey("kvPPNwZK31EUEX7_c_yv0ZXEoozGlqWDwnKEH7rx");
-        ((QiNiuFileClientConfig)clientConfig).setAccessSecret("V2abL98enA1bvI8NdcCF5dudtksVRuoO7ipoNyYA");
-        ((QiNiuFileClientConfig)clientConfig).setBucketName("test-4565");
-        fileClient=new QiNiuFileClient("local", (QiNiuFileClientConfig) clientConfig);
-        ((QiNiuFileClient) fileClient).init();
-        test();
-    }
-
     private void test() throws Exception {
         upload();
         getContent();

+ 2 - 0
tr-test/src/main/resources/application.yml

@@ -28,6 +28,8 @@ spring:
 
 
 tr:
+  storage:
+    previewUrl: http://192.168.100.32:8012/onlinePreview?url=
   oauth2:
     psw:
       client-id: 1234