领域模型事件定义
业务模型说明
说明
事件推送方式分两种
1、通过MQ
(如Pulsar、RabbitMQ;仅私有化部署提供)
对接指南请参考
RabbitMQ对接指南
PulsarMQ对接指南
2、通过Webhook
(V6R3版本以上)
事件类型
1、平台事件
平台产生的各类事件称为平台事件,主要供外部系统进行消费,与自有系统进行集成。Topic格式为-v1-business-
作为前缀,
2、外部事件
外部子系统推送的事件,非AIoT发出的事件称为外部事件,外部事件需遵循外部事件定义进行推送。以开放接口的方式进行推送,推送接口请参考推送业务事件消息接口
1. 定义
事件与动作,均是业务流转过程中产生的数据,但由于其产生的时机,数据的性质和动作有区别,在使用事件数据源数据时请勿将其与动作相混淆。在这里对事件数据源的数据性质做说明
事件是对业务中已发生的动作的描述,事件总发生在动作之后,即:动作发生 --> 产生事件
,关心此动作发生的消费者系统消费会消费此事件,并在自己的业务场景中使用。
tip 使用场景
比如,联动服务作为消费者,消费车辆的进出场事件,当指定车牌号的车辆入场时,触发一系列联动动作。
2. 与动作相区分
tip 说明
动作是系统中主动发起的业务行为,往往是通过主动触发的形式(例如请求API的方式)。比如,A系统要创建一个工单,发起一个创建工单的动作(请求工单系统API)。工单系统API在创建工单动作完成后,产生工单创建完成事件。
3. 示意图
这个简单的示意图说明了动作和事件之间的关系,其中系统A请求API创建工单,这是一个动作。在执行动作之后,工单系统发布了一个事件,供其他系统订阅
1. 对象模型规范
tip 说明
对象模型是用于描述事件属性的抽象化概念,是业务中实际发生事件的数字化映射
1.1 公共属性
所有的事件对象都具有一些公共属性,通过公共属性,我们可以获取到所有事件都具有的公共基础信息,事件的公共属性包括:
属性名称 | 作用 | 说明 |
---|---|---|
消息Id(msgId )非必填 |
消息Id | 消息唯一Id(建议UUID) |
上报时间(reportTs )必填 |
事件上报时间 | 13位时间戳 |
描述(profile ) 必填 |
描述事件的准确类别 | 始终包含的字段包括:appType (代表业务模型的编码;类型:string)poiCode (代表业务模块下更细的分类编码;类型:string)modelId (技术侧定义的payload结构ID;类型:int,通过推送事件接口 推送业务事件消息 时传递此参数) |
事件(events ) 必填 |
定义详细的事件信息 | 1、每个事件支持多级嵌套(不建议嵌套太深如2级以上,建议在不影响理解的情况下尽量平铺);事件之间各自独立的,不要理解为数据结构是同一个 2、每个事件都具有 eventType 字段,用于描述事件类型(1. 通知(大多默认情况) 2. 告警 3. 取消告警);类型:enum/int 3、如果事件发生时间与上报时间 reportTs 不一致,每个事件单独定义事件发生时的时间字段,建议统一约定参数名为:eventTs 。如果有冲突也可定义其他参数名;类型:long,13位时间戳 |
这是一个代表车行业务模型中车辆进出事件的对象示例,将在后文进行详细说明:
{
"reportTs": 1661154622,
"profile": {
"poiCode": "s0010001",//此业务的编码
"appType": "parking",//标识这是属于车行一类业务类型
"modelId": 10001//json结构的唯一 标识
},
"events": {
"in": {
"eventType": 1,//事件中的公共参数字段,1代表这是一个普通通知型的事件
"eventTs": 148813512323,//由于进停车场发生的时间早于事件实际上报的时间,故单独定义
"parkingLotId": "停车场id",
"parkingLotName": "达实达实A停车场",
"exitType": 1,
"exitId": "148813512323",
"exitName": "B1东出口",
"plateNum": "粤B12312"
},
}
}
{
"reportTs": 1661154622,
"profile": {
"poiCode": "s0010001",
"appType": "parking",
"modelId": 10001
},
"events": {
"out": {
"eventType": 1,
"eventTs": 148813512323,
"parkingLotId": "停车场id",
"parkingLotName": "达实达实A停车场",
"exitType": 2,
"exitId": "148813512323",
"exitName": "B1西出口",
"plateNum": "粤B12312"
}
}
}
要严格按照以上结构,除了events曾级下的具体事件中字段可以自定义,如out下的事件字段(eventType除外即使在具体事件层级下,也必须遵守统一名称约定),其他结构结构不允许自定义,如禁止随意添加删减修改字段
1.2 profile
属性说明
tip 说明
通过profile
属性,可以始终定位到某个业务模型下唯一的一种事件对象,其应用场景包括:
【数据处理分析】: 在平台侧的数据处理以及分析过程中,可以根据 poiCode
/modelId
,自动对不同数据应用不同的数据处理流程;方便后期大数据分析;
【语义化展示】: 应用系统在接收到业务数据时,可以根据数据携带的 modelId
获取取对应的对象模型定义,根据模型定义对数据自动进行语义化展示,如 temperature_value: 35
展示为 温度: 35 度
;
在这里对profile
属性的各个字段做详细说明:
appType
代表业务模型的编码持续更新,各开发人员自主在此进行注册
,目前包括:
编码 | 说明 |
---|---|
parking |
车行业务 |
walking |
人行业务 |
meeting |
场地预定业务 |
alarm |
告警业务 |
space |
空间业务 |
device |
设备业务 |
org |
组织数据业务 |
projectDevice |
项目设备业务 |
product |
产品业务 |
instance |
实例业务 |
simulator |
模拟器业务 |
user |
用户数据业务 |
customer |
客户数据业务 |
customerPermission |
客户权限数据业务 |
org |
组织数据业务(外部) |
user |
用户数据业务(外部) |
enterprise |
企业数据业务(外部) |
customer |
客户数据业务(外部) |
role |
角色数据业务 |
... |
... |
poiCode
代表业务模块分类的编码,此编码由三部分组成:业务模型标识,场景编码,业务模块编码
业务模块(功能)类型标识
业务模块(功能)分两大类,业务模型使用小写字母s
作为前缀(service的第一个字母),设备场景使用小写字母d
作为前缀(device的第一个字母)
场景编码
按照平台收录顺序排列持续更新,各开发人员自主在此进行注册
,现有的各场景的编码分别为
业务模块(功能)poiCode对照表
模型名称 | 类型 | poiCode编码 |
---|---|---|
车行模型:车行模块 | 业务模型 | s001 |
人行场模型:人行模块 | 业务模型 | s002 |
场地预定模型:场地模块 | 业务模型 | s003 |
告警模型:告警模块 | 业务模型 | s004 |
空间模型:空间模块 | 业务模型 | s005 |
组织数据模型:组织数据模块 | 业务模型 | s006 |
项目设备模型:项目设备模块 | 业务模型 | s007 |
用户数据模型:用户模块 | 业务模型 | s008 |
客户数据模型:客户数据模块 | 业务模型 | s009 |
客户权限数据模型:客户权限模块 | 业务模型 | s010 |
组织模型:组织同步模块 | 业务模型 | s011 |
用户模型:用户同步模块 | 业务模型 | s012 |
企业模型:企业同步模块 | 业务模型 | s013 |
客户模型:客户同步模块 | 业务模型 | s014 |
排班模型:排班同步模块 | 业务模型 | s0150001 |
排班模型:排班组同步模块 | 业务模型 | s0150002 |
人行场模型:人员进出场 | 业务模型 | s0020001 |
人行场模型:访客签到 | 业务模型 | s0020002 |
安防模型:服务事件 | 业务模型 | s0160001 |
角色模型:角色同步模块 | 业务模型 | s017 |
诊断业务模型 | 业务模型 | s0190001 |
访客业务模型 | 业务模型 | s020 |
门禁业务模型 | 业务模型 | s021 |
... |
... |
设备(IoT)业务poiCode对照表
模型名称 | 类型 | 编码 |
---|---|---|
设备模型:设备模块 | 设备模型 | d001 |
产品场景:产品模块 | 设备模型 | d002 |
实例场景:实例模块 | 设备模型 | d003 |
模拟器场景:模拟器模块 | 设备模型 | d004 |
... |
... |
modelId
代表技术侧定义的对象模型ID,此编码和poiCode值相同(暂时)
对象模型ID
按照平台收录顺序排列持续更新,各开发人员自主在此进行注册
,现有的各业务模型的ModelID分别为
ModelID对照表
场景名称 | 场景类型 | ModelID |
---|---|---|
车行场景 | 业务场景 | 1 |
人行场景 | 业务场景 | 2 |
场地预定场景 | 业务场景 | 3 |
告警场景 | 业务场景 | 4 |
空间场景 | 业务场景 | 5 |
组织数据场景 | 业务场景 | 6 |
项目设备场景 | 业务场景 | 7 |
用户数据场景 | 业务场景 | 8 |
客户数据场景 | 业务场景 | 9 |
客户权限数据场景 | 业务场景 | 10 |
组织场景(外部) | 业务场景 | 11 |
用户场景(外部) | 业务场景 | 12 |
企业场景(外部) | 业务场景 | 13 |
客户场景(外部) | 业务场景 | 14 |
人行场景:人员进出场 | 业务场景 | 20001 |
人行场景:访客签到 | 业务场景 | 20002 |
安防模型:服务事件 | 业务场景 | 160001 |
角色数据场景 | 业务场景 | 17 |
... |
... |
设备场景
场景名称 | 场景类型 | 编码 |
---|---|---|
设备场景 | 设备场景 | 1 |
产品场景 | 设备场景 | 2 |
实例场景 | 设备场景 | 3 |
模拟器场景 | 设备场景 | 4 |
... |
... |
业务模块编码
此编码会在各个业务模块的数据标准中定义,不在此处对各个业务场景的所有业务模块编码做统一展示
1.3 events
属性说明
注意
事件属性作为业务自定义字段,由各个业务模块自行决定其内容与各字段含义,详见数据标准定义