Просмотр исходного кода

************* wx **********************************
中台工具整理方案

张维新 4 лет назад
Родитель
Сommit
01884cf001

+ 44 - 0
docs/dev/data-center-scheme/data-center-platform.md

@@ -0,0 +1,44 @@
+# 数据中心对接物理世界数据同步文档
+
+
+#### 数据中心同步物理世界
+
+1.在物理世界注册同步项目应用
+2.订阅所有项目下的对象类型,以及对象类型对应的所有信息点
+3.根据新版字段结构把数据字典缓存数据中心,重新设计表结构
+4.数据中心所有对象或关系的创建、修改、删除都通过缓存到数据库表存储
+5.通过读取缓存数据表获取需要同步的对象,或关系 同步到新物理世界
+6.数据中心和物理世界对象或关系数据类型重新做转换
+7.MQ机制,数据中心到同步数据服务,同步服务到新物理世界,反之新物理世界发送消息到同步服务,同步服务直接把数据处理到数据中心数据库
+8.通过消息机制处理新物理世界到数据中心的 对象或关系数据
+9.通过消息机制处理新版字典数据的订阅更新,对应处理数据
+10.注意收到字典更新消息时优先处理字典更新,处理完字典后再继续处理对象数据同步
+11.新物理世界消息机制还没有确定 RabbitMQ还是ActiveMQ 
+综上所述 整个同步服务需要重新开发一套出来
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 待解决疑问
+
+
+4.消息通讯?
+
+
+
+#### 数据同步 返回数据全集 创建  修改 不受订阅限制
+创建  修改  查询   
+
+消息通讯机制  哪个应用的创建 修改删除 

+ 299 - 0
docs/dev/data-center-scheme/dict-dataplatform.md

@@ -414,6 +414,274 @@ POST: usercenter/project/save
 }
 ```
 
+#### 查询 项目(project)建筑(building)、楼层(floor)下的信息点 
+
+```
+GET: dict/funcid?&groupId=WD&classCode=building
+```
+请求参数
+
+| 参数名    | 说明                                    |      |
+| --------- | --------------------------------------- | ---- |
+| classCode   | 类型编码                                | 必选 |
+| groupId   | 集团id                                  | 可选 |
+| schemeId  | 集团方案id                              | 可选 |
+| projectId | 项目id                                  | 可选 |
+| appId     | 应用id,传入appId时必须同时传入projectId | 可选 |
+|           |                                         |      |
+请求参数说明
+```
+1.传入projectId是必须同时传入groupId
+2.传入projectId时对应项目必须已配置集团方案,schemeId可以不传,否则报错"当前项目未配置集团方案"
+3.传入appId时必须同时传入projectId
+
+```
+返回参数
+
+```
+{
+    "result": "success",
+    "count": 159,
+    "data": funcid[] // 信息点列表
+}
+```
+
+
+### 查询系统的结构树 需要先查询出来专业 再查询每个专业下的系统
+#### 查询所有专业
+```
+POST: dict/major/query
+```
+
+请求参数
+
+```
+{
+	"criteria": {
+	}
+}
+```
+
+应答内容
+
+```
+{
+    "result":"success",
+    "data":[
+        {
+            "id":1,
+            "code":"SE",
+            "name":"强电专业",
+            "aliasCode":"SE",
+            "aliasName":"强电专业",
+            "type":"common",
+            "groupId":"0"
+        },
+        {
+            "id":2,
+            "code":"WE",
+            "name":"弱电专业",
+            "aliasCode":"WE",
+            "aliasName":"弱电专业",
+            "type":"common",
+            "groupId":"0"
+        }
+    ],
+    "count":2
+}
+```
+
+#### 查询专业下的系统
+
+```
+/dict/class/query
+```
+
+请求参数
+
+```
+{
+    "criteria": {
+      "majorCode":{"$in":["SE"]}
+    }
+}
+```
+
+应答内容
+
+```
+{
+    "result": "success",
+    "data": [
+        {
+            "code": "SEBPBA",
+            "name": "UPS",
+            "aliasCode": "SEBPBA",
+            "aliasName": "UPS",
+            "parentCode": "equipment",
+            "majorCode": "SE",
+            "systemCode": "SEBP"
+        },
+        {
+            "code": "SEBPBP",
+            "name": "备用电源",
+            "aliasCode": "SEBPBP",
+            "aliasName": "EPS",
+            "parentCode": "equipment",
+            "majorCode": "SE",
+            "systemCode": "SEBP"
+        }
+    ],
+    "count": 2
+}
+```
+
+
+
+说明:
+```
+majorCode           是指专业编码
+systemCode          系统编码
+
+```
+
+### 设备类型树结构
+#### 需要先获取专业再根据专业获取系统,然后根据系统获取系统下的设备 获取专业以及系统见上面,下面是直接获取系统下的设备类型
+```
+/dict/class/query
+```
+
+请求参数
+
+```
+{
+    "criteria": {
+      "systemCode":{"$in":["ACAT"]}
+    }
+}
+```
+
+应答内容
+
+```
+{
+    "result": "success",
+    "data": [
+        {
+            "code": "ACATAA",
+            "name": "吊顶风机",
+            "aliasCode": "ACATAA",
+            "aliasName": "吊顶风机",
+            "parentCode": "equipment",
+            "majorCode": "AC",
+            "systemCode": "ACAT"
+        },
+        {
+            "code": "ACATAH",
+            "name": "空调机组",
+            "aliasCode": "ACATAH",
+            "aliasName": "空调机组",
+            "parentCode": "equipment",
+            "majorCode": "AC",
+            "systemCode": "ACAT"
+        }
+    ],
+    "count": 2
+}
+```
+
+
+#### 获取部件类型树结构  需要先获取到所有的部件然后根据部件对应找到设备类型,拼接组成部件树结构
+```
+/dict/class/query
+```
+
+请求参数
+
+```
+{
+  "criteria": {
+    "parentCode": {
+      "$in": [
+        "component"
+      ]
+    }
+  }
+}
+```
+
+应答内容
+
+```
+{
+    "result": "success",
+    "data": [
+        {
+            "code": "SETDHSIP",
+            "name": "综合保护装置",
+            "aliasCode": "SETDHSIP",
+            "aliasName": "综合保护装置",
+            "parentCode": "component",
+            "majorCode": "SE",
+            "systemCode": "SETD",
+            "equipmentCode": "SETDHS"
+        },
+        {
+            "code": "SETDLSDW",
+            "name": "低压配电抽屉",
+            "aliasCode": "SETDLSDW",
+            "aliasName": "低压配电抽屉",
+            "parentCode": "component",
+            "majorCode": "SE",
+            "systemCode": "SETD",
+            "equipmentCode": "SETDLS"
+        }
+    ],
+    "count": 2
+}
+```
+#### 根据部件的 equipmentCode 查询设备类型 然后拼接成部件树结构
+
+```
+/dict/class/query
+```
+
+请求参数
+
+```
+{
+    "criteria": {
+      "code":{"$in":["SETDHS"]}
+    }
+}
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
 
 
@@ -424,7 +692,38 @@ POST: usercenter/project/save
 
 ## 注意事项
 1.某一个类型显示子分类功能新版字典还没有实现
+2.空间类型无法获取
+3.编码问题  例如  系统是两位编码  加上专业是四位编码 code 是为了适配别名?
+```
+ {
+            "code": "SEBPBP",
+            "name": "备用电源",
+            "aliasCode": "SEBPBP",
+            "aliasName": "EPS",
+            "parentCode": "equipment",
+            "majorCode": "SE",
+            "systemCode": "SEBP"
+ }
+```
+4. 创建子分类?
+5. 获取到系统树结构,怎么样知道系统哪些类型中的信息点处于待审核、审核中状态
+![问题](./img/wenti001.png)
+6.怎么使用信息点扩展分类
+![问题](./img/wenti002.png)
+7.修改类型的别名称以及所属的父类 系统和设备都需要
+![问题](./img/wenti003.png)
+8.添加系统类型或设备类型 复制信息点操作
+![问题](./img/wenti004.png)
+
+
+
+
+
+
+
+
 
