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}
+