### 术语说明: #### 对象 基于数据字典类型和信息点定于创建的实例 ``` 数据字典默认每个类型都有id、name、localId、localName,需要项目和应用在数据字典服务中订阅 id、name、localId、localName对应原来的(如设备)EquipID、EquipName、EquipLocalID、EquipLocalName,值也相同,修改一方会同时修改另一方(无论是否订阅另一方) 长期计划来讲数据字典和物理世界将取消(如设备)EquipID、EquipName、EquipLocalID、EquipLocalName这类信息点,对象统一使用id、name、localId、localName ``` #### 关系 ``` 对象之间的关系,一般由4个字段组成:graphId, rel, from, to ``` ### 字段约定 | 字段 | 说明 | 备注 | | -------- | ----------------------------- | ---- | | objectId | 对象id | | | classCode | 类型编码 | | | graphId | 关系数据字段,图实例id | | | rel | 关系数据字段,边类型 | | ### 数据结构 对象 object | 字段 | 数据类型 | 说明 | | ---------- | -------- | --------------------------------------------------------- | | id | String | id,全局唯一 | | projectId | String | 项目id,不可为空 | | classCode | String | 类型code,不可为空 | | 其他信息点编码 | 根据信息点定义 | | | | | | 关系 relation | 字段 | 数据类型 | 说明 | | ---------- | -------- | --------------------------------------------------------- | | graphId | String | 图实例id | | rel | String | 边类型 | | from | String | 对象id | | to | String | 对象id | | infos | Object | 关系附加信息 | | ### 接口 #### 通用参数 传参方式: 拼接在url后 | 参数名 | 数据类型 | 说明 | | ---------- | -------- | ------------------------- | | projectId | String | 项目id,不可为空 | | appId | String | 应用id,不可为空 | | | | | #### 基础接口: 创建对象 接口说明 ``` 根据projectId 和 appId 从数据字典查询出已订阅的信息点清单list, 并根据信息点清单list对入参数据进行合法性校验 不在信息点清单list中的参数将被忽略 该接口为批量创建接口,只有全部对象创建成功才会返回成功,不存在部分成功部分失败的情况 ``` 请求地址 ``` POST: /object/create ``` 请求参数 ``` [ { "classCode": "类型编码,不可为空", "信息点编码": "值" } ] ``` 返回内容 ``` { "result": "success", "message": "错误信息,如果接口发生错误会返回该字段" } ``` #### 基础接口: 更新对象 接口说明 ``` 根据projectId 和 appId 从数据字典查询出已订阅的信息点清单list, 信息点编码即为入参字段名,并根据信息点清单list对入参数据进行合法性校验 不在信息点清单list中的入参字段将被忽略 两组(id和(classCode,EquipID))参数必须传一组(本例中EquipID对应设备ID,其他如ProjID对应项目ID等) ``` 请求地址 ``` POST: /object/update ``` 请求参数 ``` [ { "id": "对象id", "classCode": "类型编码,不可为空", "信息点编码": "值" } ] ``` 返回内容 ``` { "result": "success", "message": "错误信息,如果接口发生错误会返回该字段" } ``` #### 基础接口: 删除对象 接口说明 ``` 删除id对应的对象 id不存在时将被忽略 ``` 请求地址 ``` POST: /object/delete ``` 请求参数 ``` [ "id1", "id2", "id3"] ``` 返回内容 ``` { "result": "success", "message": "错误信息,如果接口发生错误会返回该字段" } ``` #### 基础接口: 查询对象 接口说明 ``` 参考通用查询接口 查询字段和排序字段必须是项目和应用订阅了的信息点对应的字段 返回的字段为项目和应用已订阅的信息点字段 ``` 请求地址 ``` POST: /object/query ``` 请求参数 ``` { "criteria": { "classCode": "ACCCOT" }, "orders": [ { "column": "createTime", "asc": true } ], "page": 1, "size": 10 } ``` 返回内容 ``` { "result": "success", "count": 12, "data": [ { "信息点编码": "值" } ] "message": "错误信息,如果接口发生错误会返回该字段" } ``` #### 基础接口: 查询图实例 接口说明 ``` 目前图实例是内置数据,仅提供查询 ``` 请求地址 ``` POST /graph/query ``` 请求参数 ``` { "criteria": { "graphType": "ArchSubset" } } ``` 返回内容 ``` { "result" : "success", "data" : [ { "id" : "GtArchSubset001", "projectId" : "Pj3203020001", "graphType" : "ArchSubset", "sequenceId" : "001", "valid" : true, "createTime" : "20200519140942" } ] } ``` #### 基础接口: 创建关系 接口说明 ``` 该接口是批量创建接口 调用时需确保每一项的数据正确,如果有任意一个或多于一个元素存在错误则返回报错,同时参数正确的数据也不会保存 同样的参数可以调用多次,如果参数对应的关系已存在则覆盖更新 需要确保使用的graphId和rel是最新版字典定义的数据,接口会对graphId和rel进行校验(目前未校验) ``` 请求地址 ``` POST: /relation/save ``` 请求参数 ``` [ { "graphId" : "ddd", "rel" : "atob", "from" : "Sp320302000147eab664592c4a818bc5aebf8ad88f91", "to" : "Si3203020001e86cab26efdc11e9872a55fddb5ea8bb" }, { "graphId" : "ddd", "rel" : "atob", "from" : "Sp320302000147eab664592c4a818bc5aebf8ad88f91", "to" : "Si32030200016f0b820a1a8c11eaac5ab725fa2ffefc" } ] ``` 返回内容 ``` { "result" : "fail", "message" : "参数错误", "data" : [ { "result" : "success", "target" : { "graphId" : "ddd", "rel" : "atob", "from" : "Sp320302000147eab664592c4a818bc5aebf8ad88f91", "to" : "Si3203020001e86cab26efdc11e9872a55fddb5ea8bb" } }, { "result" : "error", "target" : { "graphId" : "ddd", "rel" : "atob", "from" : "Sp320302000147eab664592c4a818bc5aebf8ad88f91", "to" : "abc" }, "error" : "to对象Id[abc]不存在;" } ] } ``` #### 基础接口: 删除关系 接口说明 ``` 该接口是批量删除接口 调用时需确保每一项的数据正确,如果有任意一个或多于一个元素存在错误则返回报错,同时参数正确的数据也不会处理 根据入参删除一个或多个关系实例 请务必明确入参逻辑 ``` 请求地址 ``` POST /relation/delete ``` 请求参数 ``` [ { "graphId" : "ddd", "rel" : "atob", "from" : "Sp320302000147eab664592c4a818bc5aebf8ad88f91" }, { "graphId" : "ddd", "rel" : "atob", "to" : "Si32030200016f0b820a1a8c11eaac5ab725fa2ffefc" } ] ``` 返回内容 ``` { "result" : "success", "data" : [ { "result" : "success", "target" : { "graphId" : "ddd", "rel" : "atob", "from" : "Sp320302000147eab664592c4a818bc5aebf8ad88f91" }, "deletedCount" : 2 }, { "result" : "success", "target" : { "graphId" : "ddd", "rel" : "atob", "to" : "Si32030200016f0b820a1a8c11eaac5ab725fa2ffefc" }, "deletedCount" : 0 } ], "totalDeletedCount" : 2 } ``` 返回内容说明 | 字段名 | 数据类型 | 说明 | | ---------- | -------- | ------------------------- | | data.deletedCount | Integer | 单个参数对应删除的关系的数量 | | totalDeletedCount | Integer | 所有参数对应删除的关系的数量 | | | | | #### 基础接口: 查询关系 接口说明 ``` 不支持分页! from和to必须且只能传一个 withColumns:infos, infos是关系附件的数据, 如果不传则不返回infos ``` 请求地址 ``` POST: /relation/query ``` 请求参数 ``` { "criteria": { "graphId": "GtElementSpNeighborhood001", "rel": "10", "from": "Eq3203020001e945bebd9b1447b9859638810e7d6147", "to": { "$in":[ "Sp320302000151a095a44c1d4fd7930d2f87d38cdf77", "Sp32030200010b1d106c4a6d45698c781bf7356df8ba ] } }, "withColumns": ["infos"] } ``` 返回内容 ``` { "result": "success", "data": [ { "graphId": "GtElementSpNeighborhood001", "rel": "10", "from": "Eq3203020001e945bebd9b1447b9859638810e7d6147", "to": "Sp320302000151a095a44c1d4fd7930d2f87d38cdf77" }, { "graphId": "GtElementSpNeighborhood001", "rel": "10", "from": "Eq3203020001e945bebd9b1447b9859638810e7d6147", "to": "Sp32030200010b1d106c4a6d45698c781bf7356df8ba" } ] "message": "错误信息,如果接口发生错误会返回该字段" } ``` #### 基础接口: 查询关系对象 接口说明 ``` 根据关系查询对象 不支持分页! from和to必须且只能传一个, 如果传from同时可以传toClassCode, 如果传to同时可以传fromClassCode 如果不传withColumns则查询到的对象默认只返回id, name, localId, localName, classCode ``` 请求地址 ``` POST: /relation/object/query ``` 请求参数 ``` { "criteria": { "graphId": "GtElementSpNeighborhood001", "rel": "10", "from": "Eq3203020001e945bebd9b1447b9859638810e7d6147", "fromClassCode": "ACCCOT", "to": { "$in":[ "Sp320302000151a095a44c1d4fd7930d2f87d38cdf77", "Sp32030200010b1d106c4a6d45698c781bf7356df8ba ] }, "toClassCode": "space", }, "withColumns": [ "id", "name", "localId", "localName", "classCode" ] } ``` 返回内容 ``` { "result": "success", "data": [ { "id": "Sp320302000151a095a44c1d4fd7930d2f87d38cdf77", "name": "对象名称", "localId": "对象本地编码", "localName": "对象本地名称", "classCode": "space" } ] "message": "错误信息,如果接口发生错误会返回该字段" } ``` #### 基础接口: 查询实时数据 接口说明 ``` 查询对象绑点信息点的实时数据 ``` 请求地址 ``` POST: /object/data/current ``` 请求参数 ``` [ { "objectId": "Eqxxxxx", "infoCode": "Tdb" }, { "objectId": "Eqxxxxx", "infoCode": "CO2" }, { "objectId": "Eqxxxxx", "infoCode": "Hcho" } ] ``` 返回内容 ``` { "result": "success", "data": [ { "objectId": "Eqxxxxx", "infoCode": "Tdb", "infoValue": "8000-123", "data": 25.6, "time": "20200512172435" }, { "objectId": "Eqxxxxx", "infoCode": "Tdb", "infoValue": "8000-123", "data": 25.6, "time": "20200512172435" }, { "objectId": "Eqxxxxx", "infoCode": "Tdb", "error": "错误信息:信息点不存在,表号功能号配置错误,断数等" } ] } ``` 返回内容说明 ``` infoValue: 信息点配置的内容即绑定的表号功能号 time: 实时数据的采集时间 data: 实时数据的值 ``` #### 基础接口: 查询历史数据/分精度数据(废弃) 接口说明 ``` 查询对象绑点信息点的历史数据 ``` 请求地址 ``` POST: /object/data/history ``` 请求参数 ``` { "criteria": { "objectId": "", "infoCode": "", "period": 300, "time": { "$gte": "20200415120000", "$lt": "20200501120000" }, "asc": true } } ``` 参数说明 ``` objectId: 必填,对象id infoCode: 必填,信息点ID period: 必填,间隔, 单位为秒, 如300表示5分钟 time: 必填,历史数据的开始结束时间 asc: 对结果按时间排序, true表示升序, false表示降序, 默认为false ``` 返回内容 ``` { "result": "success", "data": [ { "time": "20200415120000" "data": 25.6, }, { "time": "20200415120500" "data": 25.6, }, { "time": "20200415121000" "data": 25.6, } ] } ``` 返回内容说明 ``` 返回数据的time可能是不连续的 ``` #### 基础接口: 查询历史数据/分精度数据 接口说明 ``` 查询对象绑点信息点的历史数据 1. 多点位个数最多支持50个 2. 分钟级数据,单点位支持最大7天数据查询,多点位支持最大1天数据查询; 3. 小时级数据,单点支持最大30天数据查询,多点位支持最大3天数据查询; 4. 日级数据,单点支持最大1年数据查询,多点位支持最大30天数据查询; ``` 请求地址 ``` POST: /object/data/history ``` 请求参数 ``` { "startTime": "20200415120000", "endTime": "20200501120000", "period": "分精度类型,支持 1min、5min、15min、1h、1d", "params": [ { "objectId": "对象id", "infoCode": "信息点编码", }, { "objectId": "对象id", "infoCode": "信息点编码", } ] } ``` 参数说明 ``` startTime: period: 必填,间隔 objectId: 必填,对象id infoCode: 必填,信息点ID ``` 返回内容 ``` { "result": "success", "data": [ { "objectId": "对象id", "infoCode": "信息点编码", "data": [ { "time": "20200415120000" "data": 25.6, }, { "time": "20200415120500" "data": 25.6, } ] }, { "objectId": "对象id", "infoCode": "信息点编码", "data": [ { "time": "20200415120000" "data": 25.6, }, { "time": "20200415120500" "data": 25.6, } ] } ] } ``` 返回内容说明 ``` 返回数据的time可能是不连续的 ``` #### 基础接口: 发送控制指令/设定动态参数 接口说明 ``` 该接口为异步方式 ``` 请求地址 ``` POST: /object/funcid/setting ``` 请求参数 ``` [ { "objectId": "Eqxxxxx", "infoCode": "FanFreqSet", value: 24 }, { "objectId": "Eqxxxxx", "infoCode": "InValveSwitchSet", value: "a" }, { "objectId": "Eqxxxxx", "infoCode": "WaterInOutDetaTempSet", value: 10 } ] ``` 请求参数说明 ``` value要严格匹配信息点定义的数据类型 ``` 返回内容 ``` { "result": "success", "data": [ { "objectId": "Eqxxxxx", "infoCode": "FanFreqSet", "exeCode":"sfge131v4t2vs3423rbsb3" }, { "objectId": "Eqxxxxx", "infoCode": "InValveSwitchSet", "exeCode":"sfge131v4t2vs3423rbsb3" }, { "objectId": "Eqxxxxx", "infoCode": "InValveSwitchSet", "exeCode":"sfge131v4t2vs3423rbsb3" } ] } ``` 返回内容说明 ``` exeCode: 指令查询码,用于查询指令执行结果 ``` #### 基础接口: 查询指令执行结果 请求地址 ``` POST: /object/funcid/settingQuery ``` 请求参数 ``` [ "sfge131v4t2vs3423rbqb3", "e1ge131v4t2vs3423rbsb3", "eaqge131v4t2vs3423rger" ] ``` 返回内容 ``` { "result": "success", "data": [ { "exeCode": "sfge131v4t2vs3423rbqb3", "exeResult": "timeout", }, { "exeCode": "e1ge131v4t2vs3423rbsb3", "exeResult": "running", }, { "exeCode": "eaqge131v4t2vs3423rger", "exeResult": "failed", } ] } ``` 返回内容说明 ``` 控制指令执行结果为一个字符串,其可能值有以下几种: - timeout,表示控制指令已下发但超过了合理响应时间(默认1minute,系统可配置)至今一直为得到反馈 - running,表示控制指令已下发在合理响应时间内还未得到反馈 - failed,指令未下发出去 - success-offline,指令已下发出去,并得到了反馈,'success-'后面的字符为反馈的信息 ```