如何拿取微信企業號人員的完整部門
有時候在公司我們需要把微信企業號的組織架構和人員匯出來,但微信企業號對於人員部門只能匯出一個部門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;
}
程式碼思路比較簡單的,本人除錯幾次就弄出來了,當然用遞迴可能更簡單些,看個人