【7.1.3】【validator】@TableValidator分多租户不同库的校验

pull/22/head
fengshuonan 2021-09-24 17:40:45 +08:00
parent 6877c71a9d
commit 3624d54973
10 changed files with 106 additions and 4 deletions

View File

@ -24,6 +24,13 @@
<version>${roses.version}</version>
</dependency>
<!--参数校验模块-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>validator-api-table-unique</artifactId>
<version>${roses.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -17,6 +17,7 @@
<modules>
<module>validator-api</module>
<module>validator-api-table-unique</module>
<module>validator-spring-boot-starter</module>
</modules>

View File

@ -0,0 +1 @@
将@TableUniqueValue注解的校验单独提出来

View File

@ -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>

View File

@ -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";
}

View File

@ -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;
}
}

View File

@ -24,6 +24,13 @@
<version>${roses.version}</version>
</dependency>
<!--参数校验-校验table内编码唯一的-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>validator-api-table-unique</artifactId>
<version>${roses.version}</version>
</dependency>
<!--web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -23,6 +23,11 @@
<artifactId>validator-api</artifactId>
<version>${roses.version}</version>
</dependency>
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>validator-api-table-unique</artifactId>
<version>${roses.version}</version>
</dependency>
<!--config模块的api-->
<dependency>