飞书组织架构同步(部门和用户) Java-API使用
概述
1.飞书JavaSDK
飞书开放接口JavaSDK是飞书官方开发的一套封装了飞书开放平台请求的Java借口,便于企业应用整合到飞书平台。
具体可参考飞书官方开源仓库(可以拉取源码,查看官方demo):
https://github.com/larksuite/oapi-sdk-java
建议直接查看对应Service源码,官方demo过于简单(小声吐槽)。
本次实现主要针对飞书平台的基础通讯录功能(ContantService)的使用
1.准备工作
1.1 导入maven依赖
这里使用的是1.0.17-rc2版本,自己开发可以选用更新的版本。
<dependency>
<groupId>com.larksuite.oapi</groupId>
<artifactId>larksuite-oapi</artifactId>
<version>1.0.17-rc2</version>
</dependency>
1.2 功能概述
- 需要实现的功能: 将本地的部门和人员同步至飞书开放平台
- 主要涉及的API:通讯录功能 即 ContactService
- Constants.CUSTOM_DEPT_ID_TYPE = “department_id” 含义为:设置飞书部门id为自定义id(默认为飞书自动生成的open_id)
- Constants.CUSTOM_USER_ID_TYPE = “user_id” 含义为:设置飞书用户id为自定义id(默认飞书自动生成的open_id)
1.3 解决思路
1.本地建立两张飞书信息表(feishu_user和feishu_dept)
2.对线上飞书平台的操作返回成功(response.getCode == 0)后,将信息都存入本地飞书表
3.比对飞书信息表和本地架构信息表,查找出需要 增、删、改 的部门和用户
4.批量操作同步数据
1.4 设置ContactService
在创建ContactService时,SDK会自动进行access_token的封装,实现开箱即用。
只要传入app_id和app_secret即可获取通讯录对应的权限。
@Configuration
public class FeishuConfig {
//app_id和app_secret在飞书平台的开发者后台-企业自建应用-凭证与基础信息可找到
private static final AppSettings appSettings = Config
.createInternalAppSettings(Constants.APP_ID,Constants.APP_SECRET,null,null);
//要使用时直接使用@Resource注解即可自动注入
@Bean(name = "contactService")
public ContactService getContactService(){
final Config config = new Config(Domain.FeiShu, appSettings,new DefaultStore());
return new ContactService(config);
}
}
2. 部门对接
2.1 部门的创建
注意事项: 必须先创建父部门(本地oa部门一般都有部门层级字段,按层级排序即可),然后才能创建子部门
Department department = new Department();//Department为API中封装好的实体类
//对department的必要参数进行设置
//略,具体请查询官方API文档(不可设置leaderUserId,因为leader可能没有创建)
//顶级部门的parentDepartmentId为“0”
Response<DepartmentCreateResult> response = contactService.getDepartments()
.create(department)
.setDepartmentIdType(Constants.CUSTOM_DEPT_ID_TYPE)//使用自己设置的department_id
.setUserIdType(Constants.CUSTOM_USER_ID_TYPE)//使用自己设置的user_id
.execute();
if(response.getCode() == 0){
//如果创建成功,将飞书部门信息录入本地
maaper.insert();//略
System.out.