refactor(department): 优化部门层级绑定逻辑并添加部门属性

- 修改bindParent方法参数名以提高代码可读性
- 在bindParent方法中添加重复检查避免循环引用
- 创建treeDepartments副本确保数据完整性
- 调整TBaseDepartment类中导入语句顺序
- 添加hasChild和hasManager两个新字段用于标识部门状态
This commit is contained in:
曹鹏飞 2026-01-16 15:57:44 +08:00
parent 5bf26c76d5
commit 81d10ba5d1
2 changed files with 19 additions and 6 deletions

View File

@ -3,12 +3,13 @@ package com.nflg.mobilebroken.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 部门表
@ -85,4 +86,14 @@ public class TBaseDepartment implements Serializable {
* 更新时间
*/
private LocalDateTime dataModifyTime;
/**
* 是否有下级
*/
private boolean hasChild;
/**
* 是否已设置管理者
*/
private boolean hasManager;
}

View File

@ -465,7 +465,8 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
Set<TBaseDepartment> searchDepartments = departments.stream()
.filter(d -> searchUsers.stream().map(AdminUser::getDepartmentId).anyMatch(dt -> Objects.equals(d.getId(), dt)))
.collect(Collectors.toSet());
searchDepartments.forEach(d -> bindParent(d, searchDepartments, departments));
Set<TBaseDepartment> treeDepartments = new HashSet<>(searchDepartments);
searchDepartments.forEach(d -> bindParent(d, treeDepartments, departments));
List<TBaseDepartment> rootDepartments = searchDepartments.stream()
.filter(d -> d.getDeptParentId() == 0)
.collect(Collectors.toList());
@ -506,13 +507,14 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
}
}
private void bindParent(TBaseDepartment department, Set<TBaseDepartment> vos, List<TBaseDepartment> departments) {
private void bindParent(TBaseDepartment department, Set<TBaseDepartment> treeDepartments, List<TBaseDepartment> departments) {
Set<TBaseDepartment> parents = departments.stream()
.filter(d -> Objects.equals(d.getId(), department.getDeptParentId()))
.collect(Collectors.toSet());
parents.removeIf(p -> treeDepartments.stream().anyMatch(v -> Objects.equals(p.getId(), v.getId())));
if (CollectionUtil.isNotEmpty(parents)) {
vos.addAll(parents);
parents.forEach(p -> bindParent(p, vos, departments));
treeDepartments.addAll(parents);
parents.forEach(p -> bindParent(p, treeDepartments, departments));
}
}