| package com.xzx.gc.role.rbac.tree;  | 
|   | 
| import com.fasterxml.jackson.annotation.JsonIgnore;  | 
| import com.xzx.gc.entity.CoreOrg;  | 
|   | 
| import java.util.ArrayList;  | 
| import java.util.LinkedList;  | 
| import java.util.List;  | 
|   | 
| public class OrgItem implements TreeItem  {  | 
|     private Long id;  | 
|     private CoreOrg org;  | 
|     @JsonIgnore  | 
|     private OrgItem parent= null;  | 
|     private List<OrgItem> children = new  ArrayList<>();  | 
|     private String name;  | 
|     public OrgItem(CoreOrg org){  | 
|         this.id = org.getId();  | 
|         this.org = org;  | 
|         this.name =org!=null?org.getName():null;  | 
|     }  | 
|   | 
|   | 
|     public OrgItem findChild(Long orgId){  | 
|         if(id.equals(orgId)){  | 
|             return this;  | 
|         }  | 
|         for(OrgItem item:children){  | 
|             OrgItem find = item.findChild(orgId);  | 
|             if(find!=null){  | 
|                 return find;  | 
|             }  | 
|         }  | 
|         return null;  | 
|   | 
|     }  | 
|   | 
|   | 
|     public OrgItem findParentOrgItem(String type){  | 
|         if(this.org.getType().equals(type)){  | 
|             return this;  | 
|         }  | 
|         OrgItem parent = this;  | 
|         while((parent=parent.getParent())!=null){  | 
|             if(parent.getId()!=0&&parent.org.getType().equals(type)){  | 
|                 return parent;  | 
|             }  | 
|         }  | 
|   | 
|         return null;  | 
|     }  | 
|   | 
|   | 
|     /** 查询所有符合条件的的组织机构  | 
|      * @param type 参考SysOrg,type=0 获取所有子机构  | 
|      * @return  | 
|      */  | 
|     public List<OrgItem> findAllChildOrgItem(String type){  | 
|   | 
|         return findAllChildOrgItem(type,null);  | 
|     }  | 
|   | 
|     /**  | 
|      * 取得当前机构的所有子机构  | 
|      * @return  | 
|      */  | 
|     public List<Long> findAllChildrenId(){  | 
|         List<OrgItem> items =findAllChildOrgItem(null);  | 
|         List<Long> children = new ArrayList<Long>();  | 
|         for(OrgItem item:items){  | 
|             children.add(item.getId());  | 
|         }  | 
|         return children;  | 
|     }  | 
|   | 
|     /** 查询下级所期望的机构,但不查询breakType 指定的机构  | 
|      * @param type  期望机构,0代表所有 ,1 集团 2 公司 等  | 
|      * @param breakType 不希望出现的机构  | 
|      * @return  | 
|      */  | 
|     public List<OrgItem> findAllChildOrgItem(String type ,String breakType){  | 
|         List<OrgItem> all = new LinkedList<>();  | 
|         findChildOrgItem(all,this,type,breakType);  | 
|         return all;  | 
|     }  | 
|   | 
|     public List<OrgItem> findAllChildOrgItem(){  | 
|         return this.findAllChildOrgItem(null, null);  | 
|     }  | 
|   | 
|   | 
|   | 
|   | 
|     private void findChildOrgItem(List<OrgItem> all,OrgItem parent,String type,String breakType){  | 
|         for(OrgItem item:parent.children){  | 
|             if(item.org.getType().equals(breakType)){  | 
|                 continue ;  | 
|             }  | 
|   | 
|             if(type==null||type.equals(item.org.getType())){  | 
|                 all.add(item);  | 
|   | 
|             }  | 
|   | 
|   | 
|             findChildOrgItem(all,item,type,breakType);  | 
|         }  | 
|   | 
|     }  | 
|   | 
|   | 
|     @Override  | 
|     public int hashCode() {  | 
|         final int prime = 31;  | 
|         int result = 1;  | 
|         result = prime * result + ((id == null) ? 0 : id.hashCode());  | 
|         return result;  | 
|     }  | 
|     @Override  | 
|     public boolean equals(Object obj) {  | 
|         if (this == obj)  | 
|             return true;  | 
|         if (obj == null)  | 
|             return false;  | 
|         if (getClass() != obj.getClass())  | 
|             return false;  | 
|         OrgItem other = (OrgItem) obj;  | 
|         if (id == null) {  | 
|             if (other.id != null)  | 
|                 return false;  | 
|         } else if (!id.equals(other.id))  | 
|             return false;  | 
|         return true;  | 
|     }  | 
|     public Long getId() {  | 
|         return id;  | 
|     }  | 
|     public void setId(Long id) {  | 
|         this.id = id;  | 
|     }  | 
|     public CoreOrg getOrg() {  | 
|         return org;  | 
|     }  | 
|     public void setOrg(CoreOrg org) {  | 
|         this.org = org;  | 
|     }  | 
|     public OrgItem getParent() {  | 
|         return parent;  | 
|     }  | 
|     /*public void setParent(OrgItem parent) {  | 
|   | 
|             this.parent = parent;  | 
|             this.parent.children.add(this);  | 
|   | 
|   | 
|     }*/  | 
|     public List<OrgItem> getChildren() {  | 
|         return children;  | 
|     }  | 
|     public void setChildren(List<OrgItem> children) {  | 
|         this.children = children;  | 
|     }  | 
|   | 
|   | 
|     @Override  | 
|     public String getName() {  | 
|         return this.name;  | 
|     }  | 
|   | 
|   | 
|   | 
| }  |