优化组织人员树
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.model.LoginUser;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户服务
|
||||
*
|
||||
|
|
@ -160,14 +162,14 @@ public interface RemoteUserService {
|
|||
public AjaxResult deptTree(SysDept dept, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 获取当前登录用户数据权限范围内的部门权限下的部门人员树列表
|
||||
* 查询部门人员树列表
|
||||
*
|
||||
* @param dept 部门信息
|
||||
* @param sysUser 部门信息
|
||||
* @param source 请求来源
|
||||
* @return 部门人员树列表或失败消息
|
||||
*/
|
||||
@GetMapping("/user/deptUserTree")
|
||||
public AjaxResult deptUserTree(SysDept dept, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
@PostMapping("/user/deptUserTree")
|
||||
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<SysUser> sysUsers;
|
||||
|
||||
private Integer level;
|
||||
|
||||
public Integer getLevel() {
|
||||
|
|
@ -193,14 +191,6 @@ public class SysDept extends BaseEntity
|
|||
this.children = children;
|
||||
}
|
||||
|
||||
public List<SysUser> getSysUsers() {
|
||||
return sysUsers;
|
||||
}
|
||||
|
||||
public void setSysUsers(List<SysUser> sysUsers) {
|
||||
this.sysUsers = sysUsers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
|
|
|
|||
|
|
@ -125,8 +125,8 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
|
|||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult deptUserTree(SysDept dept, String source) {
|
||||
return AjaxResult.error("获取部门权限下的部门人员树列表:" + throwable.getMessage());
|
||||
public AjaxResult deptUserTree(SysUser sysUser, String source) {
|
||||
return AjaxResult.error("查询部门人员树列表:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -450,20 +450,19 @@ public class SysUserController extends BaseController {
|
|||
}
|
||||
|
||||
/**
|
||||
* 获取部门人员树列表
|
||||
* 查询部门人员树列表
|
||||
*/
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("system:user:list"))
|
||||
@GetMapping("/deptUserTree")
|
||||
public AjaxResult deptUserTree(SysDept dept) {
|
||||
@PostMapping("/deptUserTree")
|
||||
public AjaxResult deptUserTree(@RequestBody SysUser sysUser) {
|
||||
try {
|
||||
return success(deptService.selectDeptUserTreeList(dept));
|
||||
return success(deptService.selectDeptUserTree(sysUser));
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return error("系统异常,请联系管理员");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 修改用户审批状态
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -34,8 +34,6 @@ public class TreeSelect implements Serializable {
|
|||
|
||||
private Integer level;
|
||||
|
||||
private List<SysUser> sysUsers;
|
||||
|
||||
|
||||
/**
|
||||
* 子节点
|
||||
|
|
@ -52,7 +50,6 @@ public class TreeSelect implements Serializable {
|
|||
this.parentId = dept.getParentId();
|
||||
this.status = dept.getStatus();
|
||||
this.label = dept.getDeptName();
|
||||
this.sysUsers = dept.getSysUsers();
|
||||
this.level = dept.getLevel();
|
||||
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) {
|
||||
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);
|
||||
|
||||
/**
|
||||
* 根据角色列表查询部门人员树结构信息
|
||||
*
|
||||
* @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查询部门树信息
|
||||
*
|
||||
|
|
|
|||
|
|
@ -157,11 +157,4 @@ public interface SysUserMapper {
|
|||
|
||||
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 com.bonus.system.api.domain.SysDept;
|
||||
import com.bonus.system.api.domain.SysUser;
|
||||
import com.bonus.system.domain.vo.TreeSelect;
|
||||
|
||||
/**
|
||||
|
|
@ -28,12 +29,12 @@ public interface ISysDeptService
|
|||
public List<TreeSelect> selectDeptTreeList(SysDept dept);
|
||||
|
||||
/**
|
||||
* 查询部门人员树结构信息
|
||||
* 查询部门人员树列表
|
||||
*
|
||||
* @param dept 部门信息
|
||||
* @param sysUser 用户对象
|
||||
* @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 部门树信息集合
|
||||
*/
|
||||
@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> 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);
|
||||
}
|
||||
List<SysDept> depts = deptMapper.selectDeptUserList(sysUser.getRoleIds());
|
||||
return buildDeptTreeSelect(depts);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
order by d.parent_id, d.order_num
|
||||
</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 d.dept_id
|
||||
from sys_dept d
|
||||
|
|
|
|||
|
|
@ -202,71 +202,6 @@
|
|||
and del_flag = '0' limit 1
|
||||
</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 into sys_user(
|
||||
<if test="userId != null and userId != 0">user_id,</if>
|
||||
|
|
|
|||
Loading…
Reference in New Issue