Selaa lähdekoodia

项目结构调整 x 3

YunaiV 4 vuotta sitten
vanhempi
commit
90e4966420
40 muutettua tiedostoa jossa 451 lisäystä ja 477 poistoa
  1. 1 13
      pom.xml
  2. 25 0
      yudao-admin-server/pom.xml
  3. 3 2
      yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/config/InfConfigDAOImpl.java
  4. 0 13
      yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/operatelog/SysOperateLogCreateReqVO.java
  5. 7 0
      yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictDataConvert.java
  6. 1 0
      yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictTypeConvert.java
  7. 2 2
      yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysOperateLogConvert.java
  8. 7 7
      yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/service/dict/impl/SysDictDataServiceImpl.java
  9. 2 2
      yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysOperateLogServiceImpl.java
  10. 2 2
      yudao-admin-server/src/test/java/cn/iocoder/dashboard/modules/system/service/logger/SysOperateLogServiceImplTest.java
  11. 0 355
      yudao-dependencies/pom.xml
  12. 156 2
      yudao-framework/pom.xml
  13. 4 0
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/core/ConfigConsts.java
  14. 6 2
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/ConfigFrameworkDAO.java
  15. 7 7
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/DBConfigRepository.java
  16. 33 0
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/dto/ConfigRespDTO.java
  17. 33 0
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/dict/core/dto/DictDataRespDTO.java
  18. 4 4
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/dict/core/service/DictDataFrameworkService.java
  19. 3 3
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/dict/core/util/DictUtils.java
  20. 4 4
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/excel/core/convert/DictConvert.java
  21. 1 2
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/file/config/FileProperties.java
  22. 42 42
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/logger/operatelog/core/aop/OperateLogAspect.java
  23. 84 0
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/logger/operatelog/core/dto/OperateLogCreateReqDTO.java
  24. 2 2
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/logger/operatelog/core/service/OperateLogFrameworkService.java
  25. 1 2
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/mybatis/core/type/JsonLongSetTypeHandler.java
  26. 2 2
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/security/core/filter/JwtAuthenticationTokenFilter.java
  27. 1 3
      yudao-framework/src/main/java/cn/iocoder/dashboard/framework/security/core/service/SecurityPermissionFrameworkService.java
  28. 0 0
      yudao-framework/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java
  29. 0 6
      yudao-framework/src/main/java/cn/iocoder/dashboard/util/RandomUtils.java
  30. 13 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/BaseMockitoUnitTest.java
  31. 0 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/framework/package-info.java
  32. 0 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/aliyun/AliyunSmsClientTest.java
  33. 0 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/aliyun/AliyunSmsCodeMappingTest.java
  34. 1 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/package-info.java
  35. 0 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsClientTest.java
  36. 0 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsCodeMappingTest.java
  37. 1 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/package-info.java
  38. 1 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/package-info.java
  39. 1 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/package-info.java
  40. 1 0
      yudao-framework/src/test/java/cn/iocoder/dashboard/package-info.java

+ 1 - 13
pom.xml

@@ -9,7 +9,7 @@
     <version>${revision}</version>
     <packaging>pom</packaging>
     <modules>
-        <module>yudao-dependencies</module>
+<!--        <module>yudao-dependencies</module>-->
 <!--        <module>yudao-framework</module>-->
         <module>yudao-admin-server</module>
         <module>yudao-framework</module>
@@ -23,16 +23,4 @@
         <revision>1.0.0</revision>
     </properties>
 
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>cn.iocoder.boot</groupId>
-                <artifactId>yudao-dependencies</artifactId>
-                <version>${revision}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
 </project>

+ 25 - 0
yudao-admin-server/pom.xml

@@ -7,12 +7,37 @@
     <groupId>cn.iocoder.boot</groupId>
     <artifactId>yudao-admin-server</artifactId>
     <version>${revision}</version>
+
     <packaging>jar</packaging>
 
     <name>yudao-admin-server</name>
     <description>管理后台 Server,提供其 API 接口</description>
     <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
 
+    <properties>
+        <revision>1.0.0</revision>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-framework</artifactId>
+            <version>${revision}</version>
+        </dependency>
+    </dependencies>
 
+    <!-- TODO 稍后清理掉 -->
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
 </project>

+ 3 - 2
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/config/InfConfigDAOImpl.java

@@ -1,6 +1,7 @@
 package cn.iocoder.dashboard.modules.infra.dal.mysql.config;
 
 import cn.iocoder.dashboard.framework.apollo.internals.ConfigFrameworkDAO;
+import cn.iocoder.dashboard.framework.apollo.internals.dto.ConfigRespDTO;
 import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -32,8 +33,8 @@ public class InfConfigDAOImpl implements ConfigFrameworkDAO {
     }
 
     @Override
-    public List<InfConfigDO> selectList() {
-        return jdbcTemplate.query("SELECT `key`, `value`, update_time, deleted FROM inf_config", new BeanPropertyRowMapper<>(InfConfigDO.class));
+    public List<ConfigRespDTO> selectList() {
+        return jdbcTemplate.query("SELECT `key`, `value`, update_time, deleted FROM inf_config", new BeanPropertyRowMapper<>(ConfigRespDTO.class));
     }
 
 }

+ 0 - 13
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/operatelog/SysOperateLogCreateReqVO.java

@@ -1,13 +0,0 @@
-package cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-@ApiModel(value = "操作日志创建 Request VO", description = "暂时提供给前端,仅仅后端切面记录操作日志时,进行使用")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class SysOperateLogCreateReqVO extends SysOperateLogBaseVO {
-}

+ 7 - 0
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictDataConvert.java

@@ -1,11 +1,14 @@
 package cn.iocoder.dashboard.modules.system.convert.dict;
 
 import cn.iocoder.dashboard.common.pojo.PageResult;
+import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO;
 import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.*;
 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO;
+import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
+import java.util.Collection;
 import java.util.List;
 
 @Mapper
@@ -25,4 +28,8 @@ public interface SysDictDataConvert {
 
     List<SysDictDataExcelVO> convertList02(List<SysDictDataDO> bean);
 
+    DictDataRespDTO convert02(SysDictDataDO bean);
+
+    List<DictDataRespDTO> convertList03(Collection<SysDictDataDO> list);
+
 }

+ 1 - 0
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictTypeConvert.java

@@ -1,6 +1,7 @@
 package cn.iocoder.dashboard.modules.system.convert.dict;
 
 import cn.iocoder.dashboard.common.pojo.PageResult;
+import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO;
 import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.*;
 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO;
 import org.mapstruct.Mapper;

+ 2 - 2
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysOperateLogConvert.java

@@ -1,7 +1,7 @@
 package cn.iocoder.dashboard.modules.system.convert.logger;
 
 import cn.iocoder.dashboard.common.pojo.PageResult;
-import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO;
+import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogExcelVO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogRespVO;
 import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysOperateLogDO;
