From 2382a47279b6ed520593539f73aa5e512b4f016e Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期二, 03 六月 2025 11:31:55 +0800
Subject: [PATCH] 用户绑定多公司

---
 src/main/java/com/ruoyi/framework/security/LoginUser.java                       |   18 +-
 src/main/java/com/ruoyi/project/system/mapper/SysUserDeptMapper.java            |   15 ++
 src/main/resources/mapper/system/SysUserDeptMapper.xml                          |   21 +++
 src/main/java/com/ruoyi/project/system/service/ISysUserService.java             |    7 +
 src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java     |   43 +++++--
 src/main/java/com/ruoyi/framework/security/service/UserDetailsServiceImpl.java  |    2 
 src/main/java/com/ruoyi/project/system/service/impl/SysUserDeptServiceImpl.java |   22 +++
 src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java                  |   12 -
 src/main/java/com/ruoyi/framework/web/domain/TreeSelect.java                    |   12 ++
 src/main/java/com/ruoyi/project/system/domain/SysUser.java                      |   51 ++++++--
 src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java                    |    1 
 src/main/java/com/ruoyi/common/utils/SecurityUtils.java                         |    4 
 src/main/java/com/ruoyi/framework/web/controller/BaseController.java            |    4 
 src/main/java/com/ruoyi/project/system/domain/SysUserDept.java                  |   34 +++++
 src/main/java/com/ruoyi/project/system/controller/SysUserController.java        |   22 +-
 src/main/java/com/ruoyi/project/system/domain/vo/SysUserDeptVo.java             |   15 ++
 src/main/resources/mapper/system/SysUserMapper.xml                              |   24 ++-
 src/main/java/com/ruoyi/project/system/service/ISysUserDeptService.java         |   10 +
 18 files changed, 248 insertions(+), 69 deletions(-)

diff --git a/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java b/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java
index b1f9874..597a0af 100644
--- a/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java
+++ b/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java
@@ -31,5 +31,6 @@
         IGNORE_TABLES.add("common_file");
         IGNORE_TABLES.add("DepartmentHierarchy");
         IGNORE_TABLES.add("sys_oper_log");
+        IGNORE_TABLES.add("sys_user_dept");
     }
 }
diff --git a/src/main/java/com/ruoyi/common/utils/SecurityUtils.java b/src/main/java/com/ruoyi/common/utils/SecurityUtils.java
index 009384f..dc46ef1 100644
--- a/src/main/java/com/ruoyi/common/utils/SecurityUtils.java
+++ b/src/main/java/com/ruoyi/common/utils/SecurityUtils.java
@@ -38,11 +38,11 @@
     /**
      * 鑾峰彇閮ㄩ棬ID
      **/
-    public static Long getDeptId()
+    public static Long [] getDeptId()
     {
         try
         {
-            return getLoginUser().getDeptId();
+            return getLoginUser().getDeptIds();
         }
         catch (Exception e)
         {
diff --git a/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
index 9e82409..a15b110 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
+++ b/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -129,14 +129,10 @@
                     sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId()));
                 }
             }
