Browse Source

Merge branch 'master' of http://39.106.8.246:3003/doc/saga-doc

 Conflicts:
	package.json
zhangyu 4 years ago
parent
commit
94e506f431
37 changed files with 946 additions and 149 deletions
  1. 3 3
      docs/.vuepress/components/example/web/graph/DrawLine1.vue
  2. 103 39
      docs/.vuepress/components/example/web/graph/scene/SImgTextItem.vue
  3. 11 0
      docs/.vuepress/config.js
  4. 2 0
      docs/dev/data-center-scheme/README.md
  5. 3 0
      docs/dev/data-center-scheme/dict-ADM.md
  6. 463 0
      docs/dev/data-center-scheme/dict-dataplatform.md
  7. 8 0
      docs/dev/data-center-scheme/index.js
  8. 1 1
      docs/dev/data-center/index.js
  9. 11 11
      docs/dev/data-center/relations/belongs/Bd2Sp.md
  10. 5 5
      docs/dev/data-center/relations/belongs/Eq2Bd.md
  11. 16 9
      docs/dev/data-center/relations/belongs/Eq2Fl.md
  12. 7 6
      docs/dev/data-center/relations/belongs/Eq2Sh.md
  13. 26 18
      docs/dev/data-center/relations/belongs/Eq2Sp.md
  14. 6 7
      docs/dev/data-center/relations/belongs/Fl2Fl.md
  15. 3 3
      docs/dev/data-center/relations/belongs/Pe2Bd.md
  16. 2 2
      docs/dev/data-center/relations/belongs/Pe2Fl.md
  17. 1 1
      docs/dev/data-center/relations/belongs/Pe2Sh.md
  18. 1 1
      docs/dev/data-center/relations/belongs/Pe2Sp.md
  19. 3 3
      docs/dev/data-center/relations/belongs/Sh2Bd.md
  20. 3 2
      docs/dev/data-center/relations/belongs/Sh2Sh.md
  21. 11 5
      docs/dev/data-center/relations/belongs/Sp2Fl.md
  22. 5 5
      docs/dev/data-center/relations/belongs/Sp2Sp.md
  23. 12 5
      docs/dev/data-center/relations/belongs/Sp2Sp2.md
  24. 1 1
      docs/dev/data-center/relations/belongs/Sy2Bd.md
  25. 1 1
      docs/dev/data-center/relations/belongs/Sy2Fl.md
  26. 1 1
      docs/dev/data-center/relations/belongs/Sy2Sh.md
  27. 1 1
      docs/dev/data-center/relations/belongs/Sy2Sp.md
  28. 3 3
      docs/dev/data-center/relations/belongs/f_rel_calc.md
  29. BIN
      docs/dev/data-center/relations/belongs/img/sp2sp2-1.PNG
  30. 1 1
      docs/dev/data-center/relations/other/calc_area_v3.md
  31. 5 5
      docs/dev/data-center/relations/other/calc_vertically_overlap.md
  32. 1 1
      docs/dev/data-center/relations/other/other_ispace_floor_overlap.md
  33. 1 1
      docs/dev/data-center/relations/other/rel_affected_space.md
  34. 1 1
      docs/dev/data-center/relations/other/rel_str_similar.md
  35. 1 1
      docs/dev/data-center/relations/topology/sys_block.md
  36. 1 1
      docs/dev/data-center/relations/topology/sys_direction.md
  37. 222 5
      docs/dev/paas/data-dict.md

+ 3 - 3
docs/.vuepress/components/example/web/graph/DrawLine1.vue

@@ -43,12 +43,12 @@
 
             canvas.pen.color = new SColor('#03a9f4');
             canvas.pen.lineWidth = 5;
-            canvas.drawLine(400, 50, 700, 50);
+            canvas.drawLine(450, 50, 700, 50);
             canvas.pen.lineWidth = 3;
-            canvas.pen.dashOffset = new Date().getTime()/50%60;
+            canvas.pen.dashOffset = new Date().getTime()/50%80;
             canvas.pen.lineDash = [30,50];
             canvas.pen.color = SColor.White;
-            canvas.drawLine(400, 50, 700, 50);
+            canvas.drawLine(450, 50, 700, 50);
             this.update();
         }
     }

+ 103 - 39
docs/.vuepress/components/example/web/graph/scene/SImgTextItem.vue

@@ -1,15 +1,14 @@
-import {SItemStatus} from "@saga-web/big/lib";
 <template>
     <div>
-        <el-input v-model="input" placeholder="请输入内容"></el-input>
-        <el-button @click="change">00000</el-button>
+        <el-button @click="changemaodian">切换锚点显示状态</el-button>
+        <el-button @click="changetext">切换文本显示状态</el-button>
         <canvas id="editPolygon" width="740" height="400" tabindex="0"></canvas>
     </div>
 </template>
 
 <script lang="ts">
     import {SGraphItem, SGraphScene, SGraphView} from "@saga-web/graph/lib";
-    import {SImageItem, SItemStatus, SObjectItem, STextItem} from "@saga-web/big/lib";
+    import {SAnchorItem, SImageItem, SItemStatus, SObjectItem, STextItem} from "@saga-web/big/lib";
     import {SColor, SPainter, SRect, SSize, STextBaseLine} from "@saga-web/draw/lib";
     import {SMouseEvent} from "@saga-web/base/lib";
 
@@ -17,35 +16,62 @@ import {SItemStatus} from "@saga-web/big/lib";
      * 图例item  icon
      *
      * */
-    class SImgTextItem extends SObjectItem{
+    class SImgTextItem extends SObjectItem {
 
         /** item状态  */
-        _status:SItemStatus = SItemStatus.Create;
-        get status():SItemStatus{
+        _status: SItemStatus = SItemStatus.Normal;
+        get status(): SItemStatus {
             return this._status;
         }
-        set status(v:SItemStatus){
+        set status(v: SItemStatus) {
             this._status = v;
             this.update();
         }
 
         /** 是否显示文字  */
-        _showText:boolean = true;
-        get showText():boolean{
+        _showText: boolean = true;
+        get showText(): boolean {
             return this._showText;
         }
-        set showText(v:boolean){
+        set showText(v: boolean) {
             if (v === this._showText) {
                 return
             }
             this._showText = v;
-            if (v) {
-                this.textItem.show();
-            } else {
-                this.textItem.hide();
-            }
+            this.textItem.visible = v;
+        }
+
+        /** 是否显示锚点  */
+        _showAnchor: boolean = false;
+        get showAnchor():boolean{
+            return this._showAnchor;
+        }
+        set showAnchor(v:boolean){
+            this._showAnchor = v;
+            this.anchorList.forEach(t => {
+                t.visible = v;
+            })
         }
 
+        /** X轴坐标 */
+        get x(): number {
+            return this.pos.x;
+        } // Get x
+        set x(v: number) {
+            this.pos.x = v;
+            this.$emit("changePos");
+            this.update();
+        } // Set x
+        /** Y轴坐标 */
+        get y(): number {
+            return this.pos.y;
+        } // Get y
+        set y(v: number) {
+            this.pos.y = v;
+            this.$emit("changePos");
+            this.update();
+        } // Set y
+
         /** img Item    */
         img: SImageItem = new SImageItem(this);
 
@@ -56,20 +82,51 @@ import {SItemStatus} from "@saga-web/big/lib";
          * 构造体
          *
          * */
-        constructor(parent:SGraphItem|null){
+        constructor(parent: SGraphItem | null) {
             super(parent);
             this.img.url = `http://adm.sagacloud.cn:8080/doc/assets/img/logo.png`;
-            setTimeout(() => {
-                this.img.width = 28;
-                this.img.height = 28;
-                this.update();
-            },1000);
-            this.img.isTransform = true;
-            this.textItem.text = `图例item示例`;
-            this.textItem.moveTo(16,0);
-            this.textItem.font.textBaseLine = STextBaseLine.Middle;
+            this.img.width = 32;
+            this.img.height = 32;
+            let anchorPoint = [{ x: 0, y: this.img.height / 2 }, { x: 0, y: -this.img.height / 2 }, { x: -this.img.width / 2, y: 0 }, { x: this.img.width / 2, y: 0 }];
+            this.anchorList = anchorPoint.map(t => {
+                let item = new SAnchorItem(this);
+                item.moveTo(t.x, t.y);
+                return item;
+            });
+            this.update();
+            this.textItem.text = "请填写文本";
+            this.textItem.moveTo(16, -6);
+            this.moveable = true;
+            this.selectable = true;
+        }
+
+        onMouseEnter(event: SMouseEvent): boolean {
+            this.showAnchor = true;
+            return true;
+        }
+
+        onMouseLeave(event: SMouseEvent): boolean {
+            this.showAnchor = false;
+            return true;
         }
 
+        onMouseMove(event: SMouseEvent): boolean {
+            return super.onMouseMove(event);
+        }
+
+        /**
+         * 鼠标按下事件
+         *
+         * */
+        onMouseDown(event: SMouseEvent): boolean {
+            if (this.status == SItemStatus.Normal) {
+                return super.onMouseDown(event);
+            } else if (this.status == SItemStatus.Edit) {
+                return super.onMouseDown(event);
+            }
+            return true;
+        } // Function onMouseDown()
+
         /**
          * 宽高发发生变化
          *
@@ -98,9 +155,13 @@ import {SItemStatus} from "@saga-web/big/lib";
          * @return  SRect   所有子对象的并集
          * */
         boundingRect(): SRect {
-            let rect = new SRect();
+            let rect :SRect = new SRect();
             this.children.forEach(t => {
-                rect = rect.unioned(t.boundingRect());
+                if (rect.isNull()) {
+                    rect = t.boundingRect().adjusted(t.pos.x,t.pos.y,0,0);
+                } else {
+                    rect = rect.unioned(t.boundingRect().adjusted(t.pos.x,t.pos.y,0,0));
+                }
             });
             return rect;
         } // Function boundingRect()
@@ -114,14 +175,11 @@ import {SItemStatus} from "@saga-web/big/lib";
             painter.pen.lineWidth = painter.toPx(1);
             painter.pen.color = new SColor("#00FF00");
             painter.brush.color = SColor.Transparent;
-            painter.drawRect(this.boundingRect());
-            super.onDraw(painter);
-
-            if (this.status == SItemStatus.Edit) {
-                this.anchorList.forEach(t => {
-
-                })
+            if (this.showAnchor) {
+                painter.brush.color = SColor.Gray
             }
+            painter.drawRect(this.boundingRect());
+            // super.onDraw(painter);
         } // Function onDraw()
     }
 
@@ -144,14 +202,20 @@ import {SItemStatus} from "@saga-web/big/lib";
         },
         methods:{
             init(){
-                const item = new SImgTextItem(null);
-                item.moveable = true;
+                this.item = new SImgTextItem(null);
+                this.item.moveable = true;
 
-                this.scene.addItem(item);
-                this.view.fitSceneToView();
+                this.scene.addItem(this.item);
+                // this.view.fitSceneToView();
             },
             change() {
 
+            },
+            changemaodian(){
+                this.item.showAnchor = !this.item.showAnchor;
+            },
+            changetext(){
+                this.item.showText = !this.item.showText;
             }
         }
     }

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

@@ -5,6 +5,7 @@ const dataCenterContent = require("../dev/data-center/index");
 const paasContent = require("../dev/paas/index");
 const revitCenterContent = require("../dev/revit-center/index");
 const sagaGraphyContent = require("../dev/saga-graphy/index");
+const dataCenterScheme = require("../dev/data-center-scheme/index");
 
 module.exports = {
     title: "数字化交付开发文档",
@@ -67,6 +68,15 @@ module.exports = {
                             { text: "系统图", link: "/dev/database/topo/" }
                         ]
                     },
+                    {
+                        text: "新版数据字典物理世界对接",
+                        items: [
+                            { text: "新版字典中台工具接口对接", link: "/dev/data-center-scheme/" },
+                            { text: "新版字典ADM对接", link: "/dev/data-center-scheme/" },
+                            { text: "新版字典对接数据中心", link: "/dev/data-center-scheme/" },
+                            { text: "新版物理世界对接数据中心", link: "/dev/data-center-scheme/" }
+                        ]
+                    },
                 ]
             },
             {
@@ -117,6 +127,7 @@ module.exports = {
             "/dev/paas/" : paasContent,
             "/dev/revit-center/" : revitCenterContent,
             "/dev/saga-graphy/": sagaGraphyContent,
+            "/dev/data-center-scheme/" : dataCenterScheme,
         }
     }
 };

+ 2 - 0
docs/dev/data-center-scheme/README.md

@@ -0,0 +1,2 @@
+# 数据中台字典、新版物理世界、新版ADM 对接方案
+

+ 3 - 0
docs/dev/data-center-scheme/dict-ADM.md

@@ -0,0 +1,3 @@
+# 新版字典ADM对接方案
+
+

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

@@ -0,0 +1,463 @@
+# 中台工具字典接口使用对接方案
+测试环境IP以及端口号
+```
+172.16.44.212:8081/paas
+```
+
+
+## 集团管理
+
+#### 查询所有集团列表 
+```
+POST: /usercenter/groupCompany/query
+```
+
+请求参数
+```
+{}
+```
+
+应答内容
+
+```
+{
+    "result": "success",
+    "data": [
+        {
+            "code": "SN",             集团id
+            "name": "苏宁集团"         集团名称
+        },
+        {
+            "code": "WD",
+            "name": "万达集团"
+        },
+        {
+            "code": "WK",
+            "name": "万科集团"
+        }
+    ],
+    "count": 3
+}
+```
+
+#### 添加集团
+
+```
+POST: /usercenter/groupCompany/save
+```
+请求参数
+```
+{
+    "code":"546455",      集团id
+    "name":"12123213"     集团名称
+}
+```
+
+应答内容
+
+```
+{
+    "result":"success"
+}
+```
+
+#### 编辑集团信息 注意编辑集团和创建使用的同一个接口
+
+```
+POST: /usercenter/groupCompany/save
+```
+请求参数
+```
+{
+    "code":"546455",      集团id
+    "name":"12123213"     集团名称
+}
+```
+
+应答内容
+
+```
+{
+    "result":"success"
+}
+```
+
+##### 中台工具中只修改集团名称,前端控制ID不可以修改,确保集团id入参是要修改集团ID否则会创建新的集团
+
+
+#### 集团字典搜索 功能前端自行筛选
+
+创建集团后,自动创建集团字典(字典默认为平台字典全部内容);并创建默认方案(默认为集团字典全部内容)
+
+创建集团后调用创建方案接口 ,然后调用方案订阅接口订阅所有类型,以及每个类型下的信息点
+
+#### 创建集团下默认方案
+
+```
+dict/scheme/create
+```
+
+请求参数
+
+```
+{
+    "groupId":"142563",             集团id
+    "note":null,                    备注
+    "name":"默认方案"                方案名称
+}
+```
+
+应答内容
+
+```
+{
+    "result":"success",
+    "id":5
+}
+```
+
+
+方案中订阅类型  需要把平台级字典的所有类型查询出来  然后组合成数组调用方案订阅接口   
+方案种类型订阅信息点,需要把平台级的每个类型的信息点查出来,然后一个一个类型的信息点通过接口执行订阅
+
+## 项目管理
+
+#### 根据集团查询项目
+
+```
+POST: usercenter/project/query
+```
+
+请求参数
+
+```
+{
+    "criteria":{
+        "groupCompanyCode":"WK"   集团id
+    }
+}
+```
+
+应答内容
+
+```
+{
+    "result":"success",
+    "data":[
+        {
+            "id":"Pj1106479820",
+            "name":"北京万科国际大厦",
+            "groupCompany":{
+                "code":"WK",
+                "name":"万科集团"
+            }
+        }
+    ],
+    "count":1
+}
+```
+
+#### 添加项目
+
+```
+POST: usercenter/project/save
+```
+
+请求参数
+
+```
+{
+    "id":"Pj3264971164",      项目id
+    "name":"测试项目",         项目名称
+    "groupCompany":{          
+        "code":"WK"           集团id
+    }
+}
+```
+
+应答内容
+
+```
+{
+    "result":"success"
+}
+```
+#### 集团方案列表
+
+```
+POST: /dict/scheme/query
+```
+
+请求参数
+
+```
+{
+    "criteria":{
+        "groupId":"WD"  集团id
+    }
+}
+```
+
+应答内容
+
+```
+{
+    "result":"success",
+    "data":[
+        {
+            "id":3,                         方案id
+            "name":"商业综合体",             方案名称
+            "groupId":"WD"                  集团id
+        },
+        {
+            "id":4,
+            "name":"酒店管理方案",
+            "note":"wanda03156",
+            "groupId":"WD"
+        }
+    ],
+    "count":2
+}
+```
+#### 项目设置集团方案
+
+```
+dict/scheme/project/set
+```
+
+请求参数
+
+```
+{
+    "criteria":{
+        "projectId":[    项目id列表
+            "Pj1101050029"
+        ]
+    }
+}
+```
+
+应答内容
+
+```
+{
+    "result":"success"
+}
+```
+
+#### 编辑项目
+
+```
+POST: usercenter/project/save
+```
+
+请求参数
+
+```
+{
+    "id":"Pj1101050029",            项目id
+    "name":"东坝万达广场1",           项目名称
+    "groupCompany":{                集团对象
+        "code":"WD",                集团id
+        "name":"万达集团"            集团名称
+    }
+}
+```
+
+应答内容
+
+```
+{
+    "result":"success"
+}
+```
+
+## 集团字典
+
+### 集团字典管理
+
+#### 获取集团下类型树结构
+
+```
+ Get: dict/class?&groupId=WD&subFlag=false     //groupId: 集团id   subFlag: 是否显示所有子分类
+```
+
+应答内容
+
+```
+{
+    "result":"success",
+    "data":[
+        {
+            "code":"project",
+            "name":"项目",
+            "aliasCode":"project",
+            "aliasName":"项目"
+        },
+        {
+            "code":"building",
+            "name":"建筑",
+            "aliasCode":"building",
+            "aliasName":"建筑"
+        },
+        {
+            "code":"floor",
+            "name":"楼层",
+            "aliasCode":"floor",
+            "aliasName":"楼层"
+        },
+        {
+            "code":"space",
+            "name":"空间",
+            "aliasCode":"space",
+            "aliasName":"空间"
+        },
+        {
+            "code":"system",
+            "name":"系统",
+            "aliasCode":"system",
+            "aliasName":"系统",
+            "children":[
+                {
+                    "code":"system-AC",
+                    "name":"空调专业",
+                    "aliasCode":"system-AC",
+                    "aliasName":"空调专业",
+                    "children":[
+                        {
+                            "code":"ACAT",
+                            "name":"空调末端系统",
+                            "aliasCode":"ACAT",
+                            "aliasName":"空调末端系统",
+                            "parentCode":"system",
+                            "majorCode":"AC"
+                        },
+                        {
+                            "code":"ACAD",
+                            "name":"空调人防系统",
+                            "aliasCode":"ACAD",
+                            "aliasName":"空调人防系统",
+                            "parentCode":"system",
+                            "majorCode":"AC"
+                        }
+                    ]
+                },
+                {
+                    "code":"system-FF",
+                    "name":"消防专业",
+                    "aliasCode":"system-FF",
+                    "aliasName":"消防专业",
+                    "children":[
+                        {
+                            "code":"FFSC",
+                            "name":"防排烟系统",
+                            "aliasCode":"FFSC",
+                            "aliasName":"防排烟系统",
+                            "parentCode":"system",
+                            "majorCode":"FF"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "code":"equipment",
+            "name":"设备",
+            "aliasCode":"equipment",
+            "aliasName":"设备",
+            "children":[
+                {
+                    "code":"equipment-AC",
+                    "name":"空调专业",
+                    "aliasCode":"equipment-AC",
+                    "aliasName":"空调专业",
+                    "children":[
+                        {
+                            "code":"equipment-ACAT",
+                            "name":"空调末端系统",
+                            "aliasCode":"equipment-ACAT",
+                            "aliasName":"空调末端系统",
+                            "children":[
+                                {
+                                    "code":"ACATAH",
+                                    "name":"空调机组",
+                                    "aliasCode":"ACATAH",
+                                    "aliasName":"空调机组",
+                                    "parentCode":"equipment",
+                                    "majorCode":"AC",
+                                    "systemCode":"ACAT"
+                                }
+                            ]
+                        },
+                        {
+                            "code":"equipment-ACCH",
+                            "name":"中央供热系统",
+                            "aliasCode":"equipment-ACCH",
+                            "aliasName":"中央供热系统",
+                            "children":[
+                                {
+                                    "code":"ACCHWT",
+                                    "name":"供热水箱",
+                                    "aliasCode":"ACCHWT",
+                                    "aliasName":"供热水箱",
+                                    "parentCode":"equipment",
+                                    "majorCode":"AC",
+                                    "systemCode":"ACCH"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            ]
+        }
+    ]
+}
+```
+
+
+
+
+
+
+
+
+
+## 注意事项
+1.某一个类型显示子分类功能新版字典还没有实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+

+ 8 - 0
docs/dev/data-center-scheme/index.js

@@ -0,0 +1,8 @@
+const content = [
+
+            ["/dev/data-center-scheme/dict-dataplatform", "中台工具字典接口使用对接方案"],
+            ["/dev/data-center-scheme/dict-ADM", "新版字典ADM对接方案"],
+            ["/dev/data-center-scheme/dict-dataplatform", "关系表设计"]
+];
+
+module.exports = content;

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

@@ -32,7 +32,7 @@ const content = [
             ["/dev/data-center/relations/belongs/Sh2Sh", "竖井贯通关系"],
             ["/dev/data-center/relations/belongs/Sp2Fl", "业务空间所属楼层"],
             ["/dev/data-center/relations/belongs/Sp2Sp", "业务空间邻接关系"],
-            ["/dev/data-center/relations/belongs/Sp2Sp_new", "业务空间邻接关系(新)"],
+            ["/dev/data-center/relations/belongs/Sp2Sp2", "业务空间邻接关系(新)"],
             ["/dev/data-center/relations/belongs/Sy2Bd", "系统所在建筑"],
             ["/dev/data-center/relations/belongs/Sy2Fl", "系统所在楼层"],
             ["/dev/data-center/relations/belongs/Sy2Sh", "系统所在竖井"],

+ 11 - 11
docs/dev/data-center/relations/belongs/Bd2Sp.md

@@ -1,25 +1,24 @@
-建筑下的业务空间
+# 建筑下的业务空间
 ## 前置条件
-有所属楼层的业务空间(所有业务空间表都需要处理)
+    1. 业务空间必须要有所属的楼层
 ```
 FROM zone_* WHERE project_id='Pj4201050001' AND floor_id is not null
 ```
-## 处理方式
+## 处理逻辑
 
-从绑定的楼层里取建筑ID,
-将建筑ID填入设备ID(建筑ID为空,则设备的建筑ID也为空)。
+    1. 从业务空间绑定的楼层信息里取到楼层所属的建筑ID,
+    2. 取到的建筑ID即是业务空间的所属建筑 (建筑ID为空,则的建筑ID也为空).
 
 ## 实现方式
 SQL
 ```
-update zone_air_conditioning zone set zone.building_id = floor.building_id from floor where zone.floor_id = floor.id and zone.project_id = 'Pj4201050001' and zone.floor_id is not null
+update zone_space_base zone set zone.building_id = floor.building_id from floor where zone.floor_id = floor.id and zone.project_id = 'Pj4201050001' and zone.floor_id is not null
 ```
 
 # 函数
 ```
-create or replace function public.rel_bd2sp(tables text, project_id character varying) returns boolean
-as
-$$
+CREATE OR REPLACE FUNCTION "public"."rel_bd2sp"("tables" text, "project_id" varchar)
+  RETURNS "pg_catalog"."bool" AS $BODY$
 try:
     list = tables.split(',')
     # 将下面对数据库的操作作为一个事务, 出异常则自动rollback
@@ -33,8 +32,9 @@ except Exception as e:
     return False
 else:
     return True
-$$
-LANGUAGE 'plpython3u' VOLATILE;
+$BODY$
+  LANGUAGE plpython3u VOLATILE
+  COST 100
 ```
 
 ## 输入

+ 5 - 5
docs/dev/data-center/relations/belongs/Eq2Bd.md

@@ -1,16 +1,16 @@
-设备所在建筑
+# 设备所在建筑
 ## 前置条件
-设备已经绑定楼层
+    1. 设备已经绑定楼层
 ```
 FROM equipment WHERE project_id='Pj4201050001' AND floor_id is not null
 ```
 
 ## 依赖函数
     Eq2Fl
-## 处理方式
+## 处理逻辑
 
-从绑定的楼层里取建筑ID,
-将建筑ID填入设备ID(建筑ID为空,则设备的建筑ID也为空)。
+    1. 设备绑定的楼层里取楼层所属的建筑ID,
+    2. 将取到的建筑ID填入设备的所属建筑中(建筑ID为空,则设备的所属建筑ID也为空)。
 
 ## 实现方式
 SQL

+ 16 - 9
docs/dev/data-center/relations/belongs/Eq2Fl.md

@@ -1,20 +1,26 @@
 设备所在楼层
 ## 前置条件
-    1. 设备有ModelId信息点
-    2. 楼层有ModelId信息点
-    3. 楼层的ModelId信息点等于设备的ModelId所属模型楼层的信息点
-    4. 设备没有所在楼层关系
-    5. 设备有Location(非必要)
-    6. 楼层有Outline(非必要)
+    1. 设备有ModelId信息点  (模型web服务的模型id)
+    2. 楼层有ModelId信息点  (模型web服务的楼层id)
+    3. 设备没有所在楼层关系
+    4. 设备有Location(非必要)
+    5. 楼层有Outline(非必要)
     
 
-## 处理方式
-    1. 如果楼层有Outline, 设备有Location, 做点(Location)在多边形(Outline)内的判断, 在多边形内则认为有关系
-    2. 如果不满足条件1, 则判断ModelId信息点的值, 相等则认为有关系
+## 处理逻辑
+    1. 如果楼层有Outline, 设备有Location, 做点(Location)在多边形(Outline)内的判断, 点在多边形内则认为有关系
+    2. 如果不满足条件1, 即楼层没有Outline, 设备没有Location, 则判断它们ModelId信息点的值, 相等则认为有关系   
+        (此处的相等表示设备上的ModelId信息点在关系上从属于楼层上的ModelId信息点, 即模型web服务中的模型id属于楼层id)
+
+## 技术细节
+    1. 做点在多边形内的判断, 使用到了python的 shapely 库 中的 Path 类的contains_points 方法
 
 # 函数
 
 ## 代码
+<details>
+<summary>源码</summary>
+
 ```
 -- 设备所在楼层
 CREATE OR REPLACE FUNCTION "public"."rel_eq2fl"("project_id" varchar)
@@ -101,6 +107,7 @@ $BODY$
 
 select public.rel_eq2fl('Pj1101010015');
 ```
+</details>
 
 ## 输入
     1. 项目id

+ 7 - 6
docs/dev/data-center/relations/belongs/Eq2Sh.md

@@ -1,13 +1,14 @@
-设备所在竖井关系计算
+# 设备所在竖井关系计算
 ## 前置条件
-    1. 首先需要有设备所在业务空间关系
-    2. 需要有竖井包含业务空间关系
+    1. 设备需要有所在业务空间关系
+    2. 竖井需要有包含业务空间关系
     
 ## 依赖函数
     Eq2Sp
-## 计算过程
-    1. 通过 竖井--> 业务空间 --> 设备的间接关系, 堆出竖井和设备的关系
-    2. 结果保存到r_eq_in_sh表中
+    
+## 处理逻辑
+    1. 通过 竖井 --> 业务空间 --> 设备 的间接所属关系, 推出竖井和设备的关系
+    
 ## 函数
 ```
 -- 设备所在竖井

+ 26 - 18
docs/dev/data-center/relations/belongs/Eq2Sp.md

@@ -1,21 +1,23 @@
-设备所在业务空间
+# 设备所在业务空间
 ## 前置条件
-    1. 业务空间有所属楼层
-    2. 设备有所属楼层
-    3. 业务空间有轮廓数据(outline)
-    4. 设备有坐标信息(bimLocation)
+    1. 业务空间有所属楼层关系
+    2. 设备有所属楼层关系
+    3. 业务空间有轮廓数据(outline信息点)
+    4. 设备有坐标信息(bimLocation信息点)
 ## 依赖函数
-    Eq2Fl
-## 处理方式
-    将在同一楼层内的设备和业务空间取出, 判断设备的bim_location是否在业务空间的outline内, 
-    如果在, 则添加进对应的关系表内, 控制sign = 2
+    Eq2Fl, Sp2Fl
+## 处理逻辑
+    1. 取出项目内的所有业务空间和设备, 将在同一楼层内的设备和业务空间分成一组
+    2. 在一组内, 判断设备的bim_location是否在业务空间的outline内, 即做点在多边形内的判断, 点在多边形内则认为有关系
 
 # 函数
 ## 代码
+<details>
+<summary>源码</summary>
+
 ```
-create or replace function public.rel_eq2sp(tables text, out_tables text, project_id character varying, sign1 integer, sign2 integer) returns boolean
-as
-$$
+CREATE OR REPLACE FUNCTION "public"."rel_eq2sp"("tables" text, "out_tables" text, "project_id" varchar, "sign1" int4, "sign2" int4)
+  RETURNS "pg_catalog"."bool" AS $BODY$
 from matplotlib.path import Path
 import json
 
@@ -80,8 +82,9 @@ with plpy.subtransaction():
             if len(equips) == 0:
                 continue
             # 获取楼层下的业务空间
-            space_plan = plpy.prepare("select id, outline from {0} as sp where project_id = $1 and outline is not null and floor_id = $2".format(in_table_name), ["text", "text"])
-            spaces = space_plan.execute([project_id, floor_id])
+
+            space_plan = plpy.prepare("select sp.id, sp.outline, sp.object_type from public.r_sp_in_fl rel inner join {0} sp on rel.space_id = sp.id where outline is not null and rel.floor_id = $1".format(in_table_name), ["text"])
+            spaces = space_plan.execute([floor_id])
             if len(spaces) == 0:
                 continue
             # 判断设备的bim_location是否在业务空间的outline内
@@ -91,18 +94,23 @@ with plpy.subtransaction():
                         location = equip['bim_location'].split(',')
                         if is_point_in_polygon(location[0], location[1], space['outline']):
                             # 设备在业务空间内, 添加关系
-                            insert_plan = plpy.prepare("insert into {0}(equip_id, space_id, project_id, sign) values($1, $2, $3, 2) ".format(out_table_name.strip()), ["text", "text", 'text'])
-                            insert_plan.execute([equip['id'], space['id'], project_id])
+                            insert_plan = plpy.prepare("insert into {0}(eq_id, sp_id, project_id, sign, type, zone_type) values($1, $2, $3, 2, 'eq2sp_in', $4)".format(out_table_name.strip()), ["text", "text", "text", "text"])
+                            insert_plan.execute([equip['id'], space['id'], project_id, space['object_type']])
                     except Exception as ex:
+                        plpy.warning(ex)
                         continue
 return True
-$$
-LANGUAGE 'plpython3u' VOLATILE;
+$BODY$
+  LANGUAGE plpython3u VOLATILE
+  COST 100
 
 
 例子:
 select public.rel_eq2sp('zone_general,zone_lighting', 'r_eq_in_sp_zone_general,r_eq_in_sp_zone_lighting', 'Pj1101010015', 2, 2);
 ```
+</details>
+
+
 ## 输入
     1. 参与计算的业务空间表的全名称, 带schema名, 以英文逗号隔开
     2. 关系计算结果存储的表, 跟第一个参数一一对应, 带schema名, 以英文逗号隔开

+ 6 - 7
docs/dev/data-center/relations/belongs/Fl2Fl.md

@@ -1,14 +1,13 @@
-楼层贯通关系
+# 楼层贯通关系
 ## 前置条件
-两个楼层的model_id信息点需要一致并不能为空, 则认为两个楼层是贯通关系
+
+    1. 两个楼层的model_id信息点需要一致且不能为空, 则认为两个楼层是贯通关系
 ```
 FROM floor WHERE project_id='Pj4201050001' AND model_id is not null
 ```
-## 处理方式
-    1. 先删除项目下所有的贯通关系(只删除sign为2的关系)
-    2. 多表连接更新:
-        1. 根据model_id信息点多表连接
-        2. 将结果插入到r_fl_through_fl表中, sign置为2
+## 处理逻辑
+    1. 拿到所有楼层
+    2. 如果两个楼层的ModelId信息点相同, 则认为两楼层有贯通关系
 
 # 函数
 

+ 3 - 3
docs/dev/data-center/relations/belongs/Pe2Bd.md

@@ -1,11 +1,11 @@
-资产所在建筑
+# 资产所在建筑
 ## 前置条件
     1. 资产有绑定的设备或部件
     2. 绑定的设备或部件有所在建筑
 ## 依赖函数
     Eq2Bd
-## 计算流程
-    根据 资产 --> 设备/部件 --> 建筑 的间接关系, 来获取资产和建筑的所在关系
+## 处理逻辑
+    根据 资产 --> 设备/部件 --> 建筑 的间接从属关系, 来获取资产和建筑的所在关系
     
 ## 函数
 ```

+ 2 - 2
docs/dev/data-center/relations/belongs/Pe2Fl.md

@@ -1,10 +1,10 @@
-资产所在楼层
+# 资产所在楼层
 ## 前置条件
     1. 资产有绑定的设备或部件
     2. 绑定的设备或部件有所在楼层
 ## 依赖函数
     Eq2Fl
-## 计算流程
+## 处理逻辑
     根据 资产 --> 设备/部件 --> 楼层 的间接关系, 来获取资产所在建筑的关系
     
 ## 函数

+ 1 - 1
docs/dev/data-center/relations/belongs/Pe2Sh.md

@@ -1,4 +1,4 @@
-资产所在竖井
+# 资产所在竖井
 ## 前置条件
     1. 资产有绑定的设备或部件
     2. 绑定的设备或部件有所在竖井关系

+ 1 - 1
docs/dev/data-center/relations/belongs/Pe2Sp.md

@@ -1,4 +1,4 @@
-资产所在业务空间
+# 资产所在业务空间
 ## 前置条件
     1. 资产有绑定的设备或部件
     2. 绑定的设备或部件有所在业务空间关系

+ 3 - 3
docs/dev/data-center/relations/belongs/Sh2Bd.md

@@ -1,11 +1,11 @@
-竖井关联的建筑
+# 竖井关联的建筑
 
 # 计算流程
     
     根据竖井关联的空间关系来推导
     
-# 处理流程
-    1. 竖井包含有业务空间, 并且业务空间有所属建筑
+## 处理逻辑
+    1. 根据 竖井 --> 业务空间 --> 建筑 的间接关系, 来获取资产所在业务空间的关系
     
 # 函数
 

+ 3 - 2
docs/dev/data-center/relations/belongs/Sh2Sh.md

@@ -1,8 +1,9 @@
-竖井贯通关系
+# 竖井贯通关系
 ## 前置条件
     1. 竖井包含的有元空间(竖井在r_sh_contain_si表中有数据)
-## 处理流程
+## 处理逻辑
     1. 竖井包含有相同的元空间, 则认为两竖井贯通
+    (竖井包含元空间的数据是前端做划分)
 ## 函数
 ```
 -- 竖井贯通关系

+ 11 - 5
docs/dev/data-center/relations/belongs/Sp2Fl.md

@@ -1,16 +1,21 @@
-在多个楼层划分一个模型时, 根据已有的业务空间所属楼层数据重新计算业务空间所属楼层
+# 业务空间所属楼层 (关系由前端生成, 此算法是在多个楼层划分一个模型时, 根据已有的业务空间所属楼层数据重新计算业务空间所属楼层)
 ## 前置条件
     1. 楼层有外轮廓
     2. 业务空间有外轮廓
     3. 有2个或2个以上的楼层的ModelId相同(意思是一个模型划分成了多个楼层)
     4. 这些ModelId相同的楼层下有所属的业务空间关系
     5. 业务空间所属楼层表内维护的关系是正确的
-## 处理流程
-    1. 查出项目内所有ModelId相同的楼层(如果没有则返回)
-    2. 按照ModelId将楼层分组, 相同ModelId的楼层为一组, 每组内按照以下规则计算
-    3. 获取组内所有楼层下的业务空间, 将查出的业务空间的轮廓与楼层的轮廓比对是否有重叠部分(所有业务空间 X 所有楼层次对比), 如果有重叠则认为该业务空间和该楼层有关系
+    
+## 处理逻辑
+    1. 查出项目内所有ModelId相同的楼层(如果没有则结束)
+    2. 按照ModelId信息点将楼层分组, 相同ModelId的楼层为一组, 每组内按照以下规则计算
+    3. 获取组内所有楼层下的业务空间, 将查出的业务空间的轮廓与组内楼层的轮廓比对是否有重叠部分(所有业务空间 X 组内楼层个数次对比), 如果有重叠则认为该业务空间和该楼层有关系
     4. 在业务空间所属楼层表内删除该组楼层下的所有业务空间关系, 并插入新计算出的业务空间所属楼层的关系
 ## 函数
+
+<details>
+<summary>源码</summary>
+
 ```
 
 CREATE OR REPLACE FUNCTION "public"."rel_sp2fl"("project_id" varchar)
@@ -171,6 +176,7 @@ $BODY$
 
 select public.rel_sp2fl('Pj1101050001')
 ```
+</details>
 
 ## 入参
     1. 项目id

+ 5 - 5
docs/dev/data-center/relations/belongs/Sp2Sp.md

@@ -2,15 +2,15 @@
 ## 前置条件
     1. 业务空间有所在楼层
     2. 业务空间有外轮廓
-## 处理流程
+## 处理逻辑
     1. 查出所有有所在楼层, 并且外轮廓不是null的业务空间
-    2. 根据所在楼层, 业务空间分区来将业务空间分组
-    3. 计算每个分组内的业务空间的相邻关系
+    2. 根据所在楼层, 业务空间分区类型来将业务空间分组
+    3. 分别计算每个分组内的业务空间的相邻关系
     计算相邻算法:
-    1. 首先判断围成业务空间的线段, 两两空间之间是否有近似平行的线段(线段偏转误差小于1度)
+    1. 首先判断围成业务空间轮廓的线段, 两两业务空间之间是否有近似平行的线段(线段平行偏转误差小于1度算作近似平行)
         1). 近似平行判断: 首先获取两个线段的斜率, 再计算斜率的反正切(即与x轴的角度, 不过是以pi为单位), 再判断两个角度差的绝对值是否小于1度
     2. 如果有近似平行的线段, 判断是否相互有投影在线段上, 有投影在线段上, 则认为是两平行线段有重合部分, 业务空间有相邻的可能性
-    3. 判断互相有投影点在对方线段上之后, 判断投影线的长度, 是否小于250mm(墙的最大厚度), 如果小于250mm则认为两空间相邻
+    3. 判断互相有投影点在对方线段上之后, 判断投影线的长度, 是否小于250mm(墙的最大厚度), 如果小于250mm则认为两空间相邻
 ## 函数
 ```
 create or replace function public.rel_sp2sp1(project_id character varying) returns boolean

+ 12 - 5
docs/dev/data-center/relations/belongs/Sp2Sp2.md

@@ -2,9 +2,9 @@
 ## 前置条件
     1. 业务空间有所在楼层
     2. 业务空间有外轮廓
-## 处理流程
-    1. 查出所有有所在楼层, 并且外轮廓不是null的业务空间
-    2. 根据所在楼层, 业务空间分区类型来将业务空间分组
+## 处理逻辑
+    1. 查出所有有所在楼层关系, 并且外轮廓不是null的业务空间
+    2. 根据所在楼层, 业务空间分区类型来将业务空间分为不同的 (例如 : A 楼层下的默认业务空间是一组, A楼层下的空调分区是另外一组)
     3. 计算每个分组内的业务空间的相邻关系
     计算相邻算法 (如下图):
     1. 在一个分组内, 遍历每个业务空间上组成外轮廓的每条线段, 根据线段的长度, 是否超过delta_distance来区分成两种情况判断
@@ -12,12 +12,17 @@
         在P5点处作AB线段的垂线线段, 上下两边长度均为door_length长, 找到点P4和P6. 同理可以找到点P7和P9. 
         2). 如果线段长度小于或等于delta_distance, 假设线段AE长度小于delta_distance, 则在线段中间点P2处作垂直于AE的垂线线段, 
         上下两边长度均为door_length长, 找到点P1和P3.
-    2. 将上面找到的点, 依次与其他业务空间外轮廓做一次点是否在多边形内的判断, 如果在, 则认为该多边形与图中多边形相邻
+    2. 将上面找到的点, 依次与组内其他业务空间外轮廓做一次点是否在多边形内的判断, 如果在, 则认为该多边形与图中多边形相邻
     
    
-  ![Image text](img/sp2sp2-1.PNG)
+![Image text](./img/sp2sp2-1.PNG)
 
 ## 函数
+
+
+<details>
+<summary>源码</summary>
+
 ```
 create function rel_sp2sp_v2(project_id character varying) returns boolean
     language plpython3u
@@ -300,6 +305,8 @@ alter function rel_sp2sp_v2(varchar) owner to postgres;
 select public.rel_sp2sp_v2('Pj1101050001')
 ```
 
+</details>
+
 ## 入参
     1. 项目id
 ## 例子

+ 1 - 1
docs/dev/data-center/relations/belongs/Sy2Bd.md

@@ -4,7 +4,7 @@
     2. 系统下的设备有所属建筑的关系
 ## 依赖函数
     Eq2Bd
-## 计算流程
+## 处理逻辑
     1. 通过 系统 --> 设备 --> 建筑 的间接关系, 获取系统所在建筑的关系
     2. 结果存储在 r_sy_in_bd 表中
     

+ 1 - 1
docs/dev/data-center/relations/belongs/Sy2Fl.md

@@ -4,7 +4,7 @@
     2. 系统下的设备有所属楼层关系
 ## 依赖函数
     Eq2Fl
-## 计算流程
+## 处理逻辑
     1. 通过 系统 --> 设备 --> 楼层 的间接关系, 获取系统所在楼层的关系
     2. 计算关系存储在表 r_sy_in_fl 中
 ## 函数

+ 1 - 1
docs/dev/data-center/relations/belongs/Sy2Sh.md

@@ -4,7 +4,7 @@
     2. 系统下的设备有所在竖井关系
 ## 依赖函数
     Eq2Sh
-## 计算流程
+## 处理逻辑
     1. 根据 系统 --> 设备 --> 竖井 来间接获取系统所属竖井关系
     2. 计算后的关系存储在表 r_sy_in_sh
 ## 函数

+ 1 - 1
docs/dev/data-center/relations/belongs/Sy2Sp.md

@@ -4,7 +4,7 @@
     2. 系统下的设备有所在业务空间关系
 ## 依赖函数
     Eq2Sp
-## 计算流程
+## 处理逻辑
     1. 根据 系统 --> 设备 --> 业务空间 的间接关系, 获取系统和业务空间的关系
     2. 计算结果存储在r_sy_in_sp_*中
 ## 函数

+ 3 - 3
docs/dev/data-center/relations/belongs/f_rel_calc.md

@@ -1,4 +1,4 @@
-管理关系计算函数依赖和函数输入类型
+# 管理关系计算函数依赖和函数输入类型
 
 # 说明
     classify 该变量是根据函数的输入将函数分类
@@ -6,12 +6,13 @@
 
 # 函数
 ## 代码
+
 ```
 CREATE OR REPLACE FUNCTION "public"."f_rel_calc"("func" text, "project_id" varchar, "tables" text, "out_tables" text, "sign1" int4, "sign2" int4)
   RETURNS "pg_catalog"."int4" AS $BODY$
 # 根据函数输入类型分类
 classify = {"eq2bd":1, "eq2fl":1, "sp2fl":1, "eq2sh":1, "pe2bd":1, "pe2fl":1, "pe2sh":1, "pe2sp":1, "sh2sh":1, "sy2bd":1,
-    "sy2fl":1, "sy2sh":1, "sy2sp":1, "bd2sp":2, "eq2sp":3, "fl2fl":4}
+    "sy2fl":1, "sy2sh":1, "sy2sp":1, "sh2bd":1, "bd2sp":2, "eq2sp":3, "fl2fl":4}
 dependency = {"eq2bd":["eq2fl"], "eq2sh":["eq2sp"], "eq2sp":["eq2fl", "sp2fl"], "pe2bd":["eq2bd"], "pe2fl":["eq2fl"], "pe2sh":["eq2sh"],
     "pe2sp":["eq2sp"], "sy2bd":["eq2bd"], "sy2fl":["eq2fl"], "sy2sh":["eq2sh"], "sy2sp":["eq2sp"]}
 def get_type_by_func_name(func_name):
@@ -76,7 +77,6 @@ $BODY$
   LANGUAGE plpython3u VOLATILE
   COST 100
 
-
 例子:
 select public.f_rel_calc('rel_eq2sh', 'Pj*******', 'zone_space_base','relationship.r_eq2sp', 2, 2)
 ```

BIN
docs/dev/data-center/relations/belongs/img/sp2sp2-1.PNG


+ 1 - 1
docs/dev/data-center/relations/other/calc_area_v3.md

@@ -3,7 +3,7 @@
 
 
-## 处理方式
+## 处理逻辑
 
 根据业务空间轮廓的格式, 以此计算内部每个小轮廓的面积, 加和在一起为最终结果
 小轮廓面积计算: 计算首个子轮廓面积, 并减去随后所有子轮廓的面积. 结果为小轮廓面积

+ 5 - 5
docs/dev/data-center/relations/other/calc_vertically_overlap.md

@@ -4,12 +4,12 @@
 ```
 
 ```
-## 处理方式
+## 处理逻辑
 
-获取所有建筑, for循环获取每个建筑下所有的业务空间, 按楼层分类
-每个楼层的每个业务空间分别和别的楼层的每个业务空间判断is_vertically_overlap
-将结果是true的两个业务空间保存起来
-删除旧业务空间的垂直交通关系(自动计算的), 添加新关系
+    1. 获取所有建筑, for循环获取每个建筑下所有的业务空间, 按楼层分类
+    2. 每个楼层的每个业务空间分别和别的楼层的每个业务空间判断is_vertically_overlap
+    3. 将结果是true的两个业务空间保存起来
+    4. 删除旧业务空间的垂直交通关系(自动计算的), 添加新关系
 
 ## 实现方式
 

+ 1 - 1
docs/dev/data-center/relations/other/other_ispace_floor_overlap.md

@@ -3,7 +3,7 @@
     1. 元空间和楼层必须都有轮廓
     2. 轮廓必须符合规则
     
-# 处理方式
+# 处理逻辑
 
     将楼层的外轮廓与元空间的最外层轮廓做是否重叠检查操作
 

+ 1 - 1
docs/dev/data-center/relations/other/rel_affected_space.md

@@ -9,7 +9,7 @@
 
 ## 依赖函数
-## 处理方式
+## 处理逻辑
 
     1. 查询出所有绑定该revit模型楼层的数据中心楼层
         SELECT id FROM public.floor where model_id = 'revit模型楼层'

+ 1 - 1
docs/dev/data-center/relations/other/rel_str_similar.md

@@ -6,7 +6,7 @@
 
 ## 依赖函数
-## 处理方式
+## 处理逻辑
 
     根据编辑距离来计算相似度
 

+ 1 - 1
docs/dev/data-center/relations/topology/sys_block.md

@@ -5,7 +5,7 @@
 3. 相邻层立管开放端口坐标位置相等(距离差值不能超过0.01)
 4. (非强制)通过模型检查:连接件检查、系统类型名称检查、管网及相关设备检查、管段检查
 
-## 处理方式
+## 处理逻辑
 
 1. 获取所有当前项目project_id下的的有模型文件models; 表:revit.model_folder、revit.model_floor、revit.model_file
 2. 遍历models,获取model层的系统图systemGraphs;

+ 1 - 1
docs/dev/data-center/relations/topology/sys_direction.md

@@ -4,7 +4,7 @@
 1. 通过管网系统分块计算;
 2. 指定源。
 
-## 处理方式
+## 处理逻辑
 
 1. 从connected_block表中取出所有关系,构建无向图
 2. 从connected_block_source表中取出所有的源

+ 222 - 5
docs/dev/paas/data-dict.md

@@ -1,4 +1,3 @@
-# 数据字典接口文档
 ### 术语说明:
 
 #### 平台级字典
@@ -33,13 +32,13 @@
 站在用户或数据字典使用方的角度来看数据字典有三层:平台级字典,集团级字典,项目级字典
 类型相同或信息点相同时项目级字典优先级最高,集团级次之,平台级字典最低,优先级高的会覆盖优先级低的
 
-使用数据字典时明确"使用的字典位于哪个层级"对需求的分析和理解会有很大帮
+使用数据字典时明确"使用的字典位于哪个层级"对需求的分析和理解会有很大帮
 
 集团级数据、集团方案、项目级数据是数据字典内部逻辑概念
 应用和服务应该关注的是项目级字典和应用订阅内容
 
 ```
-		
+
 
 ### 字段约定
 
@@ -118,9 +117,9 @@
 使用新的数据类型时,使用新的数据类型时,创建或编辑信息点需要明确指出数据类型、动静分类、是否复数、是否区间、长度(可选)、取值区间(可选)、格式(可选)
 Tree、Topology、Route、Function四种类型不再支持(有需求再加回来)
 
-动静分类(静态、脉冲、时序、阶段)应该是信息点的一个分类,不是数据类型的属性,放在这里是为了更直观更容易理解
+动静分类(静态 STATIC、脉冲 PULSE、时序 SEQUENTIAL、阶段 GRADATION)应该是信息点的一个分类,不是数据类型的属性,放在这里是为了更直观更容易理解
 根据动静分类区分动态量或静态量,静态量的值存储的是具体的数据,动态量的值存储的是表号-功能号,动态量包括脉冲量、时序量和阶段量
-根据是否区间来判断存储的值是具体值还是区间, 比如INT非区间的值12, 区间值[8, 15],为了区分开闭区间,这里实际存储为{$gt: 12, $lte: 15}, 其中$gt大于,$lt小于,$gte大于等于,$lte小于等于
+根据是否区间来判断存储的值是具体值还是区间, 比如INTEGER非区间的值12, 区间值[8, 15],为了区分开闭区间,这里实际存储为{$gt: 12, $lte: 15}, 其中$gt大于,$lt小于,$gte大于等于,$lte小于等于
 根据是否复数区分存储的值是单个值还是多个值,单个值存储形式为xxx,多个值存储形式为[xxx, yyy],如果同时是复数和区间,存储的是多个区间
 取值区间可以约束值的取值范围,可以通过取值区间做一次校验,如果是区间值,区间也应该是在取值区间的内部
 统一用DATETIME表示日期和时间,通过格式设定具体存储的内容,格式由数据字典进行维护,物理世界存储的数据严格符合格式
@@ -669,4 +668,222 @@ POST: /req/query
 |                         |        |                                      |      |
 |                         |        |                                      |      |
 
+#### 基础接口:批量添加应用订阅信息
+
+请求地址
+
+```
+POST: /app/funcid/add?groupId=SN&projectId=Pj01&app=test&classCode=project
+```
+
+请求参数
+```json
+["ProjUnderArea","Group"]
+```
+
+| 参数名    | 说明                                    |   备注   |
+| --------- | --------------------------------------- | ---- |
+| classCode   | 类型编码                                | 必填 |
+| groupId   | 集团id                                  | 必填 |
+| projectId | 项目id                                  | 必填 |
+| app     | 应用id| 必填 |
+| json参数          |信息点列表                                         |  列表size大于0    |
+
+返回参数
+
+```
+{
+    "result": "success"
+}
+```
+
+#### 基础接口:批量删除应用订阅信息
+
+请求地址
+
+```
+POST: /app/funcid/remove?groupId=SN&projectId=Pj01&app=test&classCode=project
+```
+
+请求参数
+```json
+["ProjUnderArea","Group"]
+```
+
+| 参数名    | 说明                                    |   备注   |
+| --------- | --------------------------------------- | ---- |
+| classCode   | 类型编码                                | 必填 |
+| groupId   | 集团id                                  | 必填 |
+| projectId | 项目id                                  | 必填 |
+| app     | 应用id| 必填 |
+| json参数          |信息点列表                                         |  列表size大于0    |
+
+返回参数
+
+```
+{
+    "result": "success"
+}
+```
+
+#### 基础接口:批量添加应用订阅类型
+
+请求地址
+
+```
+POST: /app/class/add?groupId=SN&projectId=Pj01&app=test
+```
+
+请求参数
+```json
+["ProjUnderArea","Group"]
+```
+
+| 参数名    | 说明                                    |  备注    |
+| --------- | --------------------------------------- | ---- |
+| groupId   | 集团id                                  | 必填 |
+| projectId | 项目id                                  | 必填 |
+| app     | 应用id| 必填 |
+| json参数          |类型列表                                         |  列表size大于0    |
+
+返回参数
+
+```
+{
+    "result": "success"
+}
+```
+#### 基础接口:批量删除应用订阅类型
+
+请求地址
+
+```
+POST: /app/class/remove?groupId=SN&projectId=Pj01&app=test
+```
+
+请求参数
+```json
+["ProjUnderArea","Group"]
+```
+
+| 参数名    | 说明                                    |   备注   |
+| --------- | --------------------------------------- | ---- |
+| groupId   | 集团id                                  | 必填 |
+| projectId | 项目id                                  | 必填 |
+| app     | 应用id| 必填 |
+| json参数          |类型列表                                         |  列表size大于0    |
+
+返回参数
+
+```
+{
+    "result": "success"
+}
+```
+
+
+#### 基础接口:批量添加方案订阅信息
+
+请求地址
+
+```
+POST: /scheme/funcid/add?schemeId=test&classCode=project
+```
+
+请求参数
+```json
+["ProjUnderArea","Group"]
+```
+
+| 参数名    | 说明                                    |  备注    |
+| --------- | --------------------------------------- | ---- |
+| classCode   | 类型编码                                | 必填 |
+| schemeId     | 方案id| 必填 |
+| json参数          |信息点列表                                         |  列表size大于0    |
+
+返回参数
+
+```
+{
+    "result": "success"
+}
+```
+
+#### 基础接口:批量删除方案订阅信息
+
+请求地址
+
+```
+POST: /scheme/funcid/remove?projectId=Pj01&schemeId=test&classCode=project
+```
+
+请求参数
+```json
+["ProjUnderArea","Group"]
+```
+
+| 参数名    | 说明                                    |   备注   |
+| --------- | --------------------------------------- | ---- |
+| classCode   | 类型编码                                | 必填 |
+| projectId | 项目id                                  | 必填 |
+| schemeId     | 方案id| 必填 |
+| json参数          |信息点列表                                         |  列表size大于0    |
+
+返回参数
 
+```
+{
+    "result": "success"
+}
+```
+
+#### 基础接口:批量添加方案订阅类型
+
+请求地址
+
+```
+POST: /scheme/class/add?schemeId=test
+```
+
+请求参数
+```json
+["ProjUnderArea","Group"]
+```
+
+| 参数名    | 说明                                    |   备注   |
+| --------- | --------------------------------------- | ---- |
+| schemeId     | 方案id| 必填 |
+| json参数          |类型列表                                         |  列表size大于0    |
+
+返回参数
+
+```
+{
+    "result": "success"
+}
+```
+#### 基础接口:批量删除方案订阅类型
+
+请求地址
+
+```
+POST: /scheme/class/romove?schemeId=test
+```
+
+请求参数
+```json
+["ProjUnderArea","Group"]
+```
+
+| 参数名    | 说明                                    |    备注  |
+| --------- | --------------------------------------- | ---- |
+| schemeId     | 方案id| 必填 |
+| json参数          |类型列表                                         |  列表size大于0    |
+
+返回参数
+
+```
+{
+    "result": "success"
+}
+```