事件订阅

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 手机号
email 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 手机号
email 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 消息标识

最后修改 September 4, 2024: 其他路径全部更新英文 (b95746c)