-            else if (DATA_SCOPE_DEPT.equals(dataScope))
-            {
-                sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
-            }
-            else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
-            {
-                sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", deptAlias, user.getDeptId(), user.getDeptId()));
-            }
+//            else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
+//            {
+//                sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", deptAlias, user.getDeptId(), user.getDeptId()));
+//            }
             else if (DATA_SCOPE_SELF.equals(dataScope))
             {
                 if (StringUtils.isNotBlank(userAlias))
diff --git a/src/main/java/com/ruoyi/framework/security/LoginUser.java b/src/main/java/com/ruoyi/framework/security/LoginUser.java
index 53459bc..c1ce6ab 100644
--- a/src/main/java/com/ruoyi/framework/security/LoginUser.java
+++ b/src/main/java/com/ruoyi/framework/security/LoginUser.java
@@ -24,7 +24,7 @@
     /**
      * 閮ㄩ棬ID
      */
-    private Long deptId;
+    private Long [] deptIds;
 
     /**
      * 鐢ㄦ埛鍞竴鏍囪瘑
@@ -86,18 +86,18 @@
         this.permissions = permissions;
     }
 
-    public LoginUser(Long userId, Long deptId, SysUser user, Set<String> permissions)
+    public LoginUser(Long userId, Long [] deptId, SysUser user, Set<String> permissions)
     {
         this.userId = userId;
-        this.deptId = deptId;
+        this.deptIds = deptId;
         this.user = user;
         this.permissions = permissions;
     }
 
-    public LoginUser(Long userId, Long deptId, SysUser user,Integer tenantId, Set<String> permissions)
+    public LoginUser(Long userId, Long [] deptIds, SysUser user,Integer tenantId, Set<String> permissions)
     {
         this.userId = userId;
-        this.deptId = deptId;
+        this.deptIds = deptIds;
         this.user = user;
         this.permissions = permissions;
         this.tenantId = tenantId;
@@ -113,14 +113,14 @@
         this.userId = userId;
     }
 
-    public Long getDeptId()
+    public Long [] getDeptIds()
     {
-        return deptId;
+        return deptIds;
     }
 
-    public void setDeptId(Long deptId)
+    public void setDeptId(Long [] deptIds)
     {
-        this.deptId = deptId;
+        this.deptIds = deptIds;
     }
 
     public String getToken()
diff --git a/src/main/java/com/ruoyi/framework/security/service/UserDetailsServiceImpl.java b/src/main/java/com/ruoyi/framework/security/service/UserDetailsServiceImpl.java
index e4c55ce..a5552b4 100644
--- a/src/main/java/com/ruoyi/framework/security/service/UserDetailsServiceImpl.java
+++ b/src/main/java/com/ruoyi/framework/security/service/UserDetailsServiceImpl.java
@@ -60,6 +60,6 @@
 
     public UserDetails createLoginUser(SysUser user)
     {
-        return new LoginUser(user.getUserId(), user.getDeptId(), user, user.getTenantId(), permissionService.getMenuPermission(user));
+        return new LoginUser(user.getUserId(), user.getDeptIds(), user, user.getTenantId(), permissionService.getMenuPermission(user));
     }
 }
diff --git a/src/main/java/com/ruoyi/framework/web/controller/BaseController.java b/src/main/java/com/ruoyi/framework/web/controller/BaseController.java
index 4189533..5c6fe3e 100644
--- a/src/main/java/com/ruoyi/framework/web/controller/BaseController.java
+++ b/src/main/java/com/ruoyi/framework/web/controller/BaseController.java
@@ -179,9 +179,9 @@
     /**
      * 鑾峰彇鐧诲綍閮ㄩ棬id
      */
-    public Long getDeptId()
+    public Long [] getDeptId()
     {
-        return getLoginUser().getDeptId();
+        return getLoginUser().getDeptIds();
     }
 
     /**
diff --git a/src/main/java/com/ruoyi/framework/web/domain/TreeSelect.java b/src/main/java/com/ruoyi/framework/web/domain/TreeSelect.java
index cf4e43c..af11ba2 100644
--- a/src/main/java/com/ruoyi/framework/web/domain/TreeSelect.java
+++ b/src/main/java/com/ruoyi/framework/web/domain/TreeSelect.java
@@ -24,6 +24,9 @@
     /** 鑺傜偣鍚嶇О */
     private String label;
 
+    /** 鑺傜偣ID */
+    private Long value;
+
     /** 鑺傜偣绂佺敤 */
     private boolean disabled = false;
 
@@ -39,6 +42,7 @@
     public TreeSelect(SysDept dept)
     {
         this.id = dept.getDeptId();
+        this.value = dept.getDeptId();
         this.label = dept.getDeptName();
         this.disabled = StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus());
         this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
@@ -90,4 +94,12 @@
     {
         this.children = children;
     }
+
+    public Long getValue() {
+        return value;
+    }
+
+    public void setValue(Long value) {
+        this.value = value;
+    }
 }
