Commit 90e4966420567a33c7e371f8071f5399df5627e2
1 parent
f99d48a7
项目结构调整 x 3
Showing
40 changed files
with
451 additions
and
477 deletions
pom.xml
| ... | ... | @@ -9,7 +9,7 @@ |
| 9 | 9 | <version>${revision}</version> |
| 10 | 10 | <packaging>pom</packaging> |
| 11 | 11 | <modules> |
| 12 | - <module>yudao-dependencies</module> | |
| 12 | +<!-- <module>yudao-dependencies</module>--> | |
| 13 | 13 | <!-- <module>yudao-framework</module>--> |
| 14 | 14 | <module>yudao-admin-server</module> |
| 15 | 15 | <module>yudao-framework</module> |
| ... | ... | @@ -23,16 +23,4 @@ |
| 23 | 23 | <revision>1.0.0</revision> |
| 24 | 24 | </properties> |
| 25 | 25 | |
| 26 | - <dependencyManagement> | |
| 27 | - <dependencies> | |
| 28 | - <dependency> | |
| 29 | - <groupId>cn.iocoder.boot</groupId> | |
| 30 | - <artifactId>yudao-dependencies</artifactId> | |
| 31 | - <version>${revision}</version> | |
| 32 | - <type>pom</type> | |
| 33 | - <scope>import</scope> | |
| 34 | - </dependency> | |
| 35 | - </dependencies> | |
| 36 | - </dependencyManagement> | |
| 37 | - | |
| 38 | 26 | </project> | ... | ... |
yudao-admin-server/pom.xml
| ... | ... | @@ -7,12 +7,37 @@ |
| 7 | 7 | <groupId>cn.iocoder.boot</groupId> |
| 8 | 8 | <artifactId>yudao-admin-server</artifactId> |
| 9 | 9 | <version>${revision}</version> |
| 10 | + | |
| 10 | 11 | <packaging>jar</packaging> |
| 11 | 12 | |
| 12 | 13 | <name>yudao-admin-server</name> |
| 13 | 14 | <description>管理后台 Server,提供其 API 接口</description> |
| 14 | 15 | <url>https://github.com/YunaiV/ruoyi-vue-pro</url> |
| 15 | 16 | |
| 17 | + <properties> | |
| 18 | + <revision>1.0.0</revision> | |
| 19 | + </properties> | |
| 20 | + | |
| 21 | + <dependencies> | |
| 22 | + <dependency> | |
| 23 | + <groupId>cn.iocoder.boot</groupId> | |
| 24 | + <artifactId>yudao-framework</artifactId> | |
| 25 | + <version>${revision}</version> | |
| 26 | + </dependency> | |
| 27 | + </dependencies> | |
| 16 | 28 | |
| 29 | + <!-- TODO 稍后清理掉 --> | |
| 30 | + <build> | |
| 31 | + <plugins> | |
| 32 | + <plugin> | |
| 33 | + <groupId>org.apache.maven.plugins</groupId> | |
| 34 | + <artifactId>maven-compiler-plugin</artifactId> | |
| 35 | + <configuration> | |
| 36 | + <source>8</source> | |
| 37 | + <target>8</target> | |
| 38 | + </configuration> | |
| 39 | + </plugin> | |
| 40 | + </plugins> | |
| 41 | + </build> | |
| 17 | 42 | |
| 18 | 43 | </project> | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/config/InfConfigDAOImpl.java
| 1 | 1 | package cn.iocoder.dashboard.modules.infra.dal.mysql.config; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.apollo.internals.ConfigFrameworkDAO; |
| 4 | +import cn.iocoder.dashboard.framework.apollo.internals.dto.ConfigRespDTO; | |
| 4 | 5 | import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; |
| 5 | 6 | import org.springframework.jdbc.core.BeanPropertyRowMapper; |
| 6 | 7 | import org.springframework.jdbc.core.JdbcTemplate; |
| ... | ... | @@ -32,8 +33,8 @@ public class InfConfigDAOImpl implements ConfigFrameworkDAO { |
| 32 | 33 | } |
| 33 | 34 | |
| 34 | 35 | @Override |
| 35 | - public List<InfConfigDO> selectList() { | |
| 36 | - return jdbcTemplate.query("SELECT `key`, `value`, update_time, deleted FROM inf_config", new BeanPropertyRowMapper<>(InfConfigDO.class)); | |
| 36 | + public List<ConfigRespDTO> selectList() { | |
| 37 | + return jdbcTemplate.query("SELECT `key`, `value`, update_time, deleted FROM inf_config", new BeanPropertyRowMapper<>(ConfigRespDTO.class)); | |
| 37 | 38 | } |
| 38 | 39 | |
| 39 | 40 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/operatelog/SysOperateLogCreateReqVO.java deleted
| 1 | -package cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog; | |
| 2 | - | |
| 3 | -import io.swagger.annotations.ApiModel; | |
| 4 | -import lombok.Data; | |
| 5 | -import lombok.EqualsAndHashCode; | |
| 6 | -import lombok.ToString; | |
| 7 | - | |
| 8 | -@ApiModel(value = "操作日志创建 Request VO", description = "暂时提供给前端,仅仅后端切面记录操作日志时,进行使用") | |
| 9 | -@Data | |
| 10 | -@EqualsAndHashCode(callSuper = true) | |
| 11 | -@ToString(callSuper = true) | |
| 12 | -public class SysOperateLogCreateReqVO extends SysOperateLogBaseVO { | |
| 13 | -} |
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictDataConvert.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.convert.dict; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | +import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO; | |
| 4 | 5 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.*; |
| 5 | 6 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; |
| 7 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; | |
| 6 | 8 | import org.mapstruct.Mapper; |
| 7 | 9 | import org.mapstruct.factory.Mappers; |
| 8 | 10 | |
| 11 | +import java.util.Collection; | |
| 9 | 12 | import java.util.List; |
| 10 | 13 | |
| 11 | 14 | @Mapper |
| ... | ... | @@ -25,4 +28,8 @@ public interface SysDictDataConvert { |
| 25 | 28 | |
| 26 | 29 | List<SysDictDataExcelVO> convertList02(List<SysDictDataDO> bean); |
| 27 | 30 | |
| 31 | + DictDataRespDTO convert02(SysDictDataDO bean); | |
| 32 | + | |
| 33 | + List<DictDataRespDTO> convertList03(Collection<SysDictDataDO> list); | |
| 34 | + | |
| 28 | 35 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictTypeConvert.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.convert.dict; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | +import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO; | |
| 4 | 5 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.*; |
| 5 | 6 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; |
| 6 | 7 | import org.mapstruct.Mapper; | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysOperateLogConvert.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.convert.logger; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | -import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO; | |
| 4 | +import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO; | |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogExcelVO; |
| 6 | 6 | import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogRespVO; |
| 7 | 7 | import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysOperateLogDO; |
| ... | ... | @@ -21,7 +21,7 @@ public interface SysOperateLogConvert { |
| 21 | 21 | |
| 22 | 22 | SysOperateLogConvert INSTANCE = Mappers.getMapper(SysOperateLogConvert.class); |
| 23 | 23 | |
| 24 | - SysOperateLogDO convert(SysOperateLogCreateReqVO bean); | |
| 24 | + SysOperateLogDO convert(OperateLogCreateReqDTO bean); | |
| 25 | 25 | |
| 26 | 26 | PageResult<SysOperateLogRespVO> convertPage(PageResult<SysOperateLogDO> page); |
| 27 | 27 | ... | ... |
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; |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 5 | 5 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 6 | +import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO; | |
| 6 | 7 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; |
| 7 | 8 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; |
| 8 | 9 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataExportReqVO; |
| ... | ... | @@ -23,7 +24,6 @@ import org.springframework.stereotype.Service; |
| 23 | 24 | |
| 24 | 25 | import javax.annotation.PostConstruct; |
| 25 | 26 | import javax.annotation.Resource; |
| 26 | -import java.util.ArrayList; | |
| 27 | 27 | import java.util.Comparator; |
| 28 | 28 | import java.util.Date; |
| 29 | 29 | import java.util.List; |
| ... | ... | @@ -239,18 +239,18 @@ public class SysDictDataServiceImpl implements SysDictDataService { |
| 239 | 239 | } |
| 240 | 240 | |
| 241 | 241 | @Override |
| 242 | - public SysDictDataDO getDictDataFromCache(String type, String value) { | |
| 243 | - return valueDictDataCache.get(type, value); | |
| 242 | + public DictDataRespDTO getDictDataFromCache(String type, String value) { | |
| 243 | + return SysDictDataConvert.INSTANCE.convert02(valueDictDataCache.get(type, value)); | |
| 244 | 244 | } |
| 245 | 245 | |
| 246 | 246 | @Override |
| 247 | - public SysDictDataDO parseDictDataFromCache(String type, String label) { | |
| 248 | - return labelDictDataCache.get(type, label); | |
| 247 | + public DictDataRespDTO parseDictDataFromCache(String type, String label) { | |
| 248 | + return SysDictDataConvert.INSTANCE.convert02(labelDictDataCache.get(type, label)); | |
| 249 | 249 | } |
| 250 | 250 | |
| 251 | 251 | @Override |
| 252 | - public List<SysDictDataDO> listDictDatasFromCache(String type) { | |
| 253 | - return new ArrayList<>(labelDictDataCache.row(type).values()); | |
| 252 | + public List<DictDataRespDTO> listDictDatasFromCache(String type) { | |
| 253 | + return SysDictDataConvert.INSTANCE.convertList03(labelDictDataCache.row(type).values())); | |
| 254 | 254 | } |
| 255 | 255 | |
| 256 | 256 | } | ... | ... |
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; |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | 5 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 6 | -import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO; | |
| 6 | +import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO; | |
| 7 | 7 | import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; |
| 8 | 8 | import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; |
| 9 | 9 | import cn.iocoder.dashboard.modules.system.convert.logger.SysOperateLogConvert; |
| ... | ... | @@ -40,7 +40,7 @@ public class SysOperateLogServiceImpl implements SysOperateLogService { |
| 40 | 40 | |
| 41 | 41 | @Override |
| 42 | 42 | @Async |
| 43 | - public Future<Boolean> createOperateLogAsync(SysOperateLogCreateReqVO reqVO) { | |
| 43 | + public Future<Boolean> createOperateLogAsync(OperateLogCreateReqDTO reqVO) { | |
| 44 | 44 | boolean success = false; |
| 45 | 45 | try { |
| 46 | 46 | SysOperateLogDO logDO = SysOperateLogConvert.INSTANCE.convert(reqVO); | ... | ... |
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; |
| 7 | 7 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 8 | 8 | import cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum; |
| 9 | 9 | import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils; |
| 10 | -import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO; | |
| 10 | +import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO; | |
| 11 | 11 | import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO; |
| 12 | 12 | import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO; |
| 13 | 13 | import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysOperateLogDO; |
| ... | ... | @@ -48,7 +48,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest { |
| 48 | 48 | @Test |
| 49 | 49 | public void testCreateOperateLogAsync() throws InterruptedException, ExecutionException { |
| 50 | 50 | String traceId = TracerUtils.getTraceId(); |
| 51 | - SysOperateLogCreateReqVO reqVO = RandomUtils.randomPojo(SysOperateLogCreateReqVO.class, o -> { | |
| 51 | + OperateLogCreateReqDTO reqVO = RandomUtils.randomPojo(OperateLogCreateReqDTO.class, o -> { | |
| 52 | 52 | o.setTraceId(traceId); |
| 53 | 53 | o.setUserId(randomLongId()); |
| 54 | 54 | o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build()); | ... | ... |
yudao-dependencies/pom.xml
| ... | ... | @@ -13,359 +13,4 @@ |
| 13 | 13 | <description>基础 bom 文件,管理整个项目的依赖版本</description> |
| 14 | 14 | <url>https://github.com/YunaiV/ruoyi-vue-pro</url> |
| 15 | 15 | |
| 16 | - <properties> | |
| 17 | - <revision>1.0.0</revision> | |
| 18 | - <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | |
| 19 | - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |
| 20 | - <resource.delimiter>@</resource.delimiter> | |
| 21 | - <java.version>1.8</java.version> | |
| 22 | - <maven.compiler.source>${java.version}</maven.compiler.source> | |
| 23 | - <maven.compiler.target>${java.version}</maven.compiler.target> | |
| 24 | - <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> | |
| 25 | - | |
| 26 | - <!-- 统一依赖管理 --> | |
| 27 | - <spring.boot.version>2.4.4</spring.boot.version> | |
| 28 | - <!-- Web 相关 --> | |
| 29 | - <knife4j.version>3.0.2</knife4j.version> | |
| 30 | - <swagger-annotations.version>1.5.22</swagger-annotations.version> | |
| 31 | - <!-- DB 相关 --> | |
| 32 | - <mysql-connector-java.version>5.1.46</mysql-connector-java.version> | |
| 33 | - <druid.version>1.2.4</druid.version> | |
| 34 | - <mybatis-plus.version>3.4.2</mybatis-plus.version> | |
| 35 | - <dynamic-datasource.version>3.3.2</dynamic-datasource.version> | |
| 36 | - <redisson.version>3.15.1</redisson.version> | |
| 37 | - <!-- Config 配置中心相关 --> | |
| 38 | - <apollo.version>1.7.0</apollo.version> | |
| 39 | - <!-- 服务保障相关 --> | |
| 40 | - <lock4j.version>2.2.0</lock4j.version> | |
| 41 | - <resilience4j.version>1.7.0</resilience4j.version> | |
| 42 | - <!-- 监控相关 --> | |
| 43 | - <skywalking.version>8.5.0</skywalking.version> | |
| 44 | - <logback.encoder.version>6.1</logback.encoder.version> | |
| 45 | - <spring-boot-admin.version>2.3.1</spring-boot-admin.version> | |
| 46 | - <!-- 工具类相关 --> | |
| 47 | - <lombok.version>1.16.14</lombok.version> | |
| 48 | - <mapstruct.version>1.4.1.Final</mapstruct.version> | |
| 49 | - <hutool.version>5.6.1</hutool.version> | |
| 50 | - <easyexcel.verion>2.2.7</easyexcel.verion> | |
| 51 | - <velocity.version>2.2</velocity.version> | |
| 52 | - <screw.version>1.0.5</screw.version> | |
| 53 | - <podam.version>7.2.6.RELEASE</podam.version> | |
| 54 | - <jedis-mock.version>0.1.16</jedis-mock.version> | |
| 55 | - <!-- 三方云服务相关 --> | |
| 56 | - <aliyun-java-sdk-core.version>4.5.18</aliyun-java-sdk-core.version> | |
| 57 | - <aliyun-java-sdk-dysmsapi.version>2.1.0</aliyun-java-sdk-dysmsapi.version> | |
| 58 | - <yunpian-java-sdk.version>1.2.7</yunpian-java-sdk.version> | |
| 59 | - </properties> | |
| 60 | - | |
| 61 | - <dependencyManagement> | |
| 62 | - <dependencies> | |
| 63 | - <!-- 统一依赖管理 --> | |
| 64 | - <dependency> | |
| 65 | - <groupId>org.springframework.boot</groupId> | |
| 66 | - <artifactId>spring-boot-dependencies</artifactId> | |
| 67 | - <version>${spring.boot.version}</version> | |
| 68 | - <type>pom</type> | |
| 69 | - <scope>import</scope> | |
| 70 | - </dependency> | |
| 71 | - | |
| 72 | - <!-- 通用相关 --> | |
| 73 | - <dependency> | |
| 74 | - <groupId>cn.iocoder.boot</groupId> | |
| 75 | - <artifactId>yudao-dependencies</artifactId> | |
| 76 | - <version>${revision}</version> | |
| 77 | - </dependency> | |
| 78 | - | |
| 79 | - <!-- Spring 核心 --> | |
| 80 | - <dependency> | |
| 81 | - <!-- 用于生成自定义的 Spring @ConfigurationProperties 配置类的说明文件 --> | |
| 82 | - <groupId>org.springframework.boot</groupId> | |
| 83 | - <artifactId>spring-boot-configuration-processor</artifactId> | |
| 84 | - <optional>true</optional> | |
| 85 | - </dependency> | |
| 86 | - | |
| 87 | - <dependency> | |
| 88 | - <groupId>org.springframework.boot</groupId> | |
| 89 | - <artifactId>spring-boot-starter-aop</artifactId> | |
| 90 | - </dependency> | |
| 91 | - | |
| 92 | - <!-- Web 相关 --> | |
| 93 | - <dependency> | |
| 94 | - <groupId>org.springframework.boot</groupId> | |
| 95 | - <artifactId>spring-boot-starter-web</artifactId> | |
| 96 | - </dependency> | |
| 97 | - | |
| 98 | - <dependency> | |
| 99 | - <groupId>org.springframework.boot</groupId> | |
| 100 | - <artifactId>spring-boot-starter-security</artifactId> | |
| 101 | - </dependency> | |
| 102 | - | |
| 103 | - <dependency> | |
| 104 | - <groupId>org.springframework.boot</groupId> | |
| 105 | - <artifactId>spring-boot-starter-validation</artifactId> | |
| 106 | - </dependency> | |
| 107 | - | |
| 108 | - <dependency> | |
| 109 | - <groupId>com.github.xiaoymin</groupId> | |
| 110 | - <artifactId>knife4j-spring-boot-starter</artifactId> | |
| 111 | - <version>${knife4j.version}</version> | |
| 112 | - <exclusions> | |
| 113 | - <exclusion> | |
| 114 | - <artifactId>mapstruct</artifactId> | |
| 115 | - <groupId>org.mapstruct</groupId> <!-- 避免冲突 --> | |
| 116 | - </exclusion> | |
| 117 | - <exclusion> | |
| 118 | - <artifactId>guava</artifactId> | |
| 119 | - <groupId>com.google.guava</groupId> | |
| 120 | - </exclusion> | |
| 121 | - <exclusion> | |
| 122 | - <artifactId>swagger-annotations</artifactId> | |
| 123 | - <groupId>io.swagger</groupId> | |
| 124 | - </exclusion> | |
| 125 | - </exclusions> | |
| 126 | - </dependency> | |
| 127 | - <dependency> | |
| 128 | - <groupId>io.swagger</groupId> | |
| 129 | - <artifactId>swagger-annotations</artifactId> | |
| 130 | - <version>${swagger-annotations.version}</version> | |
| 131 | - </dependency> | |
| 132 | - | |
| 133 | - <!-- DB 相关 --> | |
| 134 | - <dependency> | |
| 135 | - <groupId>mysql</groupId> | |
| 136 | - <artifactId>mysql-connector-java</artifactId> | |
| 137 | - <version>${mysql-connector-java.version}</version> | |
| 138 | - </dependency> | |
| 139 | - <dependency> | |
| 140 | - <groupId>com.alibaba</groupId> | |
| 141 | - <artifactId>druid-spring-boot-starter</artifactId> | |
| 142 | - <version>${druid.version}</version> | |
| 143 | - </dependency> | |
| 144 | - <dependency> | |
| 145 | - <groupId>com.baomidou</groupId> | |
| 146 | - <artifactId>mybatis-plus-boot-starter</artifactId> | |
| 147 | - <version>${mybatis-plus.version}</version> | |
| 148 | - </dependency> | |
| 149 | - <dependency> | |
| 150 | - <groupId>com.baomidou</groupId> | |
| 151 | - <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <!-- 多数据源 --> | |
| 152 | - <version>${dynamic-datasource.version}</version> | |
| 153 | - </dependency> | |
| 154 | - | |
| 155 | - <dependency> | |
| 156 | - <groupId>org.redisson</groupId> | |
| 157 | - <artifactId>redisson-spring-boot-starter</artifactId> | |
| 158 | - <version>${redisson.version}</version> | |
| 159 | - </dependency> | |
| 160 | - | |
| 161 | - <!-- Config 配置中心相关 --> | |
| 162 | - <dependency> | |
| 163 | - <groupId>com.ctrip.framework.apollo</groupId> | |
| 164 | - <artifactId>apollo-client</artifactId> <!-- 引入 Apollo Client 库,实现内嵌的配置中心 --> | |
| 165 | - <version>${apollo.version}</version> | |
| 166 | - </dependency> | |
| 167 | - | |
| 168 | - <!-- Job 定时任务相关 --> | |
| 169 | - <dependency> | |
| 170 | - <groupId>org.springframework.boot</groupId> | |
| 171 | - <artifactId>spring-boot-starter-quartz</artifactId> | |
| 172 | - </dependency> | |
| 173 | - | |
| 174 | - <!-- 服务保障相关 --> | |
| 175 | - <dependency> | |
| 176 | - <groupId>com.baomidou</groupId> | |
| 177 | - <artifactId>lock4j-redisson-spring-boot-starter</artifactId> | |
| 178 | - <version>${lock4j.version}</version> | |
| 179 | - <exclusions> | |
| 180 | - <exclusion> | |
| 181 | - <artifactId>redisson-spring-boot-starter</artifactId> | |
| 182 | - <groupId>org.redisson</groupId> | |
| 183 | - </exclusion> | |
| 184 | - </exclusions> | |
| 185 | - </dependency> | |
| 186 | - | |
| 187 | - <dependency> | |
| 188 | - <groupId>io.github.resilience4j</groupId> | |
| 189 | - <artifactId>resilience4j-spring-boot2</artifactId> | |
| 190 | - <version>${resilience4j.version}</version> | |
| 191 | - </dependency> | |
| 192 | - | |
| 193 | - <!-- 监控相关 --> | |
| 194 | - <dependency> | |
| 195 | - <groupId>org.apache.skywalking</groupId> | |
| 196 | - <artifactId>apm-toolkit-trace</artifactId> | |
| 197 | - <version>${skywalking.version}</version> | |
| 198 | - </dependency> | |
| 199 | - <dependency> | |
| 200 | - <groupId>org.apache.skywalking</groupId> | |
| 201 | - <artifactId>apm-toolkit-logback-1.x</artifactId> | |
| 202 | - <version>${skywalking.version}</version> | |
| 203 | - </dependency> | |
| 204 | - <dependency> | |
| 205 | - <groupId>org.apache.skywalking</groupId> | |
| 206 | - <artifactId>apm-toolkit-opentracing</artifactId> | |
| 207 | - <version>${skywalking.version}</version> | |
| 208 | - </dependency> | |
| 209 | - | |
| 210 | - <dependency> | |
| 211 | - <groupId>de.codecentric</groupId> | |
| 212 | - <artifactId>spring-boot-admin-starter-server</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 --> | |
| 213 | - <version>${spring-boot-admin.version}</version> | |
| 214 | - </dependency> | |
| 215 | - <dependency> | |
| 216 | - <groupId>de.codecentric</groupId> | |
| 217 | - <artifactId>spring-boot-admin-starter-client</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 --> | |
| 218 | - <version>${spring-boot-admin.version}</version> | |
| 219 | - </dependency> | |
| 220 | - | |
| 221 | - <!-- Test 测试相关 --> | |
| 222 | - <dependency> | |
| 223 | - <groupId>org.springframework.boot</groupId> | |
| 224 | - <artifactId>spring-boot-starter-test</artifactId> | |
| 225 | - <scope>test</scope> | |
| 226 | - <exclusions> | |
| 227 | - <exclusion> | |
| 228 | - <artifactId>asm</artifactId> | |
| 229 | - <groupId>org.ow2.asm</groupId> | |
| 230 | - </exclusion> | |
| 231 | - </exclusions> | |
| 232 | - </dependency> | |
| 233 | - | |
| 234 | - <dependency> | |
| 235 | - <groupId>com.h2database</groupId> <!-- 单元测试,我们采用 H2 作为数据库 --> | |
| 236 | - <artifactId>h2</artifactId> | |
| 237 | - <scope>test</scope> | |
| 238 | - </dependency> | |
| 239 | - | |
| 240 | - <dependency> | |
| 241 | - <groupId>com.github.fppt</groupId> <!-- 单元测试,我们采用内嵌的 Redis 数据库 --> | |
| 242 | - <artifactId>jedis-mock</artifactId> | |
| 243 | - <version>${jedis-mock.version}</version> | |
| 244 | - <scope>test</scope> | |
| 245 | - </dependency> | |
| 246 | - | |
| 247 | - <dependency> | |
| 248 | - <groupId>uk.co.jemos.podam</groupId> <!-- 单元测试,随机生成 POJO 类 --> | |
| 249 | - <artifactId>podam</artifactId> | |
| 250 | - <version>${podam.version}</version> | |
| 251 | - <scope>test</scope> | |
| 252 | - </dependency> | |
| 253 | - | |
| 254 | - <!-- 工具类相关 --> | |
| 255 | - <dependency> | |
| 256 | - <groupId>org.projectlombok</groupId> | |
| 257 | - <artifactId>lombok</artifactId> | |
| 258 | - <version>${lombok.version}</version> | |
| 259 | - </dependency> | |
| 260 | - | |
| 261 | - <dependency> | |
| 262 | - <groupId>org.mapstruct</groupId> | |
| 263 | - <artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher --> | |
| 264 | - <version>${mapstruct.version}</version> | |
| 265 | - </dependency> | |
| 266 | - <dependency> | |
| 267 | - <groupId>org.mapstruct</groupId> | |
| 268 | - <artifactId>mapstruct-processor</artifactId> | |
| 269 | - <version>${mapstruct.version}</version> | |
| 270 | - <optional>true</optional> | |
| 271 | - </dependency> | |
| 272 | - <dependency> | |
| 273 | - <groupId>org.mapstruct</groupId> | |
| 274 | - <artifactId>mapstruct-jdk8</artifactId> | |
| 275 | - <version>${mapstruct.version}</version> | |
| 276 | - </dependency> | |
| 277 | - | |
| 278 | - <dependency> | |
| 279 | - <groupId>cn.hutool</groupId> | |
| 280 | - <artifactId>hutool-all</artifactId> | |
| 281 | - <version>${hutool.version}</version> | |
| 282 | - </dependency> | |
| 283 | - | |
| 284 | - <dependency> | |
| 285 | - <groupId>com.alibaba</groupId> | |
| 286 | - <artifactId>easyexcel</artifactId> | |
| 287 | - <version>${easyexcel.verion}</version> | |
| 288 | - </dependency> | |
| 289 | - | |
| 290 | - <dependency> | |
| 291 | - <groupId>org.apache.velocity</groupId> | |
| 292 | - <artifactId>velocity-engine-core</artifactId> | |
| 293 | - <version>${velocity.version}</version> | |
| 294 | - </dependency> | |
| 295 | - | |
| 296 | - <dependency> | |
| 297 | - <groupId>cn.smallbun.screw</groupId> | |
| 298 | - <artifactId>screw-core</artifactId> <!-- 实现数据库文档 --> | |
| 299 | - <version>${screw.version}</version> | |
| 300 | - </dependency> | |
| 301 | - | |
| 302 | - <!-- 三方云服务相关 --> | |
| 303 | - | |
| 304 | - <!-- SMS SDK begin --> | |
| 305 | - <dependency> | |
| 306 | - <groupId>com.yunpian.sdk</groupId> | |
| 307 | - <artifactId>yunpian-java-sdk</artifactId> | |
| 308 | - <version>${yunpian-java-sdk.version}</version> | |
| 309 | - </dependency> | |
| 310 | - | |
| 311 | - <dependency> | |
| 312 | - <groupId>com.aliyun</groupId> | |
| 313 | - <artifactId>aliyun-java-sdk-core</artifactId> | |
| 314 | - <version>${aliyun-java-sdk-core.version}</version> | |
| 315 | - </dependency> | |
| 316 | - <dependency> | |
| 317 | - <groupId>com.aliyun</groupId> | |
| 318 | - <artifactId>aliyun-java-sdk-dysmsapi</artifactId> | |
| 319 | - <version>${aliyun-java-sdk-dysmsapi.version}</version> | |
| 320 | - </dependency> | |
| 321 | - <!-- SMS SDK end --> | |
| 322 | - </dependencies> | |
| 323 | - </dependencyManagement> | |
| 324 | - | |
| 325 | - <build> | |
| 326 | - <!-- 设置构建的 jar 包名 --> | |
| 327 | - <finalName>${project.artifactId}</finalName> | |
| 328 | - <plugins> | |
| 329 | - <!-- 打包 --> | |
| 330 | - <plugin> | |
| 331 | - <groupId>org.springframework.boot</groupId> | |
| 332 | - <artifactId>spring-boot-maven-plugin</artifactId> | |
| 333 | - <version>${spring.boot.version}</version> | |
| 334 | - <configuration> | |
| 335 | - <fork>true</fork> | |
| 336 | - </configuration> | |
| 337 | - <executions> | |
| 338 | - <execution> | |
| 339 | - <goals> | |
| 340 | - <goal>repackage</goal> <!-- 将原来的 jar 打入其中 --> | |
| 341 | - </goals> | |
| 342 | - </execution> | |
| 343 | - </executions> | |
| 344 | - </plugin> | |
| 345 | - | |
| 346 | - <!-- 提供给 mapstruct 使用 --> | |
| 347 | - <plugin> | |
| 348 | - <groupId>org.apache.maven.plugins</groupId> | |
| 349 | - <artifactId>maven-compiler-plugin</artifactId> | |
| 350 | - <version>${maven-compiler-plugin.version}</version> | |
| 351 | - <configuration> | |
| 352 | - <source>${java.version}</source> <!-- or higher, depending on your project --> | |
| 353 | - <target>${java.version}</target> <!-- or higher, depending on your project --> | |
| 354 | - <annotationProcessorPaths> | |
| 355 | - <path> | |
| 356 | - <groupId>org.mapstruct</groupId> | |
| 357 | - <artifactId>mapstruct-processor</artifactId> | |
| 358 | - <version>${mapstruct.version}</version> | |
| 359 | - </path> | |
| 360 | - <path> | |
| 361 | - <groupId>org.projectlombok</groupId> | |
| 362 | - <artifactId>lombok</artifactId> | |
| 363 | - <version>${lombok.version}</version> | |
| 364 | - </path> | |
| 365 | - </annotationProcessorPaths> | |
| 366 | - </configuration> | |
| 367 | - </plugin> | |
| 368 | - </plugins> | |
| 369 | - </build> | |
| 370 | - | |
| 371 | 16 | </project> | ... | ... |
yudao-framework/pom.xml
| ... | ... | @@ -11,12 +11,70 @@ |
| 11 | 11 | |
| 12 | 12 | <artifactId>yudao-framework</artifactId> |
| 13 | 13 | |
| 14 | + <properties> | |
| 15 | + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | |
| 16 | + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |
| 17 | + <resource.delimiter>@</resource.delimiter> | |
| 18 | + <java.version>1.8</java.version> | |
| 19 | + <maven.compiler.source>${java.version}</maven.compiler.source> | |
| 20 | + <maven.compiler.target>${java.version}</maven.compiler.target> | |
| 21 | + <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> | |
| 22 | + <!-- 统一依赖管理 --> | |
| 23 | + <spring.boot.version>2.4.4</spring.boot.version> | |
| 24 | + <!-- Web 相关 --> | |
| 25 | + <knife4j.version>3.0.2</knife4j.version> | |
| 26 | + <swagger-annotations.version>1.5.22</swagger-annotations.version> | |
| 27 | + <!-- DB 相关 --> | |
| 28 | + <mysql-connector-java.version>5.1.46</mysql-connector-java.version> | |
| 29 | + <druid.version>1.2.4</druid.version> | |
| 30 | + <mybatis-plus.version>3.4.2</mybatis-plus.version> | |
| 31 | + <dynamic-datasource.version>3.3.2</dynamic-datasource.version> | |
| 32 | + <redisson.version>3.15.1</redisson.version> | |
| 33 | + <!-- Config 配置中心相关 --> | |
| 34 | + <apollo.version>1.7.0</apollo.version> | |
| 35 | + <!-- 服务保障相关 --> | |
| 36 | + <lock4j.version>2.2.0</lock4j.version> | |
| 37 | + <resilience4j.version>1.7.0</resilience4j.version> | |
| 38 | + <!-- 监控相关 --> | |
| 39 | + <skywalking.version>8.5.0</skywalking.version> | |
| 40 | + <logback.encoder.version>6.1</logback.encoder.version> | |
| 41 | + <spring-boot-admin.version>2.3.1</spring-boot-admin.version> | |
| 42 | + <!-- 工具类相关 --> | |
| 43 | + <lombok.version>1.16.14</lombok.version> | |
| 44 | + <mapstruct.version>1.4.1.Final</mapstruct.version> | |
| 45 | + <hutool.version>5.6.1</hutool.version> | |
| 46 | + <easyexcel.verion>2.2.7</easyexcel.verion> | |
| 47 | + <velocity.version>2.2</velocity.version> | |
| 48 | + <screw.version>1.0.5</screw.version> | |
| 49 | + <podam.version>7.2.6.RELEASE</podam.version> | |
| 50 | + <jedis-mock.version>0.1.16</jedis-mock.version> | |
| 51 | + <!-- 三方云服务相关 --> | |
| 52 | + <aliyun-java-sdk-core.version>4.5.18</aliyun-java-sdk-core.version> | |
| 53 | + <aliyun-java-sdk-dysmsapi.version>2.1.0</aliyun-java-sdk-dysmsapi.version> | |
| 54 | + <yunpian-java-sdk.version>1.2.7</yunpian-java-sdk.version> | |
| 55 | + </properties> | |
| 56 | + | |
| 57 | + <!-- 依赖声明 --> | |
| 58 | + <dependencyManagement> | |
| 59 | + <dependencies> | |
| 60 | + <!-- 统一依赖管理 --> | |
| 61 | + <dependency> | |
| 62 | + <groupId>org.springframework.boot</groupId> | |
| 63 | + <artifactId>spring-boot-dependencies</artifactId> | |
| 64 | + <version>${spring.boot.version}</version> | |
| 65 | + <type>pom</type> | |
| 66 | + <scope>import</scope> | |
| 67 | + </dependency> | |
| 68 | + </dependencies> | |
| 69 | + </dependencyManagement> | |
| 70 | + | |
| 14 | 71 | <dependencies> |
| 15 | 72 | <!-- Spring 核心 --> |
| 16 | 73 | <dependency> |
| 17 | 74 | <!-- 用于生成自定义的 Spring @ConfigurationProperties 配置类的说明文件 --> |
| 18 | 75 | <groupId>org.springframework.boot</groupId> |
| 19 | 76 | <artifactId>spring-boot-configuration-processor</artifactId> |
| 77 | + <optional>true</optional> | |
| 20 | 78 | </dependency> |
| 21 | 79 | |
| 22 | 80 | <dependency> |
| ... | ... | @@ -43,39 +101,61 @@ |
| 43 | 101 | <dependency> |
| 44 | 102 | <groupId>com.github.xiaoymin</groupId> |
| 45 | 103 | <artifactId>knife4j-spring-boot-starter</artifactId> |
| 104 | + <version>${knife4j.version}</version> | |
| 105 | + <exclusions> | |
| 106 | + <exclusion> | |
| 107 | + <artifactId>mapstruct</artifactId> | |
| 108 | + <groupId>org.mapstruct</groupId> <!-- 避免冲突 --> | |
| 109 | + </exclusion> | |
| 110 | + <exclusion> | |
| 111 | + <artifactId>guava</artifactId> | |
| 112 | + <groupId>com.google.guava</groupId> | |
| 113 | + </exclusion> | |
| 114 | + <exclusion> | |
| 115 | + <artifactId>swagger-annotations</artifactId> | |
| 116 | + <groupId>io.swagger</groupId> | |
| 117 | + </exclusion> | |
| 118 | + </exclusions> | |
| 46 | 119 | </dependency> |
| 47 | 120 | <dependency> |
| 48 | 121 | <groupId>io.swagger</groupId> |
| 49 | 122 | <artifactId>swagger-annotations</artifactId> |
| 123 | + <version>${swagger-annotations.version}</version> | |
| 50 | 124 | </dependency> |
| 51 | 125 | |
| 52 | 126 | <!-- DB 相关 --> |
| 53 | 127 | <dependency> |
| 54 | 128 | <groupId>mysql</groupId> |
| 55 | 129 | <artifactId>mysql-connector-java</artifactId> |
| 130 | + <version>${mysql-connector-java.version}</version> | |
| 56 | 131 | </dependency> |
| 57 | 132 | <dependency> |
| 58 | 133 | <groupId>com.alibaba</groupId> |
| 59 | 134 | <artifactId>druid-spring-boot-starter</artifactId> |
| 135 | + <version>${druid.version}</version> | |
| 60 | 136 | </dependency> |
| 61 | 137 | <dependency> |
| 62 | 138 | <groupId>com.baomidou</groupId> |
| 63 | 139 | <artifactId>mybatis-plus-boot-starter</artifactId> |
| 140 | + <version>${mybatis-plus.version}</version> | |
| 64 | 141 | </dependency> |
| 65 | 142 | <dependency> |
| 66 | 143 | <groupId>com.baomidou</groupId> |
| 67 | 144 | <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <!-- 多数据源 --> |
| 145 | + <version>${dynamic-datasource.version}</version> | |
| 68 | 146 | </dependency> |
| 69 | 147 | |
| 70 | 148 | <dependency> |
| 71 | 149 | <groupId>org.redisson</groupId> |
| 72 | 150 | <artifactId>redisson-spring-boot-starter</artifactId> |
| 151 | + <version>${redisson.version}</version> | |
| 73 | 152 | </dependency> |
| 74 | 153 | |
| 75 | 154 | <!-- Config 配置中心相关 --> |
| 76 | 155 | <dependency> |
| 77 | 156 | <groupId>com.ctrip.framework.apollo</groupId> |
| 78 | 157 | <artifactId>apollo-client</artifactId> <!-- 引入 Apollo Client 库,实现内嵌的配置中心 --> |
| 158 | + <version>${apollo.version}</version> | |
| 79 | 159 | </dependency> |
| 80 | 160 | |
| 81 | 161 | <!-- Job 定时任务相关 --> |
| ... | ... | @@ -88,41 +168,55 @@ |
| 88 | 168 | <dependency> |
| 89 | 169 | <groupId>com.baomidou</groupId> |
| 90 | 170 | <artifactId>lock4j-redisson-spring-boot-starter</artifactId> |
| 171 | + <version>${lock4j.version}</version> | |
| 172 | + <exclusions> | |
| 173 | + <exclusion> | |
| 174 | + <artifactId>redisson-spring-boot-starter</artifactId> | |
| 175 | + <groupId>org.redisson</groupId> | |
| 176 | + </exclusion> | |
| 177 | + </exclusions> | |
| 91 | 178 | </dependency> |
| 92 | 179 | |
| 93 | 180 | <dependency> |
| 94 | 181 | <groupId>io.github.resilience4j</groupId> |
| 95 | 182 | <artifactId>resilience4j-spring-boot2</artifactId> |
| 183 | + <version>${resilience4j.version}</version> | |
| 96 | 184 | </dependency> |
| 97 | 185 | |
| 98 | 186 | <!-- 监控相关 --> |
| 99 | 187 | <dependency> |
| 100 | 188 | <groupId>org.apache.skywalking</groupId> |
| 101 | 189 | <artifactId>apm-toolkit-trace</artifactId> |
| 190 | + <version>${skywalking.version}</version> | |
| 102 | 191 | </dependency> |
| 103 | 192 | <dependency> |
| 104 | 193 | <groupId>org.apache.skywalking</groupId> |
| 105 | 194 | <artifactId>apm-toolkit-logback-1.x</artifactId> |
| 195 | + <version>${skywalking.version}</version> | |
| 106 | 196 | </dependency> |
| 107 | 197 | <dependency> |
| 108 | 198 | <groupId>org.apache.skywalking</groupId> |
| 109 | 199 | <artifactId>apm-toolkit-opentracing</artifactId> |
| 200 | + <version>${skywalking.version}</version> | |
| 110 | 201 | </dependency> |
| 111 | 202 | |
| 112 | 203 | <dependency> |
| 113 | 204 | <groupId>de.codecentric</groupId> |
| 114 | 205 | <artifactId>spring-boot-admin-starter-server</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 --> |
| 206 | + <version>${spring-boot-admin.version}</version> | |
| 115 | 207 | </dependency> |
| 116 | 208 | <dependency> |
| 117 | 209 | <groupId>de.codecentric</groupId> |
| 118 | 210 | <artifactId>spring-boot-admin-starter-client</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 --> |
| 211 | + <version>${spring-boot-admin.version}</version> | |
| 119 | 212 | </dependency> |
| 120 | 213 | |
| 121 | 214 | <!-- Test 测试相关 --> |
| 122 | 215 | <dependency> |
| 123 | 216 | <groupId>org.springframework.boot</groupId> |
| 124 | 217 | <artifactId>spring-boot-starter-test</artifactId> |
| 125 | - <scope>test</scope> | |
| 218 | +<!-- <scope>test</scope>--> <!-- TODO 调整依赖 scope --> | |
| 219 | + <optional>true</optional> | |
| 126 | 220 | <exclusions> |
| 127 | 221 | <exclusion> |
| 128 | 222 | <artifactId>asm</artifactId> |
| ... | ... | @@ -140,53 +234,64 @@ |
| 140 | 234 | <dependency> |
| 141 | 235 | <groupId>com.github.fppt</groupId> <!-- 单元测试,我们采用内嵌的 Redis 数据库 --> |
| 142 | 236 | <artifactId>jedis-mock</artifactId> |
| 237 | + <version>${jedis-mock.version}</version> | |
| 143 | 238 | <scope>test</scope> |
| 144 | 239 | </dependency> |
| 145 | 240 | |
| 146 | 241 | <dependency> |
| 147 | 242 | <groupId>uk.co.jemos.podam</groupId> <!-- 单元测试,随机生成 POJO 类 --> |
| 148 | 243 | <artifactId>podam</artifactId> |
| 149 | - <scope>test</scope> | |
| 244 | + <version>${podam.version}</version> | |
| 245 | + <!-- <scope>test</scope>--> <!-- TODO 调整依赖 scope --> | |
| 246 | + <optional>true</optional> | |
| 150 | 247 | </dependency> |
| 151 | 248 | |
| 152 | 249 | <!-- 工具类相关 --> |
| 153 | 250 | <dependency> |
| 154 | 251 | <groupId>org.projectlombok</groupId> |
| 155 | 252 | <artifactId>lombok</artifactId> |
| 253 | + <version>${lombok.version}</version> | |
| 156 | 254 | </dependency> |
| 157 | 255 | |
| 158 | 256 | <dependency> |
| 159 | 257 | <groupId>org.mapstruct</groupId> |
| 160 | 258 | <artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher --> |
| 259 | + <version>${mapstruct.version}</version> | |
| 161 | 260 | </dependency> |
| 162 | 261 | <dependency> |
| 163 | 262 | <groupId>org.mapstruct</groupId> |
| 164 | 263 | <artifactId>mapstruct-processor</artifactId> |
| 264 | + <version>${mapstruct.version}</version> | |
| 165 | 265 | <optional>true</optional> |
| 166 | 266 | </dependency> |
| 167 | 267 | <dependency> |
| 168 | 268 | <groupId>org.mapstruct</groupId> |
| 169 | 269 | <artifactId>mapstruct-jdk8</artifactId> |
| 270 | + <version>${mapstruct.version}</version> | |
| 170 | 271 | </dependency> |
| 171 | 272 | |
| 172 | 273 | <dependency> |
| 173 | 274 | <groupId>cn.hutool</groupId> |
| 174 | 275 | <artifactId>hutool-all</artifactId> |
| 276 | + <version>${hutool.version}</version> | |
| 175 | 277 | </dependency> |
| 176 | 278 | |
| 177 | 279 | <dependency> |
| 178 | 280 | <groupId>com.alibaba</groupId> |
| 179 | 281 | <artifactId>easyexcel</artifactId> |
| 282 | + <version>${easyexcel.verion}</version> | |
| 180 | 283 | </dependency> |
| 181 | 284 | |
| 182 | 285 | <dependency> |
| 183 | 286 | <groupId>org.apache.velocity</groupId> |
| 184 | 287 | <artifactId>velocity-engine-core</artifactId> |
| 288 | + <version>${velocity.version}</version> | |
| 185 | 289 | </dependency> |
| 186 | 290 | |
| 187 | 291 | <dependency> |
| 188 | 292 | <groupId>cn.smallbun.screw</groupId> |
| 189 | 293 | <artifactId>screw-core</artifactId> <!-- 实现数据库文档 --> |
| 294 | + <version>${screw.version}</version> | |
| 190 | 295 | </dependency> |
| 191 | 296 | |
| 192 | 297 | <!-- 三方云服务相关 --> |
| ... | ... | @@ -195,18 +300,67 @@ |
| 195 | 300 | <dependency> |
| 196 | 301 | <groupId>com.yunpian.sdk</groupId> |
| 197 | 302 | <artifactId>yunpian-java-sdk</artifactId> |
| 303 | + <version>${yunpian-java-sdk.version}</version> | |
| 198 | 304 | </dependency> |
| 199 | 305 | |
| 200 | 306 | <dependency> |
| 201 | 307 | <groupId>com.aliyun</groupId> |
| 202 | 308 | <artifactId>aliyun-java-sdk-core</artifactId> |
| 309 | + <version>${aliyun-java-sdk-core.version}</version> | |
| 203 | 310 | </dependency> |
| 204 | 311 | <dependency> |
| 205 | 312 | <groupId>com.aliyun</groupId> |
| 206 | 313 | <artifactId>aliyun-java-sdk-dysmsapi</artifactId> |
| 314 | + <version>${aliyun-java-sdk-dysmsapi.version}</version> | |
| 207 | 315 | </dependency> |
| 208 | 316 | <!-- SMS SDK end --> |
| 209 | 317 | |
| 210 | 318 | </dependencies> |
| 211 | 319 | |
| 320 | + <build> | |
| 321 | + <!-- 设置构建的 jar 包名 --> | |
| 322 | + <finalName>${project.artifactId}</finalName> | |
| 323 | + <plugins> | |
| 324 | + <!-- 打包 --> | |
| 325 | + <plugin> | |
| 326 | + <groupId>org.springframework.boot</groupId> | |
| 327 | + <artifactId>spring-boot-maven-plugin</artifactId> | |
| 328 | + <version>${spring.boot.version}</version> | |
| 329 | + <configuration> | |
| 330 | + <fork>true</fork> | |
| 331 | + </configuration> | |
| 332 | + <executions> | |
| 333 | + <execution> | |
| 334 | + <goals> | |
| 335 | + <goal>repackage</goal> <!-- 将原来的 jar 打入其中 --> | |
| 336 | + </goals> | |
| 337 | + </execution> | |
| 338 | + </executions> | |
| 339 | + </plugin> | |
| 340 | + | |
| 341 | + <!-- 提供给 mapstruct 使用 --> | |
| 342 | + <plugin> | |
| 343 | + <groupId>org.apache.maven.plugins</groupId> | |
| 344 | + <artifactId>maven-compiler-plugin</artifactId> | |
| 345 | + <version>${maven-compiler-plugin.version}</version> | |
| 346 | + <configuration> | |
| 347 | + <source>${java.version}</source> <!-- or higher, depending on your project --> | |
| 348 | + <target>${java.version}</target> <!-- or higher, depending on your project --> | |
| 349 | + <annotationProcessorPaths> | |
| 350 | + <path> | |
| 351 | + <groupId>org.mapstruct</groupId> | |
| 352 | + <artifactId>mapstruct-processor</artifactId> | |
| 353 | + <version>${mapstruct.version}</version> | |
| 354 | + </path> | |
| 355 | + <path> | |
| 356 | + <groupId>org.projectlombok</groupId> | |
| 357 | + <artifactId>lombok</artifactId> | |
| 358 | + <version>${lombok.version}</version> | |
| 359 | + </path> | |
| 360 | + </annotationProcessorPaths> | |
| 361 | + </configuration> | |
| 362 | + </plugin> | |
| 363 | + </plugins> | |
| 364 | + </build> | |
| 365 | + | |
| 212 | 366 | </project> | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/core/ConfigConsts.java
| ... | ... | @@ -9,6 +9,10 @@ package cn.iocoder.dashboard.framework.apollo.core; |
| 9 | 9 | */ |
| 10 | 10 | public class ConfigConsts { |
| 11 | 11 | |
| 12 | + /** | |
| 13 | + * {@link cn.iocoder.dashboard.framework.apollo.internals.ConfigFrameworkDAO} 的实现类 | |
| 14 | + */ | |
| 15 | + public static final String APOLLO_JDBC_DAO = "apollo.jdbc.dao"; | |
| 12 | 16 | public static final String APOLLO_JDBC_URL = "apollo.jdbc.url"; |
| 13 | 17 | public static final String APOLLO_JDBC_USERNAME = "apollo.jdbc.username"; |
| 14 | 18 | public static final String APOLLO_JDBC_PASSWORD = "apollo.jdbc.password"; | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/ConfigFrameworkDAO.java
| 1 | 1 | package cn.iocoder.dashboard.framework.apollo.internals; |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; | |
| 3 | +import cn.iocoder.dashboard.framework.apollo.internals.dto.ConfigRespDTO; | |
| 4 | 4 | |
| 5 | 5 | import java.util.Date; |
| 6 | 6 | import java.util.List; |
| 7 | 7 | |
| 8 | 8 | /** |
| 9 | 9 | * 配置 Framework DAO 接口 |
| 10 | + * | |
| 11 | + * 注意,实现类必须提供 (String jdbcUrl, String username, String password) 构造方法 | |
| 12 | + * | |
| 13 | + * @author 芋道源码 | |
| 10 | 14 | */ |
| 11 | 15 | public interface ConfigFrameworkDAO { |
| 12 | 16 | |
| ... | ... | @@ -23,6 +27,6 @@ public interface ConfigFrameworkDAO { |
| 23 | 27 | * |
| 24 | 28 | * @return 配置列表 |
| 25 | 29 | */ |
| 26 | - List<InfConfigDO> selectList(); | |
| 30 | + List<ConfigRespDTO> selectList(); | |
| 27 | 31 | |
| 28 | 32 | } | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/DBConfigRepository.java
| ... | ... | @@ -2,9 +2,8 @@ package cn.iocoder.dashboard.framework.apollo.internals; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.iocoder.dashboard.framework.apollo.core.ConfigConsts; |
| 5 | +import cn.iocoder.dashboard.framework.apollo.internals.dto.ConfigRespDTO; | |
| 5 | 6 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; |
| 6 | -import cn.iocoder.dashboard.modules.infra.dal.mysql.config.InfConfigDAOImpl; | |
| 7 | -import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; | |
| 8 | 7 | import com.ctrip.framework.apollo.Apollo; |
| 9 | 8 | import com.ctrip.framework.apollo.build.ApolloInjector; |
| 10 | 9 | import com.ctrip.framework.apollo.core.utils.ApolloThreadFactory; |
| ... | ... | @@ -59,6 +58,7 @@ public class DBConfigRepository extends AbstractConfigRepository { |
| 59 | 58 | this.propertiesFactory = ApolloInjector.getInstance(PropertiesFactory.class); |
| 60 | 59 | this.m_configUtil = ApolloInjector.getInstance(ConfigUtil.class); |
| 61 | 60 | // 初始化 DB |
| 61 | + cn.iocoder.dashboard.modules.infra.dal.mysql.config | |
| 62 | 62 | this.configFrameworkDAO = new InfConfigDAOImpl(System.getProperty(ConfigConsts.APOLLO_JDBC_URL), |
| 63 | 63 | System.getProperty(ConfigConsts.APOLLO_JDBC_USERNAME), System.getProperty(ConfigConsts.APOLLO_JDBC_PASSWORD)); |
| 64 | 64 | |
| ... | ... | @@ -84,7 +84,7 @@ public class DBConfigRepository extends AbstractConfigRepository { |
| 84 | 84 | @Override |
| 85 | 85 | protected void sync() { |
| 86 | 86 | // 第一步,尝试获取配置 |
| 87 | - List<InfConfigDO> configs = this.loadConfigIfUpdate(this.maxUpdateTime); | |
| 87 | + List<ConfigRespDTO> configs = this.loadConfigIfUpdate(this.maxUpdateTime); | |
| 88 | 88 | if (CollUtil.isEmpty(configs)) { // 如果没有更新,则返回 |
| 89 | 89 | return; |
| 90 | 90 | } |
| ... | ... | @@ -94,7 +94,7 @@ public class DBConfigRepository extends AbstractConfigRepository { |
| 94 | 94 | this.m_configCache = newProperties; |
| 95 | 95 | // 第三步,获取最大的配置时间 |
| 96 | 96 | assert configs.size() > 0; // 断言,避免告警 |
| 97 | - this.maxUpdateTime = configs.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime(); | |
| 97 | + this.maxUpdateTime = configs.stream().max(Comparator.comparing(ConfigRespDTO::getUpdateTime)).get().getUpdateTime(); | |
| 98 | 98 | // 第四部,触发配置刷新!重要!!!! |
| 99 | 99 | super.fireRepositoryChange(m_namespace, newProperties); |
| 100 | 100 | log.info("[sync][缓存配置,数量为:{}]", configs.size()); |
| ... | ... | @@ -120,9 +120,9 @@ public class DBConfigRepository extends AbstractConfigRepository { |
| 120 | 120 | return ConfigSourceType.REMOTE; |
| 121 | 121 | } |
| 122 | 122 | |
| 123 | - private Properties buildProperties(List<InfConfigDO> configs) { | |
| 123 | + private Properties buildProperties(List<ConfigRespDTO> configs) { | |
| 124 | 124 | Properties properties = propertiesFactory.getPropertiesInstance(); |
| 125 | - configs.stream().filter(BaseDO::getDeleted) // 过滤掉被删除的配置 | |
| 125 | + configs.stream().filter(ConfigRespDTO::getDeleted) // 过滤掉被删除的配置 | |
| 126 | 126 | .forEach(config -> properties.put(config.getKey(), config.getValue())); |
| 127 | 127 | return properties; |
| 128 | 128 | } |
| ... | ... | @@ -153,7 +153,7 @@ public class DBConfigRepository extends AbstractConfigRepository { |
| 153 | 153 | * @param maxUpdateTime 当前配置的最大更新时间 |
| 154 | 154 | * @return 配置列表 |
| 155 | 155 | */ |
| 156 | - private List<InfConfigDO> loadConfigIfUpdate(Date maxUpdateTime) { | |
| 156 | + private List<ConfigRespDTO> loadConfigIfUpdate(Date maxUpdateTime) { | |
| 157 | 157 | // 第一步,判断是否要更新。 |
| 158 | 158 | if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据 |
| 159 | 159 | log.info("[loadConfigIfUpdate][首次加载全量配置]"); | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/dto/ConfigRespDTO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.apollo.internals.dto; | |
| 2 | + | |
| 3 | +import lombok.Data; | |
| 4 | + | |
| 5 | +import java.util.Date; | |
| 6 | + | |
| 7 | +/** | |
| 8 | + * 配置 Response DTO | |
| 9 | + * | |
| 10 | + * @author 芋道源码 | |
| 11 | + */ | |
| 12 | +@Data | |
| 13 | +public class ConfigRespDTO { | |
| 14 | + | |
| 15 | + /** | |
| 16 | + * 参数键名 | |
| 17 | + */ | |
| 18 | + private String key; | |
| 19 | + /** | |
| 20 | + * 参数键值 | |
| 21 | + */ | |
| 22 | + private String value; | |
| 23 | + | |
| 24 | + /** | |
| 25 | + * 是否删除 | |
| 26 | + */ | |
| 27 | + private Boolean deleted; | |
| 28 | + /** | |
| 29 | + * 更新时间 | |
| 30 | + */ | |
| 31 | + private Date updateTime; | |
| 32 | + | |
| 33 | +} | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/dict/core/dto/DictDataRespDTO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.dict.core.dto; | |
| 2 | + | |
| 3 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * 字典数据 Response DTO | |
| 8 | + * | |
| 9 | + * @author 芋道源码 | |
| 10 | + */ | |
| 11 | +@Data | |
| 12 | +public class DictDataRespDTO { | |
| 13 | + | |
| 14 | + /** | |
| 15 | + * 字典标签 | |
| 16 | + */ | |
| 17 | + private String label; | |
| 18 | + /** | |
| 19 | + * 字典值 | |
| 20 | + */ | |
| 21 | + private String value; | |
| 22 | + /** | |
| 23 | + * 字典类型 | |
| 24 | + */ | |
| 25 | + private String dictType; | |
| 26 | + /** | |
| 27 | + * 状态 | |
| 28 | + * | |
| 29 | + * 枚举 {@link CommonStatusEnum} | |
| 30 | + */ | |
| 31 | + private Integer status; | |
| 32 | + | |
| 33 | +} | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/dict/core/service/DictDataFrameworkService.java
| 1 | 1 | package cn.iocoder.dashboard.framework.dict.core.service; |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; | |
| 3 | +import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO; | |
| 4 | 4 | |
| 5 | 5 | import java.util.List; |
| 6 | 6 | |
| ... | ... | @@ -13,7 +13,7 @@ public interface DictDataFrameworkService { |
| 13 | 13 | * @param value 字典数据值 |
| 14 | 14 | * @return 字典数据 |
| 15 | 15 | */ |
| 16 | - SysDictDataDO getDictDataFromCache(String type, String value); | |
| 16 | + DictDataRespDTO getDictDataFromCache(String type, String value); | |
| 17 | 17 | |
| 18 | 18 | /** |
| 19 | 19 | * 解析获得指定的字典数据,从缓存中 |
| ... | ... | @@ -22,7 +22,7 @@ public interface DictDataFrameworkService { |
| 22 | 22 | * @param label 字典数据标签 |
| 23 | 23 | * @return 字典数据 |
| 24 | 24 | */ |
| 25 | - SysDictDataDO parseDictDataFromCache(String type, String label); | |
| 25 | + DictDataRespDTO parseDictDataFromCache(String type, String label); | |
| 26 | 26 | |
| 27 | 27 | /** |
| 28 | 28 | * 获得指定类型的字典数据,从缓存中 |
| ... | ... | @@ -30,6 +30,6 @@ public interface DictDataFrameworkService { |
| 30 | 30 | * @param type 字典类型 |
| 31 | 31 | * @return 字典数据列表 |
| 32 | 32 | */ |
| 33 | - List<SysDictDataDO> listDictDatasFromCache(String type); | |
| 33 | + List<DictDataRespDTO> listDictDatasFromCache(String type); | |
| 34 | 34 | |
| 35 | 35 | } | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/dict/core/util/DictUtils.java
| 1 | 1 | package cn.iocoder.dashboard.framework.dict.core.util; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO; | |
| 3 | 4 | import cn.iocoder.dashboard.framework.dict.core.service.DictDataFrameworkService; |
| 4 | -import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; | |
| 5 | 5 | import lombok.extern.slf4j.Slf4j; |
| 6 | 6 | |
| 7 | 7 | /** |
| ... | ... | @@ -17,11 +17,11 @@ public class DictUtils { |
| 17 | 17 | log.info("[init][初始化 DictUtils 成功]"); |
| 18 | 18 | } |
| 19 | 19 | |
| 20 | - public static SysDictDataDO getDictDataFromCache(String type, String value) { | |
| 20 | + public static DictDataRespDTO getDictDataFromCache(String type, String value) { | |
| 21 | 21 | return service.getDictDataFromCache(type, value); |
| 22 | 22 | } |
| 23 | 23 | |
| 24 | - public static SysDictDataDO parseDictDataFromCache(String type, String label) { | |
| 24 | + public static DictDataRespDTO parseDictDataFromCache(String type, String label) { | |
| 25 | 25 | return service.getDictDataFromCache(type, label); |
| 26 | 26 | } |
| 27 | 27 | ... | ... |
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; |
| 2 | 2 | |
| 3 | 3 | |
| 4 | 4 | import cn.hutool.core.convert.Convert; |
| 5 | +import cn.iocoder.dashboard.framework.dict.core.dto.DictDataRespDTO; | |
| 5 | 6 | import cn.iocoder.dashboard.framework.dict.core.util.DictUtils; |
| 6 | 7 | import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; |
| 7 | -import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; | |
| 8 | 8 | import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum; |
| 9 | 9 | import com.alibaba.excel.converters.Converter; |
| 10 | 10 | import com.alibaba.excel.enums.CellDataTypeEnum; |
| ... | ... | @@ -14,7 +14,7 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty; |
| 14 | 14 | import lombok.extern.slf4j.Slf4j; |
| 15 | 15 | |
| 16 | 16 | /** |
| 17 | - * Excel {@link SysDictDataDO} 数据字典转换器 | |
| 17 | + * Excel {@link DictDataRespDTO} 数据字典转换器 | |
| 18 | 18 | * |
| 19 | 19 | * @author 芋道源码 |
| 20 | 20 | */ |
| ... | ... | @@ -37,7 +37,7 @@ public class DictConvert implements Converter<Object> { |
| 37 | 37 | // 使用字典解析 |
| 38 | 38 | SysDictTypeEnum type = getType(contentProperty); |
| 39 | 39 | String label = cellData.getStringValue(); |
| 40 | - SysDictDataDO dictData = DictUtils.parseDictDataFromCache(type.getValue(), label); | |
| 40 | + DictDataRespDTO dictData = DictUtils.parseDictDataFromCache(type.getValue(), label); | |
| 41 | 41 | if (dictData == null) { |
| 42 | 42 | log.error("[convertToJavaData][type({}) 解析不掉 label({})]", type, label); |
| 43 | 43 | return null; |
| ... | ... | @@ -58,7 +58,7 @@ public class DictConvert implements Converter<Object> { |
| 58 | 58 | // 使用字典格式化 |
| 59 | 59 | SysDictTypeEnum type = getType(contentProperty); |
| 60 | 60 | String value = String.valueOf(object); |
| 61 | - SysDictDataDO dictData = DictUtils.getDictDataFromCache(type.getValue(), value); | |
| 61 | + DictDataRespDTO dictData = DictUtils.getDictDataFromCache(type.getValue(), value); | |
| 62 | 62 | if (dictData == null) { |
| 63 | 63 | log.error("[convertToExcelData][type({}) 转换不了 label({})]", type, value); |
| 64 | 64 | return new CellData<>(""); | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/file/config/FileProperties.java
| 1 | 1 | package cn.iocoder.dashboard.framework.file.config; |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.modules.infra.controller.file.InfFileController; | |
| 4 | 3 | import lombok.Data; |
| 5 | 4 | import org.springframework.boot.context.properties.ConfigurationProperties; |
| 6 | 5 | import org.springframework.validation.annotation.Validated; |
| ... | ... | @@ -13,7 +12,7 @@ import javax.validation.constraints.NotNull; |
| 13 | 12 | public class FileProperties { |
| 14 | 13 | |
| 15 | 14 | /** |
| 16 | - * 对应 {@link InfFileController#} | |
| 15 | + * 对应 InfFileController 的 getFile 方法 | |
| 17 | 16 | */ |
| 18 | 17 | @NotNull(message = "基础文件路径不能为空") |
| 19 | 18 | private String basePath; | ... | ... |
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; |
| 6 | 6 | import cn.hutool.extra.servlet.ServletUtil; |
| 7 | 7 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 8 | 8 | import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog; |
| 9 | +import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO; | |
| 9 | 10 | import cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum; |
| 10 | 11 | import cn.iocoder.dashboard.framework.logger.operatelog.core.service.OperateLogFrameworkService; |
| 11 | 12 | import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils; |
| 12 | 13 | import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils; |
| 13 | -import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO; | |
| 14 | 14 | import cn.iocoder.dashboard.util.json.JsonUtils; |
| 15 | 15 | import cn.iocoder.dashboard.util.servlet.ServletUtils; |
| 16 | 16 | import com.google.common.collect.Maps; |
| ... | ... | @@ -55,13 +55,13 @@ public class OperateLogAspect { |
| 55 | 55 | /** |
| 56 | 56 | * 用于记录操作内容的上下文 |
| 57 | 57 | * |
| 58 | - * @see SysOperateLogCreateReqVO#getContent() | |
| 58 | + * @see OperateLogCreateReqDTO#getContent() | |
| 59 | 59 | */ |
| 60 | 60 | private static final ThreadLocal<String> CONTENT = new ThreadLocal<>(); |
| 61 | 61 | /** |
| 62 | 62 | * 用于记录拓展字段的上下文 |
| 63 | 63 | * |
| 64 | - * @see SysOperateLogCreateReqVO#getExts() | |
| 64 | + * @see OperateLogCreateReqDTO#getExts() | |
| 65 | 65 | */ |
| 66 | 66 | private static final ThreadLocal<Map<String, Object>> EXTS = new ThreadLocal<>(); |
| 67 | 67 | |
| ... | ... | @@ -130,106 +130,106 @@ public class OperateLogAspect { |
| 130 | 130 | |
| 131 | 131 | private void log0(ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation, |
| 132 | 132 | Date startTime, Object result, Throwable exception) { |
| 133 | - SysOperateLogCreateReqVO operateLogVO = new SysOperateLogCreateReqVO(); | |
| 133 | + OperateLogCreateReqDTO operateLogDTO = new OperateLogCreateReqDTO(); | |
| 134 | 134 | // 补全通用字段 |
| 135 | - operateLogVO.setTraceId(TracerUtils.getTraceId()); | |
| 136 | - operateLogVO.setStartTime(startTime); | |
| 135 | + operateLogDTO.setTraceId(TracerUtils.getTraceId()); | |
| 136 | + operateLogDTO.setStartTime(startTime); | |
| 137 | 137 | // 补充用户信息 |
| 138 | - fillUserFields(operateLogVO); | |
| 138 | + fillUserFields(operateLogDTO); | |
| 139 | 139 | // 补全模块信息 |
| 140 | - fillModuleFields(operateLogVO, joinPoint, operateLog, apiOperation); | |
| 140 | + fillModuleFields(operateLogDTO, joinPoint, operateLog, apiOperation); | |
| 141 | 141 | // 补全请求信息 |
| 142 | - fillRequestFields(operateLogVO); | |
| 142 | + fillRequestFields(operateLogDTO); | |
| 143 | 143 | // 补全方法信息 |
| 144 | - fillMethodFields(operateLogVO, joinPoint, operateLog, startTime, result, exception); | |
| 144 | + fillMethodFields(operateLogDTO, joinPoint, operateLog, startTime, result, exception); | |
| 145 | 145 | |
| 146 | 146 | // 异步记录日志 |
| 147 | - operateLogFrameworkService.createOperateLogAsync(operateLogVO); | |
| 147 | + operateLogFrameworkService.createOperateLogAsync(operateLogDTO); | |
| 148 | 148 | } |
| 149 | 149 | |
| 150 | - private static void fillUserFields(SysOperateLogCreateReqVO operateLogVO) { | |
| 151 | - operateLogVO.setUserId(SecurityFrameworkUtils.getLoginUserId()); | |
| 150 | + private static void fillUserFields(OperateLogCreateReqDTO operateLogDTO) { | |
| 151 | + operateLogDTO.setUserId(SecurityFrameworkUtils.getLoginUserId()); | |
| 152 | 152 | } |
| 153 | 153 | |
| 154 | - private static void fillModuleFields(SysOperateLogCreateReqVO operateLogVO, | |
| 154 | + private static void fillModuleFields(OperateLogCreateReqDTO operateLogDTO, | |
| 155 | 155 | ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation) { |
| 156 | 156 | // module 属性 |
| 157 | 157 | if (operateLog != null) { |
| 158 | - operateLogVO.setModule(operateLog.module()); | |
| 158 | + operateLogDTO.setModule(operateLog.module()); | |
| 159 | 159 | } |
| 160 | - if (StrUtil.isEmpty(operateLogVO.getModule())) { | |
| 160 | + if (StrUtil.isEmpty(operateLogDTO.getModule())) { | |
| 161 | 161 | Api api = getClassAnnotation(joinPoint, Api.class); |
| 162 | 162 | if (api != null) { |
| 163 | 163 | // 优先读取 @API 的 name 属性 |
| 164 | 164 | if (StrUtil.isNotEmpty(api.value())) { |
| 165 | - operateLogVO.setModule(api.value()); | |
| 165 | + operateLogDTO.setModule(api.value()); | |
| 166 | 166 | } |
| 167 | 167 | // 没有的话,读取 @API 的 tags 属性 |
| 168 | - if (StrUtil.isEmpty(operateLogVO.getModule()) && ArrayUtil.isNotEmpty(api.tags())) { | |
| 169 | - operateLogVO.setModule(api.tags()[0]); | |
| 168 | + if (StrUtil.isEmpty(operateLogDTO.getModule()) && ArrayUtil.isNotEmpty(api.tags())) { | |
| 169 | + operateLogDTO.setModule(api.tags()[0]); | |
| 170 | 170 | } |
| 171 | 171 | } |
| 172 | 172 | } |
| 173 | 173 | // name 属性 |
| 174 | 174 | if (operateLog != null) { |
| 175 | - operateLogVO.setName(operateLog.name()); | |
| 175 | + operateLogDTO.setName(operateLog.name()); | |
| 176 | 176 | } |
| 177 | - if (StrUtil.isEmpty(operateLogVO.getName()) && apiOperation != null) { | |
| 178 | - operateLogVO.setName(apiOperation.value()); | |
| 177 | + if (StrUtil.isEmpty(operateLogDTO.getName()) && apiOperation != null) { | |
| 178 | + operateLogDTO.setName(apiOperation.value()); | |
| 179 | 179 | } |
| 180 | 180 | // type 属性 |
| 181 | 181 | if (operateLog != null && ArrayUtil.isNotEmpty(operateLog.type())) { |
| 182 | - operateLogVO.setType(operateLog.type()[0].getType()); | |
| 182 | + operateLogDTO.setType(operateLog.type()[0].getType()); | |
| 183 | 183 | } |
| 184 | - if (operateLogVO.getType() == null) { | |
| 184 | + if (operateLogDTO.getType() == null) { | |
| 185 | 185 | RequestMethod requestMethod = obtainFirstMatchRequestMethod(obtainRequestMethod(joinPoint)); |
| 186 | 186 | OperateTypeEnum operateLogType = convertOperateLogType(requestMethod); |
| 187 | - operateLogVO.setType(operateLogType != null ? operateLogType.getType() : null); | |
| 187 | + operateLogDTO.setType(operateLogType != null ? operateLogType.getType() : null); | |
| 188 | 188 | } |
| 189 | 189 | // content 和 exts 属性 |
| 190 | - operateLogVO.setContent(CONTENT.get()); | |
| 191 | - operateLogVO.setExts(EXTS.get()); | |
| 190 | + operateLogDTO.setContent(CONTENT.get()); | |
| 191 | + operateLogDTO.setExts(EXTS.get()); | |
| 192 | 192 | } |
| 193 | 193 | |
| 194 | - private static void fillRequestFields(SysOperateLogCreateReqVO operateLogVO) { | |
| 194 | + private static void fillRequestFields(OperateLogCreateReqDTO operateLogDTO) { | |
| 195 | 195 | // 获得 Request 对象 |
| 196 | 196 | HttpServletRequest request = ServletUtils.getRequest(); |
| 197 | 197 | if (request == null) { |
| 198 | 198 | return; |
| 199 | 199 | } |
| 200 | 200 | // 补全请求信息 |
| 201 | - operateLogVO.setRequestMethod(request.getMethod()); | |
| 202 | - operateLogVO.setRequestUrl(request.getRequestURI()); | |
| 203 | - operateLogVO.setUserIp(ServletUtil.getClientIP(request)); | |
| 204 | - operateLogVO.setUserAgent(ServletUtils.getUserAgent(request)); | |
| 201 | + operateLogDTO.setRequestMethod(request.getMethod()); | |
| 202 | + operateLogDTO.setRequestUrl(request.getRequestURI()); | |
| 203 | + operateLogDTO.setUserIp(ServletUtil.getClientIP(request)); | |
| 204 | + operateLogDTO.setUserAgent(ServletUtils.getUserAgent(request)); | |
| 205 | 205 | } |
| 206 | 206 | |
| 207 | - private static void fillMethodFields(SysOperateLogCreateReqVO operateLogVO, | |
| 207 | + private static void fillMethodFields(OperateLogCreateReqDTO operateLogDTO, | |
| 208 | 208 | ProceedingJoinPoint joinPoint, OperateLog operateLog, |
| 209 | 209 | Date startTime, Object result, Throwable exception) { |
| 210 | 210 | MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); |
| 211 | - operateLogVO.setJavaMethod(methodSignature.toString()); | |
| 211 | + operateLogDTO.setJavaMethod(methodSignature.toString()); | |
| 212 | 212 | if (operateLog == null || operateLog.logArgs()) { |
| 213 | - operateLogVO.setJavaMethodArgs(obtainMethodArgs(joinPoint)); | |
| 213 | + operateLogDTO.setJavaMethodArgs(obtainMethodArgs(joinPoint)); | |
| 214 | 214 | } |
| 215 | 215 | if (operateLog == null || operateLog.logResultData()) { |
| 216 | - operateLogVO.setResultData(obtainResultData(result)); | |
| 216 | + operateLogDTO.setResultData(obtainResultData(result)); | |
| 217 | 217 | } |
| 218 | - operateLogVO.setDuration((int) (System.currentTimeMillis() - startTime.getTime())); | |
| 218 | + operateLogDTO.setDuration((int) (System.currentTimeMillis() - startTime.getTime())); | |
| 219 | 219 | // (正常)处理 resultCode 和 resultMsg 字段 |
| 220 | 220 | if (result != null) { |
| 221 | 221 | if (result instanceof CommonResult) { |
| 222 | 222 | CommonResult<?> commonResult = (CommonResult<?>) result; |
| 223 | - operateLogVO.setResultCode(commonResult.getCode()); | |
| 224 | - operateLogVO.setResultMsg(commonResult.getMsg()); | |
| 223 | + operateLogDTO.setResultCode(commonResult.getCode()); | |
| 224 | + operateLogDTO.setResultMsg(commonResult.getMsg()); | |
| 225 | 225 | } else { |
| 226 | - operateLogVO.setResultCode(SUCCESS.getCode()); | |
| 226 | + operateLogDTO.setResultCode(SUCCESS.getCode()); | |
| 227 | 227 | } |
| 228 | 228 | } |
| 229 | 229 | // (异常)处理 resultCode 和 resultMsg 字段 |
| 230 | 230 | if (exception != null) { |
| 231 | - operateLogVO.setResultCode(INTERNAL_SERVER_ERROR.getCode()); | |
| 232 | - operateLogVO.setResultMsg(ExceptionUtil.getRootCauseMessage(exception)); | |
| 231 | + operateLogDTO.setResultCode(INTERNAL_SERVER_ERROR.getCode()); | |
| 232 | + operateLogDTO.setResultMsg(ExceptionUtil.getRootCauseMessage(exception)); | |
| 233 | 233 | } |
| 234 | 234 | } |
| 235 | 235 | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/logger/operatelog/core/dto/OperateLogCreateReqDTO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.logger.operatelog.core.dto; | |
| 2 | + | |
| 3 | +import io.swagger.annotations.ApiModelProperty; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import javax.validation.constraints.NotEmpty; | |
| 7 | +import javax.validation.constraints.NotNull; | |
| 8 | +import java.util.Date; | |
| 9 | +import java.util.Map; | |
| 10 | + | |
| 11 | +/** | |
| 12 | + * 操作日志创建 Request DTO | |
| 13 | + */ | |
| 14 | +@Data | |
| 15 | +public class OperateLogCreateReqDTO { | |
| 16 | + | |
| 17 | + @ApiModelProperty(value = "链路追踪编号", required = true, example = "89aca178-a370-411c-ae02-3f0d672be4ab") | |
| 18 | + @NotEmpty(message = "链路追踪编号不能为空") | |
| 19 | + private String traceId; | |
| 20 | + | |
| 21 | + @ApiModelProperty(value = "用户编号", required = true, example = "1024") | |
| 22 | + @NotNull(message = "用户编号不能为空") | |
| 23 | + private Long userId; | |
| 24 | + | |
| 25 | + @ApiModelProperty(value = "操作模块", required = true, example = "订单") | |
| 26 | + @NotEmpty(message = "操作模块不能为空") | |
| 27 | + private String module; | |
| 28 | + | |
| 29 | + @ApiModelProperty(value = "操作名", required = true, example = "创建订单") | |
| 30 | + @NotEmpty(message = "操作名") | |
| 31 | + private String name; | |
| 32 | + | |
| 33 | + @ApiModelProperty(value = "操作分类", required = true, example = "1", notes = "参见 SysOperateLogTypeEnum 枚举类") | |
| 34 | + @NotNull(message = "操作分类不能为空") | |
| 35 | + private Integer type; | |
| 36 | + | |
| 37 | + @ApiModelProperty(value = "操作明细", example = "修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。") | |
| 38 | + private String content; | |
| 39 | + | |
| 40 | + @ApiModelProperty(value = "拓展字段", example = "{'orderId': 1}") | |
| 41 | + private Map<String, Object> exts; | |
| 42 | + | |
| 43 | + @ApiModelProperty(value = "请求方法名", required = true, example = "GET") | |
| 44 | + @NotEmpty(message = "请求方法名不能为空") | |
| 45 | + private String requestMethod; | |
| 46 | + | |
| 47 | + @ApiModelProperty(value = "请求地址", required = true, example = "/xxx/yyy") | |
| 48 | + @NotEmpty(message = "请求地址不能为空") | |
| 49 | + private String requestUrl; | |
| 50 | + | |
| 51 | + @ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1") | |
| 52 | + @NotEmpty(message = "用户 IP 不能为空") | |
| 53 | + private String userIp; | |
| 54 | + | |
| 55 | + @ApiModelProperty(value = "浏览器 UserAgent", required = true, example = "Mozilla/5.0") | |
| 56 | + @NotEmpty(message = "浏览器 UserAgent 不能为空") | |
| 57 | + private String userAgent; | |
| 58 | + | |
| 59 | + @ApiModelProperty(value = "Java 方法名", required = true, example = "cn.iocoder.dashboard.UserController.save(...)") | |
| 60 | + @NotEmpty(message = "Java 方法名不能为空") | |
| 61 | + private String javaMethod; | |
| 62 | + | |
| 63 | + @ApiModelProperty(value = "Java 方法的参数") | |
| 64 | + private String javaMethodArgs; | |
| 65 | + | |
| 66 | + @ApiModelProperty(value = "开始时间", required = true) | |
| 67 | + @NotNull(message = "开始时间不能为空") | |
| 68 | + private Date startTime; | |
| 69 | + | |
| 70 | + @ApiModelProperty(value = "执行时长,单位:毫秒", required = true) | |
| 71 | + @NotNull(message = "执行时长不能为空") | |
| 72 | + private Integer duration; | |
| 73 | + | |
| 74 | + @ApiModelProperty(value = "结果码", required = true) | |
| 75 | + @NotNull(message = "结果码不能为空") | |
| 76 | + private Integer resultCode; | |
| 77 | + | |
| 78 | + @ApiModelProperty(value = "结果提示") | |
| 79 | + private String resultMsg; | |
| 80 | + | |
| 81 | + @ApiModelProperty(value = "结果数据") | |
| 82 | + private String resultData; | |
| 83 | + | |
| 84 | +} | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/logger/operatelog/core/service/OperateLogFrameworkService.java
| 1 | 1 | package cn.iocoder.dashboard.framework.logger.operatelog.core.service; |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.modules.system.controller.logger.vo.operatelog.SysOperateLogCreateReqVO; | |
| 3 | +import cn.iocoder.dashboard.framework.logger.operatelog.core.dto.OperateLogCreateReqDTO; | |
| 4 | 4 | |
| 5 | 5 | import java.util.concurrent.Future; |
| 6 | 6 | |
| ... | ... | @@ -12,6 +12,6 @@ public interface OperateLogFrameworkService { |
| 12 | 12 | * @param reqVO 操作日志请求 |
| 13 | 13 | * @return true: 记录成功,false: 记录失败 |
| 14 | 14 | */ |
| 15 | - Future<Boolean> createOperateLogAsync(SysOperateLogCreateReqVO reqVO); | |
| 15 | + Future<Boolean> createOperateLogAsync(OperateLogCreateReqDTO reqVO); | |
| 16 | 16 | |
| 17 | 17 | } | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/mybatis/core/type/JsonLongSetTypeHandler.java
| 1 | 1 | package cn.iocoder.dashboard.framework.mybatis.core.type; |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | |
| 4 | 3 | import cn.iocoder.dashboard.util.json.JsonUtils; |
| 5 | 4 | import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler; |
| 6 | 5 | import com.fasterxml.jackson.core.type.TypeReference; |
| ... | ... | @@ -11,7 +10,7 @@ import java.util.Set; |
| 11 | 10 | * 参考 {@link com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler} 实现 |
| 12 | 11 | * 在我们将字符串反序列化为 Set 并且泛型为 Long 时,如果每个元素的数值太小,会被处理成 Integer 类型,导致可能存在隐性的 BUG。 |
| 13 | 12 | * |
| 14 | - * 例如说哦,{@link SysUserDO#getPostIds()} 属性 | |
| 13 | + * 例如说哦,SysUserDO 的 postIds 属性 | |
| 15 | 14 | * |
| 16 | 15 | * @author 芋道源码 |
| 17 | 16 | */ | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/security/core/filter/JwtAuthenticationTokenFilter.java
| ... | ... | @@ -4,9 +4,9 @@ import cn.hutool.core.util.StrUtil; |
| 4 | 4 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 5 | 5 | import cn.iocoder.dashboard.framework.security.config.SecurityProperties; |
| 6 | 6 | import cn.iocoder.dashboard.framework.security.core.LoginUser; |
| 7 | +import cn.iocoder.dashboard.framework.security.core.service.SecurityAuthFrameworkService; | |
| 7 | 8 | import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils; |
| 8 | 9 | import cn.iocoder.dashboard.framework.web.core.handler.GlobalExceptionHandler; |
| 9 | -import cn.iocoder.dashboard.modules.system.service.auth.SysAuthService; | |
| 10 | 10 | import cn.iocoder.dashboard.util.servlet.ServletUtils; |
| 11 | 11 | import org.springframework.stereotype.Component; |
| 12 | 12 | import org.springframework.web.filter.OncePerRequestFilter; |
| ... | ... | @@ -30,7 +30,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { |
| 30 | 30 | @Resource |
| 31 | 31 | private SecurityProperties securityProperties; |
| 32 | 32 | @Resource |
| 33 | - private SysAuthService authService; | |
| 33 | + private SecurityAuthFrameworkService authService; | |
| 34 | 34 | @Resource |
| 35 | 35 | private GlobalExceptionHandler globalExceptionHandler; |
| 36 | 36 | ... | ... |
yudao-framework/src/main/java/cn/iocoder/dashboard/framework/security/core/service/SecurityPermissionFrameworkService.java
| 1 | 1 | package cn.iocoder.dashboard.framework.security.core.service; |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO; | |
| 4 | - | |
| 5 | 3 | /** |
| 6 | 4 | * Security 框架 Permission Service 接口,定义 security 组件需要的功能 |
| 7 | 5 | * |
| ... | ... | @@ -28,7 +26,7 @@ public interface SecurityPermissionFrameworkService { |
| 28 | 26 | /** |
| 29 | 27 | * 判断是否有角色 |
| 30 | 28 | * |
| 31 | - * 注意,角色使用的是 {@link SysRoleDO#getCode()} 标识 | |
| 29 | + * 注意,角色使用的是 SysRoleDO 的 code 标识 | |
| 32 | 30 | * |
| 33 | 31 | * @param role 角色 |
| 34 | 32 | * @return 是否 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java renamed to yudao-framework/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java
yudao-framework/src/main/java/cn/iocoder/dashboard/util/RandomUtils.java
| ... | ... | @@ -3,7 +3,6 @@ package cn.iocoder.dashboard.util; |
| 3 | 3 | import cn.hutool.core.util.ArrayUtil; |
| 4 | 4 | import cn.hutool.core.util.RandomUtil; |
| 5 | 5 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 6 | -import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | |
| 7 | 6 | import uk.co.jemos.podam.api.PodamFactory; |
| 8 | 7 | import uk.co.jemos.podam.api.PodamFactoryImpl; |
| 9 | 8 | |
| ... | ... | @@ -72,11 +71,6 @@ public class RandomUtils { |
| 72 | 71 | } |
| 73 | 72 | |
| 74 | 73 | @SafeVarargs |
| 75 | - public static SysUserDO randomUserDO(Consumer<SysUserDO>... consumers) { | |
| 76 | - return randomPojo(SysUserDO.class, consumers); | |
| 77 | - } | |
| 78 | - | |
| 79 | - @SafeVarargs | |
| 80 | 74 | public static <T> T randomPojo(Class<T> clazz, Consumer<T>... consumers) { |
| 81 | 75 | T pojo = PODAM_FACTORY.manufacturePojo(clazz); |
| 82 | 76 | // 非空时,回调逻辑。通过它,可以实现 Pojo 的进一步处理 | ... | ... |
yudao-framework/src/test/java/cn/iocoder/dashboard/BaseMockitoUnitTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard; | |
| 2 | + | |
| 3 | +import org.junit.jupiter.api.extension.ExtendWith; | |
| 4 | +import org.mockito.junit.jupiter.MockitoExtension; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * 纯 Mockito 的单元测试 | |
| 8 | + * | |
| 9 | + * @author 芋道源码 | |
| 10 | + */ | |
| 11 | +@ExtendWith(MockitoExtension.class) | |
| 12 | +public class BaseMockitoUnitTest { | |
| 13 | +} | ... | ... |
yudao-admin-server/src/test/java/cn/iocoder/dashboard/framework/package-info.java renamed to 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 renamed to 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 renamed to yudao-framework/src/test/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/package-info.java
0 → 100644
| 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 renamed to 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 renamed to yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/impl/yunpian/YunpianSmsCodeMappingTest.java
yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/client/package-info.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.sms.core.client; | ... | ... |
yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/core/package-info.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.sms.core; | ... | ... |
yudao-framework/src/test/java/cn/iocoder/dashboard/framework/sms/package-info.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.sms; | ... | ... |
yudao-framework/src/test/java/cn/iocoder/dashboard/package-info.java
0 → 100644
| 1 | +package cn.iocoder.dashboard; | ... | ... |