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等等,就看大佬們自由發揮了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章