diff --git a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
index 79b0c99..d66dc5e 100644
--- a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
+++ b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
@@ -3,6 +3,9 @@
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.project.system.domain.vo.SysUserDeptVo;
+import com.ruoyi.project.system.service.*;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -27,10 +30,6 @@
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.domain.SysRole;
 import com.ruoyi.project.system.domain.SysUser;
-import com.ruoyi.project.system.service.ISysDeptService;
-import com.ruoyi.project.system.service.ISysPostService;
-import com.ruoyi.project.system.service.ISysRoleService;
-import com.ruoyi.project.system.service.ISysUserService;
 
 /**
  * 鐢ㄦ埛淇℃伅
@@ -52,6 +51,9 @@
 
     @Autowired
     private ISysPostService postService;
+
+    @Autowired
+    private ISysUserDeptService userDeptService;
 
     /**
      * 鑾峰彇鐢ㄦ埛鍒楄〃
@@ -113,6 +115,10 @@
         List<SysRole> roles = roleService.selectRoleAll();
         ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
         ajax.put("posts", postService.selectPostAll());
+        SysUserDeptVo sysUserDeptVo = new SysUserDeptVo();
+        sysUserDeptVo.setUserId(userId);
+        List<SysUserDeptVo> sysUserDeptVos = userDeptService.selectUserDeptList(sysUserDeptVo);
+        ajax.put("deptIds",sysUserDeptVos.stream().map(SysUserDeptVo::getDeptId).collect(Collectors.toList()));
         return ajax;
     }
 
@@ -124,7 +130,6 @@
     @PostMapping
     public AjaxResult add(@Validated @RequestBody SysUser user)
     {
-        deptService.checkDeptDataScope(user.getDeptId());
         roleService.checkRoleDataScope(user.getRoleIds());
         if (!userService.checkUserNameUnique(user))
         {
@@ -140,11 +145,6 @@
         }
         user.setCreateBy(getUsername());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
-        // 鏌ヨ椤跺眰閮ㄩ棬鐖秈d鍋氫负绉熸埛tenant_id
-        Long tenantId = deptService.maxLevelDeptId(user.getDeptId());
-        if(tenantId != null){
-            user.setTenantId(tenantId.intValue());
-        }
         return toAjax(userService.insertUser(user));
     }
 
@@ -158,7 +158,6 @@
     {
         userService.checkUserAllowed(user);
         userService.checkUserDataScope(user.getUserId());
-        deptService.checkDeptDataScope(user.getDeptId());
         roleService.checkRoleDataScope(user.getRoleIds());
         if (!userService.checkUserNameUnique(user))
         {
@@ -173,6 +172,7 @@
             return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪");
         }
         user.setUpdateBy(getUsername());
+        userService.bindUserDept(user);
         return toAjax(userService.updateUser(user));
     }
 
diff --git a/src/main/java/com/ruoyi/project/system/domain/SysUser.java b/src/main/java/com/ruoyi/project/system/domain/SysUser.java
index 64938d0..3f7e227 100644
--- a/src/main/java/com/ruoyi/project/system/domain/SysUser.java
+++ b/src/main/java/com/ruoyi/project/system/domain/SysUser.java
@@ -3,6 +3,8 @@
 import java.util.Date;
 import java.util.List;
 import javax.validation.constraints.*;
+
+import com.baomidou.mybatisplus.annotation.TableField;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.xss.Xss;
@@ -24,10 +26,6 @@
     /** 鐢ㄦ埛ID */
     @Excel(name = "鐢ㄦ埛搴忓彿", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "鐢ㄦ埛缂栧彿")
     private Long userId;
-
-    /** 閮ㄩ棬ID */
-    @Excel(name = "閮ㄩ棬缂栧彿", type = Type.IMPORT)
-    private Long deptId;
 
     /** 鐢ㄦ埛璐﹀彿 */
     @Excel(name = "鐧诲綍鍚嶇О")
@@ -92,6 +90,16 @@
     /** 绉熸埛ID */
     private Integer tenantId;
 
