事件订阅
COP开放事件,三方异构系统订阅事件,完成组织同步模式。
3 分钟阅读
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 | 消息标识 |