Java和部门管理的那些事情

前言:

相信写过后台管理系统的人都知道,部门管理这个版块是非常之常见的,这个版块的作用就是管理一个公司的部门和部门下的人员,那么我们就要根据实际情况来设计,给使用者带来便捷。其实,这个东西初次接触觉得没啥东西,但是对于一个后端人员来说还是比较实用的,对于新接触后台管理的系统的小白,就更大有用处了。

准备:

  • 样式排版(左边部门管理,右边部门人员管理)——这样不就简单明了,方便操作。部门展现用树结构,部门人员展现用列表形式,看上去是不是很舒服。

  • 数据库设计

部门表——department

部门人员关系表——department_user

注意:有需要添加的字段的可以自己设计

  •  左边部门管理需要准备的接口(增删改查)
  1. 部门树的查询
  2. 新增部门
  3. 修改部门
  4. 删除部门——删除部门的同时,不仅需要删除自身还需要删除对应下的所有子级部门,并且删除部门人员关系
  •  右边部门人员管理需要准备的接口(增删改查)
  1. 部门添加人员
  2. 查询部门人员列表
  3. 移除部门人员
  4. 任命领导
  5. 查询所有有效的后台人员(排除已经添加过的人员)——供部门添加人员的时候选择

 实际操作:

  1. 创建实体类——对应数据库名,成员对应字段值(这里我就省略了)
  2. Controller层——基本写法我也省略了
  3. Service层——逻辑层挺重要的,难点的地方我觉得就是树结构的查询,还有删除部门。这里我上代码
  4. Dao层——基本写法
  5. sql文件——对照着表都能写出来吧,基本写法。

部门树的查询代码:

 /**
     * @Description 查询部门资源树
     * @author HeLiu
     * @date 2018/11/22 16:07
     */
    public List<Department> queryDepartmentTree() {
        //查询部门信息列表
        List<Department> departmentList = departmentDao.queryDepartmentList();
        return buildResource(departmentList);
    }

    /**
     * @Description 构建资源树
     * @author HeLiu
     * @date 2018/11/22 16:22
     */
    public List<Department> buildResource(List<Department> list) {
        List<Department> target = new ArrayList<>();
        if (!list.isEmpty()) {
            // 根元素
            list.stream().filter(department -> department.getParentId() == 0).forEach(department -> {// 根元素
                List<Department> children = getChildren(department, list);
                department.setChildren(children);
                target.add(department);
            });
        }
        return target;
    }

    private List<Department> getChildren(Department department, List<Department> list) {
        List<Department> children = new ArrayList<>();
        if (!list.isEmpty()) {
            list.stream().filter(child -> department.getId() == child.getParentId()).forEach(child -> {
                List<Department> tmp = getChildren(child, list);
                child.setChildren(tmp);
                if (tmp.isEmpty()) {
                    child.setLeaf(true);
                }
                children.add(child);
            });
        }
        return children;
    }

删除部门:

/**
     * @Description 删除部门
     * @author HeLiu
     * @date 2018/11/23 10:21
     */
    public int delDepartment(Integer departmentId) {
        //删除如部门同时果存在子级部门一同删除,并删除部门人员关系
        //查询部门信息列表
        List<Department> departmentList = departmentDao.queryDepartmentList();
        //获取父级下所有子级部门编号
        List<Integer> childrenDepartmentIds = getChildrenDepartmentIds(departmentId, departmentList);
        //把自身加上
        childrenDepartmentIds.add(departmentId);
        logger.info("删除部门的所有编号departmentIds{}:" + childrenDepartmentIds.toString());
        return transactionTemplate.execute(new TransactionCallback<Integer>() {
            @Override
            public Integer doInTransaction(TransactionStatus status) {
                //删除部门下人员关系
                departmentUserDao.delDepartmentUserByDepartmentIds(childrenDepartmentIds);
                //删除部门
                return departmentDao.delDepartment(childrenDepartmentIds);
            }
        });
    }

    /**
     * @Description 获取父级下所有子级部门ID
     * departmentId-父级部门Id,list-所有部门列表集合
     * @author HeLiu
     * @date 2018/11/29 10:18
     */
    public List<Integer> getChildrenDepartmentIds(Integer departmentId, List<Department> list) {
        List<Integer> childrenDepartmentIds = new ArrayList<>();
        if (!list.isEmpty()) {
            list.stream().filter(child -> departmentId == child.getParentId()).forEach(child -> {
                Integer departId = child.getId();
                childrenDepartmentIds.add(departId);
                List<Integer> childrenDepartIds = getChildrenDepartmentIds(departId, list);
                if (!childrenDepartIds.isEmpty()) {
                    childrenDepartmentIds.addAll(childrenDepartIds);
                }
            });
        }
        return childrenDepartmentIds;
    }

 

 结尾:

这里只是提供思路,后端管理系统的页面拿到接口数据应该都是很好处理的,怎么把数据展现出来,每个页面框架各有千秋类似Extjs,EasyUI等等,就看大佬们自由发挥了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值