Browse Source

完成楼层贯通关系

jxing 5 years ago
parent
commit
56fcdcacd5

+ 46 - 0
datacenter/docs/relation_calc/Bd2Sp.md

@@ -0,0 +1,46 @@
+建筑下的业务空间
+## 前置条件
+有所属楼层的业务空间(所有业务空间表都需要处理)
+```
+FROM zone_* WHERE project_id='Pj4201050001' AND floor_id is not null
+```
+## 处理方式
+
+从绑定的楼层里取建筑ID,
+将建筑ID填入设备ID(建筑ID为空,则设备的建筑ID也为空)。
+
+## 实现方式
+SQL
+```
+update zone_air_conditioning zone set zone.building_id = floor.build_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
+$$
+try:
+    list = tables.split(',')
+    # 将下面对数据库的操作作为一个事务, 出异常则自动rollback
+    with plpy.subtransaction():
+        for table in list:
+            str = "UPDATE {0} as zone SET building_id = floor.build_id from public.floor as floor where floor_id = floor.id and zone.project_id = $1 and floor_id is not null".format(table.strip())
+            plpy.info(str)
+            plan = plpy.prepare(str, ["text"])
+            data = plan.execute([project_id])
+except Exception as e:
+    plpy.warning(e)
+    return False
+else:
+    return True
+$$
+LANGUAGE 'plpython3u' VOLATILE;
+```
+
+## 输入
+    1. 参与计算的表的全名称, 带schema名, 以英文逗号隔开
+    2. 项目id
+## 返回结果
+    true    成功
+    false   失败

+ 0 - 24
datacenter/docs/relation_calc/Bd2Sp_.md

@@ -1,24 +0,0 @@
-建筑下的业务空间
-## 前置条件
-有所属楼层的业务空间(所有业务空间表都需要处理)
-```
-FROM zone_* WHERE project_id='Pj4201050001' AND floor_id is not null
-```
-## 处理方式
-
-从绑定的楼层里取建筑ID,
-将建筑ID填入设备ID(建筑ID为空,则设备的建筑ID也为空)。
-
-## 实现方式
-SQL
-```
-update zone_air_conditioning zone set zone.building_id = floor.build_id from floor where zone.floor_id = floor.id and zone.project_id = 'Pj4201050001' and zone.floor_id is not null
-```
-
-# 函数
-## 输入
-    1. 参与计算的表的全名称, 带schema名, 以英文逗号隔开
-    2. 项目id
-## 返回结果
-    true    成功
-    false   失败

+ 20 - 0
datacenter/docs/relation_calc/Eq2Bd.md

@@ -16,6 +16,26 @@ UPDATE equipment SET building_id = (SELECT build_id FROM "floor" WHERE id = equi
 ```
 
 # 函数
+
+```plpython
+create or replace function public.rel_eq2bd(project_id character varying) returns boolean
+as
+$$
+try:
+    # 将下面对数据库的操作作为一个事务, 出异常则自动rollback
+    with plpy.subtransaction():
+        str = "UPDATE public.equipment SET building_id = (SELECT build_id FROM public.floor WHERE id = equipment.floor_id) WHERE project_id=$1 AND floor_id is not null"
+        plan = plpy.prepare(str, ["text"])
+        data = plan.execute([project_id])
+except Exception as e:
+    return False
+else:
+    return True
+$$
+LANGUAGE 'plpython3u' VOLATILE;
+```
+
+
 ## 入参
     1. 项目id
 

+ 49 - 0
datacenter/docs/relation_calc/Fl2Fl.md

@@ -0,0 +1,49 @@
+楼层贯通关系
+## 前置条件
+两个楼层的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
+
+# 函数
+
+```
+create or replace function public.rel_fl2fl(project_id character varying, sign1 integer, sign2 integer) returns boolean
+as
+$$
+try:
+    # 将下面对数据库的操作作为一个事务, 出异常则自动rollback
+    with plpy.subtransaction():
+        # 删除原来楼层贯通关系
+        plan1 = plpy.prepare("delete from r_fl_through_fl where project_id = $1 and (sign = $2 or sign = $3)", ["text", "integer", "integer"])
+        plan1.execute([project_id, sign1, sign2])
+        # 计算贯通关系
+        plan2 = plpy.prepare("select f1.id as lid, f2.id as rid from floor f1 left join floor f2 on f1.model_id = f2.model_id where f1.id != f2.id and f1.project_id = $1 and f2.project_id = $1", ["text"])
+        relation = plan2.execute([project_id])
+        if len(relation) == 0:
+            plpy.info("计算出没有关系")
+            return True
+        for row in relation:
+            plan3 = plpy.prepare("insert into r_fl_through_fl(floor_id, floor_other_id, project_id, sign) values($1, $2, $3, 2) ", ["text", "text", 'text'])
+            plan3.execute([row['lid'], row['rid'], project_id])
+except Exception as e:
+    plpy.warning(e)
+    return False
+else:
+    return True
+$$
+LANGUAGE 'plpython3u' VOLATILE;
+```
+
+## 输入
+    1. 项目id
+    2. 表示r_fl_through_fl表中要被删除的sign值
+    3. 同上, 与2是逻辑或的关系
+## 返回结果
+    true    成功
+    false   失败

+ 3 - 23
datacenter/docs/relation_calc/Fl2Sp.md

@@ -1,24 +1,4 @@
-楼层下的业务空间
-## 前置条件
-有所属楼层的业务空间(所有业务空间表都需要处理)
-```
-FROM zone_* WHERE project_id='Pj4201050001' AND floor_id is not null
-```
-## 处理方式
-
-从绑定的楼层里取建筑ID,
-将建筑ID填入设备ID(建筑ID为空,则设备的建筑ID也为空)。
+楼层下的业务空间(无需计算)
 
-## 实现方式
-SQL
-```
-update zone_air_conditioning zone set zone.building_id = floor.build_id from floor where zone.floor_id = floor.id and zone.project_id = 'Pj4201050001' and zone.floor_id is not null
-```
-
-# 函数
-## 输入
-    1. 参与计算的表的全名称, 带schema名, 以英文逗号隔开
-    2. 项目id
-## 返回结果
-    true    成功
-    false   失败
+## 处理方式
+楼层绑定模型时自动计算

+ 5 - 5
datacenter/teadocs.config.js

@@ -6,17 +6,17 @@ module.exports = {
         name: "数据中心内部研发文档",
         description: "数据中心内部研发文档。",
         version: "1.0.0",
-        dir: "./docs",
-        outDir: "./build",
-        staticDir: "./docs/static"
-    }, 
+        dir: "",
+        outDir: "",
+        staticDir: ""
+    },
     theme: {
         dir: "",
         title: "",
         headHtml: "",
         footHtml: "",
         isMinify: true,
-        rootPath: "/doc/deploy/"
+        rootPath: "/datacenter/"
     },
     nav: {
         tree: "./tree"

+ 4 - 4
datacenter/tree.md

@@ -1,7 +1,7 @@
 - [综述](/index)
 - 关系计算
-    - [设备所在建筑](/relation_calc/Eq2Bd)
-    - [设备所在楼层](/relation_calc/Eq2Fl)
-    - 设备所在空间
-    - 设备所在业务空间
+    - [Eq2Bd](/relation_calc/Eq2Bd)
+    - [Eq2Fl](/relation_calc/Eq2Fl)
+    - [Bd2Sp](/relation_calc/Bd2Sp)
+    - [Fl2Fl](/relation_calc/Fl2Fl)