From 4494a005613728c9dc22d018bca42ef5d3ebcf69 Mon Sep 17 00:00:00 2001 From: xiejun <xiejun@vci-tech.com> Date: 星期二, 14 一月 2025 20:41:47 +0800 Subject: [PATCH] 产品型号集成,类型转换,人员组织加日志,申请接口引用码段值校验 --- Source/BladeX-Tool/blade-starter-tenant/src/main/java/org/springblade/core/tenant/BladeTenantHandler.java | 125 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 125 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-starter-tenant/src/main/java/org/springblade/core/tenant/BladeTenantHandler.java b/Source/BladeX-Tool/blade-starter-tenant/src/main/java/org/springblade/core/tenant/BladeTenantHandler.java new file mode 100644 index 0000000..ef2d7cb --- /dev/null +++ b/Source/BladeX-Tool/blade-starter-tenant/src/main/java/org/springblade/core/tenant/BladeTenantHandler.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 搴勯獮 (smallchill@163.com) + */ +package org.springblade.core.tenant; + +import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.StringValue; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tenant.annotation.TableExclude; +import org.springblade.core.tool.constant.BladeConstant; +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.SpringUtil; +import org.springblade.core.tool.utils.StringUtil; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.context.ApplicationContext; + +import java.util.*; + +/** + * 绉熸埛淇℃伅澶勭悊鍣� + * + * @author Chill, L.cm + */ +@Slf4j +@RequiredArgsConstructor +public class BladeTenantHandler implements TenantLineHandler, SmartInitializingSingleton { + /** + * 鍖归厤鐨勫绉熸埛琛� + */ + private final List<String> tenantTableList = new ArrayList<>(); + /** + * 闇�瑕佹帓闄よ繘琛岃嚜瀹氫箟鐨勫绉熸埛琛� + */ + private final List<String> excludeTableList = Arrays.asList("blade_user", "blade_dept", "blade_role", "blade_tenant", "act_de_model"); + /** + * 澶氱鎴烽厤缃� + */ + private final BladeTenantProperties tenantProperties; + + /** + * 鑾峰彇绉熸埛ID + * + * @return 绉熸埛ID + */ + @Override + public Expression getTenantId() { + return new StringValue(Func.toStr(AuthUtil.getTenantId(), BladeConstant.ADMIN_TENANT_ID)); + } + + /** + * 鑾峰彇绉熸埛瀛楁鍚嶇О + * + * @return 绉熸埛瀛楁鍚嶇О + */ + @Override + public String getTenantIdColumn() { + return tenantProperties.getColumn(); + } + + /** + * 鏍规嵁琛ㄥ悕鍒ゆ柇鏄惁蹇界暐鎷兼帴澶氱鎴锋潯浠� + * 榛樿閮借杩涜瑙f瀽骞舵嫾鎺ュ绉熸埛鏉′欢 + * + * @param tableName 琛ㄥ悕 + * @return 鏄惁蹇界暐, true:琛ㄧず蹇界暐锛宖alse:闇�瑕佽В鏋愬苟鎷兼帴澶氱鎴锋潯浠� + */ + @Override + public boolean ignoreTable(String tableName) { + if (BladeTenantHolder.isIgnore()) { + return true; + } + return !(tenantTableList.contains(tableName) && StringUtil.isNotBlank(AuthUtil.getTenantId())); + } + + @Override + public void afterSingletonsInstantiated() { + ApplicationContext context = SpringUtil.getContext(); + if (tenantProperties.getAnnotationExclude() && context != null) { + Map<String, Object> tables = context.getBeansWithAnnotation(TableExclude.class); + List<String> excludeTables = tenantProperties.getExcludeTables(); + for (Object o : tables.values()) { + TableExclude annotation = o.getClass().getAnnotation(TableExclude.class); + String value = annotation.value(); + excludeTables.add(value); + } + } + List<TableInfo> tableInfos = TableInfoHelper.getTableInfos(); + tableFor: + for (TableInfo tableInfo : tableInfos) { + String tableName = tableInfo.getTableName(); + if (tenantProperties.getExcludeTables().contains(tableName) || + excludeTableList.contains(tableName.toLowerCase()) || + excludeTableList.contains(tableName.toUpperCase())) { + continue; + } + List<TableFieldInfo> fieldList = tableInfo.getFieldList(); + for (TableFieldInfo fieldInfo : fieldList) { + String column = fieldInfo.getColumn(); + if (tenantProperties.getColumn().equals(column)) { + tenantTableList.add(tableName); + continue tableFor; + } + } + } + } +} -- Gitblit v1.9.3