优化组织人员树
This commit is contained in:
parent
5a17972438
commit
1fa5d82fda
|
|
@ -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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改用户审批状态
|
* 修改用户审批状态
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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("系统异常,请联系管理员");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改用户审批状态
|
* 修改用户审批状态
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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查询部门树信息
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -157,11 +157,4 @@ public interface SysUserMapper {
|
||||||
|
|
||||||
Integer approvalStatus(Long userId);
|
Integer approvalStatus(Long userId);
|
||||||
|
|
||||||
/**
|
|
||||||
* 组织人员树
|
|
||||||
* @param dept
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
List<SysDept> getTree(SysDept dept);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建前端所需要树结构
|
* 构建前端所需要树结构
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 <= 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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue