feat: 新增统一数据空间与联邦查询能力

- 提供数据连接、元数据、逻辑表与关联编排能力

- 接入联邦查询、执行分析、统计估算和 SQL 补全接口

- 增加查询预算、凭据保护、租户隔离和 V61 初始化迁移
This commit is contained in:
2026-08-25 01:04:45 +08:00
parent 9068d42f4d
commit c27e97bcc2
71 changed files with 7544 additions and 1 deletions

View File

@@ -4,8 +4,16 @@ import com.mybatisflex.core.FlexGlobalConfig;
import com.mybatisflex.core.audit.AuditManager;
import com.mybatisflex.core.audit.ConsoleMessageCollector;
import com.mybatisflex.core.audit.MessageCollector;
import com.mybatisflex.core.tenant.TenantManager;
import com.mybatisflex.spring.boot.MyBatisFlexCustomizer;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.exception.NotWebContextException;
import cn.dev33.satoken.exception.SaTokenContextException;
import cn.dev33.satoken.context.SaHolder;
import java.math.BigInteger;
import org.springframework.context.annotation.Configuration;
import tech.easyflow.common.entity.LoginAccount;
import tech.easyflow.common.satoken.util.SaTokenUtil;
@Configuration
public class MybatisConfig implements MyBatisFlexCustomizer {
@@ -20,6 +28,9 @@ public class MybatisConfig implements MyBatisFlexCustomizer {
flexGlobalConfig.setNormalValueOfLogicDelete(0);
flexGlobalConfig.setDeletedValueOfLogicDelete(1);
// 登录请求自动追加 tenant_id 条件;系统任务没有登录上下文时保持显式全局语义。
TenantManager.setTenantFactory(this::currentTenantIds);
//取消控制台的 Banner 打印
flexGlobalConfig.setPrintBanner(false);
@@ -27,4 +38,24 @@ public class MybatisConfig implements MyBatisFlexCustomizer {
MessageCollector collector = new ConsoleMessageCollector();
AuditManager.setMessageCollector(collector);
}
/**
* 返回当前请求的租户条件;启动与调度线程没有 Sa-Token 上下文时保留系统级查询语义。
*
* @return 当前租户 ID 数组;没有请求登录上下文时返回 {@code null}
*/
private Object[] currentTenantIds() {
try {
if (!SaHolder.getContext().isValid() || !StpUtil.isLogin()) {
return null;
}
LoginAccount account = SaTokenUtil.getLoginAccount();
BigInteger tenantId = account == null || account.getTenantId() == null
? BigInteger.ZERO : account.getTenantId();
return new Object[]{tenantId};
} catch (NotWebContextException | SaTokenContextException ignored) {
// Bean 初始化与调度线程没有 Web 上下文,必须允许显式系统任务读取全局状态。
return null;
}
}
}