+## 调换角度,直接使用新版数据字典数库的角度,评定新版数据字典需要实现的接口
 
 
 

BIN
docs/dev/data-center-scheme/img/wenti001.png


BIN
docs/dev/data-center-scheme/img/wenti002.png


BIN
docs/dev/data-center-scheme/img/wenti003.png


BIN
docs/dev/data-center-scheme/img/wenti004.png


+ 2 - 1
docs/dev/data-center-scheme/index.js

@@ -2,7 +2,8 @@ const content = [
 
             ["/dev/data-center-scheme/dict-dataplatform", "中台工具字典接口使用对接方案"],
             ["/dev/data-center-scheme/dict-ADM", "新版字典ADM对接方案"],
-            ["/dev/data-center-scheme/dict-dataplatform", "关系表设计"]
+            ["/dev/data-center-scheme/data-center-platform", "数据中心对接物理世界"]
+
 ];
 
 module.exports = content;

+ 468 - 2
docs/dev/paas/data-platform.md

@@ -1,10 +1,8 @@
-# 物理世界接口文档
 ### 术语说明:
 
 #### 对象
 基于数据字典类型和信息点定于创建的实例
 
-
 ```
 数据字典默认每个类型都有id、name、localId、localName,需要项目和应用在数据字典服务中订阅
 id、name、localId、localName对应原来的(如设备)EquipID、EquipName、EquipLocalID、EquipLocalName,值也相同,修改一方会同时修改另一方(无论是否订阅另一方)
@@ -12,12 +10,20 @@ id、name、localId、localName对应原来的(如设备)EquipID、EquipName
 
 ```
 
+#### 关系
+```
+对象之间的关系,一般由4个字段组成:graphId, rel, from, to
+```
+
+
 ### 字段约定
 
 | 字段      | 说明                          | 备注 |
 | -------- | ----------------------------- | ---- |
 | objectId | 对象id                          |      |
 | classCode  | 类型编码                              |      |
+| graphId  | 关系数据字段,图实例id                              |      |
+| rel  | 关系数据字段,边类型                              |      |
 
 ### 数据结构
 
@@ -31,6 +37,17 @@ id、name、localId、localName对应原来的(如设备)EquipID、EquipName
 | 其他信息点编码   | 根据信息点定义   |                                                     |
 |            |          |                                                           |
 
+关系 relation
+
+| 字段       | 数据类型  | 说明                                                       |
+| ---------- | -------- | --------------------------------------------------------- |
+| graphId         | String   | 图实例id                                                 |
+| rel             | String   | 边类型                                             |
+| from            | String   | 对象id                                          |
+| to              | String   | 对象id                                              |
+| infos           | Object   | 关系附加信息                                              |
+| 
+
 ### 接口
 
 #### 通用参数
@@ -187,3 +204,452 @@ POST: /object/query
     "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", 
+            "infoVaue": "8000-123", 
+            "data": 25.6,
+            "time": "20200512172435"
+        },
+        { 
+            "objectId": "Eqxxxxx", 
+            "infoCode": "Tdb", 
+            "infoVaue": "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可能是不连续的
+
+```
+
+#### 基础接口: 发送控制指令/设定动态参数
+请求地址
+```
+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", 
+            "value": 24,
+            "status": "sended"
+        },
+        { 
+            "objectId": "Eqxxxxx", 
+            "infoCode": "InValveSwitchSet", 
+            "value": "a",
+            "status": "skip",
+            "error": "值错误"
+        },
+        { 
+            "objectId": "Eqxxxxx", 
+            "infoCode": "InValveSwitchSet", 
+            "value": "a",
+            "status": "send-timeout",
+            "error": "异常信息"
+        }
+    ]
+}
+```
+返回内容说明
+```
+    status: 指令发送状态
+    skip: 信息点未配置或值错误等会取消发送,
+    sended: 指令发送成功, 注意:指令发送和设备执行是异步的,指令发送成功并不表示设备会马上执行该指令,甚至不能确定设备将来会执行该指令
+    send-timeout: 连接采集程序超时
+    status的状态码后续会修订,文档中的值并不是最终版本
+```