yaoll 4 jaren geleden
bovenliggende
commit
a95913796c

+ 17 - 0
README.md

@@ -1,2 +1,19 @@
 # persagy-dmp-server-doc
 
+```
+npm --registry https://registry.npm.taobao.org install vuepress -D
+npm --registry https://registry.npm.taobao.org install @vuepress/plugin-back-to-top -D
+
+```
+
+dev
+
+```
+npm run docs:dev
+```
+
+build
+
+```
+npm run docs:build
+```

+ 26 - 0
docs/.vuepress/config.js

@@ -0,0 +1,26 @@
+module.exports = {
+    title: '数据中台',
+    description: 'Just playing around',
+    plugins: ['@vuepress/back-to-top'],
+    themeConfig: {
+        nav: [{ text: '主页', link: '/' }, { text: '物理世界', link: '/rwd/' }],
+
+        sidebarDepth: 1,
+        displayAllHeaders: true,
+        sidebar: {
+            '/rwd': [
+                {
+                    title: '定义数据',
+                    collapsable: false,
+                    children: [{ title: '类型定义', path: '/rwd/def_class' }, { title: '信息点定义', path: '/rwd/def_funcid' }]
+                },
+                {
+                    title: '实例数据',
+                    collapsable: false,
+                    children: [{ title: '对象数据', path: '/rwd/instance_object' }, { title: '关系数据', path: '/rwd/instance_relation' }]
+                },
+                { title: 'IOT', path: '/rwd/iot' }
+            ]
+        }
+    }
+}

+ 10 - 0
docs/.vuepress/enhanceApp.js

@@ -0,0 +1,10 @@
+// 使用异步函数也是可以的
+export default ({
+    Vue, // VuePress 正在使用的 Vue 构造函数
+    options, // 附加到根实例的一些选项
+    router, // 当前应用的路由实例
+    siteData, // 站点元数据
+    isServer // 当前应用配置是处于 服务端渲染 或 客户端
+}) => {
+    // ...做一些其他的应用级别的优化
+}

+ 11 - 0
docs/.vuepress/templates/dev.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="width=device-width,initial-scale=1" />
+        <title></title>
+    </head>
+    <body>
+        <div id="app"></div>
+    </body>
+</html>

+ 11 - 0
docs/.vuepress/templates/ssr.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="width=device-width,initial-scale=1" />
+        <title></title>
+    </head>
+    <body>
+        <div id="app"></div>
+    </body>
+</html>

+ 15 - 0
docs/README.md

@@ -0,0 +1,15 @@
+# 数据中台接口文档
+
+## 物理世界
+
+#### [类型定义](/rwd/def_class.md)
+
+#### [信息点定义](/rwd/def_funcid.md)
+
+#### [关系定义(图类型\边类型定义)](/rwd/def_graph.md)
+
+#### [对象数据](/rwd/instance_object.md)
+
+#### [关系数据](/rwd/instance_relation.md)
+
+#### [IOT 数据](/rwd/def_class.md)

+ 98 - 0
docs/rwd/def_class.md

@@ -0,0 +1,98 @@
+### 数据说明
+
+```
+1.类型定义,用于描述现实世界的对象的分类,如空间、新风机等
+2.平台字典,系统内置的一组类型定义和信息点定义数据,与集团和项目无关
+3.集团字典,是平台字典和集团自定义数据的并集(目前不提供集团自定义功能,若有自定义需求需联系研发处理)
+4.集团方案,根据业态不同,从集团字典中筛选(订阅)特定的类型和信息点形成方案,从而过滤掉实际业务中不关注的类型和信息点,集团方案是集团字典的子集,集团所拥有的项目必须应用一个且仅有一个集团方案
+5.项目字典,集团方案和项目自定义数据的并集(目前不提供项目自定义功能,若有自定义需求需联系研发处理)
+6.应用订阅,根据应用关注点不同,从项目字典中筛选(订阅)特定的类型和信息点,从而过滤掉应用不关注的类型和信息点,每个应用对每个项目都需要进行订阅配置
+7.
+8.
+
+```
+
+### 数据结构
+
+| 字段          | 数据类型 | 查询字段 | 说明                                                            |
+| ------------- | -------- | -------- | --------------------------------------------------------------- |
+| code          | String   | Y        | 全局唯一                                                        |
+| name          | String   | Y        | 类型名称                                                        |
+| aliasCode     | String   | Y        | 类型别名编码, 集团下唯一                                        |
+| aliasName     | String   | Y        | 类型别名名称                                                    |
+| type          | String   | Y        | 类别:平台级 common,集团级 group,项目级 project                  |
+| groupId       | String   | Y        | 集团 id, type=group 或 type=project 时该字段为集团 id,否则为"0" |
+| projectId     | String   | Y        | 集团 id, type=project 时该字段为项目 id,否则为"0"               |
+| majorCode     | String   | Y        | 专业编码, 上级类型是系统 or 设备时该字段有值                    |
+| systemCode    | String   | Y        | 系统编码,上级类型是设备时该字段有值,值为系统类型的 code         |
+| equipmentCode | String   | Y        | 设备编码,上级类型是部件时该字段有值,值为系统类型的 code         |
+| parentCode    | String   | Y        | 上级类型 code                                                   |
+
+### 查询接口
+
+接口说明
+
+```
+1.若集团编码、方案id、项目id全部为空,则返回(符合查询条件的)平台级字典定义的类型数据
+2.若集团编码不为空,则返回集团级字典定义的类型数据
+3.若集团方案id不为空,则返回集团方案订阅的类型数据
+4.若项目id不为空,则返回项目级字典定义的类型数据
+5.若应用id不为空,则返回应用订阅的类型数据
+6.若subFlag=true,则按子分类信息点将类型拆分后返回
+7.不支持分页
+8.如果平台级、集团级、项目级均有相同code对应的类型数据,则按优先级顺序(项目级 > 集团级 > 平台级)返回高优先级的数据
+9.该接口已处理平台级、集团级、项目级三级字典逻辑,返回数据中type、groupCode、projectId三个字段可以忽略
+
+```
+
+请求方式
+
+```
+POST /def/class?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id&subFlag=false
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明                                                                                 |
+| --------- | -------- | ------------------------------------------------------------------------------------ |
+| groupCode | String   | 集团编码                                                                             |
+| schemeId  | String   | 方案 id                                                                              |
+| projectId | String   | 项目 id                                                                              |
+| appId     | String   | 应用 id, 若应用不为空则必须项目 id 同时不为空                                        |
+| subFlag   | Boolean  | 子分类标记,若为 true 则按子分类字段将类型拆解后返回,目前不支持指定类型进行子分类展开 |
+
+请求体
+
+```
+{
+    "criteria": {
+        "code": "ACATAH"
+    }
+}
+
+```
+
+返回数据
+
+```
+{
+    "result": "success",
+    "data": [
+        {
+            "id": "3b53b2e3019811eb9ef10242ac110002",
+            "code": "ACATAH",
+            "objType": "equipment",
+            "name": "空调机组",
+            "aliasCode": "ACATAH",
+            "aliasName": "空调机组",
+            "type": "common",
+            "groupCode": "0",
+            "projectId": "0",
+            "majorCode": "AC",
+            "systemCode": "ACAT",
+            "parentCode": "equipment"
+        }
+    ]
+}
+
+```

+ 145 - 0
docs/rwd/def_funcid.md

@@ -0,0 +1,145 @@
+### 数据说明
+
+```
+1.信息点定义,用于描述类型的属性
+2.默认每个类型都有id、name、localId、localName、objType、classCode、projectId,无需订阅,也不能取消订阅
+
+
+```
+
+### 数据结构
+
+| 字段       | 数据类型 | 查询字段 | 说明                                                                             |
+| ---------- | -------- | -------- | -------------------------------------------------------------------------------- |
+| code       | String   | Y        | 信息点编码,同类型下唯一                                                          |
+| name       | String   | Y        | 信息点名称                                                                       |
+| aliasCode  | String   | Y        | 信息点别编码,同类型下唯一                                                        |
+| aliasName  | String   | Y        | 信息点别名                                                                       |
+| classCode  | String   | Y        | 类型编码                                                                         |
+| type       | String   | Y        | 字典级别:平台级 common,集团级 group,项目级 project                               |
+| category   | String   | Y        | 信息点分类:静态,脉冲,阶段,时序                                                   |
+| groupId    | String   | Y        | 集团 id, type=group 或 type=project 时该字段为集团 id,否则为"0"                  |
+| projectId  | String   | Y        | 集团 id, type=project 时该字段为项目 id,否则为"0"                                |
+| firstTag   | String   | Y        | 一级标签                                                                         |
+| secondTag  | String   | Y        | 二级标签                                                                         |
+| priority   | String   |          | 优先级                                                                           |
+| inputMode  | String   |          | 输入方式                                                                         |
+| unit       | String   |          | 单位                                                                             |
+| dataType   | String   | Y        | 数据类型                                                                         |
+| isMultiple | Boolean  |          | 是否复数                                                                         |
+| isRegion   | Boolean  |          | 是否区间                                                                         |
+| formater   | String   |          | 数据格式                                                                         |
+| dataSource | Object[] |          | 数据源取值范围/枚举值清单等,根据 dataType 有不同的内容                           |
+| note       | String   |          | 备注                                                                             |
+| subFlag    | String   | Y        | 子分类标记:是否可以按此信息点进行子分类替换,同一类型下目前只支持一个子分类信息点 |
+
+### 数据类型
+
+| 数据类型   | 类型名称 | 信息点分类          | 是否复数   | 是否区间   | 数据源                           | 格式    |
+| ---------- | -------- | ------------------- | ---------- | ---------- | -------------------------------- | ------- |
+| INTEGER    | 整数     | 静态/脉冲/时序/阶段 | true/false | true/false | {$gt:10, $lt:50}                 | 无      |
+| DOUBLE     | 浮点型   | 静态/脉冲/时序/阶段 | true/false | true/false | {$gte:10.1, $lt:50.9}            | 无      |
+| BOOLEAN    | 布尔值   | 静态/脉冲/时序/阶段 | true/false | false      |                                  | 无      |
+| STRING     | 字符串   | 静态/脉冲/时序/阶段 | true/false | false      | (字符串长度区间){$gt:10, $lt:50} | 无      |
+| DATETIME   | 日期时间 | 静态/脉冲/时序/阶段 | true/false | true/false | {'$gt':'0915', '$lt':'1031'}     | 'MMdd'  |
+| ENUM       | 单选枚举 | 静态/脉冲/时序/阶段 | true/false | false      | 应用数据标准化中定义的数据类型   | 无      |
+| MENUM      | 多选枚举 | 静态/脉冲/时序/阶段 | true/false | false      | 应用数据标准化中定义的数据类型   | 无      |
+| ATTACHMENT | 附件     | 静态                | true/false | false      |                                  | pdf     |
+| OBJECT     | 对象     | 静态                | true/false | false      |                                  | 对象 id |
+
+说明
+
+```
+把原来的data_type拆解成多个属性,减少了data_type种类数量
+使用新的数据类型时,使用新的数据类型时,创建或编辑信息点需要明确指出数据类型、动静分类、是否复数、是否区间、长度(可选)、取值区间(可选)、格式(可选)
+Tree、Topology、Route、Function四种类型不再支持(有需求再加回来)
+
+动静分类(静态 STATIC、脉冲 PULSE、时序 SEQUENTIAL、阶段 GRADATION)应该是信息点的一个分类,不是数据类型的属性,放在这里是为了更直观更容易理解
+根据动静分类区分动态量或静态量,静态量的值存储的是具体的数据,动态量的值存储的是表号-功能号,动态量包括脉冲量、时序量和阶段量
+根据是否区间来判断存储的值是具体值还是区间, 比如INTEGER非区间的值12, 区间值[8, 15],为了区分开闭区间,这里实际存储为{$gt: 12, $lte: 15}, 其中$gt大于,$lt小于,$gte大于等于,$lte小于等于
+根据是否复数区分存储的值是单个值还是多个值,单个值存储形式为xxx,多个值存储形式为[xxx, yyy],如果同时是复数和区间,存储的是多个区间
+取值区间可以约束值的取值范围,可以通过取值区间做一次校验,如果是区间值,区间也应该是在取值区间的内部
+统一用DATETIME表示日期和时间,通过格式设定具体存储的内容,格式由数据字典进行维护,物理世界存储的数据严格符合格式
+格式是数据存储的数据格式或文件格式,对于日期时间附件对象等可进行校验
+单选枚举Enum单数存储为GC, 复数存储为[GC, JK]
+多选枚举MEnum单数存储为[GC, JK], 复数存储为[[GC], [GC,JK]], 多选枚举单数和单选枚举复数的存储形式一样应该不会出现问题,因为实际使用时是和类型(Enum,Menum)一起使用
+
+```
+
+### 查询接口
+
+接口说明
+
+```
+1.若集团编码、方案id、项目id全部为空,则返回(符合查询条件的)平台级字典定义的数据
+2.若集团编码不为空,则返回集团级字典定义的数据
+3.若集团方案id不为空,则返回集团方案订阅的数据
+4.若项目id不为空,则返回项目级字典定义的数据
+5.若应用id不为空,则返回应用订阅的数据
+6.查询应带上classCode字段
+7.不支持分页
+8.如果平台级、集团级、项目级均有相同code对应的信息点数据,则按优先级顺序(项目级 > 集团级 > 平台级)返回高优先级的数据
+9.该接口已处理平台级、集团级、项目级三级字典逻辑,返回数据中type、groupCode、projectId三个字段可以忽略
+
+```
+
+请求方式
+
+```
+POST /def/funcid?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明                                          |
+| --------- | -------- | --------------------------------------------- |
+| groupCode | String   | 集团编码                                      |
+| schemeId  | String   | 方案 id                                       |
+| projectId | String   | 项目 id                                       |
+| appId     | String   | 应用 id, 若应用不为空则必须项目 id 同时不为空 |
+
+请求体
+
+```
+{
+    "criteria": {
+        "classCode": "ACATAH",
+        "category": "STATIC"
+    }
+}
+
+```
+
+返回数据
+
+```
+{
+    "result": "success",
+    "data": [
+        {
+            "id": "29bdf24e030d47cdb05cfde4c8028d59",
+            "code": "isFanGear",
+            "origCode": "isFanGear",
+            "name": "风机有无档位选项",
+            "aliasCode": "isFanGear",
+            "aliasName": "风机有无档位选项",
+            "classCode": "ACATFC",
+            "category": "STATIC",
+            "type": "common",
+            "groupCode": "0",
+            "projectId": "0",
+            "firstTag": "技术参数",
+            "secondTag": "风机",
+            "priority": "S",
+            "inputMode": "E1",
+            "dataType": "BOOLEAN",
+            "origDataType": "Bool",
+            "isMultiple": false,
+            "isRegion": false,
+            "subFlag": false,
+            "weakPoint": false
+        }
+    ]
+}
+
+```

