Browse Source

关联公司切换

yzc 1 year ago
parent
commit
acd309a4c6

+ 16 - 0
hx-base/src/main/java/com/fjhx/base/system/SysLoginController.java

@@ -1,6 +1,7 @@
 package com.fjhx.base.system;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.fjhx.tenant.entity.tenant.po.TenantInfo;
@@ -9,12 +10,15 @@ import com.ruoyi.common.annotation.TenantIgnore;
 import com.ruoyi.common.constant.BaseSourceConstant;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginBody;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.framework.web.service.SysLoginService;
 import com.ruoyi.framework.web.service.SysPermissionService;
+import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysMenuService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,6 +57,8 @@ public class SysLoginController {
 
     @Autowired
     private TenantInfoService tenantInfoService;
+    @Autowired
+    private ISysDeptService deptService;
 
     /**
      * 登录方法
@@ -94,6 +100,16 @@ public class SysLoginController {
     public AjaxResult getInfo() {
         SysUser user = SecurityUtils.getLoginUser().getUser();
         user.setPassword(null);
+
+        //赋值关联归属公司列表
+        List<SysDept> list = deptService.list(IWrapper.<SysDept>getWrapper().in(SysDept::getDeptId, SecurityUtils.getUserCompanyIds()));
+        user.setCompanyList(list);
+        //赋值归属公司信息
+        SysDept company = deptService.getById(user.getCompanyId());
+        if(ObjectUtil.isNotEmpty(company)) {
+            user.setCompanyName(company.getDeptName());
+        }
+
         // 角色集合
         Set<String> roles = permissionService.getRolePermission(user);
         // 权限集合

+ 26 - 0
hx-tenant/src/main/java/com/fjhx/tenant/controller/tenant/UserTenantController.java

@@ -9,12 +9,15 @@ import com.fjhx.tenant.utils.DeptUstil;
 import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.annotation.TenantIgnore;
 import com.ruoyi.common.constant.BaseSourceConstant;
+import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -51,6 +54,8 @@ public class UserTenantController extends BaseController {
     private ISysPostService postService;
     @Autowired
     private ISysDeptService sysDeptService;
+    @Autowired
+    private RedisCache redisCache;
 
     /**
      * 获取用户列表
@@ -200,4 +205,25 @@ public class UserTenantController extends BaseController {
         return sysDeptService.getUserCompanyList();
     }
 
+
+    /**
+     * 临时切换公司
+     */
+    @PostMapping("/switchCompany")
+    public void switchCompany(@RequestBody SysUser userDto) {
+        Long targetCompanyId = userDto.getCompanyId();
+
+        //检查目标公司是否存在于关联公司列表中
+        List<Long> companyIds = SecurityUtils.getUserCompanyIds();
+        if (!companyIds.contains(targetCompanyId)) {
+            throw new ServiceException("非法操作切换失败!");
+        }
+
+        String key = CacheConstants.LOGIN_TOKEN_KEY + getLoginUser().getToken();
+        LoginUser loginUser = redisCache.getCacheObject(key);
+        SysUser user = loginUser.getUser();
+        user.setCompanyId(targetCompanyId);
+        redisCache.setCacheObject(key, loginUser);
+    }
+
 }

+ 23 - 6
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -177,23 +177,40 @@ public class SysUser extends BaseEntity {
      * 钉钉userId
      */
     private String ddUserId;
+    private Long companyId;
 
     /**
      * 关键字
      */
     @TableField(exist = false)
     private String keyword;
-
     @TableField(exist = false)
     private List<SysRole> sysRoleList;
+    @TableField(exist = false)
+    private List<String> deptNameList;
+    private String companySet;
+    @TableField(exist = false)
+    List<SysDept> companyList;
+    @TableField(exist = false)
+    String companyName;
 
-    private Long companyId;
+    //================================================================
 
-    private
-    @TableField(exist = false)
-    List<String> deptNameList;
+    public String getCompanyName() {
+        return companyName;
+    }
 
-    private String companySet;
+    public void setCompanyName(String companyName) {
+        this.companyName = companyName;
+    }
+
+    public List<SysDept> getCompanyList() {
+        return companyList;
+    }
+
+    public void setCompanyList(List<SysDept> companyList) {
+        this.companyList = companyList;
+    }
 
     public List<String> getDeptNameList() {
         return deptNameList;

+ 4 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java

@@ -48,6 +48,10 @@ public class SecurityUtils {
      * 获取关联公司列表
      **/
     public static List<Long> getCompanyIds() {
+        return Arrays.asList(getCompanyId());
+    }
+
+    public static List<Long> getUserCompanyIds() {
         try {
             SysUser user = getLoginUser().getUser();