|
|
@@ -1,131 +0,0 @@
|
|
|
-package com.zhongzheng.core.config;
|
|
|
-
|
|
|
-import com.baomidou.mybatisplus.core.parser.ISqlParser;
|
|
|
-import com.baomidou.mybatisplus.core.parser.ISqlParserFilter;
|
|
|
-import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
|
|
|
-import net.sf.jsqlparser.expression.Expression;
|
|
|
-import net.sf.jsqlparser.expression.LongValue;
|
|
|
-import org.apache.ibatis.mapping.MappedStatement;
|
|
|
-import org.apache.ibatis.reflection.MetaObject;
|
|
|
-import org.mybatis.spring.annotation.MapperScan;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.context.annotation.Bean;
|
|
|
-import org.springframework.context.annotation.Configuration;
|
|
|
-
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
-import java.util.*;
|
|
|
-
|
|
|
-/**
|
|
|
- * @author yangdamao
|
|
|
- * @date 2023年05月31日 15:03
|
|
|
- */
|
|
|
-@Configuration
|
|
|
-@MapperScan(basePackages = {"com.zhongzheng.modules.goods.mapper"})
|
|
|
-public class MybatisFilterConfig {
|
|
|
-
|
|
|
- @Autowired//自动注入request
|
|
|
- private HttpServletRequest request;
|
|
|
-
|
|
|
- private static final Map<String, String> IGNORE_TENANT_SMAP = new HashMap<String, String>() {{
|
|
|
- // 这些mapper 方法也不修改
|
|
|
-// put("com.test.first.dao.TestMapper.getId","");
|
|
|
-// put("com.test.first.dao.TestMapper.getId2","");
|
|
|
-// put("com.test.first.dao.TestMapper.getId3","");
|
|
|
- }};
|
|
|
-
|
|
|
- private static final HashSet<String> TABLE_FILTER = new HashSet();
|
|
|
-
|
|
|
- static {
|
|
|
- // 过滤表, 这些表不进行修改
|
|
|
- TABLE_FILTER.add("sys_tenant");
|
|
|
- TABLE_FILTER.add("top_merchant");
|
|
|
-// TABLE_FILTER.add("sys_user2");
|
|
|
- }
|
|
|
-
|
|
|
- @Bean
|
|
|
- @SuppressWarnings("all")
|
|
|
- public PaginationInterceptor paginationInterceptor() {
|
|
|
- PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
|
|
|
-
|
|
|
- // sql 解析器
|
|
|
- List<ISqlParser> sqlParserList = new ArrayList<>();
|
|
|
- TenantSqlParser tenantSqlParser = new TenantSqlParser();
|
|
|
- tenantSqlParser.setTenantHandler(new TenantHandler() {
|
|
|
-
|
|
|
- @Override
|
|
|
- public Expression getTenantId(boolean select) {
|
|
|
- // 此处返回sys_code 字段值, 修改sql时候的参数, 从session 里面获取用户,
|
|
|
- // 或者其他方式获取用户标识, 这里方便直接写死了
|
|
|
- String storeId = request.getHeader("StoreId");
|
|
|
- return new LongValue(StringUtils.isNotBlank(storeId)?storeId:"0");
|
|
|
- }
|
|
|
- @Override
|
|
|
- public String getTenantIdColumn() {
|
|
|
- // 返回增加条件的字段
|
|
|
- return "store_id";
|
|
|
- }
|
|
|
- @Override
|
|
|
- public boolean doTableFilter(String tableName) {
|
|
|
- // 这里可以判断是否过滤表
|
|
|
- // 对没有sys_code 的表格进行过滤
|
|
|
- if (TABLE_FILTER.contains(tableName) || StringUtils.isBlank(request.getHeader("StoreId"))) {
|
|
|
- // 返回true 则不过滤
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
- });
|
|
|
- // 添加到解析器, 如需添加多个, 这个地方是list, 多new几个, new TenantSqlParser(); 即可
|
|
|
- sqlParserList.add(tenantSqlParser);
|
|
|
-
|
|
|
- TenantSqlParser tenantSqlParser1 = new TenantSqlParser();
|
|
|
- tenantSqlParser1.setTenantHandler(new TenantHandler() {
|
|
|
- @Override
|
|
|
- public Expression getTenantId(boolean select) {
|
|
|
- // 此处返回sys_code 字段值, 修改sql时候的参数, 从session 里面获取用户,
|
|
|
- // 或者其他方式获取用户标识, 这里方便直接写死了
|
|
|
- String merId = request.getHeader("MerId");
|
|
|
- return new LongValue(StringUtils.isNotBlank(merId)?merId:"0");
|
|
|
- }
|
|
|
- @Override
|
|
|
- public String getTenantIdColumn() {
|
|
|
- // 返回增加条件的字段
|
|
|
- return "mer_id";
|
|
|
- }
|
|
|
- @Override
|
|
|
- public boolean doTableFilter(String tableName) {
|
|
|
- // 这里可以判断是否过滤表
|
|
|
- // 对没有sys_code 的表格进行过滤
|
|
|
- if (TABLE_FILTER.contains(tableName) || StringUtils.isBlank(request.getHeader("MerId"))) {
|
|
|
- // 返回true 则不过滤
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
- });
|
|
|
- sqlParserList.add(tenantSqlParser1);
|
|
|
-
|
|
|
- // 设置解析器集合
|
|
|
- paginationInterceptor.setSqlParserList(sqlParserList);
|
|
|
-
|
|
|
- // 过滤函数
|
|
|
- paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
|
|
|
- @Override
|
|
|
- public boolean doFilter(MetaObject metaObject) {
|
|
|
- MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
|
|
|
- // com.test.first.dao.TestMapper.getId 精确到mapper 方法级
|
|
|
- if (IGNORE_TENANT_SMAP.containsKey(ms.getId())) {
|
|
|
- // 不进行修改
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
- });
|
|
|
- return paginationInterceptor;
|
|
|
- }
|
|
|
-
|
|
|
-}
|