Browse Source

+ tenant 脚本自动生成

chen.cheng 2 months ago
parent
commit
e4c138f8bb
30 changed files with 336 additions and 69 deletions
  1. 4 0
      bd-park/park-backend/park-common/pom.xml
  2. 39 0
      bd-park/park-backend/park-common/src/main/java/com/huashe/park/common/animations/mybatis/MethodMetadataCache.java
  3. 68 0
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/BaseInterceptor.java
  4. 1 60
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/MybatisInterceptor.java
  5. 4 0
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/RegisterCustomerInterceptor.java
  6. 127 0
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/TenantSqlInterceptor.java
  7. 9 4
      common-application/pom.xml
  8. 1 1
      common-application/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
  9. 4 1
      common-application/ruoyi-framework/pom.xml
  10. 2 1
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenantUsrRel.java
  11. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
  12. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
  13. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
  14. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java
  15. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java
  16. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
  17. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
  18. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
  19. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java
  20. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java
  21. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
  22. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
  23. 4 1
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantMapper.java
  24. 2 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantUsrRelMapper.java
  25. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
  26. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
  27. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
  28. 11 0
      prod-common/src/main/java/com/huashe/common/annotation/mybatis/IgnoreTenant.java
  29. 14 0
      prod-common/src/main/java/com/huashe/common/annotation/mybatis/Tenant.java
  30. 1 1
      prod-common/src/main/java/com/huashe/common/annotation/mybatis/TenantField.java

+ 4 - 0
bd-park/park-backend/park-common/pom.xml

@@ -171,6 +171,10 @@
             <groupId>org.geotools</groupId>
             <artifactId>gt-epsg-hsql</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.huashe.common</groupId>
+            <artifactId>prod-commons</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

+ 39 - 0
bd-park/park-backend/park-common/src/main/java/com/huashe/park/common/animations/mybatis/MethodMetadataCache.java

@@ -0,0 +1,39 @@
+package com.huashe.park.common.animations.mybatis;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.ibatis.mapping.MappedStatement;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
+
+public class MethodMetadataCache {
+    private static final Map<String, List<Method>> cache = new ConcurrentHashMap<>();
+
+    public static List<Method> getAnnotatedMethods(MappedStatement mappedStatement) {
+
+        return cache.computeIfAbsent(mappedStatement.getId(), key -> {
+            try {
+                String methodId = mappedStatement.getId();
+                int lastDotIndex = methodId.lastIndexOf(".");
+                String className = methodId.substring(0, lastDotIndex);
+                Class<?> mapperClass = Class.forName(className);
+                if (mapperClass.isAnnotationPresent(IgnoreTenant.class)) {
+                    return Collections.emptyList();
+                }
+                List<Method> methods = new ArrayList<>();
+                Arrays.stream(mapperClass.getMethods()).filter(f -> !f.isAnnotationPresent(IgnoreTenant.class))
+                    .forEach(methods::add);
+                return Collections.unmodifiableList(methods);
+            }
+            catch (ClassNotFoundException e) {
+                return null;
+            }
+        });
+    }
+}

+ 68 - 0
bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/BaseInterceptor.java

@@ -0,0 +1,68 @@
+package com.huashe.park.infrastructure.cfg.mybatis;
+
+import com.huashe.common.annotation.mybatis.TenantField;
+import com.huashe.common.exception.ServiceException;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Slf4j
+public class BaseInterceptor {
+    public void setTenantField(Object parameter, Field field) {
+        TenantField annotation = field.getAnnotation(TenantField.class);
+        if (annotation != null) {
+            field.setAccessible(true);
+            try {
+                field.set(parameter, getLoginUser().getUser().getTenantId());
+            }
+            catch (Exception e) {
+                log.error("------MybatisInterceptor field.name------{},error:", field.getName(), e);
+            }
+            field.setAccessible(false);
+        }
+    }
+
+    public LoginUser getLoginUser() {
+        LoginUser userNow = new LoginUser();
+        userNow.setUser(new SysUser() {
+            {
+                setNickName(Thread.currentThread().getName());
+            }
+        });
+        try {
+            // try catch避免线程任务出错
+            userNow = SecurityUtils.getLoginUser() != null ? SecurityUtils.getLoginUser() : null;
+        }
+        catch (ServiceException e) {
+            log.debug("------MybatisInterceptor getLoginUser------");
+        }
+        return userNow;
+    }
+
+    /**
+     * 获取类的所有属性,包括父类
+     *
+     * @param object
+     * @return
+     */
+    public Field[] getAllFields(Object object) {
+        Class<?> clazz = object.getClass();
+        if (clazz == null) {
+            return null;
+        }
+        List<Field> fieldList = new ArrayList<>();
+        while (clazz != null) {
+            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
+            clazz = clazz.getSuperclass();
+        }
+        Field[] fields = new Field[fieldList.size()];
+        fieldList.toArray(fields);
+        return fields;
+    }
+}

+ 1 - 60
bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/MybatisInterceptor.java

@@ -1,10 +1,7 @@
 package com.huashe.park.infrastructure.cfg.mybatis;
 
 import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
-import java.util.List;
 
 import org.apache.ibatis.binding.MapperMethod;
 import org.apache.ibatis.binding.MapperMethod.ParamMap;
@@ -20,11 +17,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
-import com.huashe.common.annotation.TenantField;
-import com.huashe.common.exception.ServiceException;
-import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
-import com.ruoyi.common.utils.SecurityUtils;
 
 @Component
 @Intercepts({
@@ -32,7 +25,7 @@ import com.ruoyi.common.utils.SecurityUtils;
         MappedStatement.class, Object.class
     })
 })
-public class MybatisInterceptor implements Interceptor {
+public class MybatisInterceptor extends BaseInterceptor implements Interceptor {
     private static final Logger log = LoggerFactory.getLogger(MybatisInterceptor.class);
 
     @Override
@@ -153,56 +146,4 @@ public class MybatisInterceptor implements Interceptor {
         return Plugin.wrap(target, this);
     }
 
-    private void setTenantField(Object parameter, Field field) {
-        TenantField annotation = field.getAnnotation(TenantField.class);
-        if (annotation != null) {
-            field.setAccessible(true);
-            try {
-                field.set(parameter, getLoginUser().getUser().getTenantId());
-            }
-            catch (Exception e) {
-                log.error("------MybatisInterceptor field.name------{},error:", field.getName(), e);
-            }
-            field.setAccessible(false);
-        }
-    }
-
-    private LoginUser getLoginUser() {
-        LoginUser userNow = new LoginUser();
-        userNow.setUser(new SysUser() {
-            {
-                setNickName(Thread.currentThread().getName());
-            }
-        });
-        try {
-            // try catch避免线程任务出错
-            userNow = SecurityUtils.getLoginUser() != null ? SecurityUtils.getLoginUser() : null;
-        }
-        catch (ServiceException e) {
-            log.debug("------MybatisInterceptor getLoginUser------");
-        }
-        return userNow;
-    }
-
-    /**
-     * 获取类的所有属性,包括父类
-     *
-     * @param object
-     * @return
-     */
-    public Field[] getAllFields(Object object) {
-        Class<?> clazz = object.getClass();
-        if (clazz == null) {
-            return null;
-        }
-        List<Field> fieldList = new ArrayList<>();
-        while (clazz != null) {
-            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
-            clazz = clazz.getSuperclass();
-        }
-        Field[] fields = new Field[fieldList.size()];
-        fieldList.toArray(fields);
-        return fields;
-    }
-
 }

+ 4 - 0
bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/RegisterCustomerInterceptor.java

@@ -17,6 +17,9 @@ public class RegisterCustomerInterceptor implements ApplicationListener<ContextR
     private MybatisInterceptor mybatisInterceptor;
 
     @Autowired
+    private TenantSqlInterceptor tenantSqlInterceptor;
+
+    @Autowired
     private List<SqlSessionFactory> sqlSessionFactories;
 
     @Override
@@ -27,6 +30,7 @@ public class RegisterCustomerInterceptor implements ApplicationListener<ContextR
             // 这里注册只能是已经是默认转换完了在进行转换,可以转换同类型的字段比如字段的加解密
             // factory.getConfiguration().getTypeHandlerRegistry().register(new MySqlJsonHandler<>());
             // 由于mybatis拦截器使用责任链模式,有可能会导致自定义拦截器失效,因此下面方法可以将自定义拦截器重新注入到sql中
+            factory.getConfiguration().addInterceptor(tenantSqlInterceptor);
             factory.getConfiguration().addInterceptor(mybatisInterceptor);
             // factory.getConfiguration().addInterceptor(new FieldConvertInterceptor());
         }

+ 127 - 0
bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/TenantSqlInterceptor.java

@@ -0,0 +1,127 @@
+package com.huashe.park.infrastructure.cfg.mybatis;
+
+import java.lang.reflect.Method;
+import java.sql.Connection;
+import java.util.List;
+import java.util.Properties;
+
+import com.huashe.common.annotation.mybatis.Tenant;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.plugin.Intercepts;
+import org.apache.ibatis.plugin.Invocation;
+import org.apache.ibatis.plugin.Plugin;
+import org.apache.ibatis.plugin.Signature;
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.reflection.SystemMetaObject;
+import org.springframework.stereotype.Component;
+
+import com.huashe.park.common.animations.mybatis.MethodMetadataCache;
+
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.JdbcParameter;
+import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
+import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
+import net.sf.jsqlparser.parser.CCJSqlParserUtil;
+import net.sf.jsqlparser.schema.Column;
+import net.sf.jsqlparser.statement.Statement;
+import net.sf.jsqlparser.statement.select.PlainSelect;
+import net.sf.jsqlparser.statement.select.Select;
+import net.sf.jsqlparser.statement.select.SelectBody;
+
+@Intercepts({
+    @Signature(type = StatementHandler.class, method = "prepare", args = {
+        Connection.class, Integer.class
+    })
+})
+@Component
+public class TenantSqlInterceptor extends BaseInterceptor implements Interceptor {
+
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        StatementHandler handler = (StatementHandler) invocation.getTarget();
+        MetaObject metaObject = SystemMetaObject.forObject(handler);
+
+        // 获取原始 SQL 和 MappedStatement
+        String originalSql = (String) metaObject.getValue("delegate.boundSql.sql");
+        MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
+        Method mapperMethod = getMapperMethod(mappedStatement);
+        // 判断是否需要添加租户条件
+        if (ObjectUtils.isNotEmpty(mapperMethod)) {
+
+            // 解析 SQL 语法树
+            Statement stmt = CCJSqlParserUtil.parse(originalSql);
+            if (stmt instanceof Select) {
+                Select select = (Select) stmt;
+                SelectBody selectBody = select.getSelectBody();
+                if (selectBody instanceof PlainSelect) {
+                    PlainSelect plainSelect = (PlainSelect) selectBody;
+                    // 构建租户条件表达式(tenant_id = ?)
+                    EqualsTo tenantCondition = new EqualsTo();
+                    tenantCondition.setLeftExpression(handleColumn(mapperMethod));
+                    tenantCondition.setRightExpression(new JdbcParameter());
+
+                    // 修改 WHERE 条件
+                    Expression where = plainSelect.getWhere();
+                    if (where == null) {
+                        // 没有 WHERE 子句时直接添加
+                        plainSelect.setWhere(tenantCondition);
+                    }
+                    else {
+                        // 已有 WHERE 子句时用 AND 连接
+                        AndExpression and = new AndExpression(where, tenantCondition);
+                        plainSelect.setWhere(and);
+                    }
+
+                    // 生成修改后的 SQL
+                    String modifiedSql = plainSelect.toString();
+                    metaObject.setValue("delegate.boundSql.sql", modifiedSql);
+
+                    // 添加租户参数(动态绑定到 PreparedStatement)
+                    List<Object> parameters = (List<Object>) metaObject.getValue("delegate.boundSql.parameterObject");
+
+                    parameters.add(getLoginUser().getUser().getTenantId()); // 租户值
+                }
+            }
+        }
+
+        return invocation.proceed();
+    }
+
+    private Method getMapperMethod(MappedStatement mappedStatement) {
+        String methodId = mappedStatement.getId();
+        int lastDotIndex = methodId.lastIndexOf(".");
+        String methodName = methodId.substring(lastDotIndex + 1);
+        List<Method> annotatedMethods = MethodMetadataCache.getAnnotatedMethods(mappedStatement);
+        if (methodName.endsWith("_COUNT")) {
+            methodName = methodName.replaceFirst("_COUNT", "");
+        }
+        String finalMethodName = methodName;
+        return annotatedMethods.stream().filter(method -> method.getName().equals(finalMethodName)).findFirst()
+            .orElse(null);
+    }
+
+    private Column handleColumn(Method mapperMethod) {
+        Tenant annotation = mapperMethod.getAnnotation(Tenant.class);
+        if (ObjectUtils.isNotEmpty(annotation)) {
+            if (ObjectUtils.isNotEmpty(annotation.tableAlias())) {
+                return new Column(String.format("%s.%s", annotation.tableAlias(), annotation.field()));
+            }
+            return new Column(annotation.field());
+        }
+        else {
+            return new Column("tenant_id");
+        }
+    }
+
+    @Override
+    public Object plugin(Object target) {
+        return Plugin.wrap(target, this);
+    }
+
+    @Override
+    public void setProperties(Properties properties) {
+    }
+}

+ 9 - 4
common-application/pom.xml

@@ -2,8 +2,8 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	
+    <modelVersion>4.0.0</modelVersion>
+
     <groupId>com.huashe.application</groupId>
     <artifactId>common-application</artifactId>
     <version>3.8.8</version>
@@ -11,7 +11,7 @@
     <name>common-application</name>
 
     <description>公共组件-单体应用版</description>
-    
+
     <properties>
         <ruoyi.version>3.8.8</ruoyi.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -36,6 +36,7 @@
         <spring-security.version>5.7.12</spring-security.version>
         <spring-framework.version>5.3.39</spring-framework.version>
         <prod.commons.version>1.0-SNAPSHOT</prod.commons.version>
+        <jsqlparser.version>4.6</jsqlparser.version>
     </properties>
 
     <!-- 依赖声明 -->
@@ -224,7 +225,11 @@
                 <artifactId>prod-commons</artifactId>
                 <version>${prod.commons.version}</version>
             </dependency>
-
+            <dependency>
+                <groupId>com.github.jsqlparser</groupId>
+                <artifactId>jsqlparser</artifactId>
+                <version>${jsqlparser.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 

+ 1 - 1
common-application/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -4,7 +4,7 @@ import com.huashe.common.annotation.Excel;
 import com.huashe.common.annotation.Excel.ColumnType;
 import com.huashe.common.annotation.Excel.Type;
 import com.huashe.common.annotation.Excels;
-import com.huashe.common.annotation.TenantField;
+import com.huashe.common.annotation.mybatis.TenantField;
 import com.huashe.common.domain.BaseEntity;
 import com.ruoyi.common.xss.Xss;
 import org.apache.commons.lang3.builder.ToStringBuilder;

+ 4 - 1
common-application/ruoyi-framework/pom.xml

@@ -52,7 +52,10 @@
             <groupId>com.github.oshi</groupId>
             <artifactId>oshi-core</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>com.github.jsqlparser</groupId>
+            <artifactId>jsqlparser</artifactId>
+        </dependency>
         <!-- 系统模块-->
         <dependency>
             <groupId>com.huashe.application</groupId>

+ 2 - 1
common-application/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenantUsrRel.java

@@ -1,6 +1,7 @@
 package com.ruoyi.system.domain;
 
-import com.huashe.common.annotation.TenantField;
+
+import com.huashe.common.annotation.mybatis.TenantField;
 
 public class SysTenantUsrRel {
     private Long id;

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysConfig;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.system.domain.SysConfig;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysConfigMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import org.apache.ibatis.annotations.Param;
 import com.ruoyi.common.core.domain.entity.SysDept;
 
@@ -9,6 +11,7 @@ import com.ruoyi.common.core.domain.entity.SysDept;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysDeptMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import org.apache.ibatis.annotations.Param;
 import com.ruoyi.common.core.domain.entity.SysDictData;
 
@@ -9,6 +11,7 @@ import com.ruoyi.common.core.domain.entity.SysDictData;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysDictDataMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.common.core.domain.entity.SysDictType;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.common.core.domain.entity.SysDictType;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysDictTypeMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysLogininfor;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.system.domain.SysLogininfor;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysLogininforMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import org.apache.ibatis.annotations.Param;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 
@@ -9,6 +11,7 @@ import com.ruoyi.common.core.domain.entity.SysMenu;
  *
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysMenuMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysNotice;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.system.domain.SysNotice;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysNoticeMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysOperLog;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.system.domain.SysOperLog;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysOperLogMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysPost;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.system.domain.SysPost;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysPostMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysRoleDept;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.system.domain.SysRoleDept;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysRoleDeptMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.common.core.domain.entity.SysRole;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.common.core.domain.entity.SysRole;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysRoleMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysRoleMenu;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.system.domain.SysRoleMenu;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysRoleMenuMapper
 {
     /**

+ 4 - 1
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantMapper.java

@@ -1,5 +1,6 @@
 package com.ruoyi.system.mapper;
 
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysTenant;
 
 import java.util.List;
@@ -9,12 +10,14 @@ import java.util.List;
  *
  * @author ruoyi
  */
+
+@IgnoreTenant
 public interface SysTenantMapper {
+
     List<SysTenant> selectTenantList(SysTenant sysTenant);
 
     SysTenant selectTenantById(Long id);
 
-
     int insertTenant(SysTenant sysTenant);
 
     int updateTenant(SysTenant sysTenant);

+ 2 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantUsrRelMapper.java

@@ -1,5 +1,6 @@
 package com.ruoyi.system.mapper;
 
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysTenantUsrRel;
 
 import java.util.List;
@@ -9,6 +10,7 @@ import java.util.List;
  *
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysTenantUsrRelMapper {
 
     List<SysTenantUsrRel> selectTenantUsrRelList(SysTenantUsrRel sysTenantUsrRel);

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import org.apache.ibatis.annotations.Param;
 import com.ruoyi.common.core.domain.entity.SysUser;
 
@@ -9,6 +11,7 @@ import com.ruoyi.common.core.domain.entity.SysUser;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysUserMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import com.ruoyi.system.domain.SysUserPost;
 
 /**
@@ -8,6 +10,7 @@ import com.ruoyi.system.domain.SysUserPost;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysUserPostMapper
 {
     /**

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.huashe.common.annotation.mybatis.IgnoreTenant;
 import org.apache.ibatis.annotations.Param;
 import com.ruoyi.system.domain.SysUserRole;
 
@@ -9,6 +11,7 @@ import com.ruoyi.system.domain.SysUserRole;
  * 
  * @author ruoyi
  */
+@IgnoreTenant
 public interface SysUserRoleMapper
 {
     /**

+ 11 - 0
prod-common/src/main/java/com/huashe/common/annotation/mybatis/IgnoreTenant.java

@@ -0,0 +1,11 @@
+package com.huashe.common.annotation.mybatis;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.TYPE})
+public @interface IgnoreTenant {
+}

+ 14 - 0
prod-common/src/main/java/com/huashe/common/annotation/mybatis/Tenant.java

@@ -0,0 +1,14 @@
+package com.huashe.common.annotation.mybatis;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface Tenant {
+    String field() default "tenant_id";
+
+    String tableAlias() default "";
+}

+ 1 - 1
prod-common/src/main/java/com/huashe/common/annotation/TenantField.java → prod-common/src/main/java/com/huashe/common/annotation/mybatis/TenantField.java

@@ -1,4 +1,4 @@
-package com.huashe.common.annotation;
+package com.huashe.common.annotation.mybatis;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;