+    private Long[] deptIds;
+
+    @TableField(exist = false)
+    private Long deptId;
+
+    /**
+     * 閮ㄩ棬鍚嶇О
+     */
+    private String deptNames;
+
     public SysUser()
     {
 
@@ -120,16 +128,6 @@
     public static boolean isAdmin(Long userId)
     {
         return userId != null && 1L == userId;
-    }
-
-    public Long getDeptId()
-    {
-        return deptId;
-    }
-
-    public void setDeptId(Long deptId)
-    {
-        this.deptId = deptId;
     }
 
     @Xss(message = "鐢ㄦ埛鏄电О涓嶈兘鍖呭惈鑴氭湰瀛楃")
@@ -308,11 +306,34 @@
         this.tenantId = tenantId;
     }
 
+    public Long[] getDeptIds() {
+        return deptIds;
+    }
+
+    public void setDeptIds(Long[] deptIds) {
+        this.deptIds = deptIds;
+    }
+
+    public String getDeptNames() {
+        return deptNames;
+    }
+
+    public void setDeptNames(String deptNames) {
+        this.deptNames = deptNames;
+    }
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
             .append("userId", getUserId())
-            .append("deptId", getDeptId())
             .append("userName", getUserName())
             .append("nickName", getNickName())
             .append("email", getEmail())
diff --git a/src/main/java/com/ruoyi/project/system/domain/SysUserDept.java b/src/main/java/com/ruoyi/project/system/domain/SysUserDept.java
new file mode 100644
index 0000000..8ca1d40
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/domain/SysUserDept.java
@@ -0,0 +1,34 @@
+package com.ruoyi.project.system.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class SysUserDept {
+
+    private Long id;
+
+    private Long userId;
+
+    private Long deptId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/project/system/domain/vo/SysUserDeptVo.java b/src/main/java/com/ruoyi/project/system/domain/vo/SysUserDeptVo.java
new file mode 100644
index 0000000..8135c26
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/domain/vo/SysUserDeptVo.java
@@ -0,0 +1,15 @@
+package com.ruoyi.project.system.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.project.system.domain.SysUserDept;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class SysUserDeptVo extends SysUserDept {
+
+    private String deptName;
+}
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysUserDeptMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysUserDeptMapper.java
new file mode 100644
index 0000000..fbcab9a
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysUserDeptMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.project.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.project.system.domain.SysUserDept;
+import com.ruoyi.project.system.domain.vo.SysUserDeptVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface SysUserDeptMapper extends BaseMapper<SysUserDept> {
+
+    List<SysUserDeptVo> selectUserDeptList(@Param("userDeptVo") SysUserDeptVo userDeptVo);
+}
diff --git a/src/main/java/com/ruoyi/project/system/service/ISysUserDeptService.java b/src/main/java/com/ruoyi/project/system/service/ISysUserDeptService.java
new file mode 100644
index 0000000..c21dbeb
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/service/ISysUserDeptService.java
@@ -0,0 +1,10 @@
+package com.ruoyi.project.system.service;
+
+import com.ruoyi.project.system.domain.vo.SysUserDeptVo;
+
+import java.util.List;
+
+public interface ISysUserDeptService {
+
+    List<SysUserDeptVo> selectUserDeptList(SysUserDeptVo userDeptVo);
+}
diff --git a/src/main/java/com/ruoyi/project/system/service/ISysUserService.java b/src/main/java/com/ruoyi/project/system/service/ISysUserService.java
index 300fe2d..7d5ba4a 100644
--- a/src/main/java/com/ruoyi/project/system/service/ISysUserService.java
+++ b/src/main/java/com/ruoyi/project/system/service/ISysUserService.java
@@ -210,4 +210,11 @@
      * @return
      */
     List<SysUser> userListNoPage(SysUser user);
+
+    /**
+     * 缁戝畾鐢ㄦ埛閮ㄩ棬
+     * @param user
+     * @return
+     */
+    int bindUserDept(SysUser user);
 }
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysUserDeptServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysUserDeptServiceImpl.java
new file mode 100644
index 0000000..5e5eed0
--- /dev/null
+++ b/src/main/java/com/ruoyi/project/system/service/impl/SysUserDeptServiceImpl.java
@@ -0,0 +1,22 @@
+package com.ruoyi.project.system.service.impl;
+
+import com.ruoyi.project.system.domain.vo.SysUserDeptVo;
+import com.ruoyi.project.system.mapper.SysUserDeptMapper;
+import com.ruoyi.project.system.service.ISysUserDeptService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+@Service
+public class SysUserDeptServiceImpl implements ISysUserDeptService {
+
+    @Autowired
+    private SysUserDeptMapper sysUserDeptMapper;
+
+    @Override
+    public List<SysUserDeptVo> selectUserDeptList(SysUserDeptVo userDeptVo) {
+        return sysUserDeptMapper.selectUserDeptList(userDeptVo);
+    }
+}
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
index fd9df5a..903f7ae 100644
--- a/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
@@ -5,6 +5,11 @@
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.validation.Validator;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.project.system.domain.*;
+import com.ruoyi.project.system.mapper.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,16 +23,6 @@
 import com.ruoyi.common.utils.bean.BeanValidators;
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
-import com.ruoyi.project.system.domain.SysPost;
-import com.ruoyi.project.system.domain.SysRole;
-import com.ruoyi.project.system.domain.SysUser;
-import com.ruoyi.project.system.domain.SysUserPost;
-import com.ruoyi.project.system.domain.SysUserRole;
-import com.ruoyi.project.system.mapper.SysPostMapper;
-import com.ruoyi.project.system.mapper.SysRoleMapper;
-import com.ruoyi.project.system.mapper.SysUserMapper;
-import com.ruoyi.project.system.mapper.SysUserPostMapper;
-import com.ruoyi.project.system.mapper.SysUserRoleMapper;
 import com.ruoyi.project.system.service.ISysConfigService;
 import com.ruoyi.project.system.service.ISysDeptService;
 import com.ruoyi.project.system.service.ISysUserService;
