From 71125d997e4f990139b688ee344cd1c311ed1130 Mon Sep 17 00:00:00 2001 From: ailanyin Date: Sat, 1 Jul 2023 09:51:43 +0800 Subject: [PATCH] first commit --- pom.xml | 5 ++ qiaoba-apis/pom.xml | 1 + qiaoba-apis/qiaoba-api-tenant/pom.xml | 24 ++++++++ .../qiaoba/api}/tenant/entity/SysTenant.java | 2 +- .../tenant/entity/SysTenantDatasource.java | 2 +- .../param/SysTenantDatasourceParam.java | 2 +- .../tenant/entity/param/SysTenantParam.java | 2 +- .../api}/tenant/enums/TenantModeEnum.java | 14 ++++- .../api}/tenant/enums/TenantStatusEnum.java | 10 +++- .../tenant/service/SysTenantApiService.java | 24 ++++++++ .../qiaoba/api/tenant/utils/TenantUtil.java | 38 ++++++++++++ .../src/main/resources/application-dev.yml | 40 ++++++------- qiaoba-modules/qiaoba-module-system/pom.xml | 4 ++ .../system/runner/SyncDataToCacheRunner.java | 60 +++++++++++++++++++ qiaoba-modules/qiaoba-module-tenant/pom.xml | 4 ++ .../controller/SysTenantController.java | 4 +- .../SysTenantDatasourceController.java | 2 +- .../tenant/entity/vo/TenantInitCheckVo.java | 2 +- .../tenant/entity/vo/TenantSettingVo.java | 2 +- .../filters/DynamicDataSourceFilter.java | 28 +++------ .../mapper/SysTenantDatasourceMapper.java | 2 +- .../module/tenant/mapper/SysTenantMapper.java | 2 +- .../service/SysTenantDatasourceService.java | 4 +- .../tenant/service/SysTenantService.java | 5 +- .../impl/DynamicDatasourceServiceImpl.java | 4 +- .../impl/SysTenantDatasourceServiceImpl.java | 4 +- .../impl/SysTenantInitServiceImpl.java | 20 +++---- .../service/impl/SysTenantServiceImpl.java | 16 +++-- 28 files changed, 251 insertions(+), 76 deletions(-) create mode 100644 qiaoba-apis/qiaoba-api-tenant/pom.xml rename {qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module => qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api}/tenant/entity/SysTenant.java (98%) rename {qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module => qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api}/tenant/entity/SysTenantDatasource.java (98%) rename {qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module => qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api}/tenant/entity/param/SysTenantDatasourceParam.java (93%) rename {qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module => qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api}/tenant/entity/param/SysTenantParam.java (96%) rename {qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module => qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api}/tenant/enums/TenantModeEnum.java (63%) rename {qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module => qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api}/tenant/enums/TenantStatusEnum.java (64%) create mode 100644 qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/service/SysTenantApiService.java create mode 100644 qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/utils/TenantUtil.java create mode 100644 qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/runner/SyncDataToCacheRunner.java diff --git a/pom.xml b/pom.xml index 8144aea..3de2632 100644 --- a/pom.xml +++ b/pom.xml @@ -218,6 +218,11 @@ qiaoba-api-monitor ${qiaoba.version} + + com.qiaoba + qiaoba-api-tenant + ${qiaoba.version} + diff --git a/qiaoba-apis/pom.xml b/qiaoba-apis/pom.xml index f538dab..7ababfe 100644 --- a/qiaoba-apis/pom.xml +++ b/qiaoba-apis/pom.xml @@ -20,6 +20,7 @@ qiaoba-api-file qiaoba-api-auth qiaoba-api-monitor + qiaoba-api-tenant diff --git a/qiaoba-apis/qiaoba-api-tenant/pom.xml b/qiaoba-apis/qiaoba-api-tenant/pom.xml new file mode 100644 index 0000000..db9e8c1 --- /dev/null +++ b/qiaoba-apis/qiaoba-api-tenant/pom.xml @@ -0,0 +1,24 @@ + + + + qiaoba-apis + com.qiaoba + 1.0 + + 4.0.0 + + qiaoba-api-tenant + + + + com.qiaoba + qiaoba-common-datasource + + + com.qiaoba + qiaoba-common-doc + + + \ No newline at end of file diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/SysTenant.java b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/SysTenant.java similarity index 98% rename from qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/SysTenant.java rename to qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/SysTenant.java index 2c5d296..26317ad 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/SysTenant.java +++ b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/SysTenant.java @@ -1,4 +1,4 @@ -package com.qiaoba.module.tenant.entity; +package com.qiaoba.api.tenant.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/SysTenantDatasource.java b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/SysTenantDatasource.java similarity index 98% rename from qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/SysTenantDatasource.java rename to qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/SysTenantDatasource.java index a274fea..59dcefa 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/SysTenantDatasource.java +++ b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/SysTenantDatasource.java @@ -1,4 +1,4 @@ -package com.qiaoba.module.tenant.entity; +package com.qiaoba.api.tenant.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/param/SysTenantDatasourceParam.java b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/param/SysTenantDatasourceParam.java similarity index 93% rename from qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/param/SysTenantDatasourceParam.java rename to qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/param/SysTenantDatasourceParam.java index a429d0c..e6e7e16 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/param/SysTenantDatasourceParam.java +++ b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/param/SysTenantDatasourceParam.java @@ -1,4 +1,4 @@ -package com.qiaoba.module.tenant.entity.param; +package com.qiaoba.api.tenant.entity.param; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/param/SysTenantParam.java b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/param/SysTenantParam.java similarity index 96% rename from qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/param/SysTenantParam.java rename to qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/param/SysTenantParam.java index d915e7a..a44e26f 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/param/SysTenantParam.java +++ b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/entity/param/SysTenantParam.java @@ -1,4 +1,4 @@ -package com.qiaoba.module.tenant.entity.param; +package com.qiaoba.api.tenant.entity.param; import com.qiaoba.common.base.enums.BaseEnum; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/enums/TenantModeEnum.java b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/enums/TenantModeEnum.java similarity index 63% rename from qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/enums/TenantModeEnum.java rename to qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/enums/TenantModeEnum.java index 2869302..769fe23 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/enums/TenantModeEnum.java +++ b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/enums/TenantModeEnum.java @@ -1,4 +1,4 @@ -package com.qiaoba.module.tenant.enums; +package com.qiaoba.api.tenant.enums; import lombok.Getter; @@ -34,4 +34,16 @@ public enum TenantModeEnum { this.mode = code; this.info = info; } + + public static Boolean isColumn(String mode) { + return COLUMN.mode.equals(mode); + } + + public static Boolean isSchema(String mode) { + return SCHEMA.mode.equals(mode); + } + + public static Boolean isDatasource(String mode) { + return DATASOURCE.mode.equals(mode); + } } diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/enums/TenantStatusEnum.java b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/enums/TenantStatusEnum.java similarity index 64% rename from qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/enums/TenantStatusEnum.java rename to qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/enums/TenantStatusEnum.java index f40c4a1..99b9175 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/enums/TenantStatusEnum.java +++ b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/enums/TenantStatusEnum.java @@ -1,4 +1,4 @@ -package com.qiaoba.module.tenant.enums; +package com.qiaoba.api.tenant.enums; import lombok.Getter; @@ -30,4 +30,12 @@ public enum TenantStatusEnum { this.status = code; this.info = info; } + + public static Boolean isDisable(String status) { + return DISABLE.status.equals(status); + } + + public static Boolean isExpire(String status) { + return EXPIRE.status.equals(status); + } } diff --git a/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/service/SysTenantApiService.java b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/service/SysTenantApiService.java new file mode 100644 index 0000000..eef839d --- /dev/null +++ b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/service/SysTenantApiService.java @@ -0,0 +1,24 @@ +package com.qiaoba.api.tenant.service; + +import com.qiaoba.api.tenant.entity.SysTenant; +import com.qiaoba.api.tenant.entity.param.SysTenantParam; + +import java.util.List; + +/** + * 租户管理 对外接口暴露 + * + * @author ailanyin + * @version 1.0 + * @since 2023-07-01 08:34:20 + */ +public interface SysTenantApiService { + + /** + * 条件查询租户列表 + * + * @param param 条件 + * @return list + */ + List selectList(SysTenantParam param); +} diff --git a/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/utils/TenantUtil.java b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/utils/TenantUtil.java new file mode 100644 index 0000000..9cb24ec --- /dev/null +++ b/qiaoba-apis/qiaoba-api-tenant/src/main/java/com/qiaoba/api/tenant/utils/TenantUtil.java @@ -0,0 +1,38 @@ +package com.qiaoba.api.tenant.utils; + +import com.qiaoba.api.tenant.entity.SysTenant; +import com.qiaoba.api.tenant.enums.TenantModeEnum; +import com.qiaoba.common.base.constants.TenantConstant; +import com.qiaoba.common.base.context.BaseContext; +import com.qiaoba.common.database.context.TenantDbTypeContext; + +/** + * TenantUtil + * + * @author ailanyin + * @version 1.0 + * @since 2023-07-01 08:34:20 + */ +public class TenantUtil { + + /** + * 设置上下文信息 + * + * @param sysTenant 租户 + */ + public static void setContext(SysTenant sysTenant) { + BaseContext.setTenantId(sysTenant.getTenantId()); + BaseContext.setSchema(sysTenant.getMode().equals(TenantModeEnum.SCHEMA.getMode())); + // 数据源模式-设置第三方数据源 + if (TenantModeEnum.isDatasource(sysTenant.getMode())) { + //设置当前租户对应的数据源 + BaseContext.setDataSource(sysTenant.getTenantId()); + BaseContext.setDatabaseType(TenantDbTypeContext.get(sysTenant.getTenantId())); + } + // 字段模式 or Schema模式-数据源选择默认数据源 + else { + BaseContext.setDataSource(TenantConstant.DEFAULT_TENANT_ID); + BaseContext.setDatabaseType(TenantDbTypeContext.getDefault()); + } + } +} diff --git a/qiaoba-application/src/main/resources/application-dev.yml b/qiaoba-application/src/main/resources/application-dev.yml index c705d08..8099228 100644 --- a/qiaoba-application/src/main/resources/application-dev.yml +++ b/qiaoba-application/src/main/resources/application-dev.yml @@ -1,16 +1,16 @@ qiaoba: file-upload-path: C:/${spring.application.name}/uploadPath/ dataSources: -# - driver: com.mysql.cj.jdbc.Driver -# url: jdbc:mysql://192.168.0.202:3306/${spring.application.name}?databaseTerm=SCHEMA&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true -# username: root -# password: Root123456789. -# #连接池初始化大小 -# initial-size: 5 -# #最小空闲线程数 -# min-idle: 10 -# #最大连接池数量 -# max-active: 20 + - driver: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://192.168.0.202:3306/${spring.application.name}?databaseTerm=SCHEMA&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true + username: root + password: Root123456789. + #连接池初始化大小 + initial-size: 5 + #最小空闲线程数 + min-idle: 10 + #最大连接池数量 + max-active: 20 # - driver: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://192.168.0.203:3306/${spring.application.name}?databaseTerm=SCHEMA&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true # username: root @@ -21,16 +21,16 @@ qiaoba: # min-idle: 10 # #最大连接池数量 # max-active: 20 - - driver: org.postgresql.Driver - url: jdbc:postgresql://192.168.0.202:5432/mydb?currentSchema=qiaoba-boot&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true - username: postgres - password: postgres - #连接池初始化大小 - initial-size: 5 - #最小空闲线程数 - min-idle: 10 - #最大连接池数量 - max-active: 20 +# - driver: org.postgresql.Driver +# url: jdbc:postgresql://192.168.0.202:5432/mydb?currentSchema=qiaoba-boot&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true +# username: postgres +# password: postgres +# #连接池初始化大小 +# initial-size: 5 +# #最小空闲线程数 +# min-idle: 10 +# #最大连接池数量 +# max-active: 20 mybatis-plus: configuration: diff --git a/qiaoba-modules/qiaoba-module-system/pom.xml b/qiaoba-modules/qiaoba-module-system/pom.xml index 656cca1..7b0a561 100644 --- a/qiaoba-modules/qiaoba-module-system/pom.xml +++ b/qiaoba-modules/qiaoba-module-system/pom.xml @@ -30,5 +30,9 @@ com.qiaoba qiaoba-api-monitor + + com.qiaoba + qiaoba-api-tenant + diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/runner/SyncDataToCacheRunner.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/runner/SyncDataToCacheRunner.java new file mode 100644 index 0000000..8193428 --- /dev/null +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/runner/SyncDataToCacheRunner.java @@ -0,0 +1,60 @@ +package com.qiaoba.module.system.runner; + +import com.qiaoba.api.tenant.entity.SysTenant; +import com.qiaoba.api.tenant.entity.param.SysTenantParam; +import com.qiaoba.api.tenant.service.SysTenantApiService; +import com.qiaoba.api.tenant.utils.TenantUtil; +import com.qiaoba.common.base.constants.TenantConstant; +import com.qiaoba.common.base.context.BaseContext; +import com.qiaoba.module.system.service.SysConfigService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 项目启动后同步-[系统配置] + * + * @author ailanyin + * @version 1.0 + * @since 2023-07-01 08:34:20 + */ +@Component +@RequiredArgsConstructor +@Slf4j +public class SyncDataToCacheRunner implements ApplicationRunner { + + private final SysTenantApiService sysTenantApiService; + private final SysConfigService sysConfigService; + + @Override + public void run(ApplicationArguments args) throws Exception { + + // 查询主库中所有正常的租户列表 + List sysTenantList; + try { + BaseContext.setTenantId(TenantConstant.DEFAULT_TENANT_ID); + sysTenantList = sysTenantApiService.selectList(SysTenantParam.buildNormalSelectParam()); + } finally { + BaseContext.clearTenantId(); + } + + // 对租户类型进行分类 + for (SysTenant sysTenant : sysTenantList) { + try { + TenantUtil.setContext(sysTenant); + sysConfigService.resetConfigCache(); + log.info("同步[系统配置]完成, 租户ID: {}", sysTenant.getTenantId()); + } catch (Exception e) { + log.error("同步[系统配置]失败, 租户ID: {}, 错误原因: {}", sysTenant.getTenantId(), e.getMessage()); + } finally { + BaseContext.clearAllHolder(); + } + } + } + + +} diff --git a/qiaoba-modules/qiaoba-module-tenant/pom.xml b/qiaoba-modules/qiaoba-module-tenant/pom.xml index 806fdea..30e7b4a 100644 --- a/qiaoba-modules/qiaoba-module-tenant/pom.xml +++ b/qiaoba-modules/qiaoba-module-tenant/pom.xml @@ -22,6 +22,10 @@ com.qiaoba qiaoba-auth + + com.qiaoba + qiaoba-api-tenant + diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/controller/SysTenantController.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/controller/SysTenantController.java index 6d1ba98..1e90cc6 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/controller/SysTenantController.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/controller/SysTenantController.java @@ -6,9 +6,9 @@ import com.qiaoba.common.base.validate.AddGroup; import com.qiaoba.common.base.validate.EditGroup; import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.TableDataInfo; -import com.qiaoba.module.tenant.entity.SysTenant; +import com.qiaoba.api.tenant.entity.SysTenant; import com.qiaoba.module.tenant.entity.dto.TenantSettingDto; -import com.qiaoba.module.tenant.entity.param.SysTenantParam; +import com.qiaoba.api.tenant.entity.param.SysTenantParam; import com.qiaoba.module.tenant.service.SysTenantService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/controller/SysTenantDatasourceController.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/controller/SysTenantDatasourceController.java index 8823167..ad671ab 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/controller/SysTenantDatasourceController.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/controller/SysTenantDatasourceController.java @@ -3,7 +3,7 @@ package com.qiaoba.module.tenant.controller; import com.qiaoba.common.base.result.AjaxResult; import com.qiaoba.common.base.validate.AddGroup; import com.qiaoba.common.base.validate.EditGroup; -import com.qiaoba.module.tenant.entity.SysTenantDatasource; +import com.qiaoba.api.tenant.entity.SysTenantDatasource; import com.qiaoba.module.tenant.service.SysTenantDatasourceService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/vo/TenantInitCheckVo.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/vo/TenantInitCheckVo.java index 4802439..9474fee 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/vo/TenantInitCheckVo.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/vo/TenantInitCheckVo.java @@ -1,6 +1,6 @@ package com.qiaoba.module.tenant.entity.vo; -import com.qiaoba.module.tenant.entity.SysTenantDatasource; +import com.qiaoba.api.tenant.entity.SysTenantDatasource; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/vo/TenantSettingVo.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/vo/TenantSettingVo.java index 98a90f3..1bbed40 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/vo/TenantSettingVo.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/entity/vo/TenantSettingVo.java @@ -1,6 +1,6 @@ package com.qiaoba.module.tenant.entity.vo; -import com.qiaoba.module.tenant.entity.SysTenantDatasource; +import com.qiaoba.api.tenant.entity.SysTenantDatasource; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/filters/DynamicDataSourceFilter.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/filters/DynamicDataSourceFilter.java index e05a501..33bd0fb 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/filters/DynamicDataSourceFilter.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/filters/DynamicDataSourceFilter.java @@ -2,6 +2,7 @@ package com.qiaoba.module.tenant.filters; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateUtil; +import com.qiaoba.api.tenant.utils.TenantUtil; import com.qiaoba.common.base.code.TenantErrorCode; import com.qiaoba.common.base.constants.BaseConstant; import com.qiaoba.common.base.constants.TenantConstant; @@ -10,9 +11,9 @@ import com.qiaoba.common.database.config.DynamicDataSourceConfig; import com.qiaoba.common.database.context.TenantDbTypeContext; import com.qiaoba.common.web.utils.ResponseUtil; import com.qiaoba.common.web.utils.UriUtil; -import com.qiaoba.module.tenant.entity.SysTenant; -import com.qiaoba.module.tenant.enums.TenantModeEnum; -import com.qiaoba.module.tenant.enums.TenantStatusEnum; +import com.qiaoba.api.tenant.entity.SysTenant; +import com.qiaoba.api.tenant.enums.TenantModeEnum; +import com.qiaoba.api.tenant.enums.TenantStatusEnum; import com.qiaoba.module.tenant.service.SysTenantService; import lombok.extern.slf4j.Slf4j; import org.springframework.core.annotation.Order; @@ -91,21 +92,7 @@ public class DynamicDataSourceFilter extends OncePerRequestFilter { private void before(SysTenant sysTenant) { log.debug("设置租户信息, 租户ID: {},租户模式: {}", sysTenant.getTenantId(), sysTenant.getMode()); - BaseContext.setTenantId(sysTenant.getTenantId()); - BaseContext.setSchema(sysTenant.getMode().equals(TenantModeEnum.SCHEMA.getMode())); - // 数据源模式-设置第三方数据源 - if (sysTenant.getMode().equals(TenantModeEnum.DATASOURCE.getMode())) { - //设置当前租户对应的数据源 - BaseContext.setDataSource(sysTenant.getTenantId()); - BaseContext.setDatabaseType(TenantDbTypeContext.get(sysTenant.getTenantId())); - } - // 字段模式 or Schema模式-数据源选择默认数据源 - else { - BaseContext.setDataSource(TenantConstant.DEFAULT_TENANT_ID); - BaseContext.setDatabaseType(TenantDbTypeContext.getDefault()); - } - - + TenantUtil.setContext(sysTenant); } private void after() { @@ -127,19 +114,20 @@ public class DynamicDataSourceFilter extends OncePerRequestFilter { return true; } - if (TenantStatusEnum.DISABLE.getStatus().equals(sysTenant.getStatus())) { + if (TenantStatusEnum.isDisable(sysTenant.getStatus())) { // 封禁状态 log.debug("租户已封禁, 租户ID: {}", sysTenant.getTenantId()); ResponseUtil.errorAuth(response, TenantErrorCode.DISABLE.getCode(), TenantErrorCode.DISABLE.getMsg()); return true; } - if (TenantStatusEnum.EXPIRE.getStatus().equals(sysTenant.getStatus())) { + if (TenantStatusEnum.isExpire(sysTenant.getStatus())) { // 已过期 log.debug("租户已过期, 租户ID: {}", sysTenant.getTenantId()); ResponseUtil.errorAuth(response, TenantErrorCode.EXPIRE.getCode(), TenantErrorCode.EXPIRE.getMsg()); return true; } + // 检查是否过期 if (DateUtil.compare(sysTenant.getExpireTime(), new Date()) < 0) { // 已过期 log.debug("租户已过期, 租户ID: {}", sysTenant.getTenantId()); diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/mapper/SysTenantDatasourceMapper.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/mapper/SysTenantDatasourceMapper.java index cf13af1..e02c62d 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/mapper/SysTenantDatasourceMapper.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/mapper/SysTenantDatasourceMapper.java @@ -1,7 +1,7 @@ package com.qiaoba.module.tenant.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.qiaoba.module.tenant.entity.SysTenantDatasource; +import com.qiaoba.api.tenant.entity.SysTenantDatasource; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/mapper/SysTenantMapper.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/mapper/SysTenantMapper.java index 009a862..f573661 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/mapper/SysTenantMapper.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/mapper/SysTenantMapper.java @@ -1,7 +1,7 @@ package com.qiaoba.module.tenant.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.qiaoba.module.tenant.entity.SysTenant; +import com.qiaoba.api.tenant.entity.SysTenant; /** * 租户管理 数据层 diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/SysTenantDatasourceService.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/SysTenantDatasourceService.java index 15e8533..da5f133 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/SysTenantDatasourceService.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/SysTenantDatasourceService.java @@ -1,7 +1,7 @@ package com.qiaoba.module.tenant.service; -import com.qiaoba.module.tenant.entity.SysTenantDatasource; -import com.qiaoba.module.tenant.entity.param.SysTenantDatasourceParam; +import com.qiaoba.api.tenant.entity.SysTenantDatasource; +import com.qiaoba.api.tenant.entity.param.SysTenantDatasourceParam; import java.util.List; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/SysTenantService.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/SysTenantService.java index 7ce9b5c..10cb7b9 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/SysTenantService.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/SysTenantService.java @@ -1,9 +1,10 @@ package com.qiaoba.module.tenant.service; +import com.qiaoba.api.tenant.entity.SysTenant; import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.TableDataInfo; -import com.qiaoba.module.tenant.entity.SysTenant; -import com.qiaoba.module.tenant.entity.param.SysTenantParam; + +import com.qiaoba.api.tenant.entity.param.SysTenantParam; /** * 租户管理 服务层 diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/DynamicDatasourceServiceImpl.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/DynamicDatasourceServiceImpl.java index e10a122..14493af 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/DynamicDatasourceServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/DynamicDatasourceServiceImpl.java @@ -7,8 +7,8 @@ import com.qiaoba.common.base.enums.DataBaseEnum; import com.qiaoba.common.base.exceptions.ServiceException; import com.qiaoba.common.database.entity.DynamicDataSource; import com.qiaoba.common.database.service.DynamicDatasourceService; -import com.qiaoba.module.tenant.entity.SysTenantDatasource; -import com.qiaoba.module.tenant.entity.param.SysTenantDatasourceParam; +import com.qiaoba.api.tenant.entity.SysTenantDatasource; +import com.qiaoba.api.tenant.entity.param.SysTenantDatasourceParam; import com.qiaoba.module.tenant.service.SysTenantDatasourceService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantDatasourceServiceImpl.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantDatasourceServiceImpl.java index 6191a91..84b346e 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantDatasourceServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantDatasourceServiceImpl.java @@ -6,8 +6,8 @@ import com.qiaoba.common.base.code.DatasourceErrorCode; import com.qiaoba.common.base.constants.BaseConstant; import com.qiaoba.common.base.enums.BaseEnum; import com.qiaoba.common.base.exceptions.ServiceException; -import com.qiaoba.module.tenant.entity.SysTenantDatasource; -import com.qiaoba.module.tenant.entity.param.SysTenantDatasourceParam; +import com.qiaoba.api.tenant.entity.SysTenantDatasource; +import com.qiaoba.api.tenant.entity.param.SysTenantDatasourceParam; import com.qiaoba.module.tenant.mapper.SysTenantDatasourceMapper; import com.qiaoba.module.tenant.service.SysTenantDatasourceService; import lombok.RequiredArgsConstructor; diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantInitServiceImpl.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantInitServiceImpl.java index 0a224e8..9394e90 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantInitServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantInitServiceImpl.java @@ -12,11 +12,11 @@ import com.qiaoba.common.database.context.TenantDbTypeContext; import com.qiaoba.common.database.properties.TenantSchema; import com.qiaoba.common.database.utils.DbUtil; import com.qiaoba.common.database.utils.JdbcUtil; -import com.qiaoba.module.tenant.entity.SysTenant; -import com.qiaoba.module.tenant.entity.SysTenantDatasource; +import com.qiaoba.api.tenant.entity.SysTenant; +import com.qiaoba.api.tenant.entity.SysTenantDatasource; import com.qiaoba.module.tenant.entity.vo.TenantInitCheckVo; import com.qiaoba.module.tenant.entity.vo.TenantInitVo; -import com.qiaoba.module.tenant.enums.TenantModeEnum; +import com.qiaoba.api.tenant.enums.TenantModeEnum; import com.qiaoba.module.tenant.init.InitTablesStrategyFactory; import com.qiaoba.module.tenant.service.SysTenantDatasourceService; import com.qiaoba.module.tenant.service.SysTenantInitService; @@ -50,7 +50,7 @@ public class SysTenantInitServiceImpl implements SysTenantInitService { // 1. 查询租户信息, 获取租户名称|租户模式 SysTenant sysTenant = sysTenantService.selectById(tenantId, false); // 2. 租户模式 = 3 数据源模式 - if (TenantModeEnum.DATASOURCE.getMode().equals(sysTenant.getMode())) { + if (TenantModeEnum.isDatasource(sysTenant.getMode())) { // 3. 根据租户ID查询主要数据源(1条) SysTenantDatasource datasource = sysTenantDatasourceService.selectPrimary(tenantId); // 4. 若没有主要数据源, 返回 未找到数据源信息 @@ -92,11 +92,11 @@ public class SysTenantInitServiceImpl implements SysTenantInitService { public TenantInitVo createTables(String tenantId) { SysTenant sysTenant = sysTenantService.selectById(tenantId, false); // 字段模式 - if (TenantModeEnum.COLUMN.getMode().equals(sysTenant.getMode())) { + if (TenantModeEnum.isColumn(sysTenant.getMode())) { return new TenantInitVo(HttpStatus.HTTP_OK, "字段模式, 无需新建表"); } // Schema模式 - if (TenantModeEnum.SCHEMA.getMode().equals(sysTenant.getMode())) { + if (TenantModeEnum.isSchema(sysTenant.getMode())) { Connection connection = null; try { // 获取主库Connection 和 Schema @@ -111,7 +111,7 @@ public class SysTenantInitServiceImpl implements SysTenantInitService { } } // 数据源模式 - if (TenantModeEnum.DATASOURCE.getMode().equals(sysTenant.getMode())) { + if (TenantModeEnum.isDatasource(sysTenant.getMode())) { SysTenantDatasource primary = sysTenantDatasourceService.selectPrimary(tenantId, false); Connection connection = JdbcUtil.getConnection(DataBaseEnum.getDriver(primary.getType()), DataBaseEnum.getUrl(primary.getType(), primary.getIp(), primary.getPort(), primary.getDbName(), primary.getSchemaName()), @@ -125,14 +125,14 @@ public class SysTenantInitServiceImpl implements SysTenantInitService { public TenantInitVo initData(String tenantId) throws SQLException { SysTenant sysTenant = sysTenantService.selectById(tenantId, false); // 字段模式 - if (TenantModeEnum.COLUMN.getMode().equals(sysTenant.getMode())) { + if (TenantModeEnum.isColumn(sysTenant.getMode())) { // 获取默认租户的主数据源 DataSource dataSource = (DataSource) PrimaryDatasourceContext.getDefault(); // 初始化 return init(dataSource.getConnection(), tenantId); } // SCHEMA - else if (TenantModeEnum.SCHEMA.getMode().equals(sysTenant.getMode())) { + else if (TenantModeEnum.isSchema(sysTenant.getMode())) { // 获取主库Connection 和 Schema DruidDataSource dataSource = (DruidDataSource) PrimaryDatasourceContext.getDefault(); // 创建新的连接 @@ -143,7 +143,7 @@ public class SysTenantInitServiceImpl implements SysTenantInitService { return init(connection, tenantId); } // Datasource - else if (TenantModeEnum.DATASOURCE.getMode().equals(sysTenant.getMode())) { + else if (TenantModeEnum.isDatasource(sysTenant.getMode())) { SysTenantDatasource primary = sysTenantDatasourceService.selectPrimary(tenantId, false); Connection connection = JdbcUtil.getConnection(DataBaseEnum.getDriver(primary.getType()), DataBaseEnum.getUrl(primary.getType(), primary.getIp(), primary.getPort(), primary.getDbName(), primary.getSchemaName()), diff --git a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantServiceImpl.java b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantServiceImpl.java index a7ea43a..77915fc 100644 --- a/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantServiceImpl.java @@ -2,6 +2,9 @@ package com.qiaoba.module.tenant.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.qiaoba.api.tenant.entity.SysTenant; +import com.qiaoba.api.tenant.entity.param.SysTenantParam; +import com.qiaoba.api.tenant.service.SysTenantApiService; import com.qiaoba.auth.utils.SecurityUtil; import com.qiaoba.common.base.code.TenantErrorCode; import com.qiaoba.common.base.constants.BaseConstant; @@ -12,8 +15,6 @@ import com.qiaoba.common.base.exceptions.ServiceException; import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.TableDataInfo; import com.qiaoba.common.redis.service.RedisService; -import com.qiaoba.module.tenant.entity.SysTenant; -import com.qiaoba.module.tenant.entity.param.SysTenantParam; import com.qiaoba.module.tenant.mapper.SysTenantMapper; import com.qiaoba.module.tenant.service.SysTenantDatasourceService; import com.qiaoba.module.tenant.service.SysTenantService; @@ -35,7 +36,7 @@ import java.util.Objects; @Configuration @RequiredArgsConstructor @Slf4j -public class SysTenantServiceImpl implements SysTenantService { +public class SysTenantServiceImpl implements SysTenantService, SysTenantApiService { private final SysTenantMapper sysTenantMapper; @@ -125,10 +126,10 @@ public class SysTenantServiceImpl implements SysTenantService { wrapper.lambda().lt(Objects.nonNull(param.getTime()), SysTenant::getExpireTime, param.getTime()); } - // 登录接口, 只返回ID和名字两个字段 + // 登录接口, 只返回 ID/Name/Mode if (param.getIsLogin()) { wrapper.lambda() - .select(SysTenant::getCompanyName, SysTenant::getTenantId); + .select(SysTenant::getCompanyName, SysTenant::getTenantId, SysTenant::getMode); } return wrapper; } @@ -137,4 +138,9 @@ public class SysTenantServiceImpl implements SysTenantService { log.debug("加载租户信息进缓存, 租户ID: {}", sysTenant.getTenantId()); redisService.set(TenantConstant.TENANT_INFO_KEY_PREFIX + sysTenant.getTenantId(), sysTenant); } + + @Override + public List selectList(SysTenantParam param) { + return sysTenantMapper.selectList(param2Wrapper(param)); + } }