一、应用场景
主数据集成是指物联云平台和第三方平台中的基础数据同步。物联云平台主要包含5大类基础数据,分别为组织、企业成员、业主、项目、空间。其中空间数据下细分为5类数据,包含区域、楼栋、单元、楼层、房屋。
保障第三方平台和物联云平台的数据一致性。
二、功能说明
物联云平台提供主动拉取数据的方式进行主数据的同步。需要企业按照规范提供接口进行数据同步。数据同步方式包含全量同步和增量同步,仅在查询到该类型数据不存在成功状态的同步记录时才会进行。当该类型数据已存在成功状态的同步记录时,会进行增量数据的同步,增量数据同步包含新增、更新、删除。删除操作需要通过指定字段(is_delete)进行标识。
三、前提条件
3.1、全量同步:
程序启动或者定时任务触发增量同步时,如果查询对应的租户与数据类型没有成功状态的同步记录,进行全量同步:分页拉取租户对应的主数据全量数据进行同步。
3.2、增量同步(包括新增,更新,删除):
通过每个租户拟定的同步规则(详情请见同框下文)创建不同规则的定时任务线程进行数据的增量同步:通过分页拉取租户同步记录空缺时间时间段的数据进行同步。
3.3、同步规则
1、第三方主数据的删除操作都需要有删除识别,通过is_deleted字段标识,并且能通过第三方主数据提供的查询数据接口体现出来。
2、begin_time~end_time 能够查询该时间段内创建/更新/删除的数据。
3、begin_time , end_time 都是针对 update_time 字段进行筛选。
4、租户同步规则:请提供对应的同步规则包括:数据类型、同步时间时间段、同步时间间隔(如:项目类型数据、每天00:00:00到23:00:00、60分钟)。
5、数据全量同步请按照以下顺序进行同步(如果无对应类型,忽略即可):组织→项目→区域→楼栋→单元→楼层→房屋→住户;组织→项目→员工
6、数据删除同步请按照以下顺序同步(如果无对应类型忽略即可):住户→房屋→楼层→单元→楼栋→区域→项目→组织;员工→ 项目→组织
四、关键流程
4.1、主数据同步流程(拉取数据)
-10ce7bfe87.png)
五、数据提供方接口规范
5.1 数据获取接口规范
各企业定义按该接口规范进行接口开发:
接口URI
请自定义
接口调用Method
POST
请求头
| 名称 | 
必填 | 
类型 | 
备注 | 
| Content-Type | 
True | 
String | 
application/json; charset=utf-8 | 
| corp_id | 
True | 
String | 
企业ID | 
| timestamp | 
True | 
Long | 
时间戳,精确到秒,10分钟内数据有效 | 
| nonce | 
True | 
String | 
流水号nonce(防止重复提交),至少为10位 | 
| signature | 
True | 
String | 
请求签名MD5(corp_id(企业ID)timestamp(时间戳) nonce(随机字符串) appSecret(加密秘钥,创建规则时填写)) (直接字段串拼接,无分隔符),用于数据提供方进行安全校验 | 
请求参数
| 名称 | 
必填 | 
类型 | 
备注 | 
| project_id | 
False | 
String | 
项目id(同步项目时不需要传) | 
| data_type | 
True | 
String | 
同步数据类型(请看6.1、数据类型) | 
| begin_time | 
False | 
Long | 
开始时间点,(时间戳:毫秒)(如不传此参数则返回到end_time字段的所有数据,两者都不传则返回全量数据) | 
| end_time | 
False | 
Long | 
结束时间点,(时间戳:毫秒)(如不传此参数则返回begin_time到现在的所有数据,两者都不传则返回全量数据) | 
| page_no | 
False | 
Int | 
当前页,不传默认1 | 
| page_size | 
False | 
Int | 
页面大小,不传默认100 | 
请求示例:
{
    "project_id": "xxxxx",
    "data_type": "building",
    "begin_time": 6271823901,
    "end_time": 6782138991,
    "page_no": 1,
    "page_size": 100
}
返回参数说明
| 名称 | 
必填 | 
类型 | 
备注 | 
| status | 
True | 
Int | 
HTTP状态码(400、401、403、404、500、503) | 
| code | 
True | 
Int | 
业务错误码,由数据提供方自定义 | 
| msg | 
True | 
String | 
业务错误信息,由数据提供方自定义 | 
| data | 
True | 
Object | 
业务响应数据 | 
| data.count | 
False | 
Int | 
数据总数 | 
| data.list | 
False | 
Array | 
数据列表 | 
| data.list. | 
False | 
Object | 
具体数据(根据请求的不同数据类型,参考具体数据模型。请看5.2、数据说明) | 
返回示例:
{
  "status": "HTTP状态码",
  "code": "业务错误码",
  "msg": "业务错误信息",
  "data": {
    "count": "总数",
    "list": [<T>]
  }
}
5.2 字段说明
5.2.1 组织数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
标识 | 
组织ID | 
是 | 
| parent_id | 
String | 
父级标识 | 
 | 
