From cbd59f84fd7d688569cade242e4e9d6d0f381f15 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期二, 18 六月 2024 18:44:04 +0800
Subject: [PATCH] update 优化 三方登录不同域名获取不到租户id问题

---
 ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java |   45 +++++++++++++++++++++++++++++++--------------
 1 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
index f9b7f2c..d340229 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
@@ -5,6 +5,7 @@
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.lock.annotation.Lock4j;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import me.zhyd.oauth.model.AuthUser;
@@ -15,6 +16,7 @@
 import org.dromara.common.core.domain.model.LoginUser;
 import org.dromara.common.core.enums.LoginType;
 import org.dromara.common.core.enums.TenantStatus;
+import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.user.UserException;
 import org.dromara.common.core.utils.*;
 import org.dromara.common.log.event.LogininforEvent;
@@ -26,7 +28,6 @@
 import org.dromara.system.domain.SysUser;
 import org.dromara.system.domain.bo.SysSocialBo;
 import org.dromara.system.domain.vo.*;
-import org.dromara.system.mapper.SysDeptMapper;
 import org.dromara.system.mapper.SysUserMapper;
 import org.dromara.system.service.*;
 import org.springframework.beans.factory.annotation.Value;
@@ -65,20 +66,28 @@
      * 缁戝畾绗笁鏂圭敤鎴�
      *
      * @param authUserData 鎺堟潈鍝嶅簲瀹炰綋
-     * @return 缁熶竴鍝嶅簲瀹炰綋
      */
+    @Lock4j
     public void socialRegister(AuthUser authUserData) {
         String authId = authUserData.getSource() + authUserData.getUuid();
         // 绗笁鏂圭敤鎴蜂俊鎭�
         SysSocialBo bo = BeanUtil.toBean(authUserData, SysSocialBo.class);
         BeanUtil.copyProperties(authUserData.getToken(), bo);
-        bo.setUserId(LoginHelper.getUserId());
+        Long userId = LoginHelper.getUserId();
+        bo.setUserId(userId);
         bo.setAuthId(authId);
         bo.setOpenId(authUserData.getUuid());
         bo.setUserName(authUserData.getUsername());
         bo.setNickName(authUserData.getNickname());
+        List<SysSocialVo> checkList = sysSocialService.selectByAuthId(authId);
+        if (CollUtil.isNotEmpty(checkList)) {
+            throw new ServiceException("姝や笁鏂硅处鍙峰凡缁忚缁戝畾!");
+        }
         // 鏌ヨ鏄惁宸茬粡缁戝畾鐢ㄦ埛
-        List<SysSocialVo> list = sysSocialService.selectByAuthId(authId);
+        SysSocialBo params = new SysSocialBo();
+        params.setUserId(userId);
+        params.setSource(bo.getSource());
+        List<SysSocialVo> list = sysSocialService.queryList(params);
         if (CollUtil.isEmpty(list)) {
             // 娌℃湁缁戝畾鐢ㄦ埛, 鏂板鐢ㄦ埛淇℃伅
             sysSocialService.insertByBo(bo);
@@ -86,6 +95,8 @@
             // 鏇存柊鐢ㄦ埛淇℃伅
             bo.setId(list.get(0).getId());
             sysSocialService.updateByBo(bo);
+            // 濡傛灉瑕佺粦瀹氱殑骞冲彴璐﹀彿宸茬粡琚粦瀹氳繃浜� 鏄惁鎶涘紓甯歌嚜琛屽喅鏂�
+            // throw new ServiceException("姝ゅ钩鍙拌处鍙峰凡缁忚缁戝畾!");
         }
     }
 
@@ -131,7 +142,6 @@
         SpringUtils.context().publishEvent(logininforEvent);
     }
 
-
     /**
      * 鏋勫缓鐧诲綍鐢ㄦ埛
      */
@@ -145,10 +155,16 @@
         loginUser.setUserType(user.getUserType());
         loginUser.setMenuPermission(permissionService.getMenuPermission(user.getUserId()));
         loginUser.setRolePermission(permissionService.getRolePermission(user.getUserId()));
-        SysDeptVo dept = deptService.selectDeptById(user.getDeptId());
-        loginUser.setDeptName(ObjectUtil.isNull(dept) ? "" : dept.getDeptName());
-        List<SysRoleVo> roles = roleService.selectRolesByUserId(user.getUserId());
-        loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
+        TenantHelper.dynamic(user.getTenantId(), () -> {
+            SysDeptVo dept = null;
+            if (ObjectUtil.isNotNull(user.getDeptId())) {
+                dept = deptService.selectDeptById(user.getDeptId());
+            }
+            loginUser.setDeptName(ObjectUtil.isNull(dept) ? "" : dept.getDeptName());
+            loginUser.setDeptCategory(ObjectUtil.isNull(dept) ? "" : dept.getDeptCategory());
+            List<SysRoleVo> roles = roleService.selectRolesByUserId(user.getUserId());
+            loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
+        });
         return loginUser;
     }
 
@@ -205,17 +221,17 @@
      *
      * @param tenantId 绉熸埛ID
      */
-    public void checkTenant(String tenantId) {
+    public SysTenantVo checkTenant(String tenantId) {
         if (!TenantHelper.isEnable()) {
-            return;
-        }
-        if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) {
-            return;
+            return null;
         }
         if (StringUtils.isBlank(tenantId)) {
             throw new TenantException("tenant.number.not.blank");
         }
         SysTenantVo tenant = tenantService.queryByTenantId(tenantId);
+        if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) {
+            return tenant;
+        }
         if (ObjectUtil.isNull(tenant)) {
             log.info("鐧诲綍绉熸埛锛歿} 涓嶅瓨鍦�.", tenantId);
             throw new TenantException("tenant.not.exists");
@@ -227,6 +243,7 @@
             log.info("鐧诲綍绉熸埛锛歿} 宸茶秴杩囨湁鏁堟湡.", tenantId);
             throw new TenantException("tenant.expired");
         }
+        return tenant;
     }
 
 }

--
Gitblit v1.9.3