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