否 | 
| name | 
String | 
名称 | 
 | 
是 | 
| remark | 
String | 
描述 | 
 | 
否 | 
| type | 
Integer | 
组织分类 | 
0:内部行政组织;1:内部行政组织;2:应用帐号组织;3:职能帐号组织;4:外部帐号组织;5:公共通讯录组织;6:业务组织,默认为6 | 
否 | 
| sub_type | 
Integer | 
组织性质 | 
1:公司;2:分公司;3:子公司;4:片区公司;5:服务中心;6:部门,默认为1 | 
否 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
由数据同步方填写 | 
是 | 
{
    "id":"组织ID",
    "parent_id":"父级标识",
    "name": "名称",
    "remark": "描述",
    "type":6,
    "sub_type":1,
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源"
}
5.2.2 项目数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
标识 | 
项目ID | 
是 | 
| name | 
String | 
名称 | 
 | 
是 | 
| type | 
Int | 
项目类型 | 
默认为 2 :智慧社区(请参考:3.2.1 项目类型) | 
是 | 
| organization_id | 
String | 
业务组织id | 
第三方组织ID | 
是 | 
| province | 
String | 
省份 | 
格式如:”广东省” | 
是 | 
| city | 
String | 
城市 | 
格式如:”广州市” | 
是 | 
| county | 
String | 
县/区 | 
无特殊格式要求 | 
否 | 
| address | 
String | 
项目的详细地址 | 
 | 
否 | 
| remark | 
String | 
项目备注 | 
 | 
否 | 
| layout | 
String | 
项目平面图的url | 
 | 
否 | 
| coordinate | 
Array | 
项目经纬度数组 | 
double数组, coordinate[0]是经度,coordinate[1]是纬度 | 
否 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
由数据同步方填写 | 
是 | 
{
    "id":"项目ID",
    "name": "项目名称",
    "type": 1,
    "organization_id":"项目的上层组织ID",
    "province": "省份",
    "city": "城市名",
    "county": "国家",
    "address": "详细地址",
    "remark": "备注",
    "layout": "项目平面图的url",
    "coordinate": [130.012,66.37],
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源",
}
5.2.3 区域数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
标识 | 
 | 
是 | 
| project_id | 
String | 
所属项目标识 | 
 | 
是 | 
| parent_id | 
String | 
父级区域标识 | 
 | 
否 | 
| index | 
Int | 
在同级中的排序 | 
空间服务的业务属性  (如果没有,主数据是否自动生成) | 
否 | 
| remark | 
String | 
备注 | 
 | 
否 | 
| address | 
String | 
详细地址 | 
 | 
否 | 
| coordinate | 
Array | 
经纬度数组 | 
double数组 | 
否 | 
| name | 
String | 
名称 | 
 | 
是 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
 | 
是 | 
{
    "id":"区域ID",
    "project_id":"所属项目标识",
    "parent_id":"父级区域标识",
    "index": 1,
    "remark": "备注",
    "address": "详细地址",
    "coordinate": [130.012,66.37],
    "name": "名称",
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源",
}
5.2.4 公区数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
标识 | 
 | 
是 | 
| project_id | 
String | 
所属项目标识 | 
 | 
是 | 
| parent_id | 
String | 
父级空间标识 | 
 | 
否 | 
| index | 
Int | 
在同级中的排序 | 
空间服务的业务属性  (如果没有,主数据是否自动生成) | 
否 | 
| remark | 
String | 
备注 | 
 | 
否 | 
| address | 
String | 
详细地址 | 
 | 
否 | 
| coordinate | 
Array | 
经纬度数组 | 
double数组 | 
否 | 
| name | 
String | 
名称 | 
 | 
是 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
 | 
是 | 
{
    "id":"公区ID",
    "project_id":"所属项目标识",
    "parent_id":"父级空间标识",
    "index": 1,
    "remark": "备注",
    "address": "详细地址",
    "coordinate": [130.012,66.37],
    "name": "名称",
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源",
}
 
5.2.5 楼栋数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
标识 | 
 | 
是 | 
| project_id | 
String | 
所属项目标识 | 
 | 
是 | 
| parent_id | 
String | 
所属父级标识 | 
 | 
是 | 
| name | 
String | 
名称 | 
 | 
是 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
 | 
是 | 
{
    "id":"楼栋ID",
    "project_id":"所属项目标识",
    "parent_id":"父级标识",
    "name": "名称",
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源",
}
5.2.6 单元数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
单元标识 | 
 | 
是 | 
| project_id | 
String | 
所属项目标识 | 
 | 
是 | 
| parent_id | 
String | 
所属父级标识 | 
 | 
是 | 
| name | 
String | 
名称 | 
 | 
是 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
由数据同步方填写 | 
是 | 
{
    "id":"单元ID",
    "project_id":"所属项目标识",
    "parent_id":"父级标识",
    "name": "名称",
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源",
}
5.2.7 楼层数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
标识 | 
 | 
是 | 
| project_id | 
String | 
所属项目标识 | 
 | 
是 | 
| parent_id | 
String | 
所属父级标识 | 
 | 
是 | 
| name | 
String | 
名称 | 
 | 
是 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
由数据同步方填写 | 
是 | 
{
    "id":"楼层ID",
    "project_id":"所属项目标识",
    "parent_id":"父级标识",
    "name": "名称",
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源",
}
5.2.8 房屋数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
标识 | 
 | 
是 | 
| project_id | 
String | 
所属项目标识 | 
 | 
是 | 
| parent_id | 
String | 
所属父级标识 | 
 | 
是 | 
| name | 
String | 
名称 | 
 | 
是 | 
| type | 
Int | 
房屋类型 | 
1:家庭房屋,2:设备房3,公寓。对应的类型是家庭类型的房屋,会创建对应的home来供app用户使用。 | 
是 | 
| sub_type | 
Int | 
房屋子类型 | 
完全由用户自定义的类型,不做限制 | 
否 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
 | 
是 | 
{
    "id":"房屋ID",
    "project_id":"所属项目标识",
    "parent_id":"父级标识",
    "name": "名称",
    "type": 1,
    "sub_type": 1,
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源",
}
5.2.9 住户数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
标识 | 
 | 
是 | 
| project_id | 
String | 
所属项目标识 | 
 | 
是 | 
| name | 
String | 
名称 | 
 | 
是 | 
| certificate_type | 
Int | 
证件类型 | 
1:身份证,2:护照,3:军官证,4:港澳通行证 | 
是 | 
| certificate_id | 
String | 
证件号 | 
 | 
是 | 
| phone | 
String | 
手机号 | 
 | 
是 | 
| gender | 
Int | 
性别 | 
0:未知,1:男性,2:女性 | 
是 | 
| birthday | 
String | 
生日 | 
 | 
否 | 
| register_time | 
Long | 
注册时间 | 
时间戳,毫秒数 | 
是 | 
| houses | 
Array | 
房产列表 | 
 | 
是 | 
| houses.house_id | 
String | 
房屋标识 | 
 | 
否 | 
| houses.role | 
Int | 
房屋下的角色 | 
 | 
