优化组织人员树

This commit is contained in:
sxu 2024-11-01 16:05:57 +08:00
parent 5a17972438
commit 1fa5d82fda
11 changed files with 68 additions and 130 deletions

View File

@ -13,6 +13,8 @@ import com.bonus.system.api.domain.SysUser;
import com.bonus.system.api.factory.RemoteUserFallbackFactory; import com.bonus.system.api.factory.RemoteUserFallbackFactory;
import com.bonus.system.api.model.LoginUser; import com.bonus.system.api.model.LoginUser;
import java.util.List;
/** /**
* 用户服务 * 用户服务
* *
@ -160,14 +162,14 @@ public interface RemoteUserService {
public AjaxResult deptTree(SysDept dept, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); public AjaxResult deptTree(SysDept dept, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/** /**
* 获取当前登录用户数据权限范围内的部门权限下的部门人员树列表 * 查询部门人员树列表
* *
* @param dept 部门信息 * @param sysUser 部门信息
* @param source 请求来源 * @param source 请求来源
* @return 部门人员树列表或失败消息 * @return 部门人员树列表或失败消息
*/ */
@GetMapping("/user/deptUserTree") @PostMapping("/user/deptUserTree")
public AjaxResult deptUserTree(SysDept dept, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); public AjaxResult deptUserTree(SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/** /**
* 修改用户审批状态 * 修改用户审批状态

View File

@ -55,8 +55,6 @@ public class SysDept extends BaseEntity
/** 子部门 */ /** 子部门 */
private List<SysDept> children = new ArrayList<SysDept>(); private List<SysDept> children = new ArrayList<SysDept>();
private List<SysUser> sysUsers;
private Integer level; private Integer level;
public Integer getLevel() { public Integer getLevel() {
@ -193,14 +191,6 @@ public class SysDept extends BaseEntity
this.children = children; this.children = children;
} }
public List<SysUser> getSysUsers() {
return sysUsers;
}
public void setSysUsers(List<SysUser> sysUsers) {
this.sysUsers = sysUsers;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -125,8 +125,8 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
} }
@Override @Override
public AjaxResult deptUserTree(SysDept dept, String source) { public AjaxResult deptUserTree(SysUser sysUser, String source) {
return AjaxResult.error("获取部门权限下的部门人员树列表:" + throwable.getMessage()); return AjaxResult.error("查询部门人员树列表:" + throwable.getMessage());
} }
@Override @Override

View File

@ -450,20 +450,19 @@ public class SysUserController extends BaseController {
} }
/** /**
* 获取部门人员树列表 * 查询部门人员树列表
*/ */
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("system:user:list")) @RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("system:user:list"))
@GetMapping("/deptUserTree") @PostMapping("/deptUserTree")
public AjaxResult deptUserTree(SysDept dept) { public AjaxResult deptUserTree(@RequestBody SysUser sysUser) {
try { try {
return success(deptService.selectDeptUserTreeList(dept)); return success(deptService.selectDeptUserTree(sysUser));
} catch (Exception e) { } catch (Exception e) {
logger.error(e.toString(), e); logger.error(e.toString(), e);
} }
return error("系统异常,请联系管理员"); return error("系统异常,请联系管理员");
} }
/** /**
* 修改用户审批状态 * 修改用户审批状态
*/ */

View File

@ -34,8 +34,6 @@ public class TreeSelect implements Serializable {
private Integer level; private Integer level;
private List<SysUser> sysUsers;
/** /**
* 子节点 * 子节点
@ -52,7 +50,6 @@ public class TreeSelect implements Serializable {
this.parentId = dept.getParentId(); this.parentId = dept.getParentId();
this.status = dept.getStatus(); this.status = dept.getStatus();
this.label = dept.getDeptName(); this.label = dept.getDeptName();
this.sysUsers = dept.getSysUsers();
this.level = dept.getLevel(); this.level = dept.getLevel();
this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
} }
@ -111,12 +108,4 @@ public class TreeSelect implements Serializable {
public void setStatus(String status) { public void setStatus(String status) {
this.status = status; this.status = status;
} }
public List<SysUser> getSysUsers() {
return sysUsers;
}
public void setSysUsers(List<SysUser> sysUsers) {
this.sysUsers = sysUsers;
}
} }

View File

@ -19,6 +19,17 @@ public interface SysDeptMapper
*/ */
public List<SysDept> selectDeptList(SysDept dept); public List<SysDept> selectDeptList(SysDept dept);
/**
* 根据角色列表查询部门人员树结构信息
*
* @param dept 部门信息
* @param roleIds 角色列表
* @return 部门树信息集合
*/
public List<SysDept> selectDeptUserList(SysDept dept, @Param("roleIds") List<Long> roleIds);
public List<SysDept> selectDeptUserList(@Param("roleIds") Long[] roleIds);
/** /**
* 根据角色ID查询部门树信息 * 根据角色ID查询部门树信息
* *

View File

@ -157,11 +157,4 @@ public interface SysUserMapper {
Integer approvalStatus(Long userId); Integer approvalStatus(Long userId);
/**
* 组织人员树
* @param dept
* @return
*/
List<SysDept> getTree(SysDept dept);
} }

View File

