From 3624d5497386e300b96ddbba70e3e41f06341e1c Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Fri, 24 Sep 2021 17:40:45 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.1.3=E3=80=91=E3=80=90validator?= =?UTF-8?q?=E3=80=91@TableValidator=E5=88=86=E5=A4=9A=E7=A7=9F=E6=88=B7?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E5=BA=93=E7=9A=84=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ds-container-api/pom.xml | 7 ++++ kernel-d-validator/pom.xml | 1 + .../validator-api-table-unique/README.md | 1 + .../validator-api-table-unique/pom.xml | 37 +++++++++++++++++++ .../validators/unique/TableUniqueValue.java | 0 .../unique/TableUniqueValueValidator.java | 0 .../unique/constants/TenantConstants.java | 21 +++++++++++ .../service/TableUniqueValueService.java | 31 ++++++++++++++-- .../validator-spring-boot-starter/pom.xml | 7 ++++ kernel-s-system/system-api/pom.xml | 5 +++ 10 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 kernel-d-validator/validator-api-table-unique/README.md create mode 100644 kernel-d-validator/validator-api-table-unique/pom.xml rename kernel-d-validator/{validator-api => validator-api-table-unique}/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValue.java (100%) rename kernel-d-validator/{validator-api => validator-api-table-unique}/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValueValidator.java (100%) create mode 100644 kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/constants/TenantConstants.java rename kernel-d-validator/{validator-api => validator-api-table-unique}/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/service/TableUniqueValueService.java (82%) diff --git a/kernel-d-ds-container/ds-container-api/pom.xml b/kernel-d-ds-container/ds-container-api/pom.xml index d3844234a..6f9bad37e 100644 --- a/kernel-d-ds-container/ds-container-api/pom.xml +++ b/kernel-d-ds-container/ds-container-api/pom.xml @@ -24,6 +24,13 @@ ${roses.version} + + + cn.stylefeng.roses + validator-api-table-unique + ${roses.version} + + diff --git a/kernel-d-validator/pom.xml b/kernel-d-validator/pom.xml index a33912da2..72b959adb 100644 --- a/kernel-d-validator/pom.xml +++ b/kernel-d-validator/pom.xml @@ -17,6 +17,7 @@ validator-api + validator-api-table-unique validator-spring-boot-starter diff --git a/kernel-d-validator/validator-api-table-unique/README.md b/kernel-d-validator/validator-api-table-unique/README.md new file mode 100644 index 000000000..e4e570ea6 --- /dev/null +++ b/kernel-d-validator/validator-api-table-unique/README.md @@ -0,0 +1 @@ +将@TableUniqueValue注解的校验单独提出来 \ No newline at end of file diff --git a/kernel-d-validator/validator-api-table-unique/pom.xml b/kernel-d-validator/validator-api-table-unique/pom.xml new file mode 100644 index 000000000..6f96fe6f0 --- /dev/null +++ b/kernel-d-validator/validator-api-table-unique/pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + + cn.stylefeng.roses + kernel-d-validator + 7.1.3 + ../pom.xml + + + validator-api-table-unique + + jar + + + + + + cn.stylefeng.roses + validator-api + ${roses.version} + + + + + + cn.stylefeng.roses + auth-api + ${roses.version} + + + + + diff --git a/kernel-d-validator/validator-api/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValue.java b/kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValue.java similarity index 100% rename from kernel-d-validator/validator-api/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValue.java rename to kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValue.java diff --git a/kernel-d-validator/validator-api/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValueValidator.java b/kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValueValidator.java similarity index 100% rename from kernel-d-validator/validator-api/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValueValidator.java rename to kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/TableUniqueValueValidator.java diff --git a/kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/constants/TenantConstants.java b/kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/constants/TenantConstants.java new file mode 100644 index 000000000..20dc6ffd4 --- /dev/null +++ b/kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/constants/TenantConstants.java @@ -0,0 +1,21 @@ +package cn.stylefeng.roses.kernel.validator.api.validators.unique.constants; + +/** + * 租户数据常量,如果租户业务变了这里也需要修改 + * + * @author fengshuonan + * @date 2021/9/24 17:20 + */ +public interface TenantConstants { + + /** + * 租户库的前缀 + */ + String TENANT_DB_PREFIX = "sys_tenant_db_"; + + /** + * master数据源名称 + */ + String MASTER_DATASOURCE_NAME = "master"; + +} diff --git a/kernel-d-validator/validator-api/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/service/TableUniqueValueService.java b/kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/service/TableUniqueValueService.java similarity index 82% rename from kernel-d-validator/validator-api/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/service/TableUniqueValueService.java rename to kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/service/TableUniqueValueService.java index 90d994572..5c3c9390d 100644 --- a/kernel-d-validator/validator-api/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/service/TableUniqueValueService.java +++ b/kernel-d-validator/validator-api-table-unique/src/main/java/cn/stylefeng/roses/kernel/validator/api/validators/unique/service/TableUniqueValueService.java @@ -26,11 +26,14 @@ package cn.stylefeng.roses.kernel.validator.api.validators.unique.service; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; +import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.db.api.DbOperatorApi; import cn.stylefeng.roses.kernel.db.api.context.DbOperatorContext; import cn.stylefeng.roses.kernel.validator.api.exception.ParamValidateException; import cn.stylefeng.roses.kernel.validator.api.exception.enums.ValidatorExceptionEnum; import cn.stylefeng.roses.kernel.validator.api.pojo.UniqueValidateParam; +import cn.stylefeng.roses.kernel.validator.api.validators.unique.constants.TenantConstants; /** * 判断表中字段是否是唯一值的业务封装 @@ -66,7 +69,7 @@ public class TableUniqueValueService { if (!uniqueValidateParam.getExcludeCurrentRecord() && !uniqueValidateParam.getExcludeLogicDeleteItems()) { String sqlTemplate = "select count(*) from {} where {} = {0}"; - String finalSql = StrUtil.format(sqlTemplate, uniqueValidateParam.getTableName(), uniqueValidateParam.getColumnName()); + String finalSql = StrUtil.format(sqlTemplate, calcTenantTableName(uniqueValidateParam.getTableName()), uniqueValidateParam.getColumnName()); resultCount = dbOperatorApi.selectCount(finalSql, uniqueValidateParam.getValue()); } @@ -75,7 +78,7 @@ public class TableUniqueValueService { && uniqueValidateParam.getExcludeLogicDeleteItems()) { String sqlTemplate = "select count(*) from {} where {} = {0} and ({} is null or {} <> '{}')"; String finalSql = StrUtil.format(sqlTemplate, - uniqueValidateParam.getTableName(), + calcTenantTableName(uniqueValidateParam.getTableName()), uniqueValidateParam.getColumnName(), uniqueValidateParam.getLogicDeleteFieldName(), uniqueValidateParam.getLogicDeleteFieldName(), @@ -91,7 +94,7 @@ public class TableUniqueValueService { paramIdValidate(uniqueValidateParam); String sqlTemplate = "select count(*) from {} where {} = {0} and {} <> {1}"; - String finalSql = StrUtil.format(sqlTemplate, uniqueValidateParam.getTableName(), uniqueValidateParam.getColumnName(), uniqueValidateParam.getIdFieldName()); + String finalSql = StrUtil.format(sqlTemplate, calcTenantTableName(uniqueValidateParam.getTableName()), uniqueValidateParam.getColumnName(), uniqueValidateParam.getIdFieldName()); resultCount = dbOperatorApi.selectCount(finalSql, uniqueValidateParam.getValue(), uniqueValidateParam.getId()); } @@ -104,7 +107,7 @@ public class TableUniqueValueService { String sqlTemplate = "select count(*) from {} where {} = {0} and {} <> {1} and ({} is null or {} <> '{}')"; String finalSql = StrUtil.format(sqlTemplate, - uniqueValidateParam.getTableName(), + calcTenantTableName(uniqueValidateParam.getTableName()), uniqueValidateParam.getColumnName(), uniqueValidateParam.getIdFieldName(), uniqueValidateParam.getLogicDeleteFieldName(), @@ -148,4 +151,24 @@ public class TableUniqueValueService { } } + /** + * 计算携带租户code情况下的表名称 + * + * @author fengshuonan + * @date 2021/9/24 17:01 + */ + private static String calcTenantTableName(String originTableName) { + + // 获取租户编码 + LoginUser loginUser = LoginContext.me().getLoginUser(); + String tenantCode = loginUser.getTenantCode(); + + // 如果是主数据源可以忽略 + if (tenantCode == null || TenantConstants.MASTER_DATASOURCE_NAME.equals(tenantCode)) { + return originTableName; + } + + return TenantConstants.TENANT_DB_PREFIX + tenantCode + "." + originTableName; + } + } diff --git a/kernel-d-validator/validator-spring-boot-starter/pom.xml b/kernel-d-validator/validator-spring-boot-starter/pom.xml index 3724e0aa5..2bd1132c3 100644 --- a/kernel-d-validator/validator-spring-boot-starter/pom.xml +++ b/kernel-d-validator/validator-spring-boot-starter/pom.xml @@ -24,6 +24,13 @@ ${roses.version} + + + cn.stylefeng.roses + validator-api-table-unique + ${roses.version} + + org.springframework.boot diff --git a/kernel-s-system/system-api/pom.xml b/kernel-s-system/system-api/pom.xml index 0431c82d6..f4143e2ca 100644 --- a/kernel-s-system/system-api/pom.xml +++ b/kernel-s-system/system-api/pom.xml @@ -23,6 +23,11 @@ validator-api ${roses.version} + + cn.stylefeng.roses + validator-api-table-unique + ${roses.version} +