瀏覽代碼

feat(system): 新增按当前登录用户部门链查询用户列表接口(用于责任人/审核人选择器)

- ISysUserService.selectUserListByDeptChain(deptId) 通过 deptMapper.selectDeptAndChildById 递归查本部门+所有子孙部门,合并去重返回用户列表
- SysUserController.listByCurrentDeptChain 自动以 LoginHelper.getLoginUser().getDeptId() 为根节点
- 用于巡检任务/隐患处理等业务模块的"责任人/审核人"系统选择器
yangjingjing 3 天之前
父節點
當前提交
b1fed27b59

+ 17 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java

@@ -305,4 +305,21 @@ public class SysUserController extends BaseController {
         return R.ok(userService.selectUserListByDept(deptId));
     }
 
+    /**
+     * 获取当前登录用户所在部门及其所有下级部门的用户列表
+     * <p>
+     * 用于业务模块(巡检任务/隐患处理等)"责任人/审核人"选择器:
+     * 自动以 LoginHelper.getLoginUser().getDeptId() 为根节点,递归查所有下级部门,
+     * 合并去重后返回用户列表(已过滤 delFlag)。
+     *
+     * @return 用户列表(已按 userId 去重)
+     */
+    @GetMapping("/listByCurrentDeptChain")
+    public R<List<SysUserVo>> listByCurrentDeptChain() {
+        Long currentDeptId = LoginHelper.getLoginUser() != null
+            ? LoginHelper.getLoginUser().getDeptId()
+            : null;
+        return R.ok(userService.selectUserListByDeptChain(currentDeptId));
+    }
+
 }

+ 8 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java

@@ -228,4 +228,12 @@ public interface ISysUserService {
      * @return 结果
      */
     List<SysUserVo> selectUserListByDept(Long deptId);
+
+    /**
+     * 通过部门id查询本部门及所有下级部门的用户列表(用于责任人/审核人选择器)
+     *
+     * @param deptId 部门id
+     * @return 用户列表(按 userId 去重)
+     */
+    List<SysUserVo> selectUserListByDeptChain(Long deptId);
 }

+ 33 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -584,6 +584,39 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
         return baseMapper.selectVoList(lqw);
     }
 
+    /**
+     * 查询本部门及所有下级部门的用户列表(按 userId 去重)
+     * <p>
+     * 复用 deptMapper.selectDeptAndChildById(parentId) 拿到本部门 + 所有子孙部门 ID 列表,
+     * 再按部门逐个查用户,合并去重后返回。
+     * <p>
+     * 典型场景:巡检任务/隐患处理等业务模块的"责任人/审核人"选择器,
+     * 限定可选范围 = 当前登录用户所在部门 + 所有下级部门
+     */
+    @Override
+    public List<SysUserVo> selectUserListByDeptChain(Long deptId) {
+        if (deptId == null) {
+            return new ArrayList<>();
+        }
+        List<Long> deptIds = deptMapper.selectDeptAndChildById(deptId);
+        if (CollUtil.isEmpty(deptIds)) {
+            return new ArrayList<>();
+        }
+        // 按 userId 去重合并
+        Map<Long, SysUserVo> resultMap = new LinkedHashMap<>(deptIds.size() * 4);
+        for (Long did : deptIds) {
+            List<SysUserVo> users = selectUserListByDept(did);
+            if (CollUtil.isNotEmpty(users)) {
+                for (SysUserVo u : users) {
+                    if (u != null && u.getUserId() != null) {
+                        resultMap.putIfAbsent(u.getUserId(), u);
+                    }
+                }
+            }
+        }
+        return new ArrayList<>(resultMap.values());
+    }
+
     /**
      * 通过用户ID查询用户账户
      *