否 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
由数据同步方填写 | 
是 | 
{
    "id":"住户ID",
    "project_id":"所属项目标识",
    "name": "名称",
    "certificate_type": 1,
    "certificate_id": "证件号",
    "phone": "手机号",
    "gender": 0,
    "birthday": "出生时间",
    "register_time": 1595385751001,
    "houses": [{
        "house_id":"房屋ID",
        "role":1
    }],
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源"
}
5.2.10 员工数据
| 字段名称 | 
类型 | 
描述 | 
备注 | 
是否必填 | 
| id | 
String | 
标识 | 
 | 
是 | 
| project_id | 
String | 
所属项目标识 | 
 | 
是 | 
| name | 
String | 
名称 | 
 | 
是 | 
| email | 
String | 
邮箱 | 
 | 
是 | 
| phone | 
String | 
手机 | 
 | 
是 | 
| certificate_id | 
String | 
证件号 | 
 | 
是 | 
| phone | 
String | 
手机号 | 
 | 
是 | 
| is_delete | 
Boolean | 
是否已删除 | 
true:已删除,false:没有删除 | 
是 | 
| create_time | 
Long | 
创建时间 | 
时间戳,毫秒数 | 
是 | 
| update_time | 
Long | 
更新时间 | 
时间戳,毫秒数 | 
是 | 
| data_source | 
String | 
数据来源 | 
由数据同步方填写 | 
是 | 
{
    "id":"员工ID",
    "project_id":"所属项目标识",
    "name": "名称",
    "phone": "手机号",
    "email": "邮箱",
    "is_delete": false,
    "create_time": 1595384829039,
    "update_time": 1595384829039,
    "data_source": "数据来源"
}
六、枚举详情
6.1、数据类型
| 数据类别 | 
具体数据 | 
data_type | 
数据类型 | 
| 空间 | 
项目 | 
project | 
String | 
| 空间 | 
楼栋 | 
building | 
String | 
| 空间 | 
区域 | 
area | 
String | 
| 空间 | 
单元 | 
unit | 
String | 
| 空间 | 
楼层 | 
floor | 
String | 
| 空间 | 
房屋 | 
house | 
String | 
| 业主 | 
业主 | 
customer | 
String | 
| 组织 | 
组织 | 
organization | 
String | 
| 员工 | 
员工 | 
employee | 
String | 
6.2、项目类型
| 枚举值 | 
说明 | 
数据类型 | 
| 1 | 
长租公寓 | 
Int | 
| 2 | 
智慧社区 | 
Int | 
| 3 | 
智慧家庭 | 
Int | 
| 4 | 
智慧路灯 | 
Int | 
| 5 | 
资产管理 | 
Int | 
| 6 | 
综合体 | 
Int | 
| 7 | 
标准类型 | 
Int | 
| 8 | 
联合办公 | 
Int | 
6.3、同步操作类型
| operation_type | 
说明 | 
数据类型 | 
| update | 
修改(删除必须是逻辑删除,归类为修改类型) | 
String | 
| add | 
新增 | 
String | 
6.4、房产角色类型
| 枚举值 | 
说明 | 
数据类型 | 
| 0 | 
未知 | 
Int | 
| 1 | 
业主 | 
Int | 
| 2 | 
亲属 | 
Int | 
| 3 | 
租客 | 
Int | 
| 99 | 
安装工 | 
Int | 
6.5、房屋类型
| 枚举值 | 
说明 | 
数据类型 | 
| 1 | 
家庭房屋 | 
Int | 
| 2 | 
设备房(废弃) | 
Int | 
| 3 | 
公寓 | 
Int | 
6.6、证件类型
| 枚举值 | 
说明 | 
数据类型 | 
| 1 | 
身份证 | 
Int | 
| 2 | 
护照 | 
Int | 
| 3 | 
军官证 | 
Int | 
| 4 | 
港澳通行证 | 
Int | 
6.7、性别类型
| 枚举值 | 
说明 | 
数据类型 | 
| 0 | 
未知 | 
Int | 
| 1 | 
男性 | 
Int | 
| 2 | 
女性 | 
Int |