有时候在公司我们需要把微信企业号的组织架构和人员导出来,但微信企业号对于人员部门只能导出一个部门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;
}
代码思路比较简单的,本人调试几次就弄出来了,当然用递归可能更简单些,看个人