From 874b33557d657ac94afa29877fd0fcf47398d819 Mon Sep 17 00:00:00 2001 From: 77 <77@77.com> Date: Tue, 14 May 2024 18:54:08 +0800 Subject: [PATCH] init --- pom.xml | 63 +-- ruoyi-admin/pom.xml | 2 +- .../src/main/resources/application-dev.yml | 2 +- ruoyi-component/pom.xml | 2 +- ruoyi-component/ruoyi-component-bom/pom.xml | 2 +- ruoyi-component/ruoyi-component-core/pom.xml | 2 +- .../component/core/constant/CacheNames.java | 4 +- .../component/core/constant/Constants.java | 6 + .../core/constant/TenantConstants.java | 45 +++ ...ot.autoconfigure.AutoConfiguration.imports | 2 +- .../ruoyi-component-encrypt/pom.xml | 2 +- ruoyi-component/ruoyi-component-excel/pom.xml | 2 +- .../ruoyi-component-generator/pom.xml | 2 +- .../ruoyi-component-idempotent/pom.xml | 2 +- ruoyi-component/ruoyi-component-job/pom.xml | 2 +- ruoyi-component/ruoyi-component-json/pom.xml | 2 +- ruoyi-component/ruoyi-component-log/pom.xml | 2 +- ruoyi-component/ruoyi-component-mail/pom.xml | 2 +- .../ruoyi-component-mybatis/pom.xml | 2 +- ruoyi-component/ruoyi-component-oss/pom.xml | 2 +- .../ruoyi-component-ratelimiter/pom.xml | 2 +- ruoyi-component/ruoyi-component-redis/pom.xml | 2 +- .../ruoyi-component-satoken/pom.xml | 2 +- .../ruoyi-component-security/pom.xml | 2 +- .../ruoyi-component-sensitive/pom.xml | 2 +- ruoyi-component/ruoyi-component-sms/pom.xml | 2 +- .../ruoyi-component-tenant/pom.xml | 18 +- .../component/tenant/core/TenantEntity.java | 2 +- .../ruoyi-component-translation/pom.xml | 2 +- ruoyi-component/ruoyi-component-web/pom.xml | 2 +- ruoyi-dk/pom.xml | 2 +- ruoyi-system/pom.xml | 6 +- .../controller}/SysConfigController.java | 2 +- .../system/controller}/SysDeptController.java | 2 +- .../controller}/SysDictDataController.java | 2 +- .../controller}/SysDictTypeController.java | 2 +- .../controller}/SysIndexController.java | 2 +- .../controller}/SysLoginController.java | 2 +- .../system/controller}/SysMenuController.java | 2 +- .../controller}/SysNoticeController.java | 2 +- .../controller}/SysOssConfigController.java | 2 +- .../system/controller}/SysOssController.java | 2 +- .../system/controller}/SysPostController.java | 2 +- .../controller}/SysProfileController.java | 2 +- .../controller}/SysRegisterController.java | 2 +- .../system/controller}/SysRoleController.java | 2 +- .../controller/SysTenantController.java | 176 ++++++++ .../SysTenantPackageController.java | 135 +++++++ .../system/controller}/SysUserController.java | 2 +- .../controller/monitor/CacheController.java | 2 +- .../monitor/SysLogininforController.java | 2 +- .../monitor/SysOperlogController.java | 2 +- .../monitor/SysUserOnlineController.java | 2 +- .../com/ruoyi/system/domain/SysConfig.java | 3 +- .../java/com/ruoyi/system/domain/SysDept.java | 4 + .../com/ruoyi/system/domain/SysDictData.java | 3 +- .../com/ruoyi/system/domain/SysDictType.java | 3 +- .../java/com/ruoyi/system/domain/SysRole.java | 3 +- .../com/ruoyi/system/domain/SysTenant.java | 101 +++++ .../ruoyi/system/domain/SysTenantPackage.java | 53 +++ .../java/com/ruoyi/system/domain/SysUser.java | 3 +- .../ruoyi/system/domain/bo/SysTenantBo.java | 111 +++++ .../system/domain/bo/SysTenantPackageBo.java | 55 +++ .../system/domain/vo/SysTenantPackageVo.java | 61 +++ .../ruoyi/system/domain/vo/SysTenantVo.java | 110 +++++ .../ruoyi/system/mapper/SysTenantMapper.java | 15 + .../system/mapper/SysTenantPackageMapper.java | 14 + .../service/ISysTenantPackageService.java | 57 +++ .../system/service/ISysTenantService.java | 82 ++++ .../impl/SysTenantPackageServiceImpl.java | 146 +++++++ .../service/impl/SysTenantServiceImpl.java | 382 ++++++++++++++++++ 71 files changed, 1637 insertions(+), 112 deletions(-) create mode 100644 ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/TenantConstants.java rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysConfigController.java (99%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysDeptController.java (99%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysDictDataController.java (98%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysDictTypeController.java (98%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysIndexController.java (91%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysLoginController.java (99%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysMenuController.java (99%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysNoticeController.java (98%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysOssConfigController.java (98%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysOssController.java (98%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysPostController.java (99%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysProfileController.java (99%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysRegisterController.java (96%) rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysRoleController.java (99%) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/SysTenantController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/SysTenantPackageController.java rename {ruoyi-admin/src/main/java/com/ruoyi/web/controller/system => ruoyi-system/src/main/java/com/ruoyi/system/controller}/SysUserController.java (99%) rename {ruoyi-admin/src/main/java/com/ruoyi/web => ruoyi-system/src/main/java/com/ruoyi/system}/controller/monitor/CacheController.java (99%) rename {ruoyi-admin/src/main/java/com/ruoyi/web => ruoyi-system/src/main/java/com/ruoyi/system}/controller/monitor/SysLogininforController.java (98%) rename {ruoyi-admin/src/main/java/com/ruoyi/web => ruoyi-system/src/main/java/com/ruoyi/system}/controller/monitor/SysOperlogController.java (98%) rename {ruoyi-admin/src/main/java/com/ruoyi/web => ruoyi-system/src/main/java/com/ruoyi/system}/controller/monitor/SysUserOnlineController.java (98%) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenant.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenantPackage.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysTenantBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysTenantPackageBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysTenantPackageVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysTenantVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantPackageMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantPackageService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantPackageServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java diff --git a/pom.xml b/pom.xml index acb7fc6..115d215 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,11 @@ com.ruoyi dk-sass-server - 4.8.2 + ${revision} - RuoYi-Vue-Plus + Sass-Server - 4.8.2 - 4.8.2 + 4.8.3 2.7.18 UTF-8 UTF-8 @@ -261,59 +260,15 @@ bcprov-jdk15to18 ${bouncycastle.version} - - - - com.ruoyi - ruoyi-job - ${ruoyi-vue-plus.version} - - - - - com.ruoyi - ruoyi-generator - ${ruoyi-vue-plus.version} - - - - - com.ruoyi - ruoyi-framework - ${ruoyi-vue-plus.version} - - - - - com.ruoyi - ruoyi-system - ${ruoyi-vue-plus.version} - - - - - com.ruoyi - ruoyi-common - ${ruoyi-vue-plus.version} - - - - - com.ruoyi - ruoyi-oss - ${ruoyi-vue-plus.version} - - - - - com.ruoyi - ruoyi-sms - ${ruoyi-vue-plus.version} - com.ruoyi ruoyi-dk - ${ruoyi-vue-plus.version} + ${revision} + + + com.ruoyi + ruoyi-system + ${revision} diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 35368d6..1591f5e 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -5,7 +5,7 @@ dk-sass-server com.ruoyi - 4.8.2 + ${revision} 4.0.0 jar diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index b285300..4f8030a 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -20,7 +20,7 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://124.222.254.188:4306/dk-sass?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + url: jdbc:mysql://124.222.254.188:5306/dk-sass?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true username: root password: 383200134 # 从库数据源 diff --git a/ruoyi-component/pom.xml b/ruoyi-component/pom.xml index f250ee2..297fbed 100644 --- a/ruoyi-component/pom.xml +++ b/ruoyi-component/pom.xml @@ -6,7 +6,7 @@ com.ruoyi dk-sass-server - 4.8.2 + ${revision} ruoyi-component pom diff --git a/ruoyi-component/ruoyi-component-bom/pom.xml b/ruoyi-component/ruoyi-component-bom/pom.xml index 76a07b3..61676e5 100644 --- a/ruoyi-component/ruoyi-component-bom/pom.xml +++ b/ruoyi-component/ruoyi-component-bom/pom.xml @@ -7,7 +7,7 @@ pom - 4.8.2 + 4.8.3 diff --git a/ruoyi-component/ruoyi-component-core/pom.xml b/ruoyi-component/ruoyi-component-core/pom.xml index 8cc90bd..417761f 100644 --- a/ruoyi-component/ruoyi-component-core/pom.xml +++ b/ruoyi-component/ruoyi-component-core/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-core diff --git a/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/CacheNames.java b/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/CacheNames.java index 2442a26..a05f23e 100644 --- a/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/CacheNames.java +++ b/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/CacheNames.java @@ -35,6 +35,8 @@ public interface CacheNames { */ String SYS_USER_NAME = "sys_user_name#30d"; + String SYS_TENANT = GlobalConstants.GLOBAL_REDIS_KEY + "sys_tenant#30d"; + /** * 部门 */ @@ -48,7 +50,7 @@ public interface CacheNames { /** * OSS配置 */ - String SYS_OSS_CONFIG = "sys_oss_config"; + String SYS_OSS_CONFIG = GlobalConstants.GLOBAL_REDIS_KEY + "sys_oss_config"; /** * 在线用户 diff --git a/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/Constants.java b/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/Constants.java index eec0ba5..307c1f5 100644 --- a/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/Constants.java +++ b/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/Constants.java @@ -72,5 +72,11 @@ public interface Constants { */ String TOKEN = "token"; + + /** + * 顶级部门id + */ + Long TOP_PARENT_ID = 0L; + } diff --git a/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/TenantConstants.java b/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/TenantConstants.java new file mode 100644 index 0000000..7dc91d4 --- /dev/null +++ b/ruoyi-component/ruoyi-component-core/src/main/java/com/ruoyi/component/core/constant/TenantConstants.java @@ -0,0 +1,45 @@ +package com.ruoyi.component.core.constant; + +/** + * 租户常量信息 + * + * @author Lion Li + */ +public interface TenantConstants { + + /** + * 租户正常状态 + */ + String NORMAL = "0"; + + /** + * 租户封禁状态 + */ + String DISABLE = "1"; + + /** + * 超级管理员ID + */ + Long SUPER_ADMIN_ID = 1L; + + /** + * 超级管理员角色 roleKey + */ + String SUPER_ADMIN_ROLE_KEY = "superadmin"; + + /** + * 租户管理员角色 roleKey + */ + String TENANT_ADMIN_ROLE_KEY = "admin"; + + /** + * 租户管理员角色名称 + */ + String TENANT_ADMIN_ROLE_NAME = "管理员"; + + /** + * 默认租户ID + */ + String DEFAULT_TENANT_ID = "000000"; + +} diff --git a/ruoyi-component/ruoyi-component-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-component/ruoyi-component-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 4c94d21..b5e2440 100644 --- a/ruoyi-component/ruoyi-component-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-component/ruoyi-component-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -3,4 +3,4 @@ com.ruoyi.component.core.config.AsyncConfig com.ruoyi.component.core.config.RuoYiConfig com.ruoyi.component.core.config.ThreadPoolConfig com.ruoyi.component.core.config.ValidatorConfig -com.ruoyi.component.core.utils.SpringUtils +com.ruoyi.component.core.util.spring.SpringUtils diff --git a/ruoyi-component/ruoyi-component-encrypt/pom.xml b/ruoyi-component/ruoyi-component-encrypt/pom.xml index d29a4bc..a721b15 100644 --- a/ruoyi-component/ruoyi-component-encrypt/pom.xml +++ b/ruoyi-component/ruoyi-component-encrypt/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-encrypt diff --git a/ruoyi-component/ruoyi-component-excel/pom.xml b/ruoyi-component/ruoyi-component-excel/pom.xml index c494e9c..a0bbb32 100644 --- a/ruoyi-component/ruoyi-component-excel/pom.xml +++ b/ruoyi-component/ruoyi-component-excel/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-excel diff --git a/ruoyi-component/ruoyi-component-generator/pom.xml b/ruoyi-component/ruoyi-component-generator/pom.xml index 01e75dc..f87d231 100644 --- a/ruoyi-component/ruoyi-component-generator/pom.xml +++ b/ruoyi-component/ruoyi-component-generator/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-generator diff --git a/ruoyi-component/ruoyi-component-idempotent/pom.xml b/ruoyi-component/ruoyi-component-idempotent/pom.xml index b537e16..4d544fd 100644 --- a/ruoyi-component/ruoyi-component-idempotent/pom.xml +++ b/ruoyi-component/ruoyi-component-idempotent/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-idempotent diff --git a/ruoyi-component/ruoyi-component-job/pom.xml b/ruoyi-component/ruoyi-component-job/pom.xml index 5b7e509..1726d02 100644 --- a/ruoyi-component/ruoyi-component-job/pom.xml +++ b/ruoyi-component/ruoyi-component-job/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-job diff --git a/ruoyi-component/ruoyi-component-json/pom.xml b/ruoyi-component/ruoyi-component-json/pom.xml index 5c6c779..5f75f2f 100644 --- a/ruoyi-component/ruoyi-component-json/pom.xml +++ b/ruoyi-component/ruoyi-component-json/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-json diff --git a/ruoyi-component/ruoyi-component-log/pom.xml b/ruoyi-component/ruoyi-component-log/pom.xml index cc96227..931c547 100644 --- a/ruoyi-component/ruoyi-component-log/pom.xml +++ b/ruoyi-component/ruoyi-component-log/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-log diff --git a/ruoyi-component/ruoyi-component-mail/pom.xml b/ruoyi-component/ruoyi-component-mail/pom.xml index bf8b961..1c06633 100644 --- a/ruoyi-component/ruoyi-component-mail/pom.xml +++ b/ruoyi-component/ruoyi-component-mail/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-mail diff --git a/ruoyi-component/ruoyi-component-mybatis/pom.xml b/ruoyi-component/ruoyi-component-mybatis/pom.xml index a0115b3..6bcf665 100644 --- a/ruoyi-component/ruoyi-component-mybatis/pom.xml +++ b/ruoyi-component/ruoyi-component-mybatis/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-mybatis jar diff --git a/ruoyi-component/ruoyi-component-oss/pom.xml b/ruoyi-component/ruoyi-component-oss/pom.xml index b3dd53f..5e8c744 100644 --- a/ruoyi-component/ruoyi-component-oss/pom.xml +++ b/ruoyi-component/ruoyi-component-oss/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-oss diff --git a/ruoyi-component/ruoyi-component-ratelimiter/pom.xml b/ruoyi-component/ruoyi-component-ratelimiter/pom.xml index 154ad6f..ee23ff7 100644 --- a/ruoyi-component/ruoyi-component-ratelimiter/pom.xml +++ b/ruoyi-component/ruoyi-component-ratelimiter/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-ratelimiter diff --git a/ruoyi-component/ruoyi-component-redis/pom.xml b/ruoyi-component/ruoyi-component-redis/pom.xml index 1a52f42..8d5a82f 100644 --- a/ruoyi-component/ruoyi-component-redis/pom.xml +++ b/ruoyi-component/ruoyi-component-redis/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-redis diff --git a/ruoyi-component/ruoyi-component-satoken/pom.xml b/ruoyi-component/ruoyi-component-satoken/pom.xml index 76dd26f..6f99620 100644 --- a/ruoyi-component/ruoyi-component-satoken/pom.xml +++ b/ruoyi-component/ruoyi-component-satoken/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-satoken diff --git a/ruoyi-component/ruoyi-component-security/pom.xml b/ruoyi-component/ruoyi-component-security/pom.xml index cb9597c..9ec89ff 100644 --- a/ruoyi-component/ruoyi-component-security/pom.xml +++ b/ruoyi-component/ruoyi-component-security/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-security diff --git a/ruoyi-component/ruoyi-component-sensitive/pom.xml b/ruoyi-component/ruoyi-component-sensitive/pom.xml index bdd3c7e..08c630b 100644 --- a/ruoyi-component/ruoyi-component-sensitive/pom.xml +++ b/ruoyi-component/ruoyi-component-sensitive/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-sensitive diff --git a/ruoyi-component/ruoyi-component-sms/pom.xml b/ruoyi-component/ruoyi-component-sms/pom.xml index 61d4b9b..1989de4 100644 --- a/ruoyi-component/ruoyi-component-sms/pom.xml +++ b/ruoyi-component/ruoyi-component-sms/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-sms diff --git a/ruoyi-component/ruoyi-component-tenant/pom.xml b/ruoyi-component/ruoyi-component-tenant/pom.xml index 1cfbee1..c746b39 100644 --- a/ruoyi-component/ruoyi-component-tenant/pom.xml +++ b/ruoyi-component/ruoyi-component-tenant/pom.xml @@ -4,13 +4,19 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-tenant + jar + + + UTF-8 + + com.ruoyi - ruoyi-common + ruoyi-component-core com.ruoyi @@ -20,13 +26,13 @@ com.ruoyi ruoyi-component-satoken - - com.alibaba - transmittable-thread-local - com.ruoyi ruoyi-component-mybatis + + com.alibaba + transmittable-thread-local + diff --git a/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/core/TenantEntity.java b/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/core/TenantEntity.java index 2520740..015fc1b 100644 --- a/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/core/TenantEntity.java +++ b/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/core/TenantEntity.java @@ -1,6 +1,6 @@ package com.ruoyi.component.tenant.core; -import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.component.mybatis.core.domain.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ruoyi-component/ruoyi-component-translation/pom.xml b/ruoyi-component/ruoyi-component-translation/pom.xml index b222fae..eb76e64 100644 --- a/ruoyi-component/ruoyi-component-translation/pom.xml +++ b/ruoyi-component/ruoyi-component-translation/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-translation diff --git a/ruoyi-component/ruoyi-component-web/pom.xml b/ruoyi-component/ruoyi-component-web/pom.xml index 5614964..7bd0cc3 100644 --- a/ruoyi-component/ruoyi-component-web/pom.xml +++ b/ruoyi-component/ruoyi-component-web/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-component - 4.8.2 + ${revision} ruoyi-component-web diff --git a/ruoyi-dk/pom.xml b/ruoyi-dk/pom.xml index 12c30b1..06d2ca5 100644 --- a/ruoyi-dk/pom.xml +++ b/ruoyi-dk/pom.xml @@ -6,7 +6,7 @@ com.ruoyi dk-sass-server - 4.8.2 + ${revision} ruoyi-dk diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml index 49d90d2..4509216 100644 --- a/ruoyi-system/pom.xml +++ b/ruoyi-system/pom.xml @@ -5,7 +5,7 @@ dk-sass-server com.ruoyi - 4.8.2 + ${revision} 4.0.0 @@ -66,6 +66,10 @@ com.ruoyi ruoyi-component-mail + + com.ruoyi + ruoyi-component-tenant + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java similarity index 99% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java index ed2bcbb..f52fa84 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.ruoyi.component.core.domain.R; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java similarity index 99% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java index 833d92e..167d688 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.convert.Convert; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java similarity index 98% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java index 007c8a9..ab4c3ba 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.ObjectUtil; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java similarity index 98% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java index d6adb0f..94ed9d1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.ruoyi.component.core.domain.R; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysIndexController.java similarity index 91% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysIndexController.java index f47bf0d..30fbb4c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysIndexController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaIgnore; import lombok.RequiredArgsConstructor; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginController.java similarity index 99% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginController.java index a2b0769..b73d498 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaIgnore; import com.ruoyi.component.core.constant.Constants; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java similarity index 99% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java index 8a1d018..1e3facb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.lang.tree.Tree; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java similarity index 98% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java index 9072d45..2225ba9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.ruoyi.component.core.domain.R; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOssConfigController.java similarity index 98% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOssConfigController.java index 29427ca..e850e69 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOssConfigController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.ruoyi.component.core.domain.R; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOssController.java similarity index 98% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOssController.java index 5dc8773..45efa5b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOssController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java similarity index 99% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java index 858db2d..03b0e90 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.ruoyi.component.core.constant.UserConstants; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java similarity index 99% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java index 93bffbd..31d36c4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.secure.BCrypt; import cn.hutool.core.io.FileUtil; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRegisterController.java similarity index 96% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRegisterController.java index 206cf87..cb84cb8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRegisterController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaIgnore; import com.ruoyi.component.core.domain.R; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java similarity index 99% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java index dbca995..6650cf0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.ruoyi.component.core.domain.R; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysTenantController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysTenantController.java new file mode 100644 index 0000000..b4e8080 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysTenantController.java @@ -0,0 +1,176 @@ +package com.ruoyi.system.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaCheckRole; +import com.baomidou.lock.annotation.Lock4j; +import com.ruoyi.component.core.constant.TenantConstants; +import com.ruoyi.component.core.domain.R; +import com.ruoyi.component.core.validate.AddGroup; +import com.ruoyi.component.core.validate.EditGroup; +import com.ruoyi.component.excel.utils.ExcelUtil; +import com.ruoyi.component.idempotent.annotation.RepeatSubmit; +import com.ruoyi.component.log.annotation.Log; +import com.ruoyi.component.log.enums.BusinessType; +import com.ruoyi.component.mybatis.core.page.PageQuery; +import com.ruoyi.component.mybatis.core.page.TableDataInfo; +import com.ruoyi.component.tenant.helper.TenantHelper; +import com.ruoyi.component.web.core.BaseController; +import com.ruoyi.system.domain.bo.SysTenantBo; +import com.ruoyi.system.domain.vo.SysTenantVo; +import com.ruoyi.system.service.ISysTenantService; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Arrays; +import java.util.List; + +/** + * 租户管理 + * + * @author Michelle.Chung + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/tenant") +public class SysTenantController extends BaseController { + + private final ISysTenantService tenantService; + + /** + * 查询租户列表 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenant:list") + @GetMapping("/list") + public TableDataInfo list(SysTenantBo bo, PageQuery pageQuery) { + return tenantService.queryPageList(bo, pageQuery); + } + + /** + * 导出租户列表 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenant:export") + @Log(title = "租户", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysTenantBo bo, HttpServletResponse response) { + List list = tenantService.queryList(bo); + ExcelUtil.exportExcel(list, "租户", SysTenantVo.class, response); + } + + /** + * 获取租户详细信息 + * + * @param id 主键 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenant:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(tenantService.queryById(id)); + } + + /** + * 新增租户 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenant:add") + @Log(title = "租户", businessType = BusinessType.INSERT) + @Lock4j + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysTenantBo bo) { + if (!tenantService.checkCompanyNameUnique(bo)) { + return R.fail("新增租户'" + bo.getCompanyName() + "'失败,企业名称已存在"); + } + return toAjax(TenantHelper.ignore(() -> tenantService.insertByBo(bo))); + } + + /** + * 修改租户 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenant:edit") + @Log(title = "租户", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysTenantBo bo) { + tenantService.checkTenantAllowed(bo.getTenantId()); + if (!tenantService.checkCompanyNameUnique(bo)) { + return R.fail("修改租户'" + bo.getCompanyName() + "'失败,公司名称已存在"); + } + return toAjax(tenantService.updateByBo(bo)); + } + + /** + * 状态修改 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenant:edit") + @Log(title = "租户", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public R changeStatus(@RequestBody SysTenantBo bo) { + tenantService.checkTenantAllowed(bo.getTenantId()); + return toAjax(tenantService.updateTenantStatus(bo)); + } + + /** + * 删除租户 + * + * @param ids 主键串 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenant:remove") + @Log(title = "租户", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(tenantService.deleteWithValidByIds(Arrays.asList(ids), true)); + } + + /** + * 动态切换租户 + * + * @param tenantId 租户ID + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @GetMapping("/dynamic/{tenantId}") + public R dynamicTenant(@NotBlank(message = "租户ID不能为空") @PathVariable String tenantId) { + TenantHelper.setDynamic(tenantId); + return R.ok(); + } + + /** + * 清除动态租户 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @GetMapping("/dynamic/clear") + public R dynamicClear() { + TenantHelper.clearDynamic(); + return R.ok(); + } + + + /** + * 同步租户套餐 + * + * @param tenantId 租户id + * @param packageId 套餐id + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenant:edit") + @Log(title = "租户", businessType = BusinessType.UPDATE) + @GetMapping("/syncTenantPackage") + public R syncTenantPackage(@NotBlank(message = "租户ID不能为空") String tenantId, + @NotNull(message = "套餐ID不能为空") Long packageId) { + return toAjax(TenantHelper.ignore(() -> tenantService.syncTenantPackage(tenantId, packageId))); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysTenantPackageController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysTenantPackageController.java new file mode 100644 index 0000000..a0f9483 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysTenantPackageController.java @@ -0,0 +1,135 @@ +package com.ruoyi.system.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaCheckRole; +import com.ruoyi.component.core.constant.TenantConstants; +import com.ruoyi.component.core.domain.R; +import com.ruoyi.component.core.validate.AddGroup; +import com.ruoyi.component.core.validate.EditGroup; +import com.ruoyi.component.excel.utils.ExcelUtil; +import com.ruoyi.component.idempotent.annotation.RepeatSubmit; +import com.ruoyi.component.log.annotation.Log; +import com.ruoyi.component.log.enums.BusinessType; +import com.ruoyi.component.mybatis.core.page.PageQuery; +import com.ruoyi.component.mybatis.core.page.TableDataInfo; +import com.ruoyi.component.web.core.BaseController; +import com.ruoyi.system.domain.bo.SysTenantPackageBo; +import com.ruoyi.system.domain.vo.SysTenantPackageVo; +import com.ruoyi.system.service.ISysTenantPackageService; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Arrays; +import java.util.List; + +/** + * 租户套餐管理 + * + * @author Michelle.Chung + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/tenant/package") +public class SysTenantPackageController extends BaseController { + + private final ISysTenantPackageService tenantPackageService; + + /** + * 查询租户套餐列表 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenantPackage:list") + @GetMapping("/list") + public TableDataInfo list(SysTenantPackageBo bo, PageQuery pageQuery) { + return tenantPackageService.queryPageList(bo, pageQuery); + } + + /** + * 查询租户套餐下拉选列表 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenantPackage:list") + @GetMapping("/selectList") + public R> selectList() { + return R.ok(tenantPackageService.selectList()); + } + + /** + * 导出租户套餐列表 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenantPackage:export") + @Log(title = "租户套餐", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysTenantPackageBo bo, HttpServletResponse response) { + List list = tenantPackageService.queryList(bo); + ExcelUtil.exportExcel(list, "租户套餐", SysTenantPackageVo.class, response); + } + + /** + * 获取租户套餐详细信息 + * + * @param packageId 主键 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenantPackage:query") + @GetMapping("/{packageId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long packageId) { + return R.ok(tenantPackageService.queryById(packageId)); + } + + /** + * 新增租户套餐 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenantPackage:add") + @Log(title = "租户套餐", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysTenantPackageBo bo) { + return toAjax(tenantPackageService.insertByBo(bo)); + } + + /** + * 修改租户套餐 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenantPackage:edit") + @Log(title = "租户套餐", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysTenantPackageBo bo) { + return toAjax(tenantPackageService.updateByBo(bo)); + } + + /** + * 状态修改 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenantPackage:edit") + @Log(title = "租户套餐", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public R changeStatus(@RequestBody SysTenantPackageBo bo) { + return toAjax(tenantPackageService.updatePackageStatus(bo)); + } + + /** + * 删除租户套餐 + * + * @param packageIds 主键串 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @SaCheckPermission("system:tenantPackage:remove") + @Log(title = "租户套餐", businessType = BusinessType.DELETE) + @DeleteMapping("/{packageIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] packageIds) { + return toAjax(tenantPackageService.deleteWithValidByIds(Arrays.asList(packageIds), true)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java similarity index 99% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java index 6a0ce72..f777a4b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.system; +package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.secure.BCrypt; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/CacheController.java similarity index 99% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/CacheController.java index 9e6bf10..928d4df 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/CacheController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.monitor; +package com.ruoyi.system.controller.monitor; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.collection.CollUtil; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/SysLogininforController.java similarity index 98% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/SysLogininforController.java index d41ad46..b214db3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/SysLogininforController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.monitor; +package com.ruoyi.system.controller.monitor; import cn.dev33.satoken.annotation.SaCheckPermission; import com.ruoyi.component.core.constant.CacheConstants; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/SysOperlogController.java similarity index 98% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/SysOperlogController.java index 6688307..da8226f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/SysOperlogController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.monitor; +package com.ruoyi.system.controller.monitor; import cn.dev33.satoken.annotation.SaCheckPermission; import com.ruoyi.component.core.domain.R; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/SysUserOnlineController.java similarity index 98% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java rename to ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/SysUserOnlineController.java index fef4df9..2caccbe 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/monitor/SysUserOnlineController.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.monitor; +package com.ruoyi.system.controller.monitor; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.exception.NotLoginException; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java index 51b8ad9..3f49e08 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.component.excel.annotation.ExcelDictFormat; import com.ruoyi.component.excel.convert.ExcelDictConvert; import com.ruoyi.component.mybatis.core.domain.BaseEntity; +import com.ruoyi.component.tenant.core.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -23,7 +24,7 @@ import javax.validation.constraints.Size; @EqualsAndHashCode(callSuper = true) @TableName("sys_config") @ExcelIgnoreUnannotated -public class SysConfig extends BaseEntity { +public class SysConfig extends TenantEntity { /** * 参数主键 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDept.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDept.java index fda28ed..4155f90 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDept.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDept.java @@ -77,4 +77,8 @@ public class SysDept extends TreeEntity { */ private String ancestors; + /** + * 租户编号 + */ + private String tenantId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java index ed27310..13e7a80 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java @@ -8,6 +8,7 @@ import com.ruoyi.component.core.constant.UserConstants; import com.ruoyi.component.excel.annotation.ExcelDictFormat; import com.ruoyi.component.excel.convert.ExcelDictConvert; import com.ruoyi.component.mybatis.core.domain.BaseEntity; +import com.ruoyi.component.tenant.core.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -24,7 +25,7 @@ import javax.validation.constraints.Size; @EqualsAndHashCode(callSuper = true) @TableName("sys_dict_data") @ExcelIgnoreUnannotated -public class SysDictData extends BaseEntity { +public class SysDictData extends TenantEntity { /** * 字典编码 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java index 25274f7..55274cc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.component.excel.annotation.ExcelDictFormat; import com.ruoyi.component.excel.convert.ExcelDictConvert; import com.ruoyi.component.mybatis.core.domain.BaseEntity; +import com.ruoyi.component.tenant.core.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -24,7 +25,7 @@ import javax.validation.constraints.Size; @EqualsAndHashCode(callSuper = true) @TableName("sys_dict_type") @ExcelIgnoreUnannotated -public class SysDictType extends BaseEntity { +public class SysDictType extends TenantEntity { /** * 字典主键 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java index 9bb37de..b9cccf7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java @@ -10,6 +10,7 @@ import com.ruoyi.component.core.constant.UserConstants; import com.ruoyi.component.excel.annotation.ExcelDictFormat; import com.ruoyi.component.excel.convert.ExcelDictConvert; import com.ruoyi.component.mybatis.core.domain.BaseEntity; +import com.ruoyi.component.tenant.core.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -29,7 +30,7 @@ import javax.validation.constraints.Size; @EqualsAndHashCode(callSuper = true) @TableName("sys_role") @ExcelIgnoreUnannotated -public class SysRole extends BaseEntity { +public class SysRole extends TenantEntity { /** * 角色ID diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenant.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenant.java new file mode 100644 index 0000000..aba9d25 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenant.java @@ -0,0 +1,101 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.component.mybatis.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 租户对象 sys_tenant + * + * @author Michelle.Chung + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_tenant") +public class SysTenant extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 租户编号 + */ + private String tenantId; + + /** + * 联系人 + */ + private String contactUserName; + + /** + * 联系电话 + */ + private String contactPhone; + + /** + * 企业名称 + */ + private String companyName; + + /** + * 统一社会信用代码 + */ + private String licenseNumber; + + /** + * 地址 + */ + private String address; + + /** + * 域名 + */ + private String domain; + + /** + * 企业简介 + */ + private String intro; + + /** + * 备注 + */ + private String remark; + + /** + * 租户套餐编号 + */ + private Long packageId; + + /** + * 过期时间 + */ + private Date expireTime; + + /** + * 用户数量(-1不限制) + */ + private Long accountCount; + + /** + * 租户状态(0正常 1停用) + */ + private String status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenantPackage.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenantPackage.java new file mode 100644 index 0000000..d3d69bf --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenantPackage.java @@ -0,0 +1,53 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.component.mybatis.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 租户套餐对象 sys_tenant_package + * + * @author Michelle.Chung + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_tenant_package") +public class SysTenantPackage extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 租户套餐id + */ + @TableId(value = "package_id") + private Long packageId; + /** + * 套餐名称 + */ + private String packageName; + /** + * 关联菜单id + */ + private String menuIds; + /** + * 备注 + */ + private String remark; + /** + * 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) + */ + private Boolean menuCheckStrictly; + /** + * 状态(0正常 1停用) + */ + private String status; + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java index 64f6608..82eb5d8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java @@ -8,6 +8,7 @@ import com.ruoyi.component.core.xss.Xss; import com.ruoyi.component.mybatis.core.domain.BaseEntity; import com.ruoyi.component.sensitive.annotation.Sensitive; import com.ruoyi.component.sensitive.core.SensitiveStrategy; +import com.ruoyi.component.tenant.core.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -28,7 +29,7 @@ import java.util.List; @NoArgsConstructor @EqualsAndHashCode(callSuper = true) @TableName("sys_user") -public class SysUser extends BaseEntity { +public class SysUser extends TenantEntity { /** * 用户ID diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysTenantBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysTenantBo.java new file mode 100644 index 0000000..edb232d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysTenantBo.java @@ -0,0 +1,111 @@ +package com.ruoyi.system.domain.bo; + +import com.ruoyi.component.core.validate.AddGroup; +import com.ruoyi.component.core.validate.EditGroup; +import com.ruoyi.component.mybatis.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 租户业务对象 sys_tenant + * + * @author Michelle.Chung + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SysTenantBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 租户编号 + */ + private String tenantId; + + /** + * 联系人 + */ + @NotBlank(message = "联系人不能为空", groups = { AddGroup.class, EditGroup.class }) + private String contactUserName; + + /** + * 联系电话 + */ + @NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class }) + private String contactPhone; + + /** + * 企业名称 + */ + @NotBlank(message = "企业名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String companyName; + + /** + * 用户名(创建系统用户) + */ + @NotBlank(message = "用户名不能为空", groups = { AddGroup.class }) + private String username; + + /** + * 密码(创建系统用户) + */ + @NotBlank(message = "密码不能为空", groups = { AddGroup.class }) + private String password; + + /** + * 统一社会信用代码 + */ + private String licenseNumber; + + /** + * 地址 + */ + private String address; + + /** + * 域名 + */ + private String domain; + + /** + * 企业简介 + */ + private String intro; + + /** + * 备注 + */ + private String remark; + + /** + * 租户套餐编号 + */ + @NotNull(message = "租户套餐不能为空", groups = { AddGroup.class }) + private Long packageId; + + /** + * 过期时间 + */ + private Date expireTime; + + /** + * 用户数量(-1不限制) + */ + private Long accountCount; + + /** + * 租户状态(0正常 1停用) + */ + private String status; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysTenantPackageBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysTenantPackageBo.java new file mode 100644 index 0000000..42d8a1a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysTenantPackageBo.java @@ -0,0 +1,55 @@ +package com.ruoyi.system.domain.bo; + +import com.ruoyi.component.core.validate.AddGroup; +import com.ruoyi.component.core.validate.EditGroup; +import com.ruoyi.component.mybatis.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 租户套餐业务对象 sys_tenant_package + * + * @author Michelle.Chung + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SysTenantPackageBo extends BaseEntity { + + /** + * 租户套餐id + */ + @NotNull(message = "租户套餐id不能为空", groups = { EditGroup.class }) + private Long packageId; + + /** + * 套餐名称 + */ + @NotBlank(message = "套餐名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String packageName; + + /** + * 关联菜单id + */ + private Long[] menuIds; + + /** + * 备注 + */ + private String remark; + + /** + * 菜单树选择项是否关联显示 + */ + private Boolean menuCheckStrictly; + + /** + * 状态(0正常 1停用) + */ + private String status; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysTenantPackageVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysTenantPackageVo.java new file mode 100644 index 0000000..b84aa23 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysTenantPackageVo.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.component.excel.annotation.ExcelDictFormat; +import com.ruoyi.component.excel.convert.ExcelDictConvert; +import lombok.Data; + +import java.io.Serializable; + + +/** + * 租户套餐视图对象 sys_tenant_package + * + * @author Michelle.Chung + */ +@Data +@ExcelIgnoreUnannotated +public class SysTenantPackageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 租户套餐id + */ + @ExcelProperty(value = "租户套餐id") + private Long packageId; + + /** + * 套餐名称 + */ + @ExcelProperty(value = "套餐名称") + private String packageName; + + /** + * 关联菜单id + */ + @ExcelProperty(value = "关联菜单id") + private String menuIds; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 菜单树选择项是否关联显示 + */ + @ExcelProperty(value = "菜单树选择项是否关联显示") + private Boolean menuCheckStrictly; + + /** + * 状态(0正常 1停用) + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=正常,1=停用") + private String status; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysTenantVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysTenantVo.java new file mode 100644 index 0000000..565a1da --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysTenantVo.java @@ -0,0 +1,110 @@ +package com.ruoyi.system.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.component.excel.annotation.ExcelDictFormat; +import com.ruoyi.component.excel.convert.ExcelDictConvert; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + + +/** + * 租户视图对象 sys_tenant + * + * @author Michelle.Chung + */ +@Data +@ExcelIgnoreUnannotated +public class SysTenantVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 租户编号 + */ + @ExcelProperty(value = "租户编号") + private String tenantId; + + /** + * 联系人 + */ + @ExcelProperty(value = "联系人") + private String contactUserName; + + /** + * 联系电话 + */ + @ExcelProperty(value = "联系电话") + private String contactPhone; + + /** + * 企业名称 + */ + @ExcelProperty(value = "企业名称") + private String companyName; + + /** + * 统一社会信用代码 + */ + @ExcelProperty(value = "统一社会信用代码") + private String licenseNumber; + + /** + * 地址 + */ + @ExcelProperty(value = "地址") + private String address; + + /** + * 域名 + */ + @ExcelProperty(value = "域名") + private String domain; + + /** + * 企业简介 + */ + @ExcelProperty(value = "企业简介") + private String intro; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 租户套餐编号 + */ + @ExcelProperty(value = "租户套餐编号") + private Long packageId; + + /** + * 过期时间 + */ + @ExcelProperty(value = "过期时间") + private Date expireTime; + + /** + * 用户数量(-1不限制) + */ + @ExcelProperty(value = "用户数量") + private Long accountCount; + + /** + * 租户状态(0正常 1停用) + */ + @ExcelProperty(value = "租户状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=正常,1=停用") + private String status; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantMapper.java new file mode 100644 index 0000000..1011942 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + + +import com.ruoyi.component.mybatis.core.mapper.BaseMapperPlus; +import com.ruoyi.system.domain.SysTenant; +import com.ruoyi.system.domain.vo.SysTenantVo; + +/** + * 租户Mapper接口 + * + * @author Michelle.Chung + */ +public interface SysTenantMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantPackageMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantPackageMapper.java new file mode 100644 index 0000000..98ddd3d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantPackageMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.component.mybatis.core.mapper.BaseMapperPlus; +import com.ruoyi.system.domain.SysTenantPackage; +import com.ruoyi.system.domain.vo.SysTenantPackageVo; + +/** + * 租户套餐Mapper接口 + * + * @author Michelle.Chung + */ +public interface SysTenantPackageMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantPackageService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantPackageService.java new file mode 100644 index 0000000..d8fead8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantPackageService.java @@ -0,0 +1,57 @@ +package com.ruoyi.system.service; + +import com.ruoyi.component.mybatis.core.page.PageQuery; +import com.ruoyi.component.mybatis.core.page.TableDataInfo; +import com.ruoyi.system.domain.bo.SysTenantPackageBo; +import com.ruoyi.system.domain.vo.SysTenantPackageVo; + +import java.util.Collection; +import java.util.List; + +/** + * 租户套餐Service接口 + * + * @author Michelle.Chung + */ +public interface ISysTenantPackageService { + + /** + * 查询租户套餐 + */ + SysTenantPackageVo queryById(Long packageId); + + /** + * 查询租户套餐列表 + */ + TableDataInfo queryPageList(SysTenantPackageBo bo, PageQuery pageQuery); + + /** + * 查询租户套餐已启用列表 + */ + List selectList(); + + /** + * 查询租户套餐列表 + */ + List queryList(SysTenantPackageBo bo); + + /** + * 新增租户套餐 + */ + Boolean insertByBo(SysTenantPackageBo bo); + + /** + * 修改租户套餐 + */ + Boolean updateByBo(SysTenantPackageBo bo); + + /** + * 修改套餐状态 + */ + int updatePackageStatus(SysTenantPackageBo bo); + + /** + * 校验并批量删除租户套餐信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java new file mode 100644 index 0000000..7074e9b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java @@ -0,0 +1,82 @@ +package com.ruoyi.system.service; + +import com.ruoyi.component.mybatis.core.page.PageQuery; +import com.ruoyi.component.mybatis.core.page.TableDataInfo; +import com.ruoyi.system.domain.bo.SysTenantBo; +import com.ruoyi.system.domain.vo.SysTenantVo; + +import java.util.Collection; +import java.util.List; + +/** + * 租户Service接口 + * + * @author Michelle.Chung + */ +public interface ISysTenantService { + + /** + * 查询租户 + */ + SysTenantVo queryById(Long id); + + /** + * 基于租户ID查询租户 + */ + SysTenantVo queryByTenantId(String tenantId); + + /** + * 查询租户列表 + */ + TableDataInfo queryPageList(SysTenantBo bo, PageQuery pageQuery); + + /** + * 查询租户列表 + */ + List queryList(SysTenantBo bo); + + /** + * 新增租户 + */ + Boolean insertByBo(SysTenantBo bo); + + /** + * 修改租户 + */ + Boolean updateByBo(SysTenantBo bo); + + /** + * 修改租户状态 + */ + int updateTenantStatus(SysTenantBo bo); + + /** + * 校验租户是否允许操作 + */ + void checkTenantAllowed(String tenantId); + + /** + * 校验并批量删除租户信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 校验企业名称是否唯一 + */ + boolean checkCompanyNameUnique(SysTenantBo bo); + + /** + * 校验账号余额 + */ + boolean checkAccountBalance(String tenantId); + + /** + * 校验有效期 + */ + boolean checkExpireTime(String tenantId); + + /** + * 同步租户套餐 + */ + Boolean syncTenantPackage(String tenantId, Long packageId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantPackageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantPackageServiceImpl.java new file mode 100644 index 0000000..23b006b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantPackageServiceImpl.java @@ -0,0 +1,146 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.component.core.constant.TenantConstants; +import com.ruoyi.component.core.exception.ServiceException; +import com.ruoyi.component.core.util.BeanConvertUtil; +import com.ruoyi.component.core.util.StringUtils; +import com.ruoyi.component.mybatis.core.page.PageQuery; +import com.ruoyi.component.mybatis.core.page.TableDataInfo; +import com.ruoyi.system.domain.SysTenant; +import com.ruoyi.system.domain.SysTenantPackage; +import com.ruoyi.system.domain.bo.SysTenantPackageBo; +import com.ruoyi.system.domain.vo.SysTenantPackageVo; +import com.ruoyi.system.mapper.SysTenantMapper; +import com.ruoyi.system.mapper.SysTenantPackageMapper; +import com.ruoyi.system.service.ISysTenantPackageService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +/** + * 租户套餐Service业务层处理 + * + * @author Michelle.Chung + */ +@Service +public class SysTenantPackageServiceImpl implements ISysTenantPackageService { + + @Resource + private SysTenantPackageMapper baseMapper; + @Resource + private SysTenantMapper tenantMapper; + + /** + * 查询租户套餐 + */ + @Override + public SysTenantPackageVo queryById(Long packageId){ + return baseMapper.selectVoById(packageId); + } + + /** + * 查询租户套餐列表 + */ + @Override + public TableDataInfo queryPageList(SysTenantPackageBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List selectList() { + return baseMapper.selectVoList(new LambdaQueryWrapper() + .eq(SysTenantPackage::getStatus, TenantConstants.NORMAL)); + } + + /** + * 查询租户套餐列表 + */ + @Override + public List queryList(SysTenantPackageBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysTenantPackageBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getPackageName()), SysTenantPackage::getPackageName, bo.getPackageName()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysTenantPackage::getStatus, bo.getStatus()); + lqw.orderByAsc(SysTenantPackage::getPackageId); + return lqw; + } + + /** + * 新增租户套餐 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(SysTenantPackageBo bo) { + SysTenantPackage add = BeanConvertUtil.convertTo(bo, SysTenantPackage::new); + // 保存菜单id + List menuIds = Arrays.asList(bo.getMenuIds()); + if (CollUtil.isNotEmpty(menuIds)) { + add.setMenuIds(StringUtils.join(menuIds, ", ")); + } else { + add.setMenuIds(""); + } + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setPackageId(add.getPackageId()); + } + return flag; + } + + /** + * 修改租户套餐 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(SysTenantPackageBo bo) { + SysTenantPackage update = BeanConvertUtil.convertTo(bo, SysTenantPackage::new); + // 保存菜单id + List menuIds = Arrays.asList(bo.getMenuIds()); + if (CollUtil.isNotEmpty(menuIds)) { + update.setMenuIds(StringUtils.join(menuIds, ", ")); + } else { + update.setMenuIds(""); + } + return baseMapper.updateById(update) > 0; + } + + /** + * 修改套餐状态 + * + * @param bo 套餐信息 + * @return 结果 + */ + @Override + public int updatePackageStatus(SysTenantPackageBo bo) { + SysTenantPackage tenantPackage = BeanConvertUtil.convertTo(bo, SysTenantPackage::new); + return baseMapper.updateById(tenantPackage); + } + + /** + * 批量删除租户套餐 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + boolean exists = tenantMapper.exists(new LambdaQueryWrapper().in(SysTenant::getPackageId, ids)); + if (exists) { + throw new ServiceException("租户套餐已被使用"); + } + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java new file mode 100644 index 0000000..943c887 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java @@ -0,0 +1,382 @@ +package com.ruoyi.system.service.impl; + +import cn.dev33.satoken.secure.BCrypt; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.component.core.constant.CacheNames; +import com.ruoyi.component.core.constant.Constants; +import com.ruoyi.component.core.constant.TenantConstants; +import com.ruoyi.component.core.exception.ServiceException; +import com.ruoyi.component.core.util.BeanConvertUtil; +import com.ruoyi.component.core.util.StringUtils; +import com.ruoyi.component.core.util.spring.SpringUtils; +import com.ruoyi.component.mybatis.core.page.PageQuery; +import com.ruoyi.component.mybatis.core.page.TableDataInfo; +import com.ruoyi.system.domain.*; +import com.ruoyi.system.domain.bo.SysTenantBo; +import com.ruoyi.system.domain.vo.SysTenantVo; +import com.ruoyi.system.mapper.*; +import com.ruoyi.system.service.ISysTenantService; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +/** + * 租户Service业务层处理 + * + * @author Michelle.Chung + */ +@Service +public class SysTenantServiceImpl implements ISysTenantService { + + @Resource + private SysTenantMapper baseMapper; + @Resource + private SysTenantPackageMapper tenantPackageMapper; + @Resource + private SysUserMapper userMapper; + @Resource + private SysDeptMapper deptMapper; + @Resource + private SysRoleMapper roleMapper; + @Resource + private SysRoleMenuMapper roleMenuMapper; + @Resource + private SysRoleDeptMapper roleDeptMapper; + @Resource + private SysUserRoleMapper userRoleMapper; + @Resource + private SysDictTypeMapper dictTypeMapper; + @Resource + private SysDictDataMapper dictDataMapper; + @Resource + private SysConfigMapper configMapper; + + /** + * 查询租户 + */ + @Override + public SysTenantVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 基于租户ID查询租户 + */ + @Cacheable(cacheNames = CacheNames.SYS_TENANT, key = "#tenantId") + @Override + public SysTenantVo queryByTenantId(String tenantId) { + return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(SysTenant::getTenantId, tenantId)); + } + + /** + * 查询租户列表 + */ + @Override + public TableDataInfo queryPageList(SysTenantBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询租户列表 + */ + @Override + public List queryList(SysTenantBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysTenantBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTenantId()), SysTenant::getTenantId, bo.getTenantId()); + lqw.like(StringUtils.isNotBlank(bo.getContactUserName()), SysTenant::getContactUserName, bo.getContactUserName()); + lqw.eq(StringUtils.isNotBlank(bo.getContactPhone()), SysTenant::getContactPhone, bo.getContactPhone()); + lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), SysTenant::getCompanyName, bo.getCompanyName()); + lqw.eq(StringUtils.isNotBlank(bo.getLicenseNumber()), SysTenant::getLicenseNumber, bo.getLicenseNumber()); + lqw.eq(StringUtils.isNotBlank(bo.getAddress()), SysTenant::getAddress, bo.getAddress()); + lqw.eq(StringUtils.isNotBlank(bo.getIntro()), SysTenant::getIntro, bo.getIntro()); + lqw.like(StringUtils.isNotBlank(bo.getDomain()), SysTenant::getDomain, bo.getDomain()); + lqw.eq(bo.getPackageId() != null, SysTenant::getPackageId, bo.getPackageId()); + lqw.eq(bo.getExpireTime() != null, SysTenant::getExpireTime, bo.getExpireTime()); + lqw.eq(bo.getAccountCount() != null, SysTenant::getAccountCount, bo.getAccountCount()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysTenant::getStatus, bo.getStatus()); + lqw.orderByAsc(SysTenant::getId); + return lqw; + } + + /** + * 新增租户 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(SysTenantBo bo) { + SysTenant add = BeanConvertUtil.convertTo(bo, SysTenant::new); + + // 获取所有租户编号 + List tenantIds = baseMapper.selectObjs( + new LambdaQueryWrapper().select(SysTenant::getTenantId)); + String tenantId = generateTenantId(tenantIds); + add.setTenantId(tenantId); + boolean flag = baseMapper.insert(add) > 0; + if (!flag) { + throw new ServiceException("创建租户失败"); + } + bo.setId(add.getId()); + + // 根据套餐创建角色 + Long roleId = createTenantRole(tenantId, bo.getPackageId()); + + // 创建部门: 公司名是部门名称 + SysDept dept = new SysDept(); + dept.setTenantId(tenantId); + dept.setDeptName(bo.getCompanyName()); + dept.setParentId(Constants.TOP_PARENT_ID); + dept.setAncestors(Constants.TOP_PARENT_ID.toString()); + deptMapper.insert(dept); + Long deptId = dept.getDeptId(); + + // 角色和部门关联表 + SysRoleDept roleDept = new SysRoleDept(); + roleDept.setRoleId(roleId); + roleDept.setDeptId(deptId); + roleDeptMapper.insert(roleDept); + + // 创建系统用户 + SysUser user = new SysUser(); + user.setTenantId(tenantId); + user.setUserName(bo.getUsername()); + user.setNickName(bo.getUsername()); + user.setPassword(BCrypt.hashpw(bo.getPassword())); + user.setDeptId(deptId); + userMapper.insert(user); + //新增系统用户后,默认当前用户为部门的负责人 + SysDept sd = new SysDept(); + sd.setLeader(user.getUserName()); + sd.setDeptId(deptId); + deptMapper.updateById(sd); + + // 用户和角色关联表 + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(user.getUserId()); + userRole.setRoleId(roleId); + userRoleMapper.insert(userRole); + + String defaultTenantId = TenantConstants.DEFAULT_TENANT_ID; + List dictTypeList = dictTypeMapper.selectList( + new LambdaQueryWrapper().eq(SysDictType::getTenantId, defaultTenantId)); + List dictDataList = dictDataMapper.selectList( + new LambdaQueryWrapper().eq(SysDictData::getTenantId, defaultTenantId)); + for (SysDictType dictType : dictTypeList) { + dictType.setDictId(null); + dictType.setTenantId(tenantId); + } + for (SysDictData dictData : dictDataList) { + dictData.setDictCode(null); + dictData.setTenantId(tenantId); + } + dictTypeMapper.insertBatch(dictTypeList); + dictDataMapper.insertBatch(dictDataList); + + List sysConfigList = configMapper.selectList( + new LambdaQueryWrapper().eq(SysConfig::getTenantId, defaultTenantId)); + for (SysConfig config : sysConfigList) { + config.setConfigId(null); + config.setTenantId(tenantId); + } + configMapper.insertBatch(sysConfigList); + return true; + } + + /** + * 生成租户id + * + * @param tenantIds 已有租户id列表 + * @return 租户id + */ + private String generateTenantId(List tenantIds) { + // 随机生成6位 + String numbers = RandomUtil.randomNumbers(6); + // 判断是否存在,如果存在则重新生成 + if (tenantIds.contains(numbers)) { + generateTenantId(tenantIds); + } + return numbers; + } + + /** + * 根据租户菜单创建租户角色 + * + * @param tenantId 租户编号 + * @param packageId 租户套餐id + * @return 角色id + */ + private Long createTenantRole(String tenantId, Long packageId) { + // 获取租户套餐 + SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId); + if (ObjectUtil.isNull(tenantPackage)) { + throw new ServiceException("套餐不存在"); + } + // 获取套餐菜单id + List menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong); + + // 创建角色 + SysRole role = new SysRole(); + role.setTenantId(tenantId); + role.setRoleName(TenantConstants.TENANT_ADMIN_ROLE_NAME); + role.setRoleKey(TenantConstants.TENANT_ADMIN_ROLE_KEY); + role.setRoleSort(1); + role.setStatus(TenantConstants.NORMAL); + roleMapper.insert(role); + Long roleId = role.getRoleId(); + + // 创建角色菜单 + List roleMenus = new ArrayList<>(menuIds.size()); + menuIds.forEach(menuId -> { + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(roleId); + roleMenu.setMenuId(menuId); + roleMenus.add(roleMenu); + }); + roleMenuMapper.insertBatch(roleMenus); + + return roleId; + } + + /** + * 修改租户 + */ + @CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId") + @Override + public Boolean updateByBo(SysTenantBo bo) { + SysTenant tenant = BeanConvertUtil.convertTo(bo, SysTenant::new); + tenant.setTenantId(null); + tenant.setPackageId(null); + return baseMapper.updateById(tenant) > 0; + } + + /** + * 修改租户状态 + * + * @param bo 租户信息 + * @return 结果 + */ + @CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId") + @Override + public int updateTenantStatus(SysTenantBo bo) { + SysTenant tenant = BeanConvertUtil.convertTo(bo, SysTenant::new); + return baseMapper.updateById(tenant); + } + + /** + * 校验租户是否允许操作 + * + * @param tenantId 租户ID + */ + @Override + public void checkTenantAllowed(String tenantId) { + if (ObjectUtil.isNotNull(tenantId) && TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { + throw new ServiceException("不允许操作管理租户"); + } + } + + /** + * 批量删除租户 + */ + @CacheEvict(cacheNames = CacheNames.SYS_TENANT, allEntries = true) + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // 做一些业务上的校验,判断是否需要校验 + if (ids.contains(TenantConstants.SUPER_ADMIN_ID)) { + throw new ServiceException("超管租户不能删除"); + } + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * 校验企业名称是否唯一 + */ + @Override + public boolean checkCompanyNameUnique(SysTenantBo bo) { + boolean exist = baseMapper.exists(new LambdaQueryWrapper() + .eq(SysTenant::getCompanyName, bo.getCompanyName()) + .ne(ObjectUtil.isNotNull(bo.getTenantId()), SysTenant::getTenantId, bo.getTenantId())); + return !exist; + } + + /** + * 校验账号余额 + */ + @Override + public boolean checkAccountBalance(String tenantId) { + SysTenantVo tenant = SpringUtils.getAopProxy(this).queryByTenantId(tenantId); + // 如果余额为-1代表不限制 + if (tenant.getAccountCount() == -1) { + return true; + } + Long userNumber = userMapper.selectCount(new LambdaQueryWrapper<>()); + // 如果余额大于0代表还有可用名额 + return tenant.getAccountCount() - userNumber > 0; + } + + /** + * 校验有效期 + */ + @Override + public boolean checkExpireTime(String tenantId) { + SysTenantVo tenant = SpringUtils.getAopProxy(this).queryByTenantId(tenantId); + // 如果未设置过期时间代表不限制 + if (ObjectUtil.isNull(tenant.getExpireTime())) { + return true; + } + // 如果当前时间在过期时间之前则通过 + return new Date().before(tenant.getExpireTime()); + } + + /** + * 同步租户套餐 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean syncTenantPackage(String tenantId, Long packageId) { + SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId); + List roles = roleMapper.selectList( + new LambdaQueryWrapper().eq(SysRole::getTenantId, tenantId)); + List roleIds = new ArrayList<>(roles.size() - 1); + List menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong); + roles.forEach(item -> { + if (TenantConstants.TENANT_ADMIN_ROLE_KEY.equals(item.getRoleKey())) { + List roleMenus = new ArrayList<>(menuIds.size()); + menuIds.forEach(menuId -> { + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(item.getRoleId()); + roleMenu.setMenuId(menuId); + roleMenus.add(roleMenu); + }); + roleMenuMapper.delete(new LambdaQueryWrapper().eq(SysRoleMenu::getRoleId, item.getRoleId())); + roleMenuMapper.insertBatch(roleMenus); + } else { + roleIds.add(item.getRoleId()); + } + }); + if (!roleIds.isEmpty()) { + roleMenuMapper.delete( + new LambdaQueryWrapper().in(SysRoleMenu::getRoleId, roleIds).notIn(!menuIds.isEmpty(), SysRoleMenu::getMenuId, menuIds)); + } + return true; + } +}