mirror of https://gitee.com/stylefeng/roses
【7.1.3】【validator】@TableValidator分多租户不同库的校验
parent
6877c71a9d
commit
3624d54973
|
@ -24,6 +24,13 @@
|
||||||
<version>${roses.version}</version>
|
<version>${roses.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--参数校验模块-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.stylefeng.roses</groupId>
|
||||||
|
<artifactId>validator-api-table-unique</artifactId>
|
||||||
|
<version>${roses.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
<module>validator-api</module>
|
<module>validator-api</module>
|
||||||
|
<module>validator-api-table-unique</module>
|
||||||
<module>validator-spring-boot-starter</module>
|
<module>validator-spring-boot-starter</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
将@TableUniqueValue注解的校验单独提出来
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>cn.stylefeng.roses</groupId>
|
||||||
|
<artifactId>kernel-d-validator</artifactId>
|
||||||
|
<version>7.1.3</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>validator-api-table-unique</artifactId>
|
||||||
|
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- 参数校验主api -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.stylefeng.roses</groupId>
|
||||||
|
<artifactId>validator-api</artifactId>
|
||||||
|
<version>${roses.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- auth-api -->
|
||||||
|
<!-- 校验过程中需要拿到当前用户的租户编码 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.stylefeng.roses</groupId>
|
||||||
|
<artifactId>auth-api</artifactId>
|
||||||
|
<version>${roses.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
|
@ -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";
|
||||||
|
|
||||||
|
}
|
|
@ -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.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
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.DbOperatorApi;
|
||||||
import cn.stylefeng.roses.kernel.db.api.context.DbOperatorContext;
|
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.ParamValidateException;
|
||||||
import cn.stylefeng.roses.kernel.validator.api.exception.enums.ValidatorExceptionEnum;
|
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.pojo.UniqueValidateParam;
|
||||||
|
import cn.stylefeng.roses.kernel.validator.api.validators.unique.constants.TenantConstants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断表中字段是否是唯一值的业务封装
|
* 判断表中字段是否是唯一值的业务封装
|
||||||
|
@ -66,7 +69,7 @@ public class TableUniqueValueService {
|
||||||
if (!uniqueValidateParam.getExcludeCurrentRecord()
|
if (!uniqueValidateParam.getExcludeCurrentRecord()
|
||||||
&& !uniqueValidateParam.getExcludeLogicDeleteItems()) {
|
&& !uniqueValidateParam.getExcludeLogicDeleteItems()) {
|
||||||
String sqlTemplate = "select count(*) from {} where {} = {0}";
|
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());
|
resultCount = dbOperatorApi.selectCount(finalSql, uniqueValidateParam.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +78,7 @@ public class TableUniqueValueService {
|
||||||
&& uniqueValidateParam.getExcludeLogicDeleteItems()) {
|
&& uniqueValidateParam.getExcludeLogicDeleteItems()) {
|
||||||
String sqlTemplate = "select count(*) from {} where {} = {0} and ({} is null or {} <> '{}')";
|
String sqlTemplate = "select count(*) from {} where {} = {0} and ({} is null or {} <> '{}')";
|
||||||
String finalSql = StrUtil.format(sqlTemplate,
|
String finalSql = StrUtil.format(sqlTemplate,
|
||||||
uniqueValidateParam.getTableName(),
|
calcTenantTableName(uniqueValidateParam.getTableName()),
|
||||||
uniqueValidateParam.getColumnName(),
|
uniqueValidateParam.getColumnName(),
|
||||||
uniqueValidateParam.getLogicDeleteFieldName(),
|
uniqueValidateParam.getLogicDeleteFieldName(),
|
||||||
uniqueValidateParam.getLogicDeleteFieldName(),
|
uniqueValidateParam.getLogicDeleteFieldName(),
|
||||||
|
@ -91,7 +94,7 @@ public class TableUniqueValueService {
|
||||||
paramIdValidate(uniqueValidateParam);
|
paramIdValidate(uniqueValidateParam);
|
||||||
|
|
||||||
String sqlTemplate = "select count(*) from {} where {} = {0} and {} <> {1}";
|
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());
|
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 sqlTemplate = "select count(*) from {} where {} = {0} and {} <> {1} and ({} is null or {} <> '{}')";
|
||||||
String finalSql = StrUtil.format(sqlTemplate,
|
String finalSql = StrUtil.format(sqlTemplate,
|
||||||
uniqueValidateParam.getTableName(),
|
calcTenantTableName(uniqueValidateParam.getTableName()),
|
||||||
uniqueValidateParam.getColumnName(),
|
uniqueValidateParam.getColumnName(),
|
||||||
uniqueValidateParam.getIdFieldName(),
|
uniqueValidateParam.getIdFieldName(),
|
||||||
uniqueValidateParam.getLogicDeleteFieldName(),
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -24,6 +24,13 @@
|
||||||
<version>${roses.version}</version>
|
<version>${roses.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--参数校验-校验table内编码唯一的-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.stylefeng.roses</groupId>
|
||||||
|
<artifactId>validator-api-table-unique</artifactId>
|
||||||
|
<version>${roses.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!--web模块-->
|
<!--web模块-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
|
|
@ -23,6 +23,11 @@
|
||||||
<artifactId>validator-api</artifactId>
|
<artifactId>validator-api</artifactId>
|
||||||
<version>${roses.version}</version>
|
<version>${roses.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.stylefeng.roses</groupId>
|
||||||
|
<artifactId>validator-api-table-unique</artifactId>
|
||||||
|
<version>${roses.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!--config模块的api-->
|
<!--config模块的api-->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
Loading…
Reference in New Issue