@@ -21,7 +21,7 @@ public interface SysOperateLogConvert {
 
     SysOperateLogConvert INSTANCE = Mappers.getMapper(SysOperateLogConvert.class);
 
-    SysOperateLogDO convert(SysOperateLogCreateReqVO bean);
+    SysOperateLogDO convert(OperateLogCreateReqDTO bean);
 
     PageResult<SysOperateLogRespVO> convertPage(PageResult<SysOperateLogDO> page);
 

+ 7 - 7
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/service/dict/impl/SysDictDataServiceImpl.java

@@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.dict.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
 import cn.iocoder.dashboard.common.pojo.PageResult;
+import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO;
 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
 import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO;
 import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataExportReqVO;
@@ -23,7 +24,6 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
@@ -239,18 +239,18 @@ public class SysDictDataServiceImpl implements SysDictDataService {
     }
 
     @Override
-    public SysDictDataDO getDictDataFromCache(String type, String value) {
-        return valueDictDataCache.get(type, value);
+    public DictDataRespDTO getDictDataFromCache(String type, String value) {
+        return SysDictDataConvert.INSTANCE.convert02(valueDictDataCache.get(type, value));
     }
 
     @Override
-    public SysDictDataDO parseDictDataFromCache(String type, String label) {
-        return labelDictDataCache.get(type, label);
+    public DictDataRespDTO parseDictDataFromCache(String type, String label) {
+        return SysDictDataConvert.INSTANCE.convert02(labelDictDataCache.get(type, label));
     }
 
     @Override
-    public List<SysDictDataDO> listDictDatasFromCache(String type) {
-        return new ArrayList<>(labelDictDataCache.row(type).values());
+    public List<DictDataRespDTO> listDictDatasFromCache(String type) {
+        return SysDictDataConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values()));
     }
 
 }

+ 2 - 2
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysOperateLogServiceImpl.java

@@ -3,7 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.logger.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.dashboard.common.pojo.PageResult;
-import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO;
+import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO;
 import cn.iocoder.dashboard.modules.system.convert.logger.SysOperateLogConvert;
@@ -40,7 +40,7 @@ public class SysOperateLogServiceImpl implements SysOperateLogService {
 
     @Override
     @Async
-    public Future<Boolean> createOperateLogAsync(SysOperateLogCreateReqVO reqVO) {
+    public Future<Boolean> createOperateLogAsync(OperateLogCreateReqDTO reqVO) {
         boolean success = false;
         try {
             SysOperateLogDO logDO = SysOperateLogConvert.INSTANCE.convert(reqVO);

+ 2 - 2
yudao-admin-server/src/test/java/cn/iocoder/dashboard/modules/system/service/logger/SysOperateLogServiceImplTest.java

@@ -7,7 +7,7 @@ import cn.iocoder.dashboard.common.exception.enums.GlobalErrorCodeConstants;
 import cn.iocoder.dashboard.common.pojo.PageResult;
 import cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum;
 import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils;
-import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO;
+import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO;
 import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO;
 import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysOperateLogDO;
@@ -48,7 +48,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest {
     @Test
     public void testCreateOperateLogAsync() throws InterruptedException, ExecutionException {
         String traceId = TracerUtils.getTraceId();
-        SysOperateLogCreateReqVO reqVO = RandomUtils.randomPojo(SysOperateLogCreateReqVO.class, o -> {
+        OperateLogCreateReqDTO reqVO = RandomUtils.randomPojo(OperateLogCreateReqDTO.class, o -> {
             o.setTraceId(traceId);
             o.setUserId(randomLongId());
             o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build());

+ 0 - 355
yudao-dependencies/pom.xml

@@ -13,359 +13,4 @@
     <description>基础 bom 文件,管理整个项目的依赖版本</description>
     <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
 
-    <properties>
-        <revision>1.0.0</revision>
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <resource.delimiter>@</resource.delimiter>
-        <java.version>1.8</java.version>
-        <maven.compiler.source>${java.version}</maven.compiler.source>
-        <maven.compiler.target>${java.version}</maven.compiler.target>
-        <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
-
-        <!-- 统一依赖管理 -->
-        <spring.boot.version>2.4.4</spring.boot.version>
-        <!-- Web 相关 -->
-        <knife4j.version>3.0.2</knife4j.version>
-        <swagger-annotations.version>1.5.22</swagger-annotations.version>
-        <!-- DB 相关 -->
-        <mysql-connector-java.version>5.1.46</mysql-connector-java.version>
-        <druid.version>1.2.4</druid.version>
-        <mybatis-plus.version>3.4.2</mybatis-plus.version>
-        <dynamic-datasource.version>3.3.2</dynamic-datasource.version>
-        <redisson.version>3.15.1</redisson.version>
-        <!-- Config 配置中心相关 -->
-        <apollo.version>1.7.0</apollo.version>
-        <!-- 服务保障相关 -->
-        <lock4j.version>2.2.0</lock4j.version>
-        <resilience4j.version>1.7.0</resilience4j.version>
-        <!-- 监控相关 -->
-        <skywalking.version>8.5.0</skywalking.version>
-        <logback.encoder.version>6.1</logback.encoder.version>
-        <spring-boot-admin.version>2.3.1</spring-boot-admin.version>
-        <!-- 工具类相关 -->
-        <lombok.version>1.16.14</lombok.version>
-        <mapstruct.version>1.4.1.Final</mapstruct.version>
-        <hutool.version>5.6.1</hutool.version>
-        <easyexcel.verion>2.2.7</easyexcel.verion>
-        <velocity.version>2.2</velocity.version>
-        <screw.version>1.0.5</screw.version>
-        <podam.version>7.2.6.RELEASE</podam.version>
-        <jedis-mock.version>0.1.16</jedis-mock.version>
-        <!-- 三方云服务相关 -->
-        <aliyun-java-sdk-core.version>4.5.18</aliyun-java-sdk-core.version>
-        <aliyun-java-sdk-dysmsapi.version>2.1.0</aliyun-java-sdk-dysmsapi.version>
-        <yunpian-java-sdk.version>1.2.7</yunpian-java-sdk.version>
-    </properties>
-
-    <dependencyManagement>
-        <dependencies>
-            <!-- 统一依赖管理 -->
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-dependencies</artifactId>
-                <version>${spring.boot.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-
-            <!-- 通用相关 -->
-            <dependency>
-                <groupId>cn.iocoder.boot</groupId>
-                <artifactId>yudao-dependencies</artifactId>
-                <version>${revision}</version>
-            </dependency>
-
-            <!-- Spring 核心 -->
-            <dependency>
-                <!-- 用于生成自定义的 Spring @ConfigurationProperties 配置类的说明文件 -->
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-configuration-processor</artifactId>
-                <optional>true</optional>
-            </dependency>
-
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-aop</artifactId>
-            </dependency>
-
-            <!-- Web 相关 -->
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-web</artifactId>
-            </dependency>
-
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-security</artifactId>
-            </dependency>
-
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-validation</artifactId>
-            </dependency>
-
-            <dependency>
-                <groupId>com.github.xiaoymin</groupId>
-                <artifactId>knife4j-spring-boot-starter</artifactId>
-                <version>${knife4j.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <artifactId>mapstruct</artifactId>
-                        <groupId>org.mapstruct</groupId> <!-- 避免冲突 -->
-                    </exclusion>
-                    <exclusion>
-                        <artifactId>guava</artifactId>
-                        <groupId>com.google.guava</groupId>
-                    </exclusion>
-                    <exclusion>
-                        <artifactId>swagger-annotations</artifactId>
-                        <groupId>io.swagger</groupId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>io.swagger</groupId>
-                <artifactId>swagger-annotations</artifactId>
-                <version>${swagger-annotations.version}</version>
-            </dependency>
-
-            <!-- DB 相关 -->
-            <dependency>
-                <groupId>mysql</groupId>
-                <artifactId>mysql-connector-java</artifactId>
-                <version>${mysql-connector-java.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.alibaba</groupId>
-                <artifactId>druid-spring-boot-starter</artifactId>
-                <version>${druid.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.baomidou</groupId>
-                <artifactId>mybatis-plus-boot-starter</artifactId>
-                <version>${mybatis-plus.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.baomidou</groupId>
-                <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <!-- 多数据源 -->
-                <version>${dynamic-datasource.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.redisson</groupId>
-                <artifactId>redisson-spring-boot-starter</artifactId>
-                <version>${redisson.version}</version>
-            </dependency>
-
-            <!-- Config 配置中心相关 -->
-            <dependency>
-                <groupId>com.ctrip.framework.apollo</groupId>
-                <artifactId>apollo-client</artifactId> <!-- 引入 Apollo Client 库,实现内嵌的配置中心 -->
-                <version>${apollo.version}</version>
-            </dependency>
-
-            <!-- Job 定时任务相关 -->
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-quartz</artifactId>
-            </dependency>
-
-            <!-- 服务保障相关 -->
-            <dependency>
-                <groupId>com.baomidou</groupId>
-                <artifactId>lock4j-redisson-spring-boot-starter</artifactId>
-                <version>${lock4j.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <artifactId>redisson-spring-boot-starter</artifactId>
-                        <groupId>org.redisson</groupId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-
-            <dependency>
-                <groupId>io.github.resilience4j</groupId>
-                <artifactId>resilience4j-spring-boot2</artifactId>
-                <version>${resilience4j.version}</version>
-            </dependency>
-
-            <!-- 监控相关 -->
-            <dependency>
-                <groupId>org.apache.skywalking</groupId>
-                <artifactId>apm-toolkit-trace</artifactId>
-                <version>${skywalking.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.skywalking</groupId>
-                <artifactId>apm-toolkit-logback-1.x</artifactId>
-                <version>${skywalking.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.skywalking</groupId>
-                <artifactId>apm-toolkit-opentracing</artifactId>
-                <version>${skywalking.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>de.codecentric</groupId>
-                <artifactId>spring-boot-admin-starter-server</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 -->
-                <version>${spring-boot-admin.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>de.codecentric</groupId>
-                <artifactId>spring-boot-admin-starter-client</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 -->
-                <version>${spring-boot-admin.version}</version>
-            </dependency>
-
-            <!-- Test 测试相关 -->
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-test</artifactId>
-                <scope>test</scope>
-                <exclusions>
-                    <exclusion>
-                        <artifactId>asm</artifactId>
-                        <groupId>org.ow2.asm</groupId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-
-            <dependency>
-                <groupId>com.h2database</groupId> <!-- 单元测试,我们采用 H2 作为数据库 -->
-                <artifactId>h2</artifactId>
-                <scope>test</scope>
-            </dependency>
-
-            <dependency>
-                <groupId>com.github.fppt</groupId> <!-- 单元测试,我们采用内嵌的 Redis 数据库 -->
-                <artifactId>jedis-mock</artifactId>
-                <version>${jedis-mock.version}</version>
-                <scope>test</scope>
-            </dependency>
-
-            <dependency>
-                <groupId>uk.co.jemos.podam</groupId> <!-- 单元测试,随机生成 POJO 类 -->
-                <artifactId>podam</artifactId>
-                <version>${podam.version}</version>
-                <scope>test</scope>
-            </dependency>
-
-            <!-- 工具类相关 -->
-            <dependency>
-                <groupId>org.projectlombok</groupId>
-                <artifactId>lombok</artifactId>
-                <version>${lombok.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.mapstruct</groupId>
-                <artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
-                <version>${mapstruct.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.mapstruct</groupId>
-                <artifactId>mapstruct-processor</artifactId>
-                <version>${mapstruct.version}</version>
-                <optional>true</optional>
-            </dependency>
-            <dependency>
-                <groupId>org.mapstruct</groupId>
-                <artifactId>mapstruct-jdk8</artifactId>
-                <version>${mapstruct.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>cn.hutool</groupId>
-                <artifactId>hutool-all</artifactId>
-                <version>${hutool.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>com.alibaba</groupId>
-                <artifactId>easyexcel</artifactId>
-                <version>${easyexcel.verion}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.apache.velocity</groupId>
-                <artifactId>velocity-engine-core</artifactId>
-                <version>${velocity.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>cn.smallbun.screw</groupId>
-                <artifactId>screw-core</artifactId> <!-- 实现数据库文档 -->
-                <version>${screw.version}</version>
-            </dependency>
-
-            <!-- 三方云服务相关 -->
-
-            <!-- SMS SDK begin -->
-            <dependency>
-                <groupId>com.yunpian.sdk</groupId>
-                <artifactId>yunpian-java-sdk</artifactId>
-                <version>${yunpian-java-sdk.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>com.aliyun</groupId>
-                <artifactId>aliyun-java-sdk-core</artifactId>
-                <version>${aliyun-java-sdk-core.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.aliyun</groupId>
-                <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
-                <version>${aliyun-java-sdk-dysmsapi.version}</version>
-            </dependency>
-            <!-- SMS SDK end -->
-        </dependencies>
-    </dependencyManagement>
-
-    <build>
-        <!-- 设置构建的 jar 包名 -->
-        <finalName>${project.artifactId}</finalName>
-        <plugins>
-            <!-- 打包 -->
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>${spring.boot.version}</version>
-                <configuration>
-                    <fork>true</fork>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal> <!-- 将原来的 jar 打入其中 -->
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <!-- 提供给 mapstruct 使用 -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>${maven-compiler-plugin.version}</version>
-                <configuration>
-                    <source>${java.version}</source> <!-- or higher, depending on your project -->
-                    <target>${java.version}</target> <!-- or higher, depending on your project -->
-                    <annotationProcessorPaths>
-                        <path>
-                            <groupId>org.mapstruct</groupId>
-                            <artifactId>mapstruct-processor</artifactId>
-                            <version>${mapstruct.version}</version>
-                        </path>
-                        <path>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                            <version>${lombok.version}</version>
-                        </path>
-                    </annotationProcessorPaths>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>

+ 156 - 2
yudao-framework/pom.xml

@@ -11,12 +11,70 @@
 
     <artifactId>yudao-framework</artifactId>
 
+    <properties>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <resource.delimiter>@</resource.delimiter>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
+        <!-- 统一依赖管理 -->
+        <spring.boot.version>2.4.4</spring.boot.version>
+        <!-- Web 相关 -->
+        <knife4j.version>3.0.2</knife4j.version>
+        <swagger-annotations.version>1.5.22</swagger-annotations.version>
+        <!-- DB 相关 -->
+        <mysql-connector-java.version>5.1.46</mysql-connector-java.version>
+        <druid.version>1.2.4</druid.version>
+        <mybatis-plus.version>3.4.2</mybatis-plus.version>
+        <dynamic-datasource.version>3.3.2</dynamic-datasource.version>
+        <redisson.version>3.15.1</redisson.version>
+        <!-- Config 配置中心相关 -->
+        <apollo.version>1.7.0</apollo.version>
+        <!-- 服务保障相关 -->
+        <lock4j.version>2.2.0</lock4j.version>
+        <resilience4j.version>1.7.0</resilience4j.version>
+        <!-- 监控相关 -->
+        <skywalking.version>8.5.0</skywalking.version>
+        <logback.encoder.version>6.1</logback.encoder.version>
+        <spring-boot-admin.version>2.3.1</spring-boot-admin.version>
+        <!-- 工具类相关 -->
+        <lombok.version>1.16.14</lombok.version>
+        <mapstruct.version>1.4.1.Final</mapstruct.version>
+        <hutool.version>5.6.1</hutool.version>
+        <easyexcel.verion>2.2.7</easyexcel.verion>
+        <velocity.version>2.2</velocity.version>
+        <screw.version>1.0.5</screw.version>
+        <podam.version>7.2.6.RELEASE</podam.version>
+        <jedis-mock.version>0.1.16</jedis-mock.version>
+        <!-- 三方云服务相关 -->
+        <aliyun-java-sdk-core.version>4.5.18</aliyun-java-sdk-core.version>
+        <aliyun-java-sdk-dysmsapi.version>2.1.0</aliyun-java-sdk-dysmsapi.version>
+        <yunpian-java-sdk.version>1.2.7</yunpian-java-sdk.version>
+    </properties>
+
+    <!-- 依赖声明 -->
+    <dependencyManagement>
+        <dependencies>
+            <!-- 统一依赖管理 -->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring.boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
     <dependencies>
         <!-- Spring 核心 -->
         <dependency>
             <!-- 用于生成自定义的 Spring @ConfigurationProperties 配置类的说明文件 -->
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
         </dependency>
 
         <dependency>
@@ -43,39 +101,61 @@
         <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-spring-boot-starter</artifactId>
+            <version>${knife4j.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>mapstruct</artifactId>
+                    <groupId>org.mapstruct</groupId> <!-- 避免冲突 -->
+                </exclusion>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>swagger-annotations</artifactId>
+                    <groupId>io.swagger</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>io.swagger</groupId>
             <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-annotations.version}</version>
         </dependency>
 
         <!-- DB 相关 -->
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql-connector-java.version}</version>
         </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid-spring-boot-starter</artifactId>
+            <version>${druid.version}</version>
         </dependency>
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>${mybatis-plus.version}</version>
         </dependency>
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <!-- 多数据源 -->
+            <version>${dynamic-datasource.version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.redisson</groupId>
             <artifactId>redisson-spring-boot-starter</artifactId>
+            <version>${redisson.version}</version>
         </dependency>
 
         <!-- Config 配置中心相关 -->
         <dependency>
             <groupId>com.ctrip.framework.apollo</groupId>
             <artifactId>apollo-client</artifactId> <!-- 引入 Apollo Client 库,实现内嵌的配置中心 -->
+            <version>${apollo.version}</version>
         </dependency>
 
         <!-- Job 定时任务相关 -->
@@ -88,41 +168,55 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>lock4j-redisson-spring-boot-starter</artifactId>
+            <version>${lock4j.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>redisson-spring-boot-starter</artifactId>
+                    <groupId>org.redisson</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
             <groupId>io.github.resilience4j</groupId>
             <artifactId>resilience4j-spring-boot2</artifactId>
+            <version>${resilience4j.version}</version>
         </dependency>
 
         <!-- 监控相关 -->
         <dependency>
             <groupId>org.apache.skywalking</groupId>
             <artifactId>apm-toolkit-trace</artifactId>
+            <version>${skywalking.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
             <artifactId>apm-toolkit-logback-1.x</artifactId>
+            <version>${skywalking.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
             <artifactId>apm-toolkit-opentracing</artifactId>
+            <version>${skywalking.version}</version>
         </dependency>
 
         <dependency>
             <groupId>de.codecentric</groupId>
             <artifactId>spring-boot-admin-starter-server</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 -->
+            <version>${spring-boot-admin.version}</version>
         </dependency>
         <dependency>
             <groupId>de.codecentric</groupId>
             <artifactId>spring-boot-admin-starter-client</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 -->
+            <version>${spring-boot-admin.version}</version>
         </dependency>
 
         <!-- Test 测试相关 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
+<!--            <scope>test</scope>--> <!-- TODO 调整依赖 scope -->
+            <optional>true</optional>
             <exclusions>
                 <exclusion>
                     <artifactId>asm</artifactId>
@@ -140,53 +234,64 @@
         <dependency>
             <groupId>com.github.fppt</groupId> <!-- 单元测试,我们采用内嵌的 Redis 数据库 -->
             <artifactId>jedis-mock</artifactId>
+            <version>${jedis-mock.version}</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>uk.co.jemos.podam</groupId> <!-- 单元测试,随机生成 POJO 类 -->
             <artifactId>podam</artifactId>
-            <scope>test</scope>
+            <version>${podam.version}</version>
+            <!--            <scope>test</scope>--> <!-- TODO 调整依赖 scope -->
+            <optional>true</optional>
         </dependency>
 
         <!-- 工具类相关 -->
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
+            <version>${lombok.version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.mapstruct</groupId>
             <artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
+            <version>${mapstruct.version}</version>
         </dependency>
         <dependency>
             <groupId>org.mapstruct</groupId>
             <artifactId>mapstruct-processor</artifactId>
+            <version>${mapstruct.version}</version>
             <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>org.mapstruct</groupId>
             <artifactId>mapstruct-jdk8</artifactId>
+            <version>${mapstruct.version}</version>
         </dependency>
 
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
+            <version>${hutool.version}</version>
         </dependency>
 
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>easyexcel</artifactId>
+            <version>${easyexcel.verion}</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.velocity</groupId>
             <artifactId>velocity-engine-core</artifactId>
+            <version>${velocity.version}</version>
         </dependency>
 
         <dependency>
             <groupId>cn.smallbun.screw</groupId>
             <artifactId>screw-core</artifactId> <!-- 实现数据库文档 -->
+            <version>${screw.version}</version>
         </dependency>
 
         <!-- 三方云服务相关 -->
@@ -195,18 +300,67 @@
         <dependency>
             <groupId>com.yunpian.sdk</groupId>
             <artifactId>yunpian-java-sdk</artifactId>
+            <version>${yunpian-java-sdk.version}</version>
         </dependency>
 
         <dependency>
             <groupId>com.aliyun</groupId>
             <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>${aliyun-java-sdk-core.version}</version>
         </dependency>
         <dependency>
             <groupId>com.aliyun</groupId>
             <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>${aliyun-java-sdk-dysmsapi.version}</version>
         </dependency>
         <!-- SMS SDK end -->
 
     </dependencies>
 
+    <build>
+        <!-- 设置构建的 jar 包名 -->
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <!-- 打包 -->
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring.boot.version}</version>
+                <configuration>
+                    <fork>true</fork>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal> <!-- 将原来的 jar 打入其中 -->
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- 提供给 mapstruct 使用 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <source>${java.version}</source> <!-- or higher, depending on your project -->
+                    <target>${java.version}</target> <!-- or higher, depending on your project -->
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.mapstruct</groupId>
+                            <artifactId>mapstruct-processor</artifactId>
+                            <version>${mapstruct.version}</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${lombok.version}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>

+ 4 - 0
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/core/ConfigConsts.java

@@ -9,6 +9,10 @@ package cn.iocoder.dashboard.framework.apollo.core;
  */
 public class ConfigConsts {
 
+    /**
+     * {@link cn.iocoder.dashboard.framework.apollo.internals.ConfigFrameworkDAO} 的实现类
+     */
+    public static final String APOLLO_JDBC_DAO = "apollo.jdbc.dao";
     public static final String APOLLO_JDBC_URL = "apollo.jdbc.url";
     public static final String APOLLO_JDBC_USERNAME = "apollo.jdbc.username";
     public static final String APOLLO_JDBC_PASSWORD = "apollo.jdbc.password";

+ 6 - 2
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/ConfigFrameworkDAO.java

@@ -1,12 +1,16 @@
 package cn.iocoder.dashboard.framework.apollo.internals;
 
-import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO;
+import cn.iocoder.dashboard.framework.apollo.internals.dto.ConfigRespDTO;
 
 import java.util.Date;
 import java.util.List;
 
 /**
  * 配置 Framework DAO 接口
+ *
+ * 注意,实现类必须提供 (String jdbcUrl, String username, String password) 构造方法
+ *
+ * @author 芋道源码
  */
 public interface ConfigFrameworkDAO {
 
@@ -23,6 +27,6 @@ public interface ConfigFrameworkDAO {
      *
      * @return 配置列表
      */
-    List<InfConfigDO> selectList();
+    List<ConfigRespDTO> selectList();
 
 }

+ 7 - 7
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/DBConfigRepository.java

@@ -2,9 +2,8 @@ package cn.iocoder.dashboard.framework.apollo.internals;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.dashboard.framework.apollo.core.ConfigConsts;
+import cn.iocoder.dashboard.framework.apollo.internals.dto.ConfigRespDTO;
 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.dashboard.modules.infra.dal.mysql.config.InfConfigDAOImpl;
-import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO;
 import com.ctrip.framework.apollo.Apollo;
 import com.ctrip.framework.apollo.build.ApolloInjector;
 import com.ctrip.framework.apollo.core.utils.ApolloThreadFactory;
@@ -59,6 +58,7 @@ public class DBConfigRepository extends AbstractConfigRepository {
         this.propertiesFactory = ApolloInjector.getInstance(PropertiesFactory.class);
         this.m_configUtil = ApolloInjector.getInstance(ConfigUtil.class);
         // 初始化 DB
+        cn.iocoder.dashboard.modules.infra.dal.mysql.config
         this.configFrameworkDAO = new InfConfigDAOImpl(System.getProperty(ConfigConsts.APOLLO_JDBC_URL),
                 System.getProperty(ConfigConsts.APOLLO_JDBC_USERNAME), System.getProperty(ConfigConsts.APOLLO_JDBC_PASSWORD));
 
@@ -84,7 +84,7 @@ public class DBConfigRepository extends AbstractConfigRepository {
     @Override
     protected void sync() {
         // 第一步,尝试获取配置
-        List<InfConfigDO> configs = this.loadConfigIfUpdate(this.maxUpdateTime);
+        List<ConfigRespDTO> configs = this.loadConfigIfUpdate(this.maxUpdateTime);
         if (CollUtil.isEmpty(configs)) { // 如果没有更新,则返回
             return;
         }
@@ -94,7 +94,7 @@ public class DBConfigRepository extends AbstractConfigRepository {
         this.m_configCache = newProperties;
         // 第三步,获取最大的配置时间
         assert configs.size() > 0; // 断言,避免告警
-        this.maxUpdateTime = configs.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime();
+        this.maxUpdateTime = configs.stream().max(Comparator.comparing(ConfigRespDTO::getUpdateTime)).get().getUpdateTime();
         // 第四部,触发配置刷新!重要!!!!
         super.fireRepositoryChange(m_namespace, newProperties);
         log.info("[sync][缓存配置,数量为:{}]", configs.size());
@@ -120,9 +120,9 @@ public class DBConfigRepository extends AbstractConfigRepository {
         return ConfigSourceType.REMOTE;
     }
 
-    private Properties buildProperties(List<InfConfigDO> configs) {
+    private Properties buildProperties(List<ConfigRespDTO> configs) {
         Properties properties = propertiesFactory.getPropertiesInstance();
-        configs.stream().filter(BaseDO::getDeleted) // 过滤掉被删除的配置
+        configs.stream().filter(ConfigRespDTO::getDeleted) // 过滤掉被删除的配置
                 .forEach(config -> properties.put(config.getKey(), config.getValue()));
         return properties;
     }
@@ -153,7 +153,7 @@ public class DBConfigRepository extends AbstractConfigRepository {
      * @param maxUpdateTime 当前配置的最大更新时间
      * @return 配置列表
      */
-    private List<InfConfigDO> loadConfigIfUpdate(Date maxUpdateTime) {
+    private List<ConfigRespDTO> loadConfigIfUpdate(Date maxUpdateTime) {
         // 第一步,判断是否要更新。
         if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
             log.info("[loadConfigIfUpdate][首次加载全量配置]");

+ 33 - 0
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/dto/ConfigRespDTO.java

@@ -0,0 +1,33 @@
+package cn.iocoder.dashboard.framework.apollo.internals.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 配置 Response DTO
+ *
+ * @author 芋道源码
+ */
+@Data
+public class ConfigRespDTO {
+
+    /**
+     * 参数键名
+     */
+    private String key;
+    /**
+     * 参数键值
+     */
+    private String value;
+
+    /**
+     * 是否删除
+     */
+    private Boolean deleted;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+}

+ 33 - 0
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/dict/core/dto/DictDataRespDTO.java

@@ -0,0 +1,33 @@
+package cn.iocoder.dashboard.framework.dict.core.dto;
+
+import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
+import lombok.Data;
+
+/**
+ * 字典数据 Response DTO
+ *
+ * @author 芋道源码
+ */
+@Data
+public class DictDataRespDTO {
+
+    /**
+     * 字典标签
+     */
+    private String label;
+    /**
+     * 字典值
+     */
+    private String value;
+    /**
+     * 字典类型
+     */
+    private String dictType;
+    /**
+     * 状态
+     *
+     * 枚举 {@link CommonStatusEnum}
+     */
+    private Integer status;
+
+}

+ 4 - 4
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/dict/core/service/DictDataFrameworkService.java

@@ -1,6 +1,6 @@
 package cn.iocoder.dashboard.framework.dict.core.service;
 
-import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO;
+import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO;
 
 import java.util.List;
 
@@ -13,7 +13,7 @@ public interface DictDataFrameworkService {
      * @param value 字典数据值
      * @return 字典数据
      */
-    SysDictDataDO getDictDataFromCache(String type, String value);
+    DictDataRespDTO getDictDataFromCache(String type, String value);
 
     /**
      * 解析获得指定的字典数据,从缓存中
@@ -22,7 +22,7 @@ public interface DictDataFrameworkService {
      * @param label 字典数据标签
      * @return 字典数据
      */
-    SysDictDataDO parseDictDataFromCache(String type, String label);
+    DictDataRespDTO parseDictDataFromCache(String type, String label);
 
     /**
      * 获得指定类型的字典数据,从缓存中
@@ -30,6 +30,6 @@ public interface DictDataFrameworkService {
      * @param type 字典类型
      * @return 字典数据列表
      */
-    List<SysDictDataDO> listDictDatasFromCache(String type);
+    List<DictDataRespDTO> listDictDatasFromCache(String type);
 
 }

+ 3 - 3
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/dict/core/util/DictUtils.java

@@ -1,7 +1,7 @@
 package cn.iocoder.dashboard.framework.dict.core.util;
 
+import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO;
 import cn.iocoder.dashboard.framework.dict.core.service.DictDataFrameworkService;
-import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -17,11 +17,11 @@ public class DictUtils {
         log.info("[init][初始化 DictUtils 成功]");
     }
 
-    public static SysDictDataDO getDictDataFromCache(String type, String value) {
+    public static DictDataRespDTO getDictDataFromCache(String type, String value) {
         return service.getDictDataFromCache(type, value);
     }
 
-    public static SysDictDataDO parseDictDataFromCache(String type, String label) {
+    public static DictDataRespDTO parseDictDataFromCache(String type, String label) {
         return service.getDictDataFromCache(type, label);
     }
 

+ 4 - 4
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/excel/core/convert/DictConvert.java

@@ -2,9 +2,9 @@ package cn.iocoder.dashboard.framework.excel.core.convert;
 
 
 import cn.hutool.core.convert.Convert;
+import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO;
 import cn.iocoder.dashboard.framework.dict.core.util.DictUtils;
 import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat;
-import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO;
 import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum;
 import com.alibaba.excel.converters.Converter;
 import com.alibaba.excel.enums.CellDataTypeEnum;
@@ -14,7 +14,7 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty;
 import lombok.extern.slf4j.Slf4j;
 
 /**
- * Excel {@link SysDictDataDO} 数据字典转换器
+ * Excel {@link DictDataRespDTO} 数据字典转换器
  *
  * @author 芋道源码
  */
@@ -37,7 +37,7 @@ public class DictConvert implements Converter<Object> {
         // 使用字典解析
         SysDictTypeEnum type = getType(contentProperty);
         String label = cellData.getStringValue();
-        SysDictDataDO dictData = DictUtils.parseDictDataFromCache(type.getValue(), label);
+        DictDataRespDTO dictData = DictUtils.parseDictDataFromCache(type.getValue(), label);
         if (dictData == null) {
             log.error("[convertToJavaData][type({}) 解析不掉 label({})]", type, label);
             return null;
@@ -58,7 +58,7 @@ public class DictConvert implements Converter<Object> {
         // 使用字典格式化
         SysDictTypeEnum type = getType(contentProperty);
         String value = String.valueOf(object);
-        SysDictDataDO dictData = DictUtils.getDictDataFromCache(type.getValue(), value);
+        DictDataRespDTO dictData = DictUtils.getDictDataFromCache(type.getValue(), value);
         if (dictData == null) {
             log.error("[convertToExcelData][type({}) 转换不了 label({})]", type, value);
             return new CellData<>("");

+ 1 - 2
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/file/config/FileProperties.java

@@ -1,6 +1,5 @@
 package cn.iocoder.dashboard.framework.file.config;
 
-import cn.iocoder.dashboard.modules.infra.controller.file.InfFileController;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.validation.annotation.Validated;
@@ -13,7 +12,7 @@ import javax.validation.constraints.NotNull;
 public class FileProperties {
 
     /**
-     * 对应 {@link InfFileController#}
+     * 对应 InfFileController 的 getFile 方法
      */
     @NotNull(message = "基础文件路径不能为空")
     private String basePath;

+ 42 - 42
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/logger/operatelog/core/aop/OperateLogAspect.java

@@ -6,11 +6,11 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import cn.iocoder.dashboard.common.pojo.CommonResult;
 import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog;
+import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO;
 import cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum;
 import cn.iocoder.dashboard.framework.logger.operatelog.core.service.OperateLogFrameworkService;
 import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils;
-import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO;
 import cn.iocoder.dashboard.util.json.JsonUtils;
 import cn.iocoder.dashboard.util.servlet.ServletUtils;
 import com.google.common.collect.Maps;
@@ -55,13 +55,13 @@ public class OperateLogAspect {
     /**
      * 用于记录操作内容的上下文
      *
-     * @see SysOperateLogCreateReqVO#getContent()
+     * @see OperateLogCreateReqDTO#getContent()
      */
     private static final ThreadLocal<String> CONTENT = new ThreadLocal<>();
     /**
      * 用于记录拓展字段的上下文
      *
-     * @see SysOperateLogCreateReqVO#getExts()
+     * @see OperateLogCreateReqDTO#getExts()
      */
     private static final ThreadLocal<Map<String, Object>> EXTS = new ThreadLocal<>();
 
@@ -130,106 +130,106 @@ public class OperateLogAspect {
 
     private void log0(ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation,
                       Date startTime, Object result, Throwable exception) {
-        SysOperateLogCreateReqVO operateLogVO = new SysOperateLogCreateReqVO();
+        OperateLogCreateReqDTO operateLogDTO = new OperateLogCreateReqDTO();
         // 补全通用字段
-        operateLogVO.setTraceId(TracerUtils.getTraceId());
-        operateLogVO.setStartTime(startTime);
+        operateLogDTO.setTraceId(TracerUtils.getTraceId());
+        operateLogDTO.setStartTime(startTime);
         // 补充用户信息
-        fillUserFields(operateLogVO);
+        fillUserFields(operateLogDTO);
         // 补全模块信息
-        fillModuleFields(operateLogVO, joinPoint, operateLog, apiOperation);
+        fillModuleFields(operateLogDTO, joinPoint, operateLog, apiOperation);
         // 补全请求信息
-        fillRequestFields(operateLogVO);
+        fillRequestFields(operateLogDTO);
         // 补全方法信息
-        fillMethodFields(operateLogVO, joinPoint, operateLog, startTime, result, exception);
+        fillMethodFields(operateLogDTO, joinPoint, operateLog, startTime, result, exception);
 
         // 异步记录日志
-        operateLogFrameworkService.createOperateLogAsync(operateLogVO);
+        operateLogFrameworkService.createOperateLogAsync(operateLogDTO);
     }
 
-    private static void fillUserFields(SysOperateLogCreateReqVO operateLogVO) {
-        operateLogVO.setUserId(SecurityFrameworkUtils.getLoginUserId());
+    private static void fillUserFields(OperateLogCreateReqDTO operateLogDTO) {
+        operateLogDTO.setUserId(SecurityFrameworkUtils.getLoginUserId());
     }
 
-    private static void fillModuleFields(SysOperateLogCreateReqVO operateLogVO,
+    private static void fillModuleFields(OperateLogCreateReqDTO operateLogDTO,
                                          ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation) {
         // module 属性
         if (operateLog != null) {
-            operateLogVO.setModule(operateLog.module());
+            operateLogDTO.setModule(operateLog.module());
         }
-        if (StrUtil.isEmpty(operateLogVO.getModule())) {
+        if (StrUtil.isEmpty(operateLogDTO.getModule())) {
             Api api = getClassAnnotation(joinPoint, Api.class);
             if (api != null) {
                 // 优先读取 @API 的 name 属性
                 if (StrUtil.isNotEmpty(api.value())) {
-                    operateLogVO.setModule(api.value());
+                    operateLogDTO.setModule(api.value());
                 }
                 // 没有的话,读取 @API 的 tags 属性
-                if (StrUtil.isEmpty(operateLogVO.getModule()) && ArrayUtil.isNotEmpty(api.tags())) {
-                    operateLogVO.setModule(api.tags()[0]);
+                if (StrUtil.isEmpty(operateLogDTO.getModule()) && ArrayUtil.isNotEmpty(api.tags())) {
+                    operateLogDTO.setModule(api.tags()[0]);
                 }
             }
         }
         // name 属性
         if (operateLog != null) {
-            operateLogVO.setName(operateLog.name());
+            operateLogDTO.setName(operateLog.name());
         }
-        if (StrUtil.isEmpty(operateLogVO.getName()) && apiOperation != null) {
-            operateLogVO.setName(apiOperation.value());
+        if (StrUtil.isEmpty(operateLogDTO.getName()) && apiOperation != null) {
+            operateLogDTO.setName(apiOperation.value());
         }
         // type 属性
         if (operateLog != null && ArrayUtil.isNotEmpty(operateLog.type())) {
-            operateLogVO.setType(operateLog.type()[0].getType());
+            operateLogDTO.setType(operateLog.type()[0].getType());
         }
-        if (operateLogVO.getType() == null) {
+        if (operateLogDTO.getType() == null) {
             RequestMethod requestMethod = obtainFirstMatchRequestMethod(obtainRequestMethod(joinPoint));
             OperateTypeEnum operateLogType = convertOperateLogType(requestMethod);
-            operateLogVO.setType(operateLogType != null ? operateLogType.getType() : null);
+            operateLogDTO.setType(operateLogType != null ? operateLogType.getType() : null);
         }
         // content 和 exts 属性
-        operateLogVO.setContent(CONTENT.get());
-        operateLogVO.setExts(EXTS.get());
+        operateLogDTO.setContent(CONTENT.get());
+        operateLogDTO.setExts(EXTS.get());
     }
 
-    private static void fillRequestFields(SysOperateLogCreateReqVO operateLogVO) {
+    private static void fillRequestFields(OperateLogCreateReqDTO operateLogDTO) {
         // 获得 Request 对象
         HttpServletRequest request = ServletUtils.getRequest();
         if (request == null) {
             return;
         }
         // 补全请求信息
-        operateLogVO.setRequestMethod(request.getMethod());
-        operateLogVO.setRequestUrl(request.getRequestURI());
-        operateLogVO.setUserIp(ServletUtil.getClientIP(request));
-        operateLogVO.setUserAgent(ServletUtils.getUserAgent(request));
+        operateLogDTO.setRequestMethod(request.getMethod());
+        operateLogDTO.setRequestUrl(request.getRequestURI());
+        operateLogDTO.setUserIp(ServletUtil.getClientIP(request));
+        operateLogDTO.setUserAgent(ServletUtils.getUserAgent(request));
     }
 
-    private static void fillMethodFields(SysOperateLogCreateReqVO operateLogVO,
+    private static void fillMethodFields(OperateLogCreateReqDTO operateLogDTO,
                                          ProceedingJoinPoint joinPoint, OperateLog operateLog,
                                          Date startTime, Object result, Throwable exception) {
         MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
-        operateLogVO.setJavaMethod(methodSignature.toString());
+        operateLogDTO.setJavaMethod(methodSignature.toString());
         if (operateLog == null || operateLog.logArgs()) {
-            operateLogVO.setJavaMethodArgs(obtainMethodArgs(joinPoint));
+            operateLogDTO.setJavaMethodArgs(obtainMethodArgs(joinPoint));
         }
         if (operateLog == null || operateLog.logResultData()) {
-            operateLogVO.setResultData(obtainResultData(result));
+            operateLogDTO.setResultData(obtainResultData(result));
         }
-        operateLogVO.setDuration((int) (System.currentTimeMillis() - startTime.getTime()));
+        operateLogDTO.setDuration((int) (System.currentTimeMillis() - startTime.getTime()));
         // (正常)处理 resultCode 和 resultMsg 字段
         if (result != null) {
             if (result instanceof CommonResult) {
                 CommonResult<?> commonResult = (CommonResult<?>) result;
-                operateLogVO.setResultCode(commonResult.getCode());
-                operateLogVO.setResultMsg(commonResult.getMsg());
+                operateLogDTO.setResultCode(commonResult.getCode());
+                operateLogDTO.setResultMsg(commonResult.getMsg());
             } else {
-                operateLogVO.setResultCode(SUCCESS.getCode());
+                operateLogDTO.setResultCode(SUCCESS.getCode());
             }
         }
         // (异常)处理 resultCode 和 resultMsg 字段
         if (exception != null) {
-            operateLogVO.setResultCode(INTERNAL_SERVER_ERROR.getCode());
-            operateLogVO.setResultMsg(ExceptionUtil.getRootCauseMessage(exception));
+            operateLogDTO.setResultCode(INTERNAL_SERVER_ERROR.getCode());
+            operateLogDTO.setResultMsg(ExceptionUtil.getRootCauseMessage(exception));
         }
     }
 

+ 84 - 0
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/logger/operatelog/core/dto/OperateLogCreateReqDTO.java

@@ -0,0 +1,84 @@
+package cn.iocoder.dashboard.framework.logger.operatelog.core.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 操作日志创建 Request DTO
+ */
+@Data
+public class OperateLogCreateReqDTO {
+
+    @ApiModelProperty(value = "链路追踪编号", required = true, example = "89aca178-a370-411c-ae02-3f0d672be4ab")
+    @NotEmpty(message = "链路追踪编号不能为空")
+    private String traceId;
+
+    @ApiModelProperty(value = "用户编号", required = true, example = "1024")
+    @NotNull(message = "用户编号不能为空")
+    private Long userId;
+
+    @ApiModelProperty(value = "操作模块", required = true, example = "订单")
+    @NotEmpty(message = "操作模块不能为空")
+    private String module;
+
+    @ApiModelProperty(value = "操作名", required = true, example = "创建订单")
+    @NotEmpty(message = "操作名")
+    private String name;
+
+    @ApiModelProperty(value = "操作分类", required = true, example = "1", notes = "参见 SysOperateLogTypeEnum 枚举类")
+    @NotNull(message = "操作分类不能为空")
+    private Integer type;
+
+    @ApiModelProperty(value = "操作明细", example = "修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。")
+    private String content;
+
+    @ApiModelProperty(value = "拓展字段", example = "{'orderId': 1}")
+    private Map<String, Object> exts;
+
+    @ApiModelProperty(value = "请求方法名", required = true, example = "GET")
+    @NotEmpty(message = "请求方法名不能为空")
+    private String requestMethod;
+
+    @ApiModelProperty(value = "请求地址", required = true, example = "/xxx/yyy")
+    @NotEmpty(message = "请求地址不能为空")
+    private String requestUrl;
+
+    @ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1")
+    @NotEmpty(message = "用户 IP 不能为空")
+    private String userIp;
+
+    @ApiModelProperty(value = "浏览器 UserAgent", required = true, example = "Mozilla/5.0")
+    @NotEmpty(message = "浏览器 UserAgent 不能为空")
+    private String userAgent;
+
+    @ApiModelProperty(value = "Java 方法名", required = true, example = "cn.iocoder.dashboard.UserController.save(...)")
+    @NotEmpty(message = "Java 方法名不能为空")
+    private String javaMethod;
+
+    @ApiModelProperty(value = "Java 方法的参数")
+    private String javaMethodArgs;
+
+    @ApiModelProperty(value = "开始时间", required = true)
+    @NotNull(message = "开始时间不能为空")
+    private Date startTime;
+
+    @ApiModelProperty(value = "执行时长,单位:毫秒", required = true)
+    @NotNull(message = "执行时长不能为空")
+    private Integer duration;
+
+    @ApiModelProperty(value = "结果码", required = true)
+    @NotNull(message = "结果码不能为空")
+    private Integer resultCode;
+
+    @ApiModelProperty(value = "结果提示")
+    private String resultMsg;
+
+    @ApiModelProperty(value = "结果数据")
+    private String resultData;
+
+}

+ 2 - 2
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/logger/operatelog/core/service/OperateLogFrameworkService.java

@@ -1,6 +1,6 @@
 package cn.iocoder.dashboard.framework.logger.operatelog.core.service;
 
-import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO;
+import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO;
 
 import java.util.concurrent.Future;
 
@@ -12,6 +12,6 @@ public interface OperateLogFrameworkService {
      * @param reqVO 操作日志请求
      * @return true: 记录成功,false: 记录失败
      */
-    Future<Boolean> createOperateLogAsync(SysOperateLogCreateReqVO reqVO);
+    Future<Boolean> createOperateLogAsync(OperateLogCreateReqDTO reqVO);
 
 }

+ 1 - 2
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/mybatis/core/type/JsonLongSetTypeHandler.java

@@ -1,6 +1,5 @@
 package cn.iocoder.dashboard.framework.mybatis.core.type;
 
-import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
 import cn.iocoder.dashboard.util.json.JsonUtils;
 import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
 import com.fasterxml.jackson.core.type.TypeReference;
@@ -11,7 +10,7 @@ import java.util.Set;
  * 参考 {@link com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler} 实现
  * 在我们将字符串反序列化为 Set 并且泛型为 Long 时,如果每个元素的数值太小,会被处理成 Integer 类型,导致可能存在隐性的 BUG。
  *
- * 例如说哦,{@link SysUserDO#getPostIds()} 属性
+ * 例如说哦,SysUserDO 的 postIds 属性
  *
  * @author 芋道源码
  */

+ 2 - 2
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/security/core/filter/JwtAuthenticationTokenFilter.java

@@ -4,9 +4,9 @@ import cn.hutool.core.util.StrUtil;
 import cn.iocoder.dashboard.common.pojo.CommonResult;
 import cn.iocoder.dashboard.framework.security.config.SecurityProperties;
 import cn.iocoder.dashboard.framework.security.core.LoginUser;
+import cn.iocoder.dashboard.framework.security.core.service.SecurityAuthFrameworkService;
 import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.dashboard.framework.web.core.handler.GlobalExceptionHandler;
-import cn.iocoder.dashboard.modules.system.service.auth.SysAuthService;
 import cn.iocoder.dashboard.util.servlet.ServletUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
@@ -30,7 +30,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
     @Resource
     private SecurityProperties securityProperties;
     @Resource
-    private SysAuthService authService;
+    private SecurityAuthFrameworkService authService;
     @Resource
     private GlobalExceptionHandler globalExceptionHandler;
 

+ 1 - 3
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/security/core/service/SecurityPermissionFrameworkService.java

@@ -1,7 +1,5 @@
 package cn.iocoder.dashboard.framework.security.core.service;
 
-import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
-
 /**
  * Security 框架 Permission Service 接口,定义 security 组件需要的功能
  *
@@ -28,7 +26,7 @@ public interface SecurityPermissionFrameworkService {
     /**
      * 判断是否有角色
      *
-     * 注意,角色使用的是 {@link SysRoleDO#getCode()} 标识
+     * 注意,角色使用的是 SysRoleDO 的 code 标识
      *
      * @param role 角色
      * @return 是否

yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java → yudao-framework/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java


+ 0 - 6
yudao-framework/src/main/java/cn/iocoder/dashboard/util/RandomUtils.java

@@ -3,7 +3,6 @@ package cn.iocoder.dashboard.util;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
-import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
 import uk.co.jemos.podam.api.PodamFactory;
 import uk.co.jemos.podam.api.PodamFactoryImpl;
 
@@ -72,11 +71,6 @@ public class RandomUtils {
     }
 
     @SafeVarargs
-    public static SysUserDO randomUserDO(Consumer<SysUserDO>... consumers) {
-        return randomPojo(SysUserDO.class, consumers);
-    }
-
-    @SafeVarargs
     public static <T> T randomPojo(Class<T> clazz, Consumer<T>... consumers) {
         T pojo = PODAM_FACTORY.manufacturePojo(clazz);
         // 非空时,回调逻辑。通过它,可以实现 Pojo 的进一步处理

+ 13 - 0
yudao-framework/src/test/java/cn/iocoder/dashboard/BaseMockitoUnitTest.java

@@ -0,0 +1,13 @@
+package cn.iocoder.dashboard;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+/**
+ * 纯 Mockito 的单元测试
+ *
+ * @author 芋道源码
+ */
+@ExtendWith(MockitoExtension.class)
+public class BaseMockitoUnitTest {
+}

yudao-admin-server/src/test/java/cn/iocoder/dashboard/framework/package-info.java → yudao-framework/src/test/java/cn/iocoder/dashboard/framework/package-info.java


yudao-framework/src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/aliyun/AliyunSmsClientTest.java → yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/aliyun/AliyunSmsClientTest.java


yudao-framework/src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/aliyun/AliyunSmsCodeMappingTest.java → yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/aliyun/AliyunSmsCodeMappingTest.java


+ 1 - 0
yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/package-info.java

@@ -0,0 +1 @@
+package cn.iocoder.dashboard.framework.sms.core.client.impl;

yudao-framework/src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsClientTest.java → yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsClientTest.java


yudao-framework/src/main/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsCodeMappingTest.java → yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsCodeMappingTest.java


+ 1 - 0
yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/package-info.java

@@ -0,0 +1 @@
+package cn.iocoder.dashboard.framework.sms.core.client;

+ 1 - 0
yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/package-info.java

@@ -0,0 +1 @@
+package cn.iocoder.dashboard.framework.sms.core;

+ 1 - 0
yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/package-info.java

@@ -0,0 +1 @@
+package cn.iocoder.dashboard.framework.sms;

+ 1 - 0
yudao-framework/src/test/java/cn/iocoder/dashboard/package-info.java

@@ -0,0 +1 @@
+package cn.iocoder.dashboard;