如何实现两个部门下有同一个的子部门

Blade 未结 1 39

一、该问题的重现步骤是什么?

1. 部门表是否能实现这样的场景:A部门下有个C,B部门下要有个C,不是说部门名称一样,而是就是同一个C部门。这个C部门下面还有很多子部门以及大量人员。目前我们是人工创建了2个C部门,其下所有子部门和人员都搞了2套,维护比较麻烦

 


二、你期待的结果是什么?实际看到的又是什么?

有种类似虚拟部门的概念,实际就是同一个子部门,在A和B下都能看到这个部门。有没有好的实现方式?

三、你正在使用的是什么产品,什么版本?在什么操作系统上?

bladex4.4

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  • 伪代码如下,增加虚拟节点相关的字段,依旧手动创建部门C,但是第二个部门C要设置为虚拟,并且有一个真实id指向主维护的部门C的id。这样后续不管有多少个虚拟的部门C创建并绑定,都可以根据这些虚拟节点的真实ID反推找到主维护的部门。

    @Service
    public class VirtualDeptService {
        
        /**
         * 创建虚拟部门节点
         */
        public Department createVirtualDept(Long realDeptId, Long parentId) {
            Department realDept = departmentMapper.selectById(realDeptId);
            
            // 创建虚拟节点
            Department virtualDept = new Department();
            virtualDept.setDeptName(realDept.getDeptName() + "_引用");
            virtualDept.setParentId(parentId);
            virtualDept.setIsVirtual(true);
            virtualDept.setRealDeptId(realDeptId); // 指向真实部门
            
            departmentMapper.insert(virtualDept);
            return virtualDept;
        }
        
        /**
         * 获取部门信息(自动解析虚拟节点)
         */
        public DeptVO getDeptInfo(Long deptId) {
            Department dept = departmentMapper.selectById(deptId);
            
            if (dept.getIsVirtual()) {
                // 如果是虚拟节点,获取真实部门信息
                Department realDept = departmentMapper.selectById(dept.getRealDeptId());
                return buildDeptVO(realDept, dept.getParentId());
            }
            
            return buildDeptVO(dept, dept.getParentId());
        }
        
        /**
         * 获取部门下的人员(支持虚拟节点)
         */
        public List<User> getDeptUsers(Long deptId) {
            Department dept = departmentMapper.selectById(deptId);
            Long targetDeptId = dept.getIsVirtual() ? dept.getRealDeptId() : deptId;
            
            // 递归获取所有子部门
            List<Long> allDeptIds = getAllSubDeptIds(targetDeptId);
            return userMapper.selectByDeptIds(allDeptIds);
        }
    }


    0 讨论(0)
提交回复