1.org实体类

public class Org  implements Serializable {

    private static final long serialVersionUID = 1L;

    private String title;
    private Long parent;
    private List<User> userList;
    private List<Org> nodes;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Long getParent() {
        return parent;
    }

    public void setParent(Long parent) {
        this.parent = parent;
    }

    public List<Org> getNodes() {
        if(nodes == null){
            nodes = new ArrayList<Org>();
        }
        return nodes;
    }

    public void setNodes(List<Org> nodes) {
        this.nodes = nodes;
    }

    public List<User> getUserList() {
        if(userList == null){
            userList = new ArrayList<User>();
        }
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

    @Override
    public String toString() {
        return "Org{" +
                "createTime=" + createTime +
                ", title='" + title + '\'' +
                ", parent=" + parent +
                ", userList=" + userList +
                ", nodes=" + nodes +
                '}';
    }
}

2.查询该部门下的子部门

private List<Org> hasChilds(Long id){
        List<Org> orgs = super.selectList(
                new EntityWrapper<Org>().eq(Config.ABLE_CONFIG.ABLE_COLUMN,Config.ABLE_CONFIG.ABLE)
                    .eq("parent",id)
        );
        List<Org> orgList1 = new ArrayList<>();
        for(Org org : orgs){
            List<User> userList = userService.getByOrgId(org.getId());
            org.setUserList(userList);   //同时也查出了该部门下的所有人员
            orgList1.add(org);
        }
        return orgList1;
    }

3.查询该部门下的所有部门的id。---应用递归查询出所有的id,放到set集合中

 public Set<Long> getAllChildIds(Long id,Set<Long> set) {
        if(set == null){
            set = new HashSet<>();
        }
        List<Org> orgList = hasChilds(id);
        set.add(id);
        for (int i = 0; i < orgList.size(); i++) {
            set.add(orgList.get(i).getId());
            getAllChildIds(orgList.get(i).getId(),set);
        }
        return set;
    }

4.查询该部门下的所有部门部门---应用递归查询出该部门下的所有部门,放到Org实体类的List<Org> node属性中。(已经在实体类中定义过了)

    public Org  getAllChildOrgs(Long id) {
        Org org = null;
        if(id == 0){
            org = new Org();
        }else {
            org = get(id);
        }
        List<Org> orgList = hasChilds(id);
        for(Org org1 : orgList){
            Org org2 = getAllChildOrgs(org1.getId());
            org.getNodes().add(org2);
        }
        return org;
    }

5.递归删除该部门下所有部门

//递归删除该部门下所有部门
public boolean del(Long id) {
        if (id != null){
            List<Org> hasResponses = hasChilds(id);
            if (!CollectionUtils.isEmpty(hasResponses)){
                for (Org orgRsp:hasResponses){
                    del(orgRsp.getId());
                }
            }
            return delCurrent(id);

        }else {
            throw new ApplicationException(StatusCode.BAD_REQUEST.getCode(), StatusCode.BAD_REQUEST.getMessage());
        }
    }

//根据id删除对象
 private boolean delCurrent(Long id){
        Org org = new Org();
        org.setId(id);
        org.setIsDeleted(Config.ABLE_CONFIG.UNABLE);
        org.setUpdateTime(new Date());
        return super.updateById(org);
    }

业务-----部门Service常用逻辑的更多相关文章

  1. 业务-----添加Service常用逻辑

    1.参数不能为空 /** * 添加人员时判断是否字段全部传值 * @param request * @return */ private Boolean checkClientByCols(Clien ...

  2. 业务-----修改Service常用逻辑

    注意:修改时唯一属性不能重复 //num==null 时,没有修改Num,不用考虑重复问题.//num!=null 时,修改了num.考虑重复问题 if(!StringUtils.isEmpty(re ...

  3. Flask基础(06)-->视图常用逻辑

    Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...

  4. 业务型代码常用的SQL汇总(随时更新)

    做了一年的业务代码开发,记录并分享一下自己平时在项目中遇到的比较好用的sql 1.查询表中是否某一字段下的数据有重复数据(以ID为例) SELECT id FROM 表名GROUP BY ID HAV ...

  5. MySQL根据业务场景归纳常用SQL语句

    素材表数据:user[{"id":1,"name":"x"},{"id":2,"name":&quo ...

  6. 数据库及MYSQL基础(3)-JDBC

    教学视频链接:https://edu.aliyun.com/course/1694?spm=5176.11400004.0.0.29254768sg2H5P 程序文件链接:https://pan.ba ...

  7. MSSQL - 逻辑主键、业务主键和复合主键

    转载自:http://blog.csdn.net/sunrise918/article/details/5575054 这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论 ...

  8. kubernetes进阶之七:Service

    1.概述 Service也是Kubernetes里的最核心的资源对象之一,Kubernetes里的每个Service其实就是我们经常提起的微服务架构中的一个“微服务”,之前我们所说的Pod.RC等资源 ...

  9. SpringBoot 三层架构 Controller、Service、Dao作用和关系详解

    首先创建一个springboot项目. model层 model层也叫pojo层或者entity层,个人比较喜欢pojo层. 一般数据库的一张表对应一个pojo层,并且表中所有字段都在pojo层都一一 ...

随机推荐

  1. Jquery 中 ajaxSubmit使用讲解

    最近在使用ajaxForm,随便把使用方法记下下来,以便以后回顾. 1 ,引入依赖脚本 <script type="text/javascript" src="/j ...

  2. C#中删除集合中符合条件的元素以及需注意属相

    如果用foreach,会造成被遍历的集合更改后带来异常问题. 此时,用for循环可有效的解决这个问题. for(int i=0;i<List.Count;i++) { if(条件是真) { Li ...

  3. Django之Template

    模板层(template) 概念:  模板与html的区别:  模板=html+模板语法 模板语法: 1 变量:       {{}}    深度查询: 通过句点符.    列表,字典    clas ...

  4. k8s部署失败原因

    可以通过 kubectl describe pods *** --namespace=**** 查看问题描述

  5. 最简单例子图解JVM内存分配和回收(转)

    本文转自http://ifeve.com/a-simple-example-demo-jvm-allocation-and-gc/ http://www.idouba.net/a-simple-exa ...

  6. Java基础之集合篇(模块记忆、精要分析)

    千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...

  7. squid调整

    Squid采用新方案部署的调整步骤一,隔离二,修改三,验证四,波及==============================[1] 把被引用到的待修改对像实例,从前端应用负载nginx的配置中摘出 ...

  8. VMware虚拟机将英文改成中文的方法

    由于之前安装的虚拟机和老师要求的不同,我安装的是VMware,所以没有安装教程,没能修改系统语言,用了几次发现英文的不太方便,特别是出错的时候,看不懂系统的出错提示. 我从网上参考了https://b ...

  9. Android学习之基础知识五—Android常用的七大控件

    一.TextView控件:在界面上显示一段文本信息 先看XML代码和执行效果:         代码分析: 1.android:id属性,给当前控件定义了一个唯一的标识符 2.android:layo ...

  10. AS导入一个工程出现Error:please select Android SDK的错误

    导入一个新的工程出现:Error:please select Android SDK 的错误 现象描述:点击运行程序按钮,弹出一个“Edit Configure”的对话框,最下面报:Error:ple ...