钉钉通过部门ID 统计改部门下所有部门总人数 和上级部门主管信息

此功能设计:抓取钉钉组织架构下所有部门 进行统计

1.统计各个部门下所有人员总人数 和当前统计部门ID 和部门名称

2.统计各个部门的主管如果该最底层部门有主管这设置如果没有默认往上在找一级部门 寻求主管信息,如果还没有则放弃寻找

此方法非常耗时,请跟进公司个人组织架构人数在确定使用,本测试数据 7000人 800+部门

https://blog.csdn.net/qq_36907589/article/details/103030641 获取token

/**
     * 主管测试
     * @throws Exception
     */
    @RequestMapping(params = "getDepChargeTest")
    @ResponseBody
    public void getDepChargeTest() throws Exception {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
        OapiDepartmentListRequest request = new OapiDepartmentListRequest();
        request.setId("1");//118063677 信息技术中心  127041966  运营管理 127041966
        request.setHttpMethod("GET");
        request.setFetchChild(true);//是否递归部门的全部子部门,ISV微应用固定传递false
        OapiDepartmentListResponse response = client.execute(request, NhTokenThread.accessToken);
        List<OapiDepartmentListResponse.Department> department = response.getDepartment();
        int count =0;
        for (OapiDepartmentListResponse.Department department1 : department) {
            String departmentName = department1.getName();//部门名称
            Long departmentId = department1.getId();//部门ID

            //查询是否有子部门
            DingTalkClient clientChild = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list_ids");
            OapiDepartmentListIdsRequest requestChild = new OapiDepartmentListIdsRequest();
            requestChild.setId(String.valueOf(departmentId));
            requestChild.setHttpMethod("GET");
            OapiDepartmentListIdsResponse responseChild = clientChild.execute(requestChild, NhTokenThread.accessToken);
            List<Long> subDeptChildIdList = responseChild.getSubDeptIdList();
            if(subDeptChildIdList.size()==0){
                //查询最下级子部门所有上级部门
                DingTalkClient clientSupDep = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list_parent_depts_by_dept");
                OapiDepartmentListParentDeptsByDeptRequest requestSupDep = new OapiDepartmentListParentDeptsByDeptRequest();
                requestSupDep.setId(departmentId.toString());
                requestSupDep.setHttpMethod("GET");
                OapiDepartmentListParentDeptsByDeptResponse responseSupDep = clientSupDep.execute(requestSupDep, NhTokenThread.accessToken);
                List<Long> parentIds = responseSupDep.getParentIds();
                //主管姓名
                String  managePerson ="";
                //主管userID
                String  manageUserId ="";
                if(parentIds!=null){
                    if(parentIds.size()>=0){
                        Long depSupDep = parentIds.get(0);//上级部门ID
                        //通过上级部门id获取上级主管信息
                        DingTalkClient clientDepSum = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist");
                        OapiUserSimplelistRequest  requestDepSum= new OapiUserSimplelistRequest();
                        requestDepSum.setDepartmentId(depSupDep);
                        requestDepSum.setHttpMethod("GET");
                        try {
                            OapiUserSimplelistResponse responseDepSum = clientDepSum.execute(requestDepSum, NhTokenThread.accessToken);
                            List<OapiUserSimplelistResponse.Userlist> userlist = responseDepSum.getUserlist();
                            for (OapiUserSimplelistResponse.Userlist userlists : userlist) {
                                DingTalkClient clientMag = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");
                                OapiUserGetRequest requestMag = new OapiUserGetRequest();
                                requestMag.setUserid(userlists.getUserid());
                                requestMag.setHttpMethod("GET");
                                OapiUserGetResponse responseMag = clientMag.execute(requestMag, NhTokenThread.accessToken);
                                String isLeaderInDepts = responseMag.getIsLeaderInDepts();
                                if(StringUtil.isNotEmpty(isLeaderInDepts)){
                                    if(isLeaderInDepts.contains("true")){
                                     //如果是主管
                                        managePerson=responseMag.getName();
                                        manageUserId=responseMag.getUserid();
                                    }
                                }
                            }
                        }catch (ApiException e) {
                            e.printStackTrace();
                        }
                        //如果通过上级部门未查出来主管信息,则再往上级部门查询
                        if(StringUtil.isEmpty(managePerson)&&StringUtil.isEmpty(manageUserId) ){
                                        //如果本部门没有主管再次往上一级部门查找【最高查询2级】
                                        if(parentIds.size()>=1) {
                                            Long depSupDepSuperior = parentIds.get(1);//上级部门ID
                                            //通过上级部门id获取上[上]级主管信息
                                            DingTalkClient clientDepSumUp = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist");
                                            OapiUserSimplelistRequest  requestDepSumUp= new OapiUserSimplelistRequest();
                                            requestDepSumUp.setDepartmentId(depSupDepSuperior);
                                            requestDepSumUp.setHttpMethod("GET");

                                            try {
                                                OapiUserSimplelistResponse responseDepSumUp = clientDepSumUp.execute(requestDepSumUp, NhTokenThread.accessToken);
                                                List<OapiUserSimplelistResponse.Userlist> userlistUp = responseDepSumUp.getUserlist();
                                                for (OapiUserSimplelistResponse.Userlist userlistUps : userlistUp) {

                                                    DingTalkClient clientMagUp = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");
                                                    OapiUserGetRequest requestMagUp = new OapiUserGetRequest();
                                                    requestMagUp.setUserid(userlistUps.getUserid());
                                                    requestMagUp.setHttpMethod("GET");
                                                    OapiUserGetResponse responseMagUp = clientMagUp.execute(requestMagUp, NhTokenThread.accessToken);
                                                    String isLeaderInDeptsUp = responseMagUp.getIsLeaderInDepts();
                                                    if (StringUtil.isNotEmpty(isLeaderInDeptsUp)) {
                                                        if (isLeaderInDeptsUp.contains("true")) {
                                                            //如果是主管
                                                            managePerson = responseMagUp.getName();
                                                            manageUserId = responseMagUp.getUserid();
                                                        }
                                                    }
                                                }
                                            }catch (ApiException e) {
                                                e.printStackTrace();
                                            }

                                        }
                        }
                    }
                }
                //说明没有子部门
                //通过部门名称 和部门ID 查询改部门下有多少人
                DingTalkClient clientDepSum = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist");
                OapiUserSimplelistRequest  requestDepSum= new OapiUserSimplelistRequest();
                requestDepSum.setDepartmentId(departmentId);
                requestDepSum.setHttpMethod("GET");
                try {
                    OapiUserSimplelistResponse responseDepSum = clientDepSum.execute(requestDepSum, NhTokenThread.accessToken);
                    List<OapiUserSimplelistResponse.Userlist> userlist = responseDepSum.getUserlist();
                    TDingLogDepBaseEntity tDingLogDepBaseEntity = new TDingLogDepBaseEntity();
                    tDingLogDepBaseEntity.setCreateDate(new Date());
                    tDingLogDepBaseEntity.setDepName(departmentName);
                    tDingLogDepBaseEntity.setDepId(departmentId.toString());
                    tDingLogDepBaseEntity.setDepNum(String.valueOf(userlist.size()));
                    tDingLogDepBaseEntity.setDepLeadName(managePerson);
                    tDingLogDepBaseEntity.setDepLeadId(manageUserId);
                    tDingLogDepBaseService.save(tDingLogDepBaseEntity);

                    System.out.println("部门: "+departmentName+"  部门ID=" + departmentId + "  人数  " + userlist.size()+"  部门主管  "+managePerson  +"  部门主管ID "+manageUserId);
                }catch (ApiException e) {
                    e.printStackTrace();
                }
            }else {
                int sumDepAllCount=0;//改部门下人数
                DingTalkClient clientChildAlldep = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
                OapiDepartmentListRequest requestChildAlldep = new OapiDepartmentListRequest();
                requestChildAlldep.setId(department1.getId().toString());
                requestChildAlldep.setHttpMethod("GET");
                requestChildAlldep.setFetchChild(true);//是否递归部门的全部子部门,ISV微应用固定传递false
                OapiDepartmentListResponse responseChildAlldep = clientChildAlldep.execute(requestChildAlldep, NhTokenThread.accessToken);
                List<OapiDepartmentListResponse.Department> departmentChildAlldep = responseChildAlldep.getDepartment();
                if(departmentChildAlldep.size()!=0){
                        for (OapiDepartmentListResponse.Department department2 : departmentChildAlldep) {
                               //通过部门名称 和部门ID 查询改部门下有多少人
                               DingTalkClient clientDepSum = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist");
                               OapiUserSimplelistRequest  requestDepSum= new OapiUserSimplelistRequest();
                              requestDepSum.setDepartmentId(department2.getId());
                               requestDepSum.setHttpMethod("GET");
                               try {
                                   OapiUserSimplelistResponse responseDepSum = clientDepSum.execute(requestDepSum, NhTokenThread.accessToken);
                                   List<OapiUserSimplelistResponse.Userlist> userlist = responseDepSum.getUserlist();
                                    int sumDepAll= userlist.size();
                                   sumDepAllCount=sumDepAll+sumDepAllCount; //如果多级子部门循环算出改部门下所有人数
                                }catch (ApiException e) {
                                    e.printStackTrace();
                               }
                           }
                    }
                //通过部门名称 和部门ID 查询改部门下主管信息 和 该主管部门下 负责的总人数
                DingTalkClient clientDepSum = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist");
                OapiUserSimplelistRequest  requestDepSum= new OapiUserSimplelistRequest();
                requestDepSum.setDepartmentId(departmentId);
                requestDepSum.setHttpMethod("GET");
                try {
                    OapiUserSimplelistResponse responseDepSum = clientDepSum.execute(requestDepSum, NhTokenThread.accessToken);
                    List<OapiUserSimplelistResponse.Userlist> userlist = responseDepSum.getUserlist();
                    for (OapiUserSimplelistResponse.Userlist userlists : userlist) {
                        TDingLogDepBaseEntity tDingLogDepBaseEntity = new TDingLogDepBaseEntity();
                        tDingLogDepBaseEntity.setCreateDate(new Date());
                        tDingLogDepBaseEntity.setDepName(departmentName);
                        tDingLogDepBaseEntity.setDepId(departmentId.toString());
                        tDingLogDepBaseEntity.setDepNum(String.valueOf((sumDepAllCount+userlist.size())));
                        tDingLogDepBaseEntity.setDepLeadName(userlists.getName());
                        tDingLogDepBaseEntity.setDepLeadId(userlists.getUserid());
                        tDingLogDepBaseService.save(tDingLogDepBaseEntity);
                        System.out.println("主管部门: "+departmentName+"  主管部门ID=" + departmentId + " 人数 "+(sumDepAllCount+userlist.size())+"  主管名字 " + userlists.getName() +"  主管ID "+userlists.getUserid());
                    }
                }catch (ApiException e) {
                    e.printStackTrace();
                }

            }
        }
        System.out.println("--------------------------------------end-------------------------");
    }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值