diff --git a/README.md b/README.md
index 4597c708f..96ca78d1f 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
## 平台简介
-**芋道** 是基于 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) **重构**,一套**全部开源**的**企业级**的快速开发平台,毫无保留给个人及企业免费使用。
+**芋道**,一套**全部开源**的**企业级**的快速开发平台,毫无保留给个人及企业免费使用。
> 有任何问题,或者想要的功能,可以在 _Issues_ 中提给艿艿。
@@ -17,39 +17,63 @@
* 基础设施
* 研发工具
+> 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。
+>
+> 额外新增的功能,我们使用 🚀 标记。
+
+🙂 所有功能,都通过 **单元测试** 保证高质量。
+
### 系统功能
-1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置
-1. 在线用户:当前系统中活跃用户状态监控
-1. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分
-1. 菜单管理:配置系统菜单,操作权限,按钮权限标识等
-1. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限
-1. 岗位管理:配置系统用户所属担任职务
-1. 字典管理:对系统中经常使用的一些较为固定的数据进行维护
-1. 通知公告:系统通知公告信息发布维护
-1. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询
-1. 登录日志:系统登录日志记录查询包含登录异常
+
+| | 功能 | 描述 |
+| --- | --- | --- |
+| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 |
+| | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 |
+| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 |
+| | 菜单管理 | 配置系统菜单,操作权限,按钮权限标识等 |
+| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 |
+| | 岗位管理 | 配置系统用户所属担任职务 |
+| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 |
+| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、云片等主流短信平台 |
+| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 |
+| | 登录日志 | 系统登录日志记录查询,包含登录异常 |
+| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 |
+| | 通知公告 | 系统通知公告信息发布维护 |
+
+计划新增功能:
+* 邮件
+* 钉钉、飞书等通知
### 基础设施
-1. 配置管理:对系统动态配置常用参数
-1. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志
-1. API 日志:包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题
-1. MySQL 监控:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈
-1. Redis 监控:监控 Redis 数据库的使用情况,使用的 Redis Key 管理
-1. Java 监控:基于 Spring Boot Admin 实现 Java 应用的监控
-1. 链路追踪:基于 SkyWalking 实现性能监控,特别是链路的追踪
-1. 分布式锁:基于 Redis 实现分布式锁,满足并发场景
-1. 幂等组件:基于 Redis 实现幂等组件,解决重复请求问题
-1. 服务保障:基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能
-1. 日志服务:轻量级日志中心,查看远程服务器的日志
+| | 功能 | 描述 |
+| --- | --- | --- |
+| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
+| | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
+| 🚀 | 文件服务 | 支持本地文件存储,同时支持兼容 Amazon S3 协议的云服务、开源组件 |
+| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
+| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |
+| | Redis 监控 |监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
+| 🚀 |Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |
+| 🚀 | 链路追踪 | 基于 SkyWalking 实现性能监控,特别是链路的追踪 |
+| 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 |
+| 🚀 | 幂等组件 | 基于 Redis 实现幂等组件,解决重复请求问题 |
+| 🚀 | 服务保障 | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 |
+| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
+| 🚀 | 单元测试 |基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
+
+计划新增:
+* 工作流
### 研发工具
-1. 表单构建:拖动表单元素生成相应的 HTML 代码
-1. 代码生成:前后端代码的生成(Java、Vue、SQL),支持 CRUD 下载
-1. 系统接口:基于 Swagger 自动生成相关的 RESTful API 接口文档
-1. 数据库文档:基于 Screw 自动生成数据库文档
+| | 功能 | 描述 |
+| --- | --- | --- |
+| 🚀 | 代码生成 |前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 |
+| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |
+| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |
+| | 表单构建 | 拖动表单元素生成相应的 HTML 代码 |
## 在线体验
@@ -63,14 +87,15 @@
## 技术栈
-**后端**
+### 后端
| 框架 | 说明 | 版本 | 学习指南 |
| --- | --- | --- | --- |
| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.4.2 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 | |
| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.4 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
-| [MyBatis-Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
+| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
+| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 3.3.2 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
| [Redis](https://redis.io/) | key-value 数据库 | 5.0 | |
| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.1.46 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) |
| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.4.2 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) |
@@ -78,14 +103,16 @@
| [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 6.1.7 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?yudao) |
| [Quartz](https://github.com/quartz-scheduler) | 任务调度组件 | 2.3.2 | [文档](http://www.iocoder.cn/Spring-Boot/Job/?yudao) |
| [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 3.0.2 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) |
-| [Resilience4j](https://github.com/quartz-scheduler) | 服务保障组件 | 1.7.0 | [文档](http://www.iocoder.cn/Spring-Boot/Resilience4j/?yudao) |
+| [Resilience4j](https://github.com/resilience4j/resilience4j) | 服务保障组件 | 1.7.0 | [文档](http://www.iocoder.cn/Spring-Boot/Resilience4j/?yudao) |
| [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 8.6.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao) |
-| [Spring Boot Admin](https://github.com/skywalking) | Spring Boot 监控平台 | 8.6.0 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) |
+| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 8.6.0 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) |
| [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.11.4 | |
| [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) |
-| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码| 1.16.14 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) |
+| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.16.14 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) |
+| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.7.0 | - |
+| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 3.6.28 | - |
-**前端**
+### 前端
| 框架 | 说明 | 版本 |
| --- | --- | --- |
@@ -125,7 +152,7 @@
 |
-  |
+ - |
diff --git a/lombok.config b/lombok.config
new file mode 100644
index 000000000..c6488faea
--- /dev/null
+++ b/lombok.config
@@ -0,0 +1,4 @@
+config.stopBubbling = true
+lombok.tostring.callsuper=true
+lombok.equalsandhashcode.callsuper=true
+lombok.accessors.chain=true
diff --git a/pom.xml b/pom.xml
index ffb61c14c..f3acf5108 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,14 +22,16 @@
${java.version}
3.8.0
- 2.4.2
+ 2.4.4
3.0.2
+ 1.5.22
5.1.46
1.2.4
- 3.4.1
- 3.14.1
+ 3.4.2
+ 3.3.2
+ 3.15.1
1.7.0
@@ -42,10 +44,16 @@
1.16.14
1.4.1.Final
- 5.5.6
+ 5.6.1
2.2.7
2.2
1.0.5
+ 7.2.6.RELEASE
+ 0.1.16
+
+ 4.5.18
+ 2.1.0
+ 1.2.7
@@ -101,8 +109,21 @@
mapstruct
org.mapstruct
+
+ guava
+ com.google.guava
+
+
+ swagger-annotations
+ io.swagger
+
+
+ io.swagger
+ swagger-annotations
+ ${swagger-annotations.version}
+
@@ -120,6 +141,11 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ ${dynamic-datasource.version}
+
org.redisson
@@ -145,6 +171,12 @@
com.baomidou
lock4j-redisson-spring-boot-starter
${lock4j.version}
+
+
+ redisson-spring-boot-starter
+ org.redisson
+
+
@@ -181,6 +213,12 @@
org.springframework.boot
spring-boot-starter-test
test
+
+
+ asm
+ org.ow2.asm
+
+
@@ -192,14 +230,14 @@
com.github.fppt
jedis-mock
- 0.1.16
+ ${jedis-mock.version}
test
uk.co.jemos.podam
podam
- 7.2.6.RELEASE
+ ${podam.version}
test
@@ -215,6 +253,12 @@
mapstruct
${mapstruct.version}
+
+ org.mapstruct
+ mapstruct-processor
+ ${mapstruct.version}
+ true
+
org.mapstruct
mapstruct-jdk8
@@ -223,27 +267,7 @@
cn.hutool
- hutool-core
- ${hutool.version}
-
-
- cn.hutool
- hutool-extra
- ${hutool.version}
-
-
- cn.hutool
- hutool-captcha
- ${hutool.version}
-
-
- cn.hutool
- hutool-http
- ${hutool.version}
-
-
- cn.hutool
- hutool-crypto
+ hutool-all
${hutool.version}
@@ -265,6 +289,27 @@
${screw.version}
+
+
+
+
+ com.yunpian.sdk
+ yunpian-java-sdk
+ ${yunpian-java-sdk.version}
+
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ ${aliyun-java-sdk-core.version}
+
+
+ com.aliyun
+ aliyun-java-sdk-dysmsapi
+ ${aliyun-java-sdk-dysmsapi.version}
+
+
+
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
deleted file mode 100644
index 26d664f6e..000000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.ruoyi.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 数据权限过滤注解
- *
- * @author ruoyi
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface DataScope {
- /**
- * 部门表的别名
- */
- public String deptAlias() default "";
-
- /**
- * 用户表的别名
- */
- public String userAlias() default "";
-}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScopeAspect.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScopeAspect.java
deleted file mode 100644
index cc01b9422..000000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScopeAspect.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.ruoyi.framework.aspectj;
-
-import java.lang.reflect.Method;
-
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.Signature;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Before;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.springframework.stereotype.Component;
-import com.ruoyi.common.annotation.DataScope;
-import com.ruoyi.common.core.domain.BaseEntity;
-import com.ruoyi.common.core.domain.entity.SysRole;
-import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.core.domain.model.LoginUser;
-import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.framework.web.service.TokenService;
-
-/**
- * 数据过滤处理
- *
- * @author ruoyi
- */
-@Aspect
-@Component
-public class DataScopeAspect {
- /**
- * 全部数据权限
- */
- public static final String DATA_SCOPE_ALL = "1";
-
- /**
- * 自定数据权限
- */
- public static final String DATA_SCOPE_CUSTOM = "2";
-
- /**
- * 部门数据权限
- */
- public static final String DATA_SCOPE_DEPT = "3";
-
- /**
- * 部门及以下数据权限
- */
- public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
-
- /**
- * 仅本人数据权限
- */
- public static final String DATA_SCOPE_SELF = "5";
-
- /**
- * 数据权限过滤关键字
- */
- public static final String DATA_SCOPE = "dataScope";
-
- // 配置织入点
- @Pointcut("@annotation(com.ruoyi.common.annotation.DataScope)")
- public void dataScopePointCut() {
- }
-
- @Before("dataScopePointCut()")
- public void doBefore(JoinPoint point) throws Throwable {
- handleDataScope(point);
- }
-
- protected void handleDataScope(final JoinPoint joinPoint) {
- // 获得注解
- DataScope controllerDataScope = getAnnotationLog(joinPoint);
- if (controllerDataScope == null) {
- return;
- }
- // 获取当前的用户
- LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
- if (StringUtils.isNotNull(loginUser)) {
- SysUser currentUser = loginUser.getUser();
- // 如果是超级管理员,则不过滤数据
- if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) {
- dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
- controllerDataScope.userAlias());
- }
- }
- }
-
- /**
- * 数据范围过滤
- *
- * @param joinPoint 切点
- * @param user 用户
- * @param userAlias 别名
- */
- public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias) {
- StringBuilder sqlString = new StringBuilder();
-
- for (SysRole role : user.getRoles()) {
- String dataScope = role.getDataScope();
- if (DATA_SCOPE_ALL.equals(dataScope)) {
- sqlString = new StringBuilder();
- break;
- } else if (DATA_SCOPE_CUSTOM.equals(dataScope)) {
- sqlString.append(StringUtils.format(
- " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
- role.getRoleId()));
- } else if (DATA_SCOPE_DEPT.equals(dataScope)) {
- sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
- } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {
- sqlString.append(StringUtils.format(
- " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
- deptAlias, user.getDeptId(), user.getDeptId()));
- } else if (DATA_SCOPE_SELF.equals(dataScope)) {
- if (StringUtils.isNotBlank(userAlias)) {
- sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
- } else {
- // 数据权限为仅本人且没有userAlias别名不查询任何数据
- sqlString.append(" OR 1=0 ");
- }
- }
- }
-
- if (StringUtils.isNotBlank(sqlString.toString())) {
- Object params = joinPoint.getArgs()[0];
- if (StringUtils.isNotNull(params) && params instanceof BaseEntity) {
- BaseEntity baseEntity = (BaseEntity) params;
- baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
- }
- }
- }
-
- /**
- * 是否存在注解,如果存在就获取
- */
- private DataScope getAnnotationLog(JoinPoint joinPoint) {
- Signature signature = joinPoint.getSignature();
- MethodSignature methodSignature = (MethodSignature) signature;
- Method method = methodSignature.getMethod();
-
- if (method != null) {
- return method.getAnnotation(DataScope.class);
- }
- return null;
- }
-}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
deleted file mode 100644
index 11b0d579c..000000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.ruoyi.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import com.ruoyi.common.enums.DataSourceType;
-
-/**
- * 自定义多数据源切换注解
- *
- * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
- *
- * @author ruoyi
- */
-@Target({ElementType.METHOD, ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface DataSource {
- /**
- * 切换数据源名称
- */
- public DataSourceType value() default DataSourceType.MASTER;
-}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSourceAspect.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSourceAspect.java
deleted file mode 100644
index 020493d2d..000000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSourceAspect.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.ruoyi.framework.aspectj;
-
-import java.util.Objects;
-
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.annotation.AnnotationUtils;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-import com.ruoyi.common.annotation.DataSource;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.framework.datasource.DynamicDataSourceContextHolder;
-
-/**
- * 多数据源处理
- *
- * @author ruoyi
- */
-@Aspect
-@Order(1)
-@Component
-public class DataSourceAspect {
- protected Logger logger = LoggerFactory.getLogger(getClass());
-
- @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)"
- + "|| @within(com.ruoyi.common.annotation.DataSource)")
- public void dsPointCut() {
-
- }
-
- @Around("dsPointCut()")
- public Object around(ProceedingJoinPoint point) throws Throwable {
- DataSource dataSource = getDataSource(point);
-
- if (StringUtils.isNotNull(dataSource)) {
- DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name());
- }
-
- try {
- return point.proceed();
- } finally {
- // 销毁数据源 在执行方法之后
- DynamicDataSourceContextHolder.clearDataSourceType();
- }
- }
-
- /**
- * 获取需要切换的数据源
- */
- public DataSource getDataSource(ProceedingJoinPoint point) {
- MethodSignature signature = (MethodSignature) point.getSignature();
- DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class);
- if (Objects.nonNull(dataSource)) {
- return dataSource;
- }
-
- return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class);
- }
-}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSourceType.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSourceType.java
deleted file mode 100644
index 0d945be54..000000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSourceType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.ruoyi.common.enums;
-
-/**
- * 数据源
- *
- * @author ruoyi
- */
-public enum DataSourceType
-{
- /**
- * 主库
- */
- MASTER,
-
- /**
- * 从库
- */
- SLAVE
-}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DynamicDataSource.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DynamicDataSource.java
deleted file mode 100644
index f60b35cb6..000000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DynamicDataSource.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.ruoyi.framework.datasource;
-
-import java.util.Map;
-import javax.sql.DataSource;
-
-import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
-
-/**
- * 动态数据源
- *
- * @author ruoyi
- */
-public class DynamicDataSource extends AbstractRoutingDataSource {
- public DynamicDataSource(DataSource defaultTargetDataSource, Map