mirror of https://gitee.com/stylefeng/roses
【7.1.3】【validator】@TableValidator分多租户不同库的校验
parent
6877c71a9d
commit
3624d54973
|
@ -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>
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
<modules>
|
||||
<module>validator-api</module>
|
||||
<module>validator-api-table-unique</module>
|
||||
<module>validator-spring-boot-starter</module>
|
||||
</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.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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue