Преглед изворни кода

+ 脚手架支持多租户

chen.cheng пре 3 месеци
родитељ
комит
e25d55e3e1
17 измењених фајлова са 72 додато и 250 уклоњено
  1. 3 1
      bd-park/park-backend/park-common/src/main/java/com/huashe/park/common/animations/mybatis/emuns/FieldConvert.java
  2. 0 97
      bd-park/park-backend/park-common/src/main/java/com/huashe/park/common/animations/mybatis/handler/MySqlJsonHandler.java
  3. 0 91
      bd-park/park-backend/park-core/src/main/java/com/huashe/park/core/typehandle/MySqlJsonHandler.java
  4. 0 3
      bd-park/park-backend/park-domain/src/main/java/com/huashe/park/domain/entity/MachineProcessResult.java
  5. 0 5
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/FieldConvertInterceptor.java
  6. 24 11
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/MybatisInterceptor.java
  7. 1 1
      bd-park/park-backend/park-infrastructure/src/main/java/com/huashe/park/infrastructure/cfg/mybatis/ResultTypeConvertInterceptor.java
  8. 2 8
      common-application/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  9. 2 0
      common-application/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
  10. 17 16
      common-application/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java
  11. 3 0
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenantUsrRel.java
  12. 1 1
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java
  13. 1 1
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
  14. 1 1
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantDefServiceImpl.java
  15. 1 2
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java
  16. 4 12
      common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  17. 12 0
      prod-common/src/main/java/com/huashe/common/annotation/TenantField.java

+ 3 - 1
bd-park/park-backend/park-common/src/main/java/com/huashe/park/common/animations/mybatis/FieldConvert.java → bd-park/park-backend/park-common/src/main/java/com/huashe/park/common/animations/mybatis/emuns/FieldConvert.java

@@ -1,6 +1,8 @@
-package com.huashe.park.common.animations.mybatis;
+package com.huashe.park.common.animations.mybatis.emuns;
 
 
+import com.huashe.park.common.animations.mybatis.Converter;
+
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;

+ 0 - 97
bd-park/park-backend/park-common/src/main/java/com/huashe/park/common/animations/mybatis/handler/MySqlJsonHandler.java

@@ -1,97 +0,0 @@
-package com.huashe.park.common.animations.mybatis.handler;
-
-import java.sql.CallableStatement;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.ibatis.type.BaseTypeHandler;
-import org.apache.ibatis.type.JdbcType;
-import org.apache.ibatis.type.MappedTypes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.alibaba.fastjson2.JSONWriter;
-
-/**
- * @author fuwu314
- * @describe:mysqlJson类型处理类
- * @date 2024/9/18
- */
-@MappedTypes(JSONObject.class)
-public class MySqlJsonHandler<T extends Object> extends BaseTypeHandler<T> {
-    private final static Logger log = LoggerFactory.getLogger(MySqlJsonHandler.class);
-
-    private Class<T> clazz;
-
-    public MySqlJsonHandler() {
-    }
-
-    public MySqlJsonHandler(Class<T> clazz) {
-        if (clazz == null)
-            throw new IllegalArgumentException("Type argument cannot be null");
-        this.clazz = clazz;
-    }
-
-    @Override
-    public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
-        ps.setString(i, this.toJson(parameter));
-    }
-
-    @Override
-    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
-        return this.toObject(rs.getString(columnName), clazz);
-    }
-
-    @Override
-    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
-        return this.toObject(rs.getString(columnIndex), clazz);
-    }
-
-    @Override
-    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
-        return this.toObject(cs.getString(columnIndex), clazz);
-    }
-
-    /**
-     * 将字符串内容转换为指定类型的对象
-     *
-     * @param content 字符串内容
-     * @param clazz 目标类型
-     * @return 目标类型的对象
-     */
-    private T toObject(String content, Class<T> clazz) {
-        if (content != null && !content.isEmpty()) {
-            try {
-                return JSON.parseObject(content, clazz);
-            }
-            catch (Exception e) {
-                log.error("解析JSON字符串出错", e);
-                return null;
-            }
-        }
-        else {
-            return null;
-        }
-    }
-
-    /**
-     * 将对象转换为JSON字符串
-     *
-     * @param object 要转换的对象
-     * @return JSON字符串
-     * @throws RuntimeException 如果转换过程中发生异常
-     */
-    private String toJson(T object) {
-        try {
-            return JSON.toJSONString(object, JSONWriter.Feature.WriteMapNullValue);
-        }
-        catch (Exception e) {
-            log.error("解析JSON字符串出错", e);
-            return "[]";
-        }
-    }
-
-}

+ 0 - 91
bd-park/park-backend/park-core/src/main/java/com/huashe/park/core/typehandle/MySqlJsonHandler.java

@@ -1,91 +0,0 @@
-package com.huashe.park.core.typehandle;
-
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
-import com.alibaba.fastjson2.JSONWriter;
-import org.apache.ibatis.type.BaseTypeHandler;
-import org.apache.ibatis.type.JdbcType;
-import org.apache.ibatis.type.MappedTypes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.CallableStatement;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-/**
- * @author fuwu314
- * @describe:mysqlJson类型处理类
- * @date 2024/9/18
- */
-@MappedTypes(JSONObject.class)
-public class MySqlJsonHandler<T extends Object> extends BaseTypeHandler<T> {
-    private final static Logger log = LoggerFactory.getLogger(MySqlJsonHandler.class);
-    private Class<T> clazz;
-
-    public MySqlJsonHandler(Class<T> clazz) {
-        if (clazz == null) throw new IllegalArgumentException("Type argument cannot be null");
-        this.clazz = clazz;
-    }
-
-    @Override
-    public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
-        ps.setString(i, this.toJson(parameter));
-    }
-
-    @Override
-    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
-        return this.toObject(rs.getString(columnName), clazz);
-    }
-
-    @Override
-    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
-        return this.toObject(rs.getString(columnIndex), clazz);
-    }
-
-    @Override
-    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
-        return this.toObject(cs.getString(columnIndex), clazz);
-    }
-
-    /**
-     * 将字符串内容转换为指定类型的对象
-     *
-     * @param content 字符串内容
-     * @param clazz   目标类型
-     * @return 目标类型的对象
-     */
-    private T toObject(String content, Class<T> clazz) {
-        if (content != null && !content.isEmpty()) {
-            try {
-                return JSON.parseObject(content, clazz);
-            } catch (Exception e) {
-                log.error("解析JSON字符串出错", e);
-                return null;
-            }
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * 将对象转换为JSON字符串
-     *
-     * @param object 要转换的对象
-     * @return JSON字符串
-     * @throws RuntimeException 如果转换过程中发生异常
-     */
-    private String toJson(T object) {
-        try {
-            return JSON.toJSONString(object, JSONWriter.Feature.WriteMapNullValue);
-        } catch (Exception e) {
-            log.error("解析JSON字符串出错", e);
-            return "[]";
-        }
-    }
-
-
-}

+ 0 - 3
bd-park/park-backend/park-domain/src/main/java/com/huashe/park/domain/entity/MachineProcessResult.java

@@ -3,12 +3,9 @@ package com.huashe.park.domain.entity;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
-import com.alibaba.fastjson2.JSONObject;
 import com.huashe.common.annotation.Excel;
 import com.huashe.common.domain.BaseEntity;
 import com.huashe.park.common.animations.FixedLength;
-import com.huashe.park.common.animations.mybatis.FieldConvert;
-import com.huashe.park.common.animations.mybatis.service.JsonConverter;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

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

@@ -1,15 +1,10 @@
 package com.huashe.park.infrastructure.cfg.mybatis;
 
-import java.util.Arrays;
-import java.util.List;
-
-import com.huashe.park.common.animations.mybatis.FieldConvert;
 import org.apache.ibatis.executor.Executor;
 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.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;

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

@@ -20,6 +20,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;
@@ -55,46 +56,44 @@ public class MybatisInterceptor implements Interceptor {
                     if ("createBy".equals(field.getName())) {
                         field.setAccessible(true);
                         Object local_createBy = field.get(parameter);
-                        field.setAccessible(false);
                         if (local_createBy == null || local_createBy.equals("")) {
                             if (sysUser != null) {
                                 // 登录人账号
-                                field.setAccessible(true);
                                 field.set(parameter, sysUser.getUser().getNickName());
-                                field.setAccessible(false);
                             }
                         }
+                        field.setAccessible(false);
                     }
                     if ("createName".equals(field.getName())) {
                         field.setAccessible(true);
                         Object local_createBy = field.get(parameter);
-                        field.setAccessible(false);
+
                         if (local_createBy == null || local_createBy.equals("")) {
                             if (sysUser != null) {
                                 // 登录人账号
-                                field.setAccessible(true);
                                 field.set(parameter, sysUser.getUser().getNickName());
-                                field.setAccessible(false);
                             }
                         }
+                        field.setAccessible(false);
                     }
                     // 注入创建时间
                     if ("createTime".equals(field.getName())) {
                         field.setAccessible(true);
                         Object local_createDate = field.get(parameter);
-                        field.setAccessible(false);
+
                         if (local_createDate == null || local_createDate.equals("")) {
-                            field.setAccessible(true);
                             field.set(parameter, new Date());
-                            field.setAccessible(false);
                         }
+                        field.setAccessible(false);
                     }
 
                 }
                 catch (Exception e) {
                     log.error("------MybatisInterceptor field.name------{},error:", field.getName(), e);
                 }
+                setTenantField(parameter, field);
             }
+
         }
         if (SqlCommandType.UPDATE == sqlCommandType) {
             LoginUser sysUser = this.getLoginUser();
@@ -133,17 +132,17 @@ public class MybatisInterceptor implements Interceptor {
                         if (sysUser != null) {
                             // 登录账号
                             field.set(parameter, sysUser.getUser().getNickName());
-                            field.setAccessible(false);
                         }
                     }
                     if ("updateTime".equals(field.getName())) {
                         field.set(parameter, new Date());
-                        field.setAccessible(false);
                     }
                 }
                 catch (Exception e) {
                     log.error("------ MybatisInterceptor field.name------{},error:", field.getName(), e);
                 }
+                field.setAccessible(false);
+                setTenantField(parameter, field);
             }
         }
         return invocation.proceed();
@@ -154,6 +153,20 @@ 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() {

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

@@ -17,7 +17,7 @@ import org.springframework.util.ReflectionUtils;
 
 import com.huashe.park.common.animations.mybatis.Converter;
 import com.huashe.park.common.animations.mybatis.ConverterCache;
-import com.huashe.park.common.animations.mybatis.FieldConvert;
+import com.huashe.park.common.animations.mybatis.emuns.FieldConvert;
 import com.huashe.park.common.animations.mybatis.FieldMetadataCache;
 
 @Intercepts(@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {

+ 2 - 8
common-application/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -81,11 +81,11 @@ public class SysUserController extends BaseController {
     @Log(title = "用户管理", businessType = BusinessType.IMPORT)
     @PreAuthorize("@ss.hasPermi('system:user:import')")
     @PostMapping("/importData")
-    public AjaxResult importData(MultipartFile file, boolean updateSupport, Long tenantId) throws Exception {
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
         ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
         List<SysUser> userList = util.importExcel(file.getInputStream());
         String operName = getUsername();
-        String message = userService.importUser(userList, updateSupport, operName, tenantId);
+        String message = userService.importUser(userList, updateSupport, operName);
         return success(message);
     }
 
@@ -133,9 +133,6 @@ public class SysUserController extends BaseController {
         }
         user.setCreateBy(getUsername());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
-        if (tenantService.selectTenantByUsrId(user.getUserId()) == null) {
-            tenantService.addUsrTenant(user.getUserId(), user.getTenantId());
-        }
         return toAjax(userService.insertUser(user));
     }
 
@@ -157,9 +154,6 @@ public class SysUserController extends BaseController {
         } else if (StringMatchUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
             return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
         }
-        if (tenantService.selectTenantByUsrId(user.getUserId()) == null) {
-            tenantService.addUsrTenant(user.getUserId(), user.getTenantId());
-        }
         user.setUpdateBy(getUsername());
         return toAjax(userService.updateUser(user));
     }

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

@@ -4,6 +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.domain.BaseEntity;
 import com.ruoyi.common.xss.Xss;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -128,6 +129,7 @@ public class SysUser extends BaseEntity {
     private Long roleId;
 
 
+    @TenantField
     private Long tenantId;
 
     public SysUser() {

+ 17 - 16
common-application/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java

@@ -1,40 +1,41 @@
 package com.ruoyi.framework.security.filter;
 
-import java.io.IOException;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.huashe.common.utils.StringUtils;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.web.service.TokenService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
 import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
-import com.ruoyi.common.core.domain.model.LoginUser;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.framework.web.service.TokenService;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 
 /**
  * token过滤器 验证token有效性
- * 
+ *
  * @author ruoyi
  */
 @Component
-public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
-{
+public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
     @Autowired
     private TokenService tokenService;
 
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
-            throws ServletException, IOException
-    {
+            throws ServletException, IOException {
         LoginUser loginUser = tokenService.getLoginUser(request);
-        if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication()))
-        {
+        if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) {
+            String tenantId = request.getHeader("X-Tenant");
+            if (!StringUtils.isEmpty(tenantId)) {
+                loginUser.getUser().setTenantId(Long.parseLong(tenantId));
+            }
             tokenService.verifyToken(loginUser);
             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
             authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));

+ 3 - 0
common-application/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenantUsrRel.java

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

+ 1 - 1
common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java

@@ -26,7 +26,7 @@ public interface ISysTenantService {
 
     int deleteSysTenantUsrByUsrIds(Long[] usrIds);
 
-    void addUsrTenant(Long userId, Long tenantId);
+    void addUsrTenant(Long userId);
 
     SysTenant selectTenantByUsrId(Long usrId);
 

+ 1 - 1
common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -202,5 +202,5 @@ public interface ISysUserService
      * @param operName 操作用户
      * @return 结果
      */
-    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName, Long tenantId);
+    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
 }

+ 1 - 1
common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantDefServiceImpl.java

@@ -32,7 +32,7 @@ public class SysTenantDefServiceImpl implements ISysTenantService {
     }
 
     @Override
-    public void addUsrTenant(Long userId, Long tenantId) {
+    public void addUsrTenant(Long userId) {
 
     }
 

+ 1 - 2
common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java

@@ -77,11 +77,10 @@ public class SysTenantServiceImpl implements ISysTenantService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void addUsrTenant(Long userId, Long tenantId) {
+    public void addUsrTenant(Long userId) {
         sysTenantUsrRelMapper.deleteTenantUsrRelByUsrId(userId);
         sysTenantUsrRelMapper.insertTenantUsrRel(new SysTenantUsrRel() {{
             setUsrId(userId);
-            setTenantId(tenantId);
         }});
     }
 

+ 4 - 12
common-application/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -27,7 +27,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
-import org.springframework.util.ObjectUtils;
 
 import javax.validation.Validator;
 import java.util.ArrayList;
@@ -244,13 +243,10 @@ public class SysUserServiceImpl implements ISysUserService {
     @Override
     @Transactional
     public int insertUser(SysUser user) {
-        // TODO 改为从header中获取X-Tenant
         // 新增用户信息
         int rows = userMapper.insertUser(user);
 
-        if (!ObjectUtils.isEmpty(user.getTenantId())) {
-            sysTenantService.addUsrTenant(user.getUserId(), user.getTenantId());
-        }
+        sysTenantService.addUsrTenant(user.getUserId());
         // 新增用户岗位关联
         insertUserPost(user);
         // 新增用户与角色管理
@@ -288,10 +284,6 @@ public class SysUserServiceImpl implements ISysUserService {
         // 新增用户与岗位管理
         insertUserPost(user);
 
-        if (!ObjectUtils.isEmpty(user.getTenantId())) {
-            sysTenantService.addUsrTenant(user.getUserId(), user.getTenantId());
-        }
-
         return userMapper.updateUser(user);
     }
 
@@ -463,7 +455,7 @@ public class SysUserServiceImpl implements ISysUserService {
      * @return 结果
      */
     @Override
-    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName, Long tenantId) {
+    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
         if (StringUtils.isNull(userList) || userList.size() == 0) {
             throw new ServiceException("导入用户数据不能为空!");
         }
@@ -482,7 +474,7 @@ public class SysUserServiceImpl implements ISysUserService {
                     user.setPassword(SecurityUtils.encryptPassword(password));
                     user.setCreateBy(operName);
                     userMapper.insertUser(user);
-                    sysTenantService.addUsrTenant(user.getUserId(), tenantId);
+                    sysTenantService.addUsrTenant(user.getUserId());
                     successNum++;
                     successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
                 } else if (isUpdateSupport) {
@@ -493,7 +485,7 @@ public class SysUserServiceImpl implements ISysUserService {
                     user.setUserId(u.getUserId());
                     user.setUpdateBy(operName);
                     userMapper.updateUser(user);
-                    sysTenantService.addUsrTenant(user.getUserId(), tenantId);
+                    sysTenantService.addUsrTenant(user.getUserId());
                     successNum++;
                     successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
                 } else {

+ 12 - 0
prod-common/src/main/java/com/huashe/common/annotation/TenantField.java

@@ -0,0 +1,12 @@
+package com.huashe.common.annotation;
+
+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.FIELD)
+public @interface TenantField {
+    String alias() default "tenantId";
+}