1 - COP平台开放写入OpenAPI
1、概述
COP平台开放写入OpenAPI,由三方异构系统定时增量推送,完成组织同步模式。
2、优缺点分析
a. 优点:
COP集成压力小;
b. 缺点:
三方系统需要有一定的研发能力,完成接口调用和字段映射;
3、集成配置
序号 | 步骤名称 | 责任方 | 使用场景 |
---|---|---|---|
1 | 提供组织增量查询接口规范和文档 | 致远 | 必须,包含接口定义、签名规则、字段来源等信息 |
2 | API启用 | 致远 | 必须,只有启用的API才可以正常进行授权访问 |
3 | 新建接入应用 | 致远 | 必须,负责分配AppKey和APPSecret、配置访问授权、访问白名单等配置页 |
4 | 启用接入应用 | 致远 | 必须,未启用的接入应用,访问时会提示接入应用未启用 |
5 | 分配APPKey和APPSecret | 致远 | 必须,接口签名核心字段 |
6 | API授权 | 致远 | 必须,只有添加权限的额API接口才可以正常访问 |
7 | 导出接口文档 | 致远 | 非必须,导出所有已经启用的API手册 |
8 | 配置访问限流 | 致远 | 非必须,根据服务器资源性能,可以配置指定时间段内调用上线 |
9 | 配置访问白名单 | 致远 | 非必须,开启后,访问白名单之后的API请求将会被拦截 |
10 | 调用测试 | 三方系统 | 必须,根据平台提供的接口文档和必须字段,使用postmen等工具直接调用,验证网络连通性和信息准确性 |
4、接口目录
API分类 | API名称 | 接口描述 |
---|---|---|
组织信息同步(基于编码) | 批量新建/更新组织 | 组织(机构+部门) |
职务信息同步(基于编码) | 批量新建/更新职务 | 职务 |
职级信息同步(基于编码) | 批量新建/更新职级 | 职级 |
岗位信息同步(基于编码) | 批量新建/更新岗位 | 岗位 |
人员及任职信息同步(基于编码) | 批量新建/更新人员及任职 | 人员&任职 |
4.1、接口文档在线查看位置
4.2、接口签名
4.2.1、请求头(Header)
参数名称 | 是否必填 | 参数说明 |
---|---|---|
app-key | true | 应用的唯一标识,创建接入应用后生成,可在应用基础信息页面获得。 示例:d43b0b442cf34076a2c4af6bb8928afb |
sign-type | true | 固定值:MD5 |
sign | true | 签名,字符串“AppSecret+请求体的JSON字符串+AppSecret”的MD5值(MD5值忽略大小写) AppSecret,为应用的秘钥,创建接入应用后生成,可在应用基础信息页面获得。 示例:154fa5bc7e294deda68a15559b07c845请求体的JSON字符串, 需要将请求体中的请求参数转换为JSON字符串。 |
Accept-Language | false | 语种:用以设置开放平台OpenAPI运行时上下文的语种参数。 枚举项可选值列表:zh-CN(简体中文), zh-TW(繁体中文), en(英文), 其他枚举项请参照平台语种列表。 |
4.2.2、签名示例(sign)
String secret = "154fa5bc7e294deda68a15559b07c845";
String body = "{"name": "张三", "age": 35, "company": {"name": "致远", "address": "北京"}";
String sign = Md5(secret + body + secret); // 结果是 01a8795a7fe6dda23aaec40de3d301b7;
5、接口清单
5.1、批量新建/更新组织
请求地址
【接口请求地址前缀】/organization/unit/batch
请求方式
POST
请求参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | TRUE | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | TRUE | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | FALSE | string | 异步回调URL。如果此参数非空, 表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | TRUE | OrgBatchUnitDto | 请求参数数据 | |
units | data | TRUE | array[OrgUnitDataDto] | 组织数据 |
name | units | TRUE | string | 组织名称 |
shortName | units | FALSE | string | 组织简称 ,类型为机构时,简称必填,类型为部门时,简称非必填 |
code | units | TRUE | string | 组织编号 |
type | units | TRUE | enum | 组织类型。枚举项可选值列表: NONE(空), INSTITUTION(机构), DEPARTMENT(部门), OUTSIDE_INSTITUTION(外部(编外)单位), OUTSIDE_DEPARTMENT(外部(编外)部门), |
parentCode | units | TRUE | string | 父组织Code,根节点不填 |
effectiveTime | units | FALSE | string | 生效日期 |
invalidTime | units | FALSE | string | 失效日期 |
sortId | units | TRUE | int32 | 排序号 |
isEnable | units | FALSE | boolean | 状态 |
description | units | FALSE | string | 备注 |
metadataList | units | FALSE | array[OrgMetadataValueDataDto] | 自定义扩展属性数据 |
k | metadataList | FALSE | string | 扩展字段的名称 |
v | metadataList | FALSE | string | 扩展字段的的值 |
address | units | FALSE | string | 地址 |
officeNumber | units | FALSE | string | 电话 |
tax | units | FALSE | string | 税号 |
bankAccount | units | FALSE | string | 银行账号 |
bank | units | FALSE | string | 开户银行 |
isLegalEntity | units | FALSE | boolean | 是否法人实体 |
socialCreditCode | units | FALSE | string | 统一社会信用代码 |
legalPersonName | units | FALSE | string | 法定代表人姓名 |
legalCertificateNumber | units | FALSE | string | 法定代表人身份证号码 |
legalPhoneNumber | units | FALSE | string | 法定代表人手机号号码 |
createTime | units | FALSE | date | 创建时间,毫秒时间戳 |
updateTime | units | FALSE | date | 更新时间,毫秒时间戳 |
syncChildMetadataValue | data | FALSE | boolean | 是否同步下级组织扩展字段值,默认是false |
请求参数示例
{
"data": {
"syncChildMetadataValue": "false",
"units": [
{
"bankAccount": "",
"legalPhoneNumber": "",
"code": "CoolAcademyImport1001",
"address": "",
"effectiveTime": "2023-09-01",
"officeNumber": "",
"description": "",
"tax": "",
"updateTime": {{timestamp}},
"invalidTime": "2024-12-31",
"type": "INSTITUTION",
"socialCreditCode": "",
"isEnable": "true",
"legalPersonName": "",
"bank": "",
"legalCertificateNumber": "",
"parentCode": "group",
"createTime": {{timestamp}},
"sortId": 10,
"name": "集成演示Import1001",
"isLegalEntity": "false",
"shortName": "集成演示1001"
}
]
},
"requestId":1705902274340,
"notifyUrl": "",
"timestamp":1705902274340
}
响应参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
data | SingleData | 批量处理结果 | ||
content | data | OrgSyncInfoDto | 数据对象 | |
type | content | enum | 任务类型。枚举项可选值列表: BATCH_UNITS(批量处理组织数据), BATCH_POSTS(批量处理岗位数据), BATCH_MEMBERS(批量处理人员数据), BATCH_JOBS(批量处理职务数据), BATCH_LEVELS(批量处理职级数据), BATCH_MEMBER_POSTS(批量处理任职数据), BATCH_UNIT_METADATA(批量处理组织扩展字段数据), BATCH_MEMBER_METADATA(批量处理人员扩展字段数据), BATCH_NATURAL_MEMBERS(批量处理外部个人用户数据), |
|
status | content | enum | 状态。枚举项可选值列表:COMPLETE(完成), | |
startTime | content | date | 开始时间 | |
endTime | content | date | 结束时间 | |
totalNum | content | int32 | 总条数 | |
successNum | content | int32 | 任务当前执行成功的条数 | |
failNum | content | int32 | 任务当前执行失败的条数 | |
details | content | array[OrgMessageDto] | 详情 | |
line | details | int32 | 行号 | |
id | details | int64 | id | |
name | details | string | 名称 | |
code | details | string | 编号 | |
status | details | enum | 状态。枚举项可选值列表: SUCCESS(成功), FAILED(失败), SKIP(跳过), |
|
messageCode | details | string | 错误码 | |
message | details | string | 信息 | |
status | int32 | 状态 | ||
code | string | 错误码 | ||
message | string | 返回信息 |
响应参数示例
{
"status": 0,
"code": "BOOT_0000",
"message": "SUCCESS",
"data": {
"content": {
"validate": true,
"type": "BATCH_UNITS",
"status": "COMPLETE",
"startTime": 1705913688259,
"endTime": 1705913688492,
"totalNum": 1,
"successNum": 1,
"failNum": 0,
"details": [
{
"validate": true,
"line": 1,
"id": "1659577340788737399",
"name": "集成演示Import1001",
"code": "CoolAcademyImport1001",
"status": "SUCCESS",
"messageCode": null,
"message": "成功"
}
]
}
}
}
5.2、批量新建/更新职务
请求地址
【接口请求地址前缀】/organization/job/batch
请求方式
POST
请求参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | TRUE | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | TRUE | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | False | string | 异步回调URL。如果此参数非空, 表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | TRUE | OrgBatchJobDto | 请求参数数据 | |
jobs | data | TRUE | array[OrgJobDataDto] | 职务数据 |
name | jobs | TRUE | string | 职务名称 |
code | jobs | TRUE | string | 编号 |
unitCode | jobs | TRUE | string | 所属组织编号 |
category | jobs | TRUE | enum | 职务性质。枚举项可选值列表: NONE(空), BENCH_MARK(基准岗), SELF_BUILT(自用岗), |
sortId | jobs | TRUE | int32 | 排序号 |
isEnable | jobs | TRUE | boolean | 启用状态 |
description | jobs | TRUE | string | 备注 |
请求参数示例
{
"data": {
"jobs": [
{
"code": "JobWorkor",
"sortId": 10,
"unitCode": "CoolAcademyImport1001",
"name": "干事",
"description": "",
"category": "SELF_BUILT",
"isEnable": "true"
}
]
},
"requestId": 1705913739277,
"notifyUrl": "",
"timestamp": 1705913739277
}
响应参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
data | SingleData | 批量处理结果 | ||
content | data | OrgSyncInfoDto | 数据对象 | |
type | content | enum | 任务类型。枚举项可选值列表: BATCH_UNITS(批量处理组织数据), BATCH_POSTS(批量处理岗位数据), BATCH_MEMBERS(批量处理人员数据), BATCH_JOBS(批量处理职务数据), BATCH_LEVELS(批量处理职级数据), BATCH_MEMBER_POSTS(批量处理任职数据), BATCH_UNIT_METADATA(批量处理组织扩展字段数据), BATCH_MEMBER_METADATA(批量处理人员扩展字段数据), BATCH_NATURAL_MEMBERS(批量处理外部个人用户数据), |
|
status | content | enum | 状态。枚举项可选值列表:COMPLETE(完成), | |
startTime | content | date | 开始时间 | |
endTime | content | date | 结束时间 | |
totalNum | content | int32 | 总条数 | |
successNum | content | int32 | 任务当前执行成功的条数 | |
failNum | content | int32 | 任务当前执行失败的条数 | |
details | content | array[OrgMessageDto] | 详情 | |
line | details | int32 | 行号 | |
id | details | int64 | id | |
name | details | string | 名称 | |
code | details | string | 编号 | |
status | details | enum | 状态。枚举项可选值列表: SUCCESS(成功), FAILED(失败), SKIP(跳过), |
|
messageCode | details | string | 错误码 | |
message | details | string | 信息 | |
status | int32 | 状态 | ||
code | string | 错误码 | ||
message | string | 返回信息 |
响应参数示例
{
"status": 0,
"code": "BOOT_0000",
"message": "SUCCESS",
"data": {
"content": {
"validate": true,
"type": "BATCH_JOBS",
"status": "COMPLETE",
"startTime": 1705913739212,
"endTime": 1705913739234,
"totalNum": 1,
"successNum": 1,
"failNum": 0,
"details": [
{
"validate": true,
"line": 1,
"id": "1660303025123624311",
"name": "{\"zh_CN\":\"干事\"}",
"code": "JobWorkor",
"status": "SUCCESS",
"messageCode": "成功",
"message": null
}
]
}
}
}
5.3、批量新建/更新职级
请求地址
【接口请求地址前缀】/organization/level/batch
请求方式
POST
请求参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | TRUE | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | TRUE | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | false | string | 异步回调URL。如果此参数非空,表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | TRUE | OrgBatchLevelDto | 请求参数数据 | |
levels | data | TRUE | array[OrgLevelDataDto] | 职级数据 |
name | levels | TRUE | string | 职级名称(必填) |
code | levels | TRUE | string | 编号(必填) |
levelSort | levels | TRUE | int32 | 序号 |
isEnable | levels | TRUE | boolean | 启用状态 |
description | levels | TRUE | string | 备注 |
请求参数示例
{
"data": {
"levels": [
{
"code": "M22",
"levelSort": 1,
"name": "M22",
"description": "M22,酷学院",
"isEnable": "true"
}
]
},
"requestId":1705913759647,
"notifyUrl": "",
"timestamp": 1705913759647
}
响应参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
data | SingleData | 批量处理结果 | ||
content | data | OrgSyncInfoDto | 数据对象 | |
type | content | enum | 任务类型。枚举项可选值列表: BATCH_UNITS(批量处理组织数据), BATCH_POSTS(批量处理岗位数据), BATCH_MEMBERS(批量处理人员数据), BATCH_JOBS(批量处理职务数据), BATCH_LEVELS(批量处理职级数据), BATCH_MEMBER_POSTS(批量处理任职数据), BATCH_UNIT_METADATA(批量处理组织扩展字段数据), BATCH_MEMBER_METADATA(批量处理人员扩展字段数据), BATCH_NATURAL_MEMBERS(批量处理外部个人用户数据), |
|
status | content | enum | 状态。枚举项可选值列表:COMPLETE(完成), | |
startTime | content | date | 开始时间 | |
endTime | content | date | 结束时间 | |
totalNum | content | int32 | 总条数 | |
successNum | content | int32 | 任务当前执行成功的条数 | |
failNum | content | int32 | 任务当前执行失败的条数 | |
details | content | array[OrgMessageDto] | 详情 | |
line | details | int32 | 行号 | |
id | details | int64 | id | |
name | details | string | 名称 | |
code | details | string | 编号 | |
status | details | enum | 状态。枚举项可选值列表: SUCCESS(成功), FAILED(失败), SKIP(跳过), |
|
messageCode | details | string | 错误码 | |
message | details | string | 信息 | |
status | int32 | 状态 | ||
code | string | 错误码 | ||
message | string | 返回信息 |
响应参数示例
{
"status": 0,
"code": "BOOT_0000",
"message": "SUCCESS",
"data": {
"content": {
"validate": true,
"type": "BATCH_JOBS",
"status": "COMPLETE",
"startTime": 1705913759662,
"endTime": 1705913759700,
"totalNum": 1,
"successNum": 1,
"failNum": 0,
"details": [
{
"validate": true,
"line": 1,
"id": "1660303424790463863",
"name": "{\"zh_CN\":\"M22\"}",
"code": "M22",
"status": "SUCCESS",
"messageCode": "成功",
"message": null
}
]
}
}
}
5.4、批量新建/更新岗位
请求地址
【接口请求地址前缀】/organization/post/batch
请求方式
POST
请求参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | TRUE | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | TRUE | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | false | string | 异步回调URL。如果此参数非空,表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | TRUE | OrgBatchPostDto | 请求参数数据 | |
posts | data | TRUE | array[OrgPostDataDto] | 岗位数据 |
name | posts | TRUE | string | 岗位名称 |
code | posts | TRUE | string | 编号 |
type | posts | TRUE | string | 岗位分类的枚举code值 |
unitCode | posts | TRUE | string | 所属组织编号 |
category | posts | TRUE | enum | 岗位性质。枚举项可选值列表: NONE(空), BENCH_MARK(基准岗), SELF_BUILT(自用岗), |
sortId | posts | TRUE | int32 | 排序号 |
isEnable | posts | TRUE | boolean | 启用状态 |
description | posts | TRUE | string | 备注 |
请求参数示例
{
"data": {
"posts": [
{
"code": "salesEngineer",
"sortId": 10,
"unitCode": "CoolAcademyImport1001",
"name": "销售工程师",
"description": "",
"type": "Management",
"category": "SELF_BUILT",
"isEnable": "true"
}
]
},
"requestId": 1705913779906,
"notifyUrl": "",
"timestamp": 1705913779906
}
响应参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
data | SingleData | 批量处理结果 | ||
content | data | OrgSyncInfoDto | 数据对象 | |
type | content | enum | 任务类型。枚举项可选值列表: BATCH_UNITS(批量处理组织数据), BATCH_POSTS(批量处理岗位数据), BATCH_MEMBERS(批量处理人员数据), BATCH_JOBS(批量处理职务数据), BATCH_LEVELS(批量处理职级数据), BATCH_MEMBER_POSTS(批量处理任职数据), BATCH_UNIT_METADATA(批量处理组织扩展字段数据), BATCH_MEMBER_METADATA(批量处理人员扩展字段数据), BATCH_NATURAL_MEMBERS(批量处理外部个人用户数据), |
|
status | content | enum | 状态。枚举项可选值列表:COMPLETE(完成), | |
startTime | content | date | 开始时间 | |
endTime | content | date | 结束时间 | |
totalNum | content | int32 | 总条数 | |
successNum | content | int32 | 任务当前执行成功的条数 | |
failNum | content | int32 | 任务当前执行失败的条数 | |
details | content | array[OrgMessageDto] | 详情 | |
line | details | int32 | 行号 | |
id | details | int64 | id | |
name | details | string | 名称 | |
code | details | string | 编号 | |
status | details | enum | 状态。枚举项可选值列表: SUCCESS(成功), FAILED(失败), SKIP(跳过), |
|
messageCode | details | string | 错误码 | |
message | details | string | 信息 | |
status | int32 | 状态 | ||
code | string | 错误码 | ||
message | string | 返回信息 |
响应参数示例
{
"status": 0,
"code": "BOOT_0000",
"message": "SUCCESS",
"data": {
"content": {
"validate": true,
"type": "BATCH_POSTS",
"status": "COMPLETE",
"startTime": 1705913779967,
"endTime": 1705913780058,
"totalNum": 1,
"successNum": 0,
"failNum": 1,
"details": [
{
"validate": true,
"line": 1,
"id": "1660309690828981623",
"name": "{\"zh_CN\":\"销售工程师\"}",
"code": "salesEngineer",
"status": "FAILED",
"messageCode": "ORG_0102",
"message": "岗位分类枚举值不存在!"
}
]
}
}
}
5.5、批量新建/更新人员及任职
请求地址
【接口请求地址前缀】/organization/member/batch
请求方式
POST
请求参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | TRUE | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | TRUE | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | false | string | 异步回调URL。如果此参数非空,表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | TRUE | OrgBatchMemberDto | 请求参数数据 | |
members | data | TRUE | array[OrgMemberDataDto] | 人员数据 |
thirdId | members | TRUE | string | 第三方唯一标识 |
name | members | TRUE | string | 姓名 |
code | members | TRUE | string | 编号 |
username | members | TRUE | string | 用户名 |
gender | members | TRUE | enum | 性别。枚举项可选值列表: NONE(空), MALE(男), FEMALE(女), UN_KNOW(未知), |
birthday | members | TRUE | string | 出生日期 |
phoneNumber | members | TRUE | string | 手机号码 |
officeNumber | members | TRUE | string | 工作电话 |
members | TRUE | string | 邮箱 | |
effectiveTime | members | TRUE | string | 生效日期 |
invalidTime | members | TRUE | string | 失效日期 |
sortId | members | TRUE | int32 | 排序号 |
isEnable | members | TRUE | boolean | 状态 |
description | members | TRUE | string | 备注 |
memberPosts | members | TRUE | array[OrgMemberPostDataDto] | 人员的任职信息 |
main | memberPosts | TRUE | boolean | 是否主岗 |
unitCode | memberPosts | TRUE | string | 组织编码 |
postCode | memberPosts | TRUE | string | 岗位编码(内部人员必填) |
levelCode | memberPosts | TRUE | string | 职级编码 |
jobCode | memberPosts | TRUE | string | 职务编码 |
effectiveTime | memberPosts | TRUE | string | 生效日期 |
invalidTime | memberPosts | TRUE | string | 失效日期 |
sortId | memberPosts | TRUE | int32 | 排序号 |
topSortId | memberPosts | TRUE | int32 | 优先置顶排序 |
isEnable | memberPosts | TRUE | boolean | 状态 |
memberType | memberPosts | TRUE | enum | 人员类型。枚举项可选值列表: NONE(空), MEMBER(内部人员), OUTSIDE_MEMBER(外部单位用户), NATURAL_MEMBER(外部个人用户), |
metadataList | members | TRUE | array[OrgMetadataValueDataDto] | 自定义扩展属性数据 |
k | metadataList | TRUE | string | 扩展字段的名称 |
v | metadataList | TRUE | string | 扩展字段的的值 |
certificateType | members | TRUE | string | 证件类型 |
certificateNumber | members | TRUE | string | 证件号码 |
entryDate | members | TRUE | string | 入职日期 |
bankAccount | members | TRUE | string | 银行账号 |
bank | members | TRUE | string | 开户银行 |
bankOutlets | members | TRUE | string | 开户网点 |
image | members | TRUE | string | 头像路径 |
memberType | members | TRUE | enum | 人员类型。枚举项可选值列表: NONE(空), MEMBER(内部人员), OUTSIDE_MEMBER(外部单位用户), NATURAL_MEMBER(外部个人用户), |
createTime | members | TRUE | date | 创建时间,毫秒时间戳 |
updateTime | members | TRUE | date | 更新时间,毫秒时间戳 |
请求参数示例
{
"data": [
{
"birthday": "",
"code": "KXY1081001",
"gender": "MALE",
"bankOutlets": "",
"effectiveTime": "2023-09-01",
"officeNumber": "",
"description": "",
"invalidTime": "2024-12-31",
"isEnable": "true",
"bank": "",
"sortId": 10,
"email": "",
"bankAccount": "",
"image": "",
"thirdId": "KXY1081001",
"entryDate": "2023-09-01",
"updateTime": 1705913802791,
"memberPosts": [
{
"levelCode": "M22",
"effectiveTime": "2023-09-01",
"sortId": 10,
"unitCode": "InformationCenter",
"jobCode": "JobWorkor",
"main": "true",
"postCode": "salesEngineer",
"invalidTime": "2024-12-31",
"memberType": "MEMBER",
"isEnable": "true"
}
],
"phoneNumber": "18701021001",
"certificateNumber": "",
"createTime": 1705913802791,
"name": "集成演示-张三",
"memberType": "MEMBER",
"username": "18701021001",
"certificateType": "idCard"
}
]
,
"requestId": 1705913802791,
"notifyUrl": "",
"timestamp": 1705913802791
}
响应参数(Body)
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
data | SingleData | 批量处理结果 | ||
content | data | OrgSyncInfoDto | 数据对象 | |
type | content | enum | 任务类型。枚举项可选值列表: BATCH_UNITS(批量处理组织数据), BATCH_POSTS(批量处理岗位数据), BATCH_MEMBERS(批量处理人员数据), BATCH_JOBS(批量处理职务数据), BATCH_LEVELS(批量处理职级数据), BATCH_MEMBER_POSTS(批量处理任职数据), BATCH_UNIT_METADATA(批量处理组织扩展字段数据), BATCH_MEMBER_METADATA(批量处理人员扩展字段数据), BATCH_NATURAL_MEMBERS(批量处理外部个人用户数据), |
|
status | content | enum | 状态。枚举项可选值列表:COMPLETE(完成), | |
startTime | content | date | 开始时间 | |
endTime | content | date | 结束时间 | |
totalNum | content | int32 | 总条数 | |
successNum | content | int32 | 任务当前执行成功的条数 | |
failNum | content | int32 | 任务当前执行失败的条数 | |
details | content | array[OrgMessageDto] | 详情 | |
line | details | int32 | 行号 | |
id | details | int64 | id | |
name | details | string | 名称 | |
code | details | string | 编号 | |
status | details | enum | 状态。枚举项可选值列表: SUCCESS(成功), FAILED(失败), SKIP(跳过), |
|
messageCode | details | string | 错误码 | |
message | details | string | 信息 | |
status | int32 | 状态 | ||
code | string | 错误码 | ||
message | string | 返回信息 |
响应参数示例
{
"code": "200",
"data": {
"content": {
"failNum": 1,
"totalNum": 100,
"successNum": 99,
"startTime": "",
"details": [
{
"code": "",
"line": 10,
"name": "",
"messageCode": "",
"id": "10828711522402302",
"message": "SUCCESS",
"status": ""
}
],
"endTime": "",
"type": "BATCH_MEMBERS",
"status": "READY"
}
},
"message": "成功",
"status": "FRONT"
}
5、注意事项
接口授权和分配AppKey、AppSecret请参考【数据开放】操作步骤
2 - 数据库中间表(推荐)
1、概述
针对三方异构系统与COP组织人员数据结构差异较大场景,COP开放数据库中间表,三方异构系统按要求将组织数据写入中间表后,COP重新组装后完成组织同步模式。
2、优缺点
a. 优点
i. 集成压力小;
ii. 对数据质量要求低;
ⅲ.问题跟踪,问题定位速度快
b. 缺点
i. 无
3、操作步骤
3.1、开放OpenAPI模式(推荐)
序号 | 步骤名称 | 责任方 | 使用场景 |
---|---|---|---|
1 | 开放OpenAPI | 致远 | 必须,提供组织数据写入OpenAPI和调用示例 |
2 | 新建集成应用,获取集成应用ID | 致远 | 必须,获取集成应用ID,接口必须入参 |
3 | 启用API | 致远 | 必须,只有启用API,才能分配授权 |
4 | 新建接入应用 | 致远 | 必须,分配授权APPKey和AppSecret |
5 | 查看AppKey和AppSecret | 致远 | 必须,接口鉴权使用 |
6 | API授权 | 致远 | 必须,未启用时,接口调用直接报错 |
7 | 启用接入应用 | 致远 | 必须,未启用时,接口调用直接报错 |
8 | 选择同步模式 | 致远 | 必须,选择中间表模式 |
9 | 配置同步周期 | 致远 | 必须,配置数据处理周期 |
10 | 配置字段映射 | 致远 | 必须,字段映射、默认值、过滤条件等 |
11 | 调用接口写入数据 | 三方异构系统 | 必须,三方异构系统负责写入数据到中间表 |
12 | 查看日志 | 致远 | 非必须,监控过程数据 |
3.2、直接写入数据库模式
序号 | 步骤名称 | 责任方 | 使用场景 |
---|---|---|---|
1 | 提供数据库连接信息和库表结构 | 致远 | 必须, |
2 | 新建集成应用,获取集成应用ID | 致远 | 必须,获取集成应用ID,接口必须入参 |
3 | 选择同步模式 | 致远 | 必须,选择中间表模式 |
4 | 配置同步周期 | 致远 | 必须,配置数据处理周期 |
5 | 配置字段映射 | 致远 | 必须,字段映射、默认值、过滤条件等 |
6 | 连接数据库写入数据 | 三方异构系统 | 必须,三方异构系统负责写入数据到中间表 |
7 | 查看日志 | 致远 | 非必须,监控过程数据 |
4、集成配置步骤
4.1、开放OpenAPI模式(推荐)
4.1.1、开放OpenAPI
参照接口清单
4.1.2、新建集成应用,获取集成应用ID
4.1.3、启用API
4.1.4、新建接入应用
4.1.5、查看AppKey和AppSecret
4.1.6、API授权
4.1.7、启用接入应用
4.1.8、选择同步模式
4.1.9、内容配置
4.1.10、配置同步周期
4.1.11、调用接口写入数据
参考接口清单调用接口处理
4.1.12、查看日志
4.2、直接写入数据库模式
4.2.1、提供数据库连接信息和库表结构
请参照物理表接口定义
4.2.2、新建集成应用,获取集成应用ID
4.2.3、选择同步模式
4.2.4、配置同步内容
4.2.5、配置同步周期
5、接口清单
4.1、接口鉴权
4.1.1、请求头(Header)
参数名称 | 是否必填 | 参数说明 |
---|---|---|
app-key | true | 应用的唯一标识,创建接入应用后生成,可在应用基础信息页面获得。 示例:d43b0b442cf34076a2c4af6bb8928afb |
sign-type | true | 固定值:MD5 |
sign | true | 签名,字符串“AppSecret+请求体的JSON字符串+AppSecret”的MD5值(MD5值忽略大小写) AppSecret,为应用的秘钥,创建接入应用后生成,可在应用基础信息页面获得。 示例:154fa5bc7e294deda68a15559b07c845请求体的JSON字符串, 需要将请求体中的请求参数转换为JSON字符串。 |
Accept-Language | false | 语种:用以设置开放平台OpenAPI运行时上下文的语种参数。 枚举项可选值列表:zh-CN(简体中文), zh-TW(繁体中文), en(英文), 其他枚举项请参照平台语种列表。 |
4.1.2、签名示例(sign)
String secret = "154fa5bc7e294deda68a15559b07c845";
String body = "{"name": "张三", "age": 35, "company": {"name": "致远", "address": "北京"}";
String sign = Md5(secret + body + secret); // 结果是 01a8795a7fe6dda23aaec40de3d301b7;
4.2、批量插入组织中间表(机构/部门)
请求地址:
【接口请求地址前缀】/cip-connector/middle-table/unit-create
请求参数
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | true | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | true | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | false | string | 异步回调URL。如果此参数非空,表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | true | UnitInfoReqDto | 请求参数数据 | |
linkerId | data | true | int64 | 集成应用ID |
data | data | true | array[UnitInfoDto] | 数据列表 |
code | data | true | string | 编码 |
name | data | true | string | 组织名称 |
parentCode | data | true | string | 父组织code |
shortName | data | false | string | 简称 |
type | data | false | enum | 类型。枚举项可选值列表: INSTITUTION(机构), DEPARTMENT(部门), |
thirdId | data | false | string | 第三方组织id |
enable | data | false | boolean | 是否启用 |
thirdUpdateTime | data | true | date | 第三方数据最新时间 |
sortId | data | false | int32 | 排序号 |
str1 | data | false | string | 扩展字段1 |
str2 | data | false | string | 扩展字段2 |
str3 | data | false | string | 扩展字段3 |
str4 | data | false | string | 扩展字段4 |
str5 | data | false | string | 扩展字段5 |
str6 | data | false | string | 扩展字段6 |
str7 | data | false | string | 扩展字段7 |
str8 | data | false | string | 扩展字段8 |
str9 | data | false | string | 扩展字段9 |
str10 | data | false | string | 扩展字段10 |
请求示例
{
"data": {
"data": [
{
"code": "100101",
"thirdId": "100101",
"type": "INSTITUTION",
"str7": "",
"str8": "",
"str5": "",
"str6": "",
"str3": "",
"parentCode": "group",
"str4": "",
"enable": "true",
"sortId": 1,
"str1": "",
"str2": "",
"name": "API导入致远",
"str10": "",
"shortName": "API导入致远",
"thirdUpdateTime": "2024-01-01",
"str9": ""
}
],
"linkerId": "-4511464491497948501"
},
"requestId": "3799345662156838701",
"notifyUrl": "",
"timestamp": 1720592508046
}
返回参数
参数名称 | 父节点 | 参数类型 | 参数描述 |
---|---|---|---|
data | SingleData | 返回值数据 | |
content | data | void | 数据对象 |
status | int32 | 状态 | |
code | string | 错误码 | |
message | string | 返回信息 |
返回示例
{
"status": 0,
"code": "BOOT_0000",
"message": "SUCCESS",
"data": null
}
4.3、批量插入岗位中间表
请求地址:
【接口请求地址前缀】/cip-connector/middle-table/post-create
请求参数
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | true | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | true | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | false | string | 异步回调URL。如果此参数非空,表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | true | PostInfoReqDto | 请求参数数据 | |
linkerId | data | true | int64 | 集成应用ID |
data | data | true | array[PostInfoDto] | 数据列表 |
code | data | true | string | 编码 |
name | data | true | string | 名称 |
unitCode | data | true | string | 组织code |
thirdId | data | false | string | 第三方id |
type | data | false | string | 岗位分类枚举值code |
category | data | false | enum | 岗位性质。枚举项可选值列表: NONE(空), BENCH_MARK(基准岗), SELF_BUILT(自用岗), |
enable | data | false | boolean | 是否启用 |
thirdUpdateTime | data | true | date | 第三方数据最新时间 |
sortId | data | false | int32 | 排序号 |
请求示例
{
"data": {
"data": [
{
"code": "001",
"thirdId": "12345",
"enable": "true",
"sortId": 1,
"unitCode": "100101",
"name": "P0",
"type": "1",
"category": "BENCH_MARK",
"thirdUpdateTime": "2024-01-01"
}
],
"linkerId": "-4511464491497948501"
},
"requestId": "-4579930924623847185",
"notifyUrl": "",
"timestamp": 1720592507597
}
返回参数
参数名称 | 父节点 | 参数类型 | 参数描述 |
---|---|---|---|
data | SingleData | 返回值数据 | |
content | data | void | 数据对象 |
status | int32 | 状态 | |
code | string | 错误码 | |
message | string | 返回信息 |
返回示例
{
"status": 0,
"code": "BOOT_0000",
"message": "SUCCESS",
"data": null
}
4.4、批量插入职级中间表
请求地址:
【接口请求地址前缀】/cip-connector/middle-table/level-create
请求参数
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | true | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | true | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | false | string | 异步回调URL。如果此参数非空,表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | true | LevelInfoReqDto | 请求参数数据 | |
linkerId | data | true | int64 | 集成应用ID |
data | data | true | array[LevelInfoDto] | 数据列表 |
code | data | true | string | 编码 |
name | data | true | string | 名称 |
thirdId | data | false | string | 第三方id |
enable | data | false | boolean | 是否启用 |
thirdUpdateTime | data | true | date | 第三方数据最新时间 |
sortId | data | false | int32 | 排序号(默认:1) |
请求示例
{
"data": {
"data": [
{
"code": "001",
"thirdId": "12345",
"enable": "true",
"sortId": 1,
"name": "P0",
"thirdUpdateTime": "2024-01-01"
}
],
"linkerId": "158933225308768072"
},
"requestId": "-395422794033167315",
"notifyUrl": "",
"timestamp": 1720592508081
}
返回参数
参数名称 | 父节点 | 参数类型 | 参数描述 |
---|---|---|---|
data | SingleData | 返回值数据 | |
content | data | void | 数据对象 |
status | int32 | 状态 | |
code | string | 错误码 | |
message | string | 返回信息 |
返回示例
{
"code": "200",
"data": {
"content": ""
},
"message": "成功",
"status": "FRONT"
}
4.5、批量插入人员中间表
请求地址:
【接口请求地址前缀】/cip-connector/middle-table/member-create
请求参数
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | true | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | true | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | false | string | 异步回调URL。如果此参数非空,表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | true | MemberInfoReqDto | 请求参数数据 | |
linkerId | data | true | int64 | 集成应用ID |
data | data | true | array[MemberInfoDto] | 数据列表 |
code | data | true | string | 编码 |
name | data | true | string | 名称 |
thirdId | data | false | string | 第三方id |
data | false | string | 邮箱 | |
phoneNumber | data | false | string | 手机 |
gender | data | false | enum | 性别。枚举项可选值列表: NONE(空), MALE(男), FEMALE(女), UN_KNOW(未知), |
unitCode | data | true | string | 组织code |
thirdJobId | data | false | string | 第三方任职id |
main | data | false | boolean | 是否主岗 |
postCode | data | false | string | 岗位code |
levelCode | data | false | string | 职级code |
effectiveTime | data | false | date | 生效日期 |
invalidTime | data | false | date | 失效日期 |
enable | data | true | boolean | 是否启用 |
thirdUpdateTime | data | true | date | 第三方数据最新时间 |
sortId | data | false | int32 | 排序号(默认:1) |
str1 | data | false | string | 扩展字段1 |
str2 | data | false | string | 扩展字段2 |
str3 | data | false | string | 扩展字段3 |
str4 | data | false | string | 扩展字段4 |
str5 | data | false | string | 扩展字段5 |
str6 | data | false | string | 扩展字段6 |
str7 | data | false | string | 扩展字段7 |
str8 | data | false | string | 扩展字段8 |
str9 | data | false | string | 扩展字段9 |
str10 | data | false | string | 扩展字段10 |
请求示例
{
"data": {
"data": [
{
"code": "001",
"gender": "MALE",
"effectiveTime": "2023-12-31 00:00:00",
"main": "true",
"invalidTime": "9999-12-31 00:00:00",
"str7": "aaa",
"levelCode": "001",
"str8": "aaa",
"str5": "aaa",
"str6": "aaa",
"str3": "aaa",
"str4": "aaa",
"enable": "true",
"sortId": 1,
"str1": "aaa",
"unitCode": "seeyon",
"str2": "aaa",
"str10": "aaa",
"email": "pan@163.com",
"thirdUpdateTime": "2024-01-01",
"str9": "aaa",
"thirdId": "12345",
"thirdJobId": "12345456",
"phoneNumber": "1345668900",
"name": "P0",
"postCode": "defaultCode"
}
],
"linkerId": "158933225308768072"
},
"requestId": "1121213206799116311",
"notifyUrl": "",
"timestamp": 1720592507997
}
返回参数
参数名称 | 父节点 | 参数类型 | 参数描述 |
---|---|---|---|
data | SingleData | 返回值数据 | |
content | data | void | 数据对象 |
status | int32 | 状态 | |
code | string | 错误码 | |
message | string | 返回信息 |
返回示例
{
"code": "200",
"data": {
"content": ""
},
"message": "成功",
"status": "FRONT"
}
4.6、确认全量同步完毕(必须)
说明:
全量模式下,每次全量数据写入中间表后,必须调用当前接口,否则即使满足集成平台配置的定时执行时间,也不会执行同步
请求地址:
【接口请求地址前缀】/cip-connector/middle-table/sync-finish
请求参数
参数名称 | 父节点 | 是否必填 | 参数类型 | 参数描述 |
---|---|---|---|---|
requestId | true | string | 请求流水号。同一接入应用下的流水号不要重复; 最长32位,超过部分会被截断。 |
|
timestamp | true | int64 | 请求时间戳。请求时间和服务器时间不能相差过大, 默认5分钟以内。 |
|
notifyUrl | false | string | 异步回调URL。如果此参数非空,表示使用异步方式调用开放API, 执行结果将通过此URL异步通知调用者。 |
|
data | true | int64 | 集成应用ID |
请求示例
{
"data": "-4511464491497948501",
"requestId": "-4875171919230719752",
"notifyUrl": "",
"timestamp": 1720592508031
}
返回参数
参数名称 | 父节点 | 参数类型 | 参数描述 |
---|---|---|---|
data | SingleData | 返回值数据 | |
content | data | string | 数据对象 |
status | int32 | 状态 | |
code | string | 错误码 | |
message | string | 返回信息 |
返回示例
{
"code": "200",
"data": {
"content": ""
},
"message": "成功",
"status": "FRONT"
}
6、物理表结构
注意:库名称:cip-connector
6.1、机构/部门
CREATE TABLE `cip_sync_unit` (
`id` bigint(20) NOT NULL COMMENT '主键',
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '修改时间',
`version` smallint(6) NOT NULL COMMENT '版本号',
`linker_id` bigint(20) NOT NULL COMMENT '连接器ID',
`code` varchar(100) DEFAULT NULL COMMENT '组织编号',
`name` varchar(255) DEFAULT NULL COMMENT '组织名称',
`short_name` varchar(255) DEFAULT NULL COMMENT '简称',
`type` smallint NOT NULL COMMENT '类型(机构=1,部门=2)',
`parent_code` varchar(100) DEFAULT NULL COMMENT '父组织code',
`third_id` varchar(100) DEFAULT NULL COMMENT '组织id',
`is_enable` tinyint(1) NOT NULL COMMENT '是否启用(1-启用,0-停用)',
`third_update_time` datetime NOT NULL COMMENT '第三方数据最新时间',
`status` smallint NOT NULL DEFAULT 0 COMMENT '同步状态(不处理=-1,未处理=0,失败=1,成功=2)',
`retry` smallint NOT NULL DEFAULT 0 COMMENT '重试次数',
`batch` varchar(20) DEFAULT NULL COMMENT '批次号',
`sort_id` int(11) NOT NULL DEFAULT 1 COMMENT '排序号',
`v8_id` bigint(20) NOT NULL DEFAULT -1 COMMENT 'V8ID',
`str1` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
`str2` varchar(255) DEFAULT NULL COMMENT '扩展字段2',
`str3` varchar(255) DEFAULT NULL COMMENT '扩展字段3',
`str4` varchar(255) DEFAULT NULL COMMENT '扩展字段4',
`str5` varchar(255) DEFAULT NULL COMMENT '扩展字段5',
`str6` varchar(255) DEFAULT NULL COMMENT '扩展字段6',
`str7` varchar(255) DEFAULT NULL COMMENT '扩展字段7',
`str8` varchar(255) DEFAULT NULL COMMENT '扩展字段8',
`str9` varchar(255) DEFAULT NULL COMMENT '扩展字段9',
`str10` varchar(255) DEFAULT NULL COMMENT '扩展字段10',
`msg` longtext DEFAULT NULL COMMENT '异常信息',
PRIMARY KEY (`id`)
) COMMENT='组织同步组织中间表';
6.2、职级
CREATE TABLE `cip_sync_level` (
`id` bigint(20) NOT NULL COMMENT '主键',
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '修改时间',
`version` smallint(6) NOT NULL COMMENT '版本号',
`linker_id` bigint(20) NOT NULL COMMENT '连接器ID',
`code` varchar(50) DEFAULT NULL COMMENT '职级编号',
`name` varchar(100) DEFAULT NULL COMMENT '职级名称',
`third_id` varchar(100) DEFAULT NULL COMMENT '职级id',
`is_enable` tinyint(1) NOT NULL COMMENT '是否启用(1-启用,0-停用)',
`third_update_time` datetime NOT NULL COMMENT '第三方数据最新时间',
`status` smallint NOT NULL DEFAULT 0 COMMENT '同步状态(不处理=-1,未处理=0,失败=1,成功=2)',
`retry` smallint NOT NULL DEFAULT 0 COMMENT '重试次数',
`batch` varchar(20) DEFAULT NULL COMMENT '批次号',
`sort_id` int(11) NOT NULL DEFAULT 1 COMMENT '排序号',
`v8_id` bigint(20) NOT NULL DEFAULT -1 COMMENT 'V8ID',
`msg` longtext DEFAULT NULL COMMENT '异常信息',
PRIMARY KEY (`id`)
) COMMENT='组织同步职级中间表';
6.3、岗位
CREATE TABLE `cip_sync_post` (
`id` bigint(20) NOT NULL COMMENT '主键',
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '修改时间',
`version` smallint(6) NOT NULL COMMENT '版本号',
`linker_id` bigint(20) NOT NULL COMMENT '连接器ID',
`code` varchar(50) DEFAULT NULL COMMENT '岗位编号',
`name` varchar(100) DEFAULT NULL COMMENT '岗位名称',
`unit_code` varchar(100) DEFAULT NULL COMMENT '组织code',
`type` varchar(100) DEFAULT NULL COMMENT '岗位分类枚举值code',
`category` smallint NOT NULL DEFAULT 0 COMMENT '岗位性质(基准岗=0,自用岗=1)',
`third_id` varchar(100) DEFAULT NULL COMMENT '岗位id',
`is_enable` tinyint(1) NOT NULL COMMENT '是否启用(1-启用,0-停用)',
`third_update_time` datetime NOT NULL COMMENT '第三方数据最新时间',
`status` smallint NOT NULL DEFAULT 0 COMMENT '同步状态(不处理=-1,未处理=0,失败=1,成功=2)',
`retry` smallint NOT NULL DEFAULT 0 COMMENT '重试次数',
`batch` varchar(20) DEFAULT NULL COMMENT '批次号',
`sort_id` int(11) NOT NULL DEFAULT 1 COMMENT '排序号',
`v8_id` bigint(20) NOT NULL DEFAULT -1 COMMENT 'V8ID',
`msg` longtext DEFAULT NULL COMMENT '异常信息',
PRIMARY KEY (`id`)
) COMMENT='组织同步岗位中间表';
6.4、人员&任职
CREATE TABLE `cip_sync_member` (
`id` bigint(20) NOT NULL COMMENT '主键',
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '修改时间',
`version` smallint(6) NOT NULL COMMENT '版本号',
`linker_id` bigint(20) NOT NULL COMMENT '连接器ID',
`code` varchar(50) DEFAULT NULL COMMENT '工号',
`name` varchar(50) DEFAULT NULL COMMENT '姓名',
`third_id` varchar(100) DEFAULT NULL COMMENT '第三方人员id',
`gender` smallint NOT NULL DEFAULT 0 COMMENT '性别(男=0,女=1)',
`email` varchar(255) DEFAULT NULL COMMENT '邮箱',
`phone_number` varchar(20) DEFAULT NULL COMMENT '手机号码',
`unit_code` varchar(100) DEFAULT NULL COMMENT '组织code',
`third_job_id` varchar(100) DEFAULT NULL COMMENT '第三方任职id',
`is_main` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否主岗(主岗=1,副岗=0)',
`post_code` varchar(50) DEFAULT NULL COMMENT '岗位code',
`level_code` varchar(50) DEFAULT NULL COMMENT '职级code',
`effective_time` datetime NOT NULL DEFAULT '2024-01-01' COMMENT '生效日期',
`invalid_time` datetime NOT NULL DEFAULT '9998-12-31' COMMENT '失效日期',
`is_enable` tinyint(1) NOT NULL COMMENT '是否启用(1-启用,0-停用)',
`third_update_time` datetime NOT NULL COMMENT '第三方数据最新时间',
`status` smallint NOT NULL DEFAULT 0 COMMENT '同步状态(不处理=-1,未处理=0,失败=1,成功=2)',
`retry` smallint NOT NULL DEFAULT 0 COMMENT '重试次数',
`batch` varchar(20) DEFAULT NULL COMMENT '批次号',
`sort_id` int(11) NOT NULL DEFAULT 1 COMMENT '排序号',
`v8_id` bigint(20) NOT NULL DEFAULT -1 COMMENT 'V8ID',
`str1` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
`str2` varchar(255) DEFAULT NULL COMMENT '扩展字段2',
`str3` varchar(255) DEFAULT NULL COMMENT '扩展字段3',
`str4` varchar(255) DEFAULT NULL COMMENT '扩展字段4',
`str5` varchar(255) DEFAULT NULL COMMENT '扩展字段5',
`str6` varchar(255) DEFAULT NULL COMMENT '扩展字段6',
`str7` varchar(255) DEFAULT NULL COMMENT '扩展字段7',
`str8` varchar(255) DEFAULT NULL COMMENT '扩展字段8',
`str9` varchar(255) DEFAULT NULL COMMENT '扩展字段9',
`str10` varchar(255) DEFAULT NULL COMMENT '扩展字段10',
`msg` longtext DEFAULT NULL COMMENT '异常信息',
PRIMARY KEY (`id`)
) COMMENT='组织同步人员中间表';
7、注意事项
7.1、更新标识【重重重】
选择OpenAPI模式时,为了防止同一批次数据全部写入前,定时处理任务开始执行,造成数据不完整,请务必再同一批次数据写入完成后调用【全量同步完毕】接口,更新批次同步完成标识。
7.2、扩展字段定义
7.3、集成应用ID
7.4、开放OpenAPI
如需要限制访问IP、限流控制等高级设计,请参考集成开发-开放平台-接入应用配置说明
7.5、手工同步
如果同步频率配置的为手工同步,请在调用OpenAPI写入数据,调用【全部同步完毕】接口后,手工点击执行同步,否则数据不会再日志表中执行同步。
3 - 第三方同步到V8常见问题
1、拉取方式
适合全量 从上到下依次进行。第一遍,要单个逐次手动同步。组织同步标识都是作为v8的code进行同步的。 拉取有一定的制约性,比如人员接口入参是机构id,如果前面机构同步,用code做标识,那么后面循环拉取就获取不到人员信息。
1.1、常见问题
1、任职→查询底表是否已经有该人员→调用组织模型接口 任职数据,需先同步人员基本信息,如果手动系统录入人员,目前任职无法通过连接器进入系统。 2、如果组织的扩展字段是人员,那么还需同步第二遍。 3、拉取接口变化成分页,因为业务路径会变化,所有配置项需要重新选一遍。 4、内部根节点,外部根节点如果选错同步后,因为组织模型目前不支持跨单位调整部门,所以需要手动进行维护,或者找组织模型部门人员,清空数据库重新同步。 5、如果是导入的连接器,要核实一下所有页签的业务路径和参数。 6、偶尔有表达式感觉不生效的情况,重新清空保存然后再选一遍重试。 7、如果日志中,接口中有日志,但是组织同步页签没有日志,那么应该后台报错了,需要取服务器日志(cip-connector)进一步分析。 搜索关键字为:执行组织同步任务项。 常见的一种情况是机构授权数不够,无法新建机构,这个找商务进行license授权 8、组织同步日志表,如果量大也可以手动清理。 cip-connector库: select * from cip_p_sync_his where plugin_id=(select id from cip_p_plugin_info where connector_id={连接器id}) and data_type in(0,1,2,3,4,5,6,7); 其中:data_type: 0=组织(单位+部门)基本信息,1=组织(单位+部门)扩展信息,2=岗位信息,3=职务信息,4=职级信息,5=人员基本信息,6=人员扩展信息,7=人员任职信息
2、第三方推送
2.1、事件订阅和消息队列
事件订阅:监听第三方回调事件 消息队列:监听mq 因为组织模型的关联性和异步性,可以作为中间的一种技术手段,不建议作为直接交付使用。
2.2、中间表
支持全量/增量。支持重试。暂不支持自动创建用户映射。一般需第三方开发或者结合微流程开发使用。 可以直接将数据直插数据库表,也可以通过openapi进行插入。 全量模式: 1、如果第三方只给最新的启用的组织,停用数据不给,那么会比较v8数据,自动进行停用。 2、需要同步完全部数据后,再给予一个同步完成标识。 增量模式: 按照[第三方数据最新时间]比对出最新数据,定时同步。每次同步为一个批次。 【写入02】任职变化时,写入用户的全部任职,与【写入01】只能二选一,这个意思是人员增量,但是对应的任职必须是该人全部的。如果人员第一次同步任职有两条任职,第二次同步有一条新增任职,目前因为没有组织模型没有记录任职唯一标识,无法判断第二次任职是新增还是更新已有的某个岗位。