+ 1 - 0
docs/rwd/def_graph.md

@@ -0,0 +1 @@
+# graph def

+ 13 - 0
docs/rwd/index.md

@@ -0,0 +1,13 @@
+## 物理世界
+
+#### [类型定义](/rwd/def_class.md)
+
+#### [信息点定义](/rwd/def_funcid.md)
+
+#### [关系定义(图类型\边类型定义)](/rwd/def_graph.md)
+
+#### [对象数据](/rwd/instance_object.md)
+
+#### [关系数据](/rwd/instance_relation.md)
+
+#### [IOT 数据](/rwd/def_class.md)

+ 240 - 0
docs/rwd/instance_object.md

@@ -0,0 +1,240 @@
+### 数据说明
+
+```
+1.对象数据,即类型定义的实例,表示现实世界中的一个具体的物体,比如一个具体的房间,一个具体的空调
+2.
+
+
+```
+
+### 数据结构
+
+| 字段           | 数据类型       | 查询字段 | 说明                       |
+| -------------- | -------------- | -------- | -------------------------- |
+| id             | String         | Y        | id,全局唯一               |
+| name           | String         | Y        |                            |
+| localId        | String         | Y        |                            |
+| localName      | String         | Y        |                            |
+| projectId      | String         | Y        |                            |
+| classCode      | String         | Y        |                            |
+| objType        | String         | Y        |                            |
+| valid          | Integer        | Y        |                            |
+| createTime     | Date           | Y        |                            |
+| createApp      | String         |          |                            |
+| updateTime     | Date           | Y        |                            |
+| updateApp      | String         |          |                            |
+| 其他信息点编码 | 根据信息点定义 | Y        | 参数不当会严重影响查询性能 |
+|                |                |          |                            |
+
+### 创建对象
+
+接口说明
+
+```
+1.项目ID不可为空
+2.appId不可为空(目前未校验)
+3.该接口为批量接口,任一对象创建失败则全部失败
+
+```
+
+请求方式
+
+```
+POST /instance/object/create?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明     |
+| --------- | -------- | -------- |
+| groupCode | String   | 集团编码 |
+| schemeId  | String   | 方案 id  |
+| projectId | String   | 项目 id  |
+| appId     | String   | 应用 id  |
+
+请求体
+
+```
+[
+    {
+        "id": "对象id, 调用方传入,若为空则生成默认id,目前默认id为uuid",
+        "classCode": "类型编码,不可为空",
+        "信息点编码": "信息点值"
+    }
+]
+
+```
+
+返回数据
+
+```
+{
+    "result": "success"
+}
+
+```
+
+### 更新对象
+
+接口说明
+
+```
+1.项目ID不可为空
+2.appId不可为空(目前未校验)
+3.该接口为批量接口,任一对象更新失败则全部失败
+4.classCode不可修改
+
+```
+
+请求方式
+
+```
+POST /instance/object/update?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明     |
+| --------- | -------- | -------- |
+| groupCode | String   | 集团编码 |
+| schemeId  | String   | 方案 id  |
+| projectId | String   | 项目 id  |
+| appId     | String   | 应用 id  |
+
+请求体
+
+```
+[
+    {
+        "id": "对象id, 调用方传入,若为空则生成默认id,目前默认id为uuid",
+        "信息点编码": "信息点值"
+    }
+]
+
+```
+
+返回数据
+
+```
+{
+    "result": "success"
+}
+
+```
+
+### 删除对象
+
+接口说明
+
+```
+1.项目ID不可为空
+2.appId不可为空(目前未校验)
+3.该接口为批量接口
+4.对象删除后与该对象相关的关系数据也会被删除(异步,未实现)
+
+```
+
+请求方式
+
+```
+POST /instance/object/delete?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明     |
+| --------- | -------- | -------- |
+| groupCode | String   | 集团编码 |
+| schemeId  | String   | 方案 id  |
+| projectId | String   | 项目 id  |
+| appId     | String   | 应用 id  |
+
+请求体
+
+```
+[ "id1", "id2", "id3" ]
+```
+
+返回数据
+
+```
+{
+    "result": "success"
+}
+
+```
+
+### 查询对象
+
+请求方式
+
+```
+POST /instance/object/delete?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明     |
+| --------- | -------- | -------- |
+| groupCode | String   | 集团编码 |
+| schemeId  | String   | 方案 id  |
+| projectId | String   | 项目 id  |
+| appId     | String   | 应用 id  |
+
+请求体
+
+```
+{
+    "criteria":{
+        "localId": [ "ATAH-20", "ATAH-21" ],
+        "classCode": "ACATAH",
+        "relationFrom": {
+            "graphId": "",
+            "graphCode": "",
+            "relCode": "",
+            "objTo": ""
+        },
+        "relationTo": {
+            "graphId": "",
+            "graphCode": "",
+            "relCode": "",
+            "objFrom": ""
+        },
+    },
+    "withColumns": [ "信息点1", "信息点2" ]
+}
+```
+
+请求参数说明
+
+```
+1.relationFrom和relationTo表示查询存在参数对应的关系数据的对象
+
+```
+
+返回数据
+
+```
+{
+    "result": "success",
+    "count": 4,
+    "data": [
+        {
+            "id": "Eq1101050029022eb5d30eff4d33b42f246874650da8",
+            "classCode": "ACATAH",
+            "projectId": "Pj1101050029",
+            "grouping": 1,
+            "objType": "equipment",
+            "valid": 1,
+            "name": "设备-UYLQY",
+            "localId": "ATAH-20",
+            "localName": "吊顶式空气处理机组-F3公共通道-36",
+            "createTime": 1601511294000,
+            "createApp": "datautils",
+            "updateTime": 1602384680000,
+            "virtualInfoCodes": []
+        }
+    ]
+}
+
+```

