如何拿取微信企业号人员的完整部门

有时候在公司我们需要把微信企业号的组织架构和人员导出来,但微信企业号对于人员部门只能导出一个部门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;
}



代码思路比较简单的,本人调试几次就弄出来了,当然用递归可能更简单些,看个人


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值