diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/constant/PostCodeEnum.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/constant/PostCodeEnum.java
new file mode 100644
index 000000000..043e79c08
--- /dev/null
+++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/constant/PostCodeEnum.java
@@ -0,0 +1,40 @@
+package com.pig4cloud.pigx.admin.api.constant;
+
+/**
+ * 岗位编码
+ *
+ * @author lengleng
+ * @date 2024/6/14
+ *
+ * 'TEAM_LEADER', '部门负责人'
+ */
+
+public enum PostCodeEnum {
+ /**
+ * 部门负责人
+ */
+ TEAM_LEADER("TEAM_LEADER", "部门负责人");
+
+ /**
+ * 编码
+ */
+ private final String code;
+
+ /**
+ * 描述
+ */
+ private final String description;
+
+ PostCodeEnum(String code, String description) {
+ this.code = code;
+ this.description = description;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+}
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java
index dad49dcf7..6c1735cd3 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java
@@ -28,6 +28,7 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pig4cloud.pigx.admin.api.constant.OrgTypeEnum;
+import com.pig4cloud.pigx.admin.api.constant.PostCodeEnum;
import com.pig4cloud.pigx.admin.api.entity.*;
import com.pig4cloud.pigx.admin.api.utils.DataUtil;
import com.pig4cloud.pigx.admin.api.vo.DeptExcelVO;
@@ -58,284 +59,307 @@ import java.util.stream.Collectors;
@AllArgsConstructor
public class SysDeptServiceImpl extends ServiceImpl implements SysDeptService {
- private final SysUserMapper userMapper;
+ private final SysUserMapper userMapper;
- private final SysDeptMapper deptMapper;
+ private final SysDeptMapper deptMapper;
- private final SysPostMapper postMapper;
+ private final SysPostMapper postMapper;
- private final SysRoleMapper roleMapper;
+ private final SysRoleMapper roleMapper;
- private final SysUserPostMapper userPostMapper;
+ private final SysUserPostMapper userPostMapper;
- /**
- * 删除部门
- * @param id 部门 ID
- * @return 成功、失败
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public Boolean removeDeptById(Long id) {
- // 级联删除部门
- List idList = this.listDescendant(id).stream().map(SysDept::getDeptId).collect(Collectors.toList());
+ /**
+ * 删除部门
+ *
+ * @param id 部门 ID
+ * @return 成功、失败
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean removeDeptById(Long id) {
+ // 级联删除部门
+ List idList = this.listDescendant(id).stream().map(SysDept::getDeptId).collect(Collectors.toList());
- Optional.ofNullable(idList).filter(CollUtil::isNotEmpty).ifPresent(this::removeByIds);
+ Optional.ofNullable(idList).filter(CollUtil::isNotEmpty).ifPresent(this::removeByIds);
- return Boolean.TRUE;
- }
+ return Boolean.TRUE;
+ }
- /**
- * 查询全部部门树
- * @param deptName
- * @param parentId
- * @return 树 部门名称
- */
- @Override
- public List> selectTree(String deptName, Long parentId) {
- // 查询全部部门
- List deptAllList = deptMapper.selectList(
- Wrappers.lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName));
- // 查询数据权限内部门
- List deptOwnIdList = deptMapper.selectListByScope(
- Wrappers.lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName),
- DataScope.of()).stream().map(SysDept::getDeptId).collect(Collectors.toList());
+ /**
+ * 查询全部部门树
+ *
+ * @param deptName
+ * @param parentId
+ * @return 树 部门名称
+ */
+ @Override
+ public List> selectTree(String deptName, Long parentId) {
+ // 查询全部部门
+ List deptAllList = deptMapper
+ .selectList(Wrappers.lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName));
+ // 查询数据权限内部门
+ List deptOwnIdList = deptMapper
+ .selectListByScope(
+ Wrappers.lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName),
+ DataScope.of())
+ .stream()
+ .map(SysDept::getDeptId)
+ .collect(Collectors.toList());
- // 权限内部门
- List> collect = deptAllList.stream()
- .filter(dept -> dept.getDeptId().intValue() != dept.getParentId())
- .sorted(Comparator.comparingInt(SysDept::getSortOrder)).map(dept -> {
- TreeNode treeNode = new TreeNode<>();
- treeNode.setId(dept.getDeptId());
- treeNode.setParentId(dept.getParentId());
- treeNode.setName(dept.getName());
- treeNode.setWeight(dept.getSortOrder());
- // 有权限不返回标识
- Map extra = new HashMap<>(8);
- extra.put("isLock", !deptOwnIdList.contains(dept.getDeptId()));
- extra.put("createTime", dept.getCreateTime());
- treeNode.setExtra(extra);
- return treeNode;
- }).collect(Collectors.toList());
+ // 权限内部门
+ List> collect = deptAllList.stream()
+ .filter(dept -> dept.getDeptId().intValue() != dept.getParentId())
+ .sorted(Comparator.comparingInt(SysDept::getSortOrder))
+ .map(dept -> {
+ TreeNode treeNode = new TreeNode<>();
+ treeNode.setId(dept.getDeptId());
+ treeNode.setParentId(dept.getParentId());
+ treeNode.setName(dept.getName());
+ treeNode.setWeight(dept.getSortOrder());
+ // 有权限不返回标识
+ Map extra = new HashMap<>(8);
+ extra.put("isLock", !deptOwnIdList.contains(dept.getDeptId()));
+ extra.put("createTime", dept.getCreateTime());
+ treeNode.setExtra(extra);
+ return treeNode;
+ })
+ .collect(Collectors.toList());
- // 模糊查询 不组装树结构 直接返回 表格方便编辑
- if (StrUtil.isNotBlank(deptName)) {
- return collect.stream().map(node -> {
- Tree tree = new Tree<>();
- tree.putAll(node.getExtra());
- BeanUtils.copyProperties(node, tree);
- return tree;
- }).collect(Collectors.toList());
- }
+ // 模糊查询 不组装树结构 直接返回 表格方便编辑
+ if (StrUtil.isNotBlank(deptName)) {
+ return collect.stream().map(node -> {
+ Tree tree = new Tree<>();
+ tree.putAll(node.getExtra());
+ BeanUtils.copyProperties(node, tree);
+ return tree;
+ }).collect(Collectors.toList());
+ }
- return TreeUtil.build(collect, parentId == null ? 0 : parentId);
- }
+ return TreeUtil.build(collect, parentId == null ? 0 : parentId);
+ }
- /**
- * 导出部门
- * @return
- */
- @Override
- public List listExcelVo() {
- List list = this.list();
- List deptExcelVos = list.stream().map(item -> {
- DeptExcelVO deptExcelVo = new DeptExcelVO();
- deptExcelVo.setName(item.getName());
- Optional first = this.list().stream().filter(it -> item.getParentId().equals(it.getDeptId()))
- .map(SysDept::getName).findFirst();
- deptExcelVo.setParentName(first.orElse("根部门"));
- deptExcelVo.setSortOrder(item.getSortOrder());
- return deptExcelVo;
- }).collect(Collectors.toList());
- return deptExcelVos;
- }
+ /**
+ * 导出部门
+ *
+ * @return
+ */
+ @Override
+ public List listExcelVo() {
+ List list = this.list();
+ List deptExcelVos = list.stream().map(item -> {
+ DeptExcelVO deptExcelVo = new DeptExcelVO();
+ deptExcelVo.setName(item.getName());
+ Optional first = this.list()
+ .stream()
+ .filter(it -> item.getParentId().equals(it.getDeptId()))
+ .map(SysDept::getName)
+ .findFirst();
+ deptExcelVo.setParentName(first.orElse("根部门"));
+ deptExcelVo.setSortOrder(item.getSortOrder());
+ return deptExcelVo;
+ }).collect(Collectors.toList());
+ return deptExcelVos;
+ }
- @Override
- public R importDept(List excelVOList, BindingResult bindingResult) {
- List errorMessageList = (List) bindingResult.getTarget();
+ @Override
+ public R importDept(List excelVOList, BindingResult bindingResult) {
+ List errorMessageList = (List) bindingResult.getTarget();
- List deptList = this.list();
- for (DeptExcelVO item : excelVOList) {
- Set errorMsg = new HashSet<>();
- boolean exsitUsername = deptList.stream().anyMatch(sysDept -> item.getName().equals(sysDept.getName()));
- if (exsitUsername) {
- errorMsg.add("部门名称已经存在");
- }
- SysDept one = this.getOne(Wrappers.lambdaQuery().eq(SysDept::getName, item.getParentName()));
- if (item.getParentName().equals("根部门")) {
- one = new SysDept();
- one.setDeptId(0L);
- }
- if (one == null) {
- errorMsg.add("上级部门不存在");
- }
- if (CollUtil.isEmpty(errorMsg)) {
- SysDept sysDept = new SysDept();
- sysDept.setName(item.getName());
- sysDept.setParentId(one.getDeptId());
- sysDept.setSortOrder(item.getSortOrder());
- baseMapper.insert(sysDept);
- }
- else {
- // 数据不合法情况
- errorMessageList.add(new ErrorMessage(item.getLineNum(), errorMsg));
- }
- }
- if (CollUtil.isNotEmpty(errorMessageList)) {
- return R.failed(errorMessageList);
- }
- return R.ok(null, "部门导入成功");
- }
+ List deptList = this.list();
+ for (DeptExcelVO item : excelVOList) {
+ Set errorMsg = new HashSet<>();
+ boolean exsitUsername = deptList.stream().anyMatch(sysDept -> item.getName().equals(sysDept.getName()));
+ if (exsitUsername) {
+ errorMsg.add("部门名称已经存在");
+ }
+ SysDept one = this.getOne(Wrappers.lambdaQuery().eq(SysDept::getName, item.getParentName()));
+ if (item.getParentName().equals("根部门")) {
+ one = new SysDept();
+ one.setDeptId(0L);
+ }
+ if (one == null) {
+ errorMsg.add("上级部门不存在");
+ }
+ if (CollUtil.isEmpty(errorMsg)) {
+ SysDept sysDept = new SysDept();
+ sysDept.setName(item.getName());
+ sysDept.setParentId(one.getDeptId());
+ sysDept.setSortOrder(item.getSortOrder());
+ baseMapper.insert(sysDept);
+ } else {
+ // 数据不合法情况
+ errorMessageList.add(new ErrorMessage(item.getLineNum(), errorMsg));
+ }
+ }
+ if (CollUtil.isNotEmpty(errorMessageList)) {
+ return R.failed(errorMessageList);
+ }
+ return R.ok(null, "部门导入成功");
+ }
- /**
- * 查询所有子节点 (包含当前节点)
- * @param deptId 部门ID 目标部门ID
- * @return ID
- */
- @Override
- public List listDescendant(Long deptId) {
- // 查询全部部门
- List allDeptList = baseMapper.selectList(Wrappers.emptyWrapper());
+ /**
+ * 查询所有子节点 (包含当前节点)
+ *
+ * @param deptId 部门ID 目标部门ID
+ * @return ID
+ */
+ @Override
+ public List listDescendant(Long deptId) {
+ // 查询全部部门
+ List allDeptList = baseMapper.selectList(Wrappers.emptyWrapper());
- // 递归查询所有子节点
- List resDeptList = new ArrayList<>();
- recursiveDept(allDeptList, deptId, resDeptList);
+ // 递归查询所有子节点
+ List resDeptList = new ArrayList<>();
+ recursiveDept(allDeptList, deptId, resDeptList);
- // 添加当前节点
- resDeptList.addAll(allDeptList.stream().filter(sysDept -> deptId.equals(sysDept.getDeptId()))
- .collect(Collectors.toList()));
- return resDeptList;
- }
+ // 添加当前节点
+ resDeptList.addAll(allDeptList.stream().filter(sysDept -> deptId.equals(sysDept.getDeptId())).collect(Collectors.toList()));
+ return resDeptList;
+ }
- /**
- * 获取部门负责人
- *
- * 1. 根据dept 查询用户 2. 筛选用户列表中 post
- * @param deptId deptId
- * @return user id list
- */
- @Override
- public List listDeptLeader(Long deptId) {
- List sysUserList = userMapper
- .selectList(Wrappers.lambdaQuery().eq(SysUser::getDeptId, deptId));
- if (CollUtil.isEmpty(sysUserList)) {
- return null;
- }
+ /**
+ * 获取部门负责人
+ *
+ * 1. 根据dept 查询用户 2. 筛选用户列表中 post
+ *
+ * @param deptId deptId
+ * @return user id list
+ */
+ @Override
+ public List listDeptLeader(Long deptId) {
+ List sysUserList = userMapper
+ .selectList(Wrappers.lambdaQuery().eq(SysUser::getDeptId, deptId));
+ if (CollUtil.isEmpty(sysUserList)) {
+ return null;
+ }
- SysPost deptLeader = postMapper
- .selectOne(Wrappers.lambdaQuery().eq(SysPost::getPostCode, "DEPT_LEADER"));
- if (deptLeader == null) {
- return null;
- }
+ SysPost deptLeader = postMapper
+ .selectOne(Wrappers.lambdaQuery().eq(SysPost::getPostCode, PostCodeEnum.TEAM_LEADER.getCode()));
+ if (deptLeader == null) {
+ return null;
+ }
- List userIdList = sysUserList.stream().map(SysUser::getUserId).collect(Collectors.toList());
- return userPostMapper.selectList(Wrappers.lambdaQuery().in(SysUserPost::getUserId, userIdList))
- .stream().filter(post -> Objects.equals(post.getPostId(), deptLeader.getPostId()))
- .map(SysUserPost::getUserId).collect(Collectors.toList());
- }
+ List userIdList = sysUserList.stream().map(SysUser::getUserId).collect(Collectors.toList());
+ return userPostMapper.selectList(Wrappers.lambdaQuery().in(SysUserPost::getUserId, userIdList))
+ .stream()
+ .filter(post -> Objects.equals(post.getPostId(), deptLeader.getPostId()))
+ .map(SysUserPost::getUserId)
+ .collect(Collectors.toList());
+ }
- /**
- * 根据父部门ID和类型获取组织树
- * @param parentDeptId 父部门ID
- * @param type 类型
- * @return 组织树信息
- */
- public Map listOrgTree(Long parentDeptId, String type) {
+ /**
+ * 根据父部门ID和类型获取组织树
+ *
+ * @param parentDeptId 父部门ID
+ * @param type 类型
+ * @return 组织树信息
+ */
+ public Map listOrgTree(Long parentDeptId, String type) {
- List orgs = new LinkedList<>();
+ List orgs = new LinkedList<>();
- if (StrUtil.equals(type, OrgTypeEnum.ROLE.getType())) {
- // 角色
- List roleList = roleMapper.selectList(Wrappers.emptyWrapper());
+ if (StrUtil.equals(type, OrgTypeEnum.ROLE.getType())) {
+ // 角色
+ List roleList = roleMapper.selectList(Wrappers.emptyWrapper());
- roleList.forEach(role -> {
- OrgTreeVO orgTreeVo = new OrgTreeVO();
- orgTreeVo.setId(role.getRoleId());
- orgTreeVo.setName(role.getRoleName());
- orgTreeVo.setType(OrgTypeEnum.ROLE.getType());
- orgTreeVo.setSelected(false);
- orgs.add(orgTreeVo);
- });
+ roleList.forEach(role -> {
+ OrgTreeVO orgTreeVo = new OrgTreeVO();
+ orgTreeVo.setId(role.getRoleId());
+ orgTreeVo.setName(role.getRoleName());
+ orgTreeVo.setType(OrgTypeEnum.ROLE.getType());
+ orgTreeVo.setSelected(false);
+ orgs.add(orgTreeVo);
+ });
- return Dict.create().set("roleList", orgs).set("childDepartments", orgs).set("employees",
- new ArrayList<>());
- }
+ return Dict.create()
+ .set("roleList", orgs)
+ .set("childDepartments", orgs)
+ .set("employees", new ArrayList<>());
+ }
- Dict dict = Dict.create().set("titleDepartments", new ArrayList<>()).set("roleList", new ArrayList<>())
- .set("employees", new ArrayList<>());
+ Dict dict = Dict.create()
+ .set("titleDepartments", new ArrayList<>())
+ .set("roleList", new ArrayList<>())
+ .set("employees", new ArrayList<>());
- List deptList = this.list(
- Wrappers.lambdaQuery().eq(Objects.nonNull(parentDeptId), SysDept::getParentId, parentDeptId));
+ List deptList = this.list(
+ Wrappers.lambdaQuery().eq(Objects.nonNull(parentDeptId), SysDept::getParentId, parentDeptId));
- // 查询所有部门及员工
- List deptVoList = new ArrayList<>();
- deptList.forEach(dept -> {
- OrgTreeVO orgTreeVo = new OrgTreeVO();
- orgTreeVo.setId(dept.getDeptId());
- orgTreeVo.setName(dept.getName());
- orgTreeVo.setType(OrgTypeEnum.DEPT.getType());
- orgTreeVo.setSelected(false);
- deptVoList.add(orgTreeVo);
- });
- dict.set("childDepartments", deptVoList);
+ // 查询所有部门及员工
+ List deptVoList = new ArrayList<>();
+ deptList.forEach(dept -> {
+ OrgTreeVO orgTreeVo = new OrgTreeVO();
+ orgTreeVo.setId(dept.getDeptId());
+ orgTreeVo.setName(dept.getName());
+ orgTreeVo.setType(OrgTypeEnum.DEPT.getType());
+ orgTreeVo.setSelected(false);
+ deptVoList.add(orgTreeVo);
+ });
+ dict.set("childDepartments", deptVoList);
- if (!StrUtil.equals(type, OrgTypeEnum.DEPT.getType())) {
+ if (!StrUtil.equals(type, OrgTypeEnum.DEPT.getType())) {
- List userVoList = new ArrayList<>();
+ List userVoList = new ArrayList<>();
- List userList = userMapper
- .selectList(Wrappers.lambdaQuery().in(SysUser::getDeptId, CollUtil.toList(parentDeptId)));
+ List userList = userMapper
+ .selectList(Wrappers.lambdaQuery().in(SysUser::getDeptId, CollUtil.toList(parentDeptId)));
- userList.forEach(user -> {
- OrgTreeVO orgTreeVo = new OrgTreeVO();
- orgTreeVo.setId(user.getUserId());
- orgTreeVo.setName(user.getUsername());
- orgTreeVo.setType(OrgTypeEnum.USER.getType());
- orgTreeVo.setSelected(false);
- orgTreeVo.setAvatar(user.getAvatar());
- userVoList.add(orgTreeVo);
- });
- dict.set("employees", userVoList);
- }
+ userList.forEach(user -> {
+ OrgTreeVO orgTreeVo = new OrgTreeVO();
+ orgTreeVo.setId(user.getUserId());
+ orgTreeVo.setName(user.getUsername());
+ orgTreeVo.setType(OrgTypeEnum.USER.getType());
+ orgTreeVo.setSelected(false);
+ orgTreeVo.setAvatar(user.getAvatar());
+ userVoList.add(orgTreeVo);
+ });
+ dict.set("employees", userVoList);
+ }
- if (parentDeptId > 0) {
- List allDept = this.list();
- List depts = DataUtil.selectParentByDept(parentDeptId, allDept);
- dict.set("titleDepartments", CollUtil.reverse(depts));
- }
+ if (parentDeptId > 0) {
+ List allDept = this.list();
+ List depts = DataUtil.selectParentByDept(parentDeptId, allDept);
+ dict.set("titleDepartments", CollUtil.reverse(depts));
+ }
- return dict;
- }
+ return dict;
+ }
- /**
- * 模糊搜索用户
- * @param username 用户名/拼音/首字母
- * @return 匹配到的用户
- */
- public List getOrgTreeUser(String username) {
- return userMapper.selectList(Wrappers.lambdaQuery().like(SysUser::getUsername, username)).stream()
- .map(user -> {
- OrgTreeVO orgTreeVo = new OrgTreeVO();
- orgTreeVo.setId(user.getUserId());
- orgTreeVo.setName(user.getUsername());
- orgTreeVo.setType(OrgTypeEnum.USER.getType());
- orgTreeVo.setSelected(false);
- orgTreeVo.setAvatar(user.getAvatar());
- return orgTreeVo;
- }).collect(Collectors.toList());
- }
+ /**
+ * 模糊搜索用户
+ *
+ * @param username 用户名/拼音/首字母
+ * @return 匹配到的用户
+ */
+ public List getOrgTreeUser(String username) {
+ return userMapper.selectList(Wrappers.lambdaQuery().like(SysUser::getUsername, username))
+ .stream()
+ .map(user -> {
+ OrgTreeVO orgTreeVo = new OrgTreeVO();
+ orgTreeVo.setId(user.getUserId());
+ orgTreeVo.setName(user.getUsername());
+ orgTreeVo.setType(OrgTypeEnum.USER.getType());
+ orgTreeVo.setSelected(false);
+ orgTreeVo.setAvatar(user.getAvatar());
+ return orgTreeVo;
+ })
+ .collect(Collectors.toList());
+ }
- /**
- * 递归查询所有子节点。
- * @param allDeptList 所有部门列表
- * @param parentId 父部门ID
- * @param resDeptList 结果集合
- */
- private void recursiveDept(List allDeptList, Long parentId, List resDeptList) {
- // 使用 Stream API 进行筛选和遍历
- allDeptList.stream().filter(sysDept -> sysDept.getParentId().equals(parentId)).forEach(sysDept -> {
- resDeptList.add(sysDept);
- recursiveDept(allDeptList, sysDept.getDeptId(), resDeptList);
- });
- }
+ /**
+ * 递归查询所有子节点。
+ *
+ * @param allDeptList 所有部门列表
+ * @param parentId 父部门ID
+ * @param resDeptList 结果集合
+ */
+ private void recursiveDept(List allDeptList, Long parentId, List resDeptList) {
+ // 使用 Stream API 进行筛选和遍历
+ allDeptList.stream().filter(sysDept -> sysDept.getParentId().equals(parentId)).forEach(sysDept -> {
+ resDeptList.add(sysDept);
+ recursiveDept(allDeptList, sysDept.getDeptId(), resDeptList);
+ });
+ }
}