+ 241 - 0
docs/rwd/instance_relation.md

@@ -0,0 +1,241 @@
+### 数据说明
+
+```
+1.关系数据描述具体的对象之间的关系
+2.
+
+```
+
+### 数据结构
+
+| 字段      | 数据类型 | 说明       |
+| --------- | -------- | ---------- |
+| graphId   | String   | 图实例 id  |
+| graphCode | String   | 图类型编码 |
+| relCode   | String   | 边类型     |
+| objFrom   | String   | 对象 id    |
+| objTo     | String   | 对象 id    |
+
+### 创建关系
+
+接口说明
+
+```
+1.项目ID不可为空
+2.appId不可为空(目前未校验)
+3.该接口为批量接口,任一关系创建失败则全部失败
+4.图类型编码和图实例id传入一个即可,graphId优先级高,如果传入graphId则忽略graphCode,如果传入graphCode未传入graphId,则默认取响应图类型的第一个图实例(按图实例id排序)
+
+```
+
+请求方式
+
+```
+POST /instance/relation/create?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明              |
+| --------- | -------- | ----------------- |
+| groupCode | String   | 集团编码          |
+| schemeId  | String   | 方案 id           |
+| projectId | String   | 项目 id, 不可为空 |
+| appId     | String   | 应用 id           |
+
+请求体
+
+```
+[
+    {
+        "graphCode": "图类型编码",
+        "graphId": "图类型Id",
+        "relCode": "边类型编码",
+        "objFrom": "",
+        "objTo": ""
+    }
+]
+
+```
+
+返回数据
+
+```
+{
+    "result": "success"
+}
+
+```
+
+### 删除关系
+
+接口说明
+
+```
+1.入参为JacksonCriteria, 先按参数查询数据, 然后将查询到的数据删除
+2.
+
+```
+
+请求方式
+
+```
+POST /instance/relation/delete?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明              |
+| --------- | -------- | ----------------- |
+| groupCode | String   | 集团编码          |
+| schemeId  | String   | 方案 id           |
+| projectId | String   | 项目 id, 不可为空 |
+| appId     | String   | 应用 id           |
+
+请求体
+
+```
+{
+    "criteria": {
+        "graphCode": "图类型编码",
+        "graphId": "图类型Id",
+        "relCode": "边类型编码",
+        "objFrom": "",
+        "objTo": ""
+    }
+}
+
+```
+
+返回数据
+
+```
+{
+    "result": "success"
+}
+
+```
+
+### 查询关系
+
+请求方式
+
+```
+POST /instance/relation/query?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明              |
+| --------- | -------- | ----------------- |
+| groupCode | String   | 集团编码          |
+| schemeId  | String   | 方案 id           |
+| projectId | String   | 项目 id, 不可为空 |
+| appId     | String   | 应用 id           |
+
+请求体
+
+```
+{
+    "criteria": {
+        "graphCode": "图类型编码",
+        "graphId": "图类型Id",
+        "relCode": "边类型编码",
+        "objFrom": "",
+        "objTo": ""
+    }
+}
+
+```
+
+返回数据
+
+```
+{
+    "result": "success",
+    "data": [
+        {
+            "id": "9b88fb9496c94713ba41e2dc45861e89",
+            "projectId": "Pj1101050029",
+            "graphId": "GtArchSubset001",
+            "graphCode": "ArchSubset",
+            "relCode": "Fl2Sp",
+            "objFrom": "Fl11010500296bc7ca3a0d5d41419cf95c5b45116400",
+            "objTo": "Sp1101050029f79243a7cef34ffda9a09401274717b7",
+            "status": 1,
+            "createTime": 1601527142000,
+            "updateTime": 1601527142000
+        }
+    ],
+    "count": 1
+}
+
+```
+
+### 查询关系关联的对象
+
+接口说明
+
+```
+1.不支持分页
+2.objFrom和objTo两个字段必须且只能传入一个
+3.objectCriteria中可以传入多个查询参数
+4.
+```
+
+请求方式
+
+```
+POST /instance/relation/object/query?groupCode=集团编码&schemeId=方案id&projectId=项目id&appId=应用id
+```
+
+路径参数说明
+
+| 字段      | 数据类型 | 说明              |
+| --------- | -------- | ----------------- |
+| groupCode | String   | 集团编码          |
+| schemeId  | String   | 方案 id           |
+| projectId | String   | 项目 id, 不可为空 |
+| appId     | String   | 应用 id           |
+
+请求体
+
+```
+{
+    "criteria": {
+        "graphCode": "图类型编码",
+        "graphId": "图类型Id",
+        "relCode": "边类型编码",
+        "objFrom": "",
+        "objTo": "",
+        "objectCriteria": {
+            "classCode": "ACATAH"
+        }
+    }
+}
+
+```
+
+返回数据
+
+```
+{
+    "result": "success",
+    "data": [
+        {
+            "id": "9b88fb9496c94713ba41e2dc45861e89",
+            "projectId": "Pj1101050029",
+            "graphId": "GtArchSubset001",
+            "graphCode": "ArchSubset",
+            "relCode": "Fl2Sp",
+            "objFrom": "Fl11010500296bc7ca3a0d5d41419cf95c5b45116400",
+            "objTo": "Sp1101050029f79243a7cef34ffda9a09401274717b7",
+            "status": 1,
+            "createTime": 1601527142000,
+            "updateTime": 1601527142000
+        }
+    ],
+    "count": 1
+}
+
+```

+ 263 - 0
docs/rwd/iot.md

@@ -0,0 +1,263 @@
+### 基础接口: 查询实时数据
+
+接口说明
+
+```
+查询对象绑点信息点的实时数据
+```
+
+请求地址
+
+```
+POST: /iot/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: 实时数据的值
+
+```
+
+### 基础接口: 查询历史数据/分精度数据
+
+接口说明
+
+```
+查询对象绑点信息点的历史数据
+1. 多点位个数最多支持50个
+2. 分钟级数据,单点位支持最大7天数据查询,多点位支持最大1天数据查询;
+3. 小时级数据,单点支持最大30天数据查询,多点位支持最大3天数据查询;
+4. 日级数据,单点支持最大1年数据查询,多点位支持最大30天数据查询;
+```
+
+请求地址
+
+```
+POST: /iot/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: /iot/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: /iot/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-'后面的字符为反馈的信息
+```

+ 24 - 0
package.json

@@ -0,0 +1,24 @@
+{
+  "name": "persagy-dmp-server-doc",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1",
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs"
+  },
+  "author": "",
+  "license": "ISC",
+  "devDependencies": {
+    "@vuepress/plugin-back-to-top": "^1.6.0",
+    "vuepress": "^1.6.0"
+  },
+  "directories": {
+    "doc": "docs"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git@git.sagacloud.cn:persagy/persagy-dmp-server-doc.git"
+  }
+}