MultiTenantHandler.java 1.5 KB
package com.tianting.infoloop.handler;

import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.tianting.infoloop.config.TenantProperties;
import com.tianting.infoloop.constants.ConfigConstants;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.schema.Column;

import java.util.List;

@Slf4j
public class MultiTenantHandler implements TenantLineHandler {

    private final TenantProperties properties;

    public MultiTenantHandler(TenantProperties properties) {
        this.properties = properties;
    }

    @Override
    public Expression getTenantId() {
        final var enterpriseId = ConfigConstants.ENTERPRISE_ID.get();
        if (enterpriseId != null) {
            return new LongValue(enterpriseId);
        }
        return null;
    }

    @Override
    public String getTenantIdColumn() {
        return properties.getColumn();
    }

    @Override
    public boolean ignoreTable(String tableName) {
        //忽略指定表对租户数据的过滤
        List<String> ignoreTables = properties.getIgnoreTables();
        return null != ignoreTables && ignoreTables.contains(tableName);
    }

    @Override
    public boolean ignoreInsert(List<Column> columns, String tenantIdColumn) {
        for (Column column : columns) {
            if (column.getColumnName().equals(tenantIdColumn)) {
                return true;
            }
        }
        return false;
    }
}