@@ -40,6 +35,9 @@
 @Service
 public class SysUserServiceImpl implements ISysUserService
 {
+    @Autowired
+    private SysUserDeptMapper sysUserDeptMapper;
+
     private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
 
     @Autowired
@@ -267,6 +265,8 @@
         insertUserPost(user);
         // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
         insertUserRole(user);
+        // 鏂板閮ㄩ棬鍏宠仈
+        bindUserDept(user);
         return rows;
     }
 
@@ -503,7 +503,6 @@
                 if (StringUtils.isNull(u))
                 {
                     BeanValidators.validateWithException(validator, user);
-                    deptService.checkDeptDataScope(user.getDeptId());
                     String password = configService.selectConfigByKey("sys.user.initPassword");
                     user.setPassword(SecurityUtils.encryptPassword(password));
                     user.setCreateBy(operName);
@@ -516,7 +515,6 @@
                     BeanValidators.validateWithException(validator, user);
                     checkUserAllowed(u);
                     checkUserDataScope(u.getUserId());
-                    deptService.checkDeptDataScope(user.getDeptId());
                     user.setUserId(u.getUserId());
                     user.setUpdateBy(operName);
                     userMapper.updateUser(user);
@@ -558,4 +556,25 @@
     public List<SysUser> userListNoPage(SysUser user) {
         return userMapper.selectUserList(user);
     }
+
+    /**
+     * 缁戝畾鐢ㄦ埛閮ㄩ棬
+     * @param user
+     * @return
+     */
+    @Override
+    public int bindUserDept(SysUser user) {
+        // 鍒犻櫎鎵�鏈夊叧鑱旂粦瀹�
+        LambdaQueryWrapper<SysUserDept> delWrapper = new LambdaQueryWrapper<>();
+        delWrapper.eq(SysUserDept::getUserId, user.getUserId());
+        sysUserDeptMapper.delete(delWrapper);
+        // 閲嶆柊缁戝畾
+        for (int i = 0; i < user.getDeptIds().length; i++) {
+            SysUserDept sysUserDept = new SysUserDept();
+            sysUserDept.setDeptId(user.getDeptIds()[i]);
+            sysUserDept.setUserId(user.getUserId());
+            sysUserDeptMapper.insert(sysUserDept);
+        }
+        return user.getDeptIds().length;
+    }
 }