@ -2,6 +2,7 @@ package com.bonus.system.service;
import java.util.List; import java.util.List;
import com.bonus.system.api.domain.SysDept; import com.bonus.system.api.domain.SysDept;
import com.bonus.system.api.domain.SysUser;
import com.bonus.system.domain.vo.TreeSelect; import com.bonus.system.domain.vo.TreeSelect;
/** /**
@ -28,12 +29,12 @@ public interface ISysDeptService
public List<TreeSelect> selectDeptTreeList(SysDept dept); public List<TreeSelect> selectDeptTreeList(SysDept dept);
/** /**
* 查询部门人员树结构信息 * 查询部门人员树列表
* *
* @param dept 部门信息 * @param sysUser 用户对象
* @return 部门树信息集合 * @return 部门树信息集合
*/ */
public List<TreeSelect> selectDeptUserTreeList(SysDept dept); public List<TreeSelect> selectDeptUserTree(SysUser sysUser);
/** /**
* 构建前端所需要树结构 * 构建前端所需要树结构

View File

@ -76,34 +76,16 @@ public class SysDeptServiceImpl implements ISysDeptService
} }
/** /**
* 查询部门人员树结构信息 * 查询部门人员树列表
* *
* @param dept 部门信息 * @param sysUser 用户对象
* @return 部门树信息集合 * @return 部门树信息集合
*/ */
@Override @Override
public List<TreeSelect> selectDeptUserTreeList(SysDept dept) @DataScope(deptAlias = "d")
public List<TreeSelect> selectDeptUserTree(SysUser sysUser)
{ {
if (dept != null && dept.getDeptId() != null && dept.getDeptId() == 0L) { List<SysDept> depts = deptMapper.selectDeptUserList(sysUser.getRoleIds());
List<SysDept> userList = userMapper.getTree(dept);
return buildDeptTreeSelect(userList);
}
List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept);
for (SysDept sysDept : depts) {
SysUser paramUser = new SysUser();
paramUser.setDeptId(sysDept.getDeptId());
List<SysUser> users = userMapper.selectUserList(paramUser);
List<SysUser> sysUsers = new ArrayList<>();
for (SysUser user : users) {
SysUser userResult = userMapper.selectUserById(user.getUserId());
user.setRoles(userResult.getRoles());
if (user.getDeptId().equals(sysDept.getDeptId())) {
sysUsers.add(user);
}
}
sysDept.setSysUsers(sysUsers);
}
return buildDeptTreeSelect(depts); return buildDeptTreeSelect(depts);
} }

View File

@ -47,6 +47,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by d.parent_id, d.order_num order by d.parent_id, d.order_num
</select> </select>
<select id="selectDeptUserList" resultType="com.bonus.system.api.domain.SysDept">
SELECT
d.dept_id AS deptId,
d.parent_id AS parentId,
d.dept_name AS deptName,
LENGTH( d.ancestors ) - LENGTH(
REPLACE ( d.ancestors, ',', '' )) AS LEVEL
FROM
sys_dept d
WHERE
d.del_flag = '0'
AND d.STATUS = '0'
UNION
SELECT
su.user_id AS deptId,
sd.dept_id AS parentId,
su.nick_name AS deptName,
99 AS LEVEL
FROM
sys_user su
LEFT JOIN sys_user_role sr ON su.user_id = sr.user_id
LEFT JOIN sys_dept sd ON su.dept_id = sd.dept_id
AND sd.del_flag = '0'
AND sd.STATUS = '0'
WHERE
su.del_flag = '0'
<if test="roleIds != null and roleIds.length > 0">
and sr.role_id in
<foreach collection="roleIds" item="item" index="index" separator="," open="(" close=")">
#{item}
</foreach>
</if>
</select>
<select id="selectDeptListByRoleId" resultType="Long"> <select id="selectDeptListByRoleId" resultType="Long">
select d.dept_id select d.dept_id
from sys_dept d from sys_dept d

View File

@ -202,71 +202,6 @@
and del_flag = '0' limit 1 and del_flag = '0' limit 1
</select> </select>
<select id="getTree" resultType="com.bonus.system.api.domain.SysDept">
WITH RECURSIVE DeptHierarchy AS (
SELECT
deptId,
parentId,
deptName,
0 AS level -- 初始级别为 0
FROM (
SELECT
d.dept_id AS deptId,
d.parent_id AS parentId,
d.dept_name AS deptName
FROM sys_dept d
WHERE d.del_flag = '0'
AND d.STATUS = '0'
UNION
SELECT
su.user_id AS deptId,
su.dept_id AS parentId,
su.nick_name AS deptName
FROM sys_user su
LEFT JOIN sys_dept sd ON su.dept_id = sd.dept_id
WHERE su.del_flag = '0'
) AS combined_results
WHERE parentId = 0 -- 选择根级别parentId 为 0
UNION ALL
SELECT
cr.deptId,
cr.parentId,
cr.deptName,
ch.level + 1 -- 级别递增
FROM DeptHierarchy ch
JOIN (
SELECT
d.dept_id AS deptId,
d.parent_id AS parentId,
d.dept_name AS deptName
FROM sys_dept d
WHERE d.del_flag = '0'
AND d.STATUS = '0'
UNION
SELECT
su.user_id AS deptId,
su.dept_id AS parentId,
su.nick_name AS deptName
FROM sys_user su
LEFT JOIN sys_dept sd ON su.dept_id = sd.dept_id
WHERE su.del_flag = '0'
) AS cr ON cr.parentId = ch.deptId -- 根据父级进行连接
)
SELECT * FROM DeptHierarchy
WHERE level &lt;= 3 -- 只选择前 3 级
ORDER BY level, deptId; -- 根据级别和部门ID排序
</select>
<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId"> <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
insert into sys_user( insert into sys_user(
<if test="userId != null and userId != 0">user_id,</if> <if test="userId != null and userId != 0">user_id,</if>