此功能设计:抓取钉钉组织架构下所有部门 进行统计
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-------------------------");
}