diff --git a/src/main/resources/mapper/system/SysUserDeptMapper.xml b/src/main/resources/mapper/system/SysUserDeptMapper.xml
new file mode 100644
index 0000000..0a62acb
--- /dev/null
+++ b/src/main/resources/mapper/system/SysUserDeptMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.project.system.mapper.SysUserDeptMapper">
+    
+    <select id="selectUserDeptList" resultType="com.ruoyi.project.system.domain.vo.SysUserDeptVo">
+        SELECT
+            T1.user_id,
+            T1.dept_id,
+            T2.dept_name
+        FROM
+            sys_user_dept T1
+        LEFT JOIN sys_dept T2 ON T1.dept_id = T2.dept_id
+        <where>
+            <if test="userDeptVo.userId != null">
+                T1.user_id = #{userDeptVo.userId}
+            </if>
+        </where>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml
index fcd4016..b62aefc 100644
--- a/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/src/main/resources/mapper/system/SysUserMapper.xml
@@ -6,7 +6,6 @@
 
     <resultMap type="com.ruoyi.project.system.domain.SysUser" id="SysUserResult">
         <id     property="userId"       column="user_id"      />
-        <result property="deptId"       column="dept_id"      />
         <result property="userName"     column="user_name"    />
         <result property="nickName"     column="nick_name"    />
         <result property="email"        column="email"        />
@@ -23,6 +22,7 @@
         <result property="updateBy"     column="update_by"    />
         <result property="updateTime"   column="update_time"  />
         <result property="remark"       column="remark"       />
+		<result property="deptNames"       column="dept_names"       />
 		<result property="tenantId"       column="tenant_id"       />
         <association property="dept"    javaType="com.ruoyi.project.system.domain.SysDept"         resultMap="deptResult" />
         <collection  property="roles"   javaType="java.util.List"  resultMap="RoleResult" />
@@ -48,18 +48,22 @@
     </resultMap>
 	
 	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
-        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
+        select u.user_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,u.tenant_id
         from sys_user u
-		    left join sys_dept d on u.dept_id = d.dept_id
 		    left join sys_user_role ur on u.user_id = ur.user_id
 		    left join sys_role r on r.role_id = ur.role_id
     </sql>
     
     <select id="selectUserList" parameterType="com.ruoyi.project.system.domain.SysUser" resultMap="SysUserResult">
-		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
-		left join sys_dept d on u.dept_id = d.dept_id
+		select u.user_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,T2.dept_names from sys_user u
+		left join
+		(	SELECT T1.user_id,GROUP_CONCAT(T2.dept_name SEPARATOR ', ') AS dept_names
+			FROM
+				sys_user_dept T1
+			LEFT JOIN sys_dept T2 ON T1.dept_id = T2.dept_id
+			GROUP BY T1.user_id
+		) T2 on T2.user_id = u.user_id
 		where u.del_flag = '0'
 		<if test="userId != null and userId != 0">
 			AND u.user_id = #{userId}
@@ -79,8 +83,11 @@
 		<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
 			AND date_format(u.create_time,'%Y%m%d') &lt;= date_format(#{params.endTime},'%Y%m%d')
 		</if>
-		<if test="deptId != null and deptId != 0">
-			AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
+		<if test="deptId != null">
+			AND u.user_id IN
+			(
+			SELECT user_id FROM sys_user_dept WHERE dept_id = #{deptId}
+			)
 		</if>
 		<!-- 鏁版嵁鑼冨洿杩囨护 -->
 		${params.dataScope}
@@ -180,7 +187,6 @@
 	<update id="updateUser" parameterType="com.ruoyi.project.system.domain.SysUser">
  		update sys_user
  		<set>
- 			<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
  			<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
  			<if test="email != null ">email = #{email},</if>
  			<if test="phonenumber != null ">phonenumber = #{phonenumber},</if>

--
Gitblit v1.9.3