# 事件订阅
description: COP开放事件,三方异构系统订阅事件,完成组织同步模式。
# 1、概述
COP开放事件,三方异构系统订阅事件,完成组织同步模式。
# 2、事件清单
| 事件名称 | 事件标识 | 返回数据类型 | 描述 |
|---|---|---|---|
| 更新职务 | organization.job.update | JSON | 更新职务 |
| 更新组织 | organization.unit.update | JSON | 更新组织 |
| 更新职级 | organization.level.update | JSON | 更新职级 |
| 创建组织 | organization.unit.create | JSON | 创建组织 |
| 创建人员 | organization.member.create | JSON | 创建人员 |
| 创建岗位 | organization.post.create | JSON | 创建岗位 |
| 更新岗位 | organization.post.update | JSON | 更新岗位 |
| 创建职务 | organization.job.create | JSON | 创建职务 |
| 更新人员 | organization.member.update | JSON | 更新人员 |
| 创建职级 | organization.level.create | JSON | 创建职级 |
# 3、订阅说明
收到事件通知请求后,需要返回200HTTP响应。其余响应码表示失败,开放平台会自动重发。重发的间隔越来越长,最多尝试10次。事件通知数据使用application/json格式发送。 事件通知的HTTP请求头中,包含回调令牌(需在接入应用的事件订阅中配置开启,默认不开启),用于接入应用验证事件来源。
若开启加密因子(需在接入应用的事件订阅中配置开启,默认不开启),将对事件通知的JSON内容进行加密,只有一个属性encrypt,需要进行解密处理。
# 4、解密示例
@SuppressWarnings("rawtypes")
@PostMapping("open-event-map")
@ResponseBody
public String openEventCallBack(HttpServletRequest request, @RequestBody Map map) {
// 事件发生时间
String createTime = request.getHeader("createTime");
// 事件的流水号
String eventId = request.getHeader("eventId");
// 如果订阅事件时设置了回调token,可以获取token进行校验
String eventToken = request.getHeader("eventToken");
if (!OpenApiGlobalConfig.EVENT_CALL_BACK_TOKEN.equals(eventToken)) {
System.err.println("token不匹配,这是非法的请求!");
return "error";
}
// eventName:事件名称,解码处理
try {
String eventName = URLDecoder.decode(request.getHeader("eventName"), StandardCharsets.UTF_8.displayName());
System.err.println("收到事件:" + eventName);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 事件标识,可以用此字段区分是什么事件发生了
String eventKey = request.getHeader("eventKey");
if (!"".equals(OpenApiGlobalConfig.EVENT_CALL_BACK_KEY)) {
// 如果设置了加密key,那么返回的数据是加密的,需要解密。加解密算法是AES算法。
String encryptContent = (String) map.get("encrypt");
String realContent = OpenApiClient.decrypt(encryptContent, OpenApiGlobalConfig.EVENT_CALL_BACK_KEY);
System.err.println("原始的JSON数据是:" + realContent);
// 拿到原始的json串以后,可以json串转map或者转对应的DTO,继续处理
Map dataMap = OpenApiUtil.fromJson(realContent, Map.class);
// 后续处理
System.err.println("事件真实数据:" + dataMap);
} else {
// 如果没有配置加密,那么是明文传输的,收到的Map就是真实的数据
Map dataMap = map;
// 后续处理
System.err.println("事件真实数据:" + dataMap);
}
return "OK";
}
# 5、事件消息体
# 5.1、更新职务
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 更新职务消息 | OrgJobUpdateMessage | |
| jobId | int64 | 职务id |
| code | string | 职务编号 |
| orgId | int64 | 所属组织 |
| isEnable | boolean | 状态 |
| oldCode | string | 更新前职务编号 |
| oldOrgId | int64 | 更新前所属组织 |
| oldIsEnable | boolean | 更新前状态 |
| eventKey | string | 消息标识 |
# 5.2、更新组织
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 更新组织消息体 | OrgUnitUpdateMessage | |
| type | enum | 组织类型。枚举项可选值列表: NONE(空), INSTITUTION(机构), DEPARTMENT(部门), OUTSIDE_INSTITUTION(外部(编外)单位), OUTSIDE_DEPARTMENT(外部(编外)部门), |
| orgId | int64 | 组织id |
| oldOrgName | string | 组织名称 |
| orgName | string | 组织名称 |
| oldParentId | int64 | 原上级id |
| parentId | int64 | 上级id |
| oldIsEnable | boolean | 原状态 |
| isEnable | boolean | 状态 |
| oldEffectiveTime | date | 原生效日期 |
| effectiveTime | date | 生效日期 |
| oldInvalidTime | date | 原失效日期 |
| invalidTime | date | 失效日期 |
| eventKey | string | 消息标识 |
# 5.3、更新职级
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 更新职级消息 | OrgLevelUpdateMessage | |
| levelId | int64 | 职级id |
| code | string | 职级编号 |
| levelSort | int32 | 职级序号 |
| isEnable | boolean | 状态 |
| oldCode | string | 职级编号 |
| oldLevelSort | int32 | 更新前职级序号 |
| oldIsEnable | boolean | 更新前状态 |
| eventKey | string | 消息标识 |
# 5.4、创建组织
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 创建组织消息体 | OrgUnitCreateMessage | |
| orgId | int64 | 组织id |
| orgName | string | 组织名称 |
| parentId | int64 | 上级id |
| type | enum | 组织类型。枚举项可选值列表: NONE(空), INSTITUTION(机构), DEPARTMENT(部门), OUTSIDE_INSTITUTION(外部(编外)单位), OUTSIDE_DEPARTMENT(外部(编外)部门), |
| isEnable | boolean | 状态 |
| effectiveTime | date | 生效日期 |
| invalidTime | date | 失效日期 |
| eventKey | string | 消息标识 |
# 5.5、创建人员
| 数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 创建人员消息体 | OrgMemberMessage | |
| memberId | int64 | 人员id |
| name | string | 姓名 |
| phoneNumber | string | 手机号 |
| string | 邮箱 | |
| type | enum | 人员类型。枚举项可选值列表: NONE(空), MEMBER(内部人员), OUTSIDE_MEMBER(外部单位用户), NATURAL_MEMBER(外部个人用户), |
| image | string | 头像 |
| orgId | int64 | 主岗组织id |
| orgName | string | 主岗组织名称 |
| orgIds | array[int64] | 主岗所属机构id |
| isEnable | boolean | 启用状态 |
| effectiveTime | date | 生效日期 |
| invalidTime | date | 失效日期 |
| eventKey | string | 消息标识 |
| memberPostList | array[OrgMemberPostBaseDto] | 任职信息 |
| id | int64 | 任职id |
| main | boolean | 是否主岗 |
| orgId | int64 | 组织id |
| postId | int64 | 岗位id |
| levelId | int64 | 职级id |
| jobId | int64 | 职务id |
| sortId | int32 | 排序号 |
| isEnable | boolean | 状态 |
| effectiveTime | date | 生效日期,毫秒时间戳 |
| invalidTime | date | 失效日期,毫秒时间戳 |
# 5.6、创建岗位
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 创建岗位消息 | OrgPostCreateMessage | |
| postId | int64 | 岗位id |
| code | string | 岗位编号 |
| orgId | int64 | 所属组织 |
| isEnable | boolean | 状态 |
| eventKey | string | 消息标识 |
# 5.7、更新岗位
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 更新岗位消息 | OrgPostUpdateMessage | |
| postId | int64 | 岗位id |
| code | string | 岗位编号 |
| orgId | int64 | 所属组织 |
| isEnable | boolean | 状态 |
| oldCode | string | 更新前岗位编号 |
| oldOrgId | int64 | 更新前所属组织 |
| oldIsEnable | boolean | 更新前状态 |
| eventKey | string | 消息标识 |
# 5.8、创建职务
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 创建职务消息 | OrgJobCreateMessage | |
| jobId | int64 | 职务id |
| code | string | 职务编号 |
| orgId | int64 | 所属组织 |
| isEnable | boolean | 状态 |
| eventKey | string | 消息标识 |
# 5.9、更新人员
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 更新人员消息体 | OrgUpdateMemberMessage | |
| memberId | int64 | 人员id |
| name | string | 姓名 |
| phoneNumber | string | 手机号 |
| string | 邮箱 | |
| type | enum | 人员类型。枚举项可选值列表: NONE(空), MEMBER(内部人员), OUTSIDE_MEMBER(外部单位用户), NATURAL_MEMBER(外部个人用户), |
| image | string | 头像 |
| orgId | int64 | 主岗组织id |
| orgName | string | 主岗组织名称 |
| orgIds | array[int64] | 主岗所属机构id |
| isEnable | boolean | 启用状态 |
| effectiveTime | date | 生效日期 |
| invalidTime | date | 失效日期 |
| eventKey | string | 消息标识 |
| oldMemberPostList | array[OrgMemberPostBaseDto] | 更新前任职信息 |
| id | int64 | 任职id |
| main | boolean | 是否主岗 |
| orgId | int64 | 组织id |
| postId | int64 | 岗位id |
| levelId | int64 | 职级id |
| jobId | int64 | 职务id |
| sortId | int32 | 排序号 |
| isEnable | boolean | 状态 |
| effectiveTime | date | 生效日期,毫秒时间戳 |
| invalidTime | date | 失效日期,毫秒时间戳 |
| memberPostList | array[OrgMemberPostBaseDto] | 更新后任职信息 |
| id | int64 | 任职id |
| main | boolean | 是否主岗 |
| orgId | int64 | 组织id |
| postId | int64 | 岗位id |
| levelId | int64 | 职级id |
| jobId | int64 | 职务id |
| sortId | int32 | 排序号 |
| isEnable | boolean | 状态 |
| effectiveTime | date | 生效日期,毫秒时间戳 |
| invalidTime | date | 失效日期,毫秒时间戳 |
# 5.10、创建职级
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| 创建职级消息 | OrgLevelCreateMessage | |
| levelId | int64 | 职级id |
| code | string | 职级编号 |
| levelSort | int32 | 职级序号 |
| isEnable | boolean | 状态 |
| eventKey | string | 消息标识 |
编撰人:pengfx
快速跳转