1. 程式人生 > >如何拿取微信企業號人員的完整部門

如何拿取微信企業號人員的完整部門

有時候在公司我們需要把微信企業號的組織架構和人員匯出來,但微信企業號對於人員部門只能匯出一個部門id,當然你也可以再根據id得到部門,但這個時候你會發現得到的只是員工最終屬於的部門,而不是員工完整的部門結構,如何得到完整的部門,其實也不難,我相信有很多方法,下面說說我自己用到的:



/**
 * 企業微信--管理部門
 *
 * @author zhoujf
 *
 */
public class DepartmentAPI {
    
    private static final Logger logger = LoggerFactory.getLogger(DepartmentAPI.class);


    private static String department_list_url = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=ACCESS_TOKEN";
    

    /**
     * 獲取所有部門
     * @return
     */
    public static List<Department> getAllDepartment() {
        AccessToken accessToken = AccessTokenAPI.getAccessToken();
        String accesstoken2 = accessToken.getAccesstoken();
        String url = department_list_url.replace("ACCESS_TOKEN", accesstoken2);  
        // 呼叫介面建立部門
        JSONObject jsonObject = HttpUtil.sendPost(url);
        if (null != jsonObject) {
            String departmentjson = jsonObject.getString("department");
            Gson gson = new Gson();
            List<Department> ps = gson.fromJson(departmentjson, new TypeToken<List<Department>>(){}.getType());
            return ps;
        }  
        return null;  
    }
    /**
     * 獲取部門資訊
     * @param id
     * @return
     */
    public static List<Department> get(String id){
        List<Department> list = getAllDepartment();
        List<Department> dList=new ArrayList<Department>();
        if(list != null){
            for(Department item : list){
                if(item.getId().equals(id)){
                    dList.add(item);
                }
            }
            return dList;
        }
        return null;
    }

}

上面是得到部門的兩個方法,一般做過微信企業號的都會有這樣的工具類,網上也有,包含一個部門實體類:



/**
 * 微信部門
 *
 * @author zhoujf
 */
public class Department implements Serializable {

   // private static final long serialVersionUID = 6102281663991601498L;
    private String id;
    private String name;
    private String parentid;
    //private String order;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    
 

    public String getParentid() {
        return parentid;
    }

    public void setParentid(String parentid) {
        this.parentid = parentid;
    }

    public void setName(String name) {
        this.name = name;
    }



    @Override
    public String toString() {
        return "Department{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", parentid=" + parentid +
                '}';
    }
}



還有公司自己的ACCESSTOKEN我這裡是經過處理的,不作為引數。下面是我自己的處理:

//根據id得到name和parentid
public String getnames(String id){

    String str="";
    String pid=null;
    Department department=null;  //定義好幾個null後面用來組裝或者替換資料
    String name=null;

    department = DepartmentAPI.get(id);
    pid = department.getParentid();
     name = department.getName();//根據id得到部門名稱和父id

    while(!pid.equals("1")){  //當父id不為1時候,迴圈,父id為“1”時候表示已經取到最頂層“微信企業號”了
        str=name+"_"+str; //拼接部門:卓越教育集團_優學事業部_廣州分校_教學產品部_初中產品處_
        pid = department.getParentid(); //得到父id
        department = DepartmentAPI.get(pid); //根據父id再取上一層部門
        name=department.getName(); //重新賦值給name
    }
    str = str.substring(0,str.length() - 1); //去除最後一個“_”:卓越教育集團_優學事業部_廣州分校_教學產品部_初中產品處

    return str;
}

程式碼思路比較簡單的,本人除錯幾次就弄出來了,當然用遞迴可能更簡單些,看個人