level_check.md 2.3 KB

一个建筑内的多楼层标高冲突检查

前置条件

模型有标高数据

处理逻辑

1. 查询出参与检查的所有模型(指定建筑文件夹下的所有已经处理完的模型 + 指定要被检查的模型)
2. 查询出 1 中参与检查模型的标高数据
3. 将所有模型的标高按照楼层高低进行排序
4. 检查是否存在高楼层的标高低于低楼层的标高或者低楼层的标高高于高楼层的标高情况, 如果有, 则认为标高有冲突. 否则认为没有冲突

函数

源码
CREATE OR REPLACE FUNCTION "revit_calc"."check_level_valid"("project_id" varchar, "folder_id" varchar, "model_id" varchar)
  RETURNS TABLE("id" varchar, "floor_name" varchar, "project_id" varchar, "folder_id" varchar, "fid" varchar, "accept_time" timestamptz, "version" int4, "note" text, "user_id" varchar, "user_name" varchar, "log" jsonb, "url" text, "md5" varchar, "status" int2, "has_error" bool, "error" varchar, "level" float8, "plan_name" varchar) AS $BODY$
    from relations.src.level.check_level import check_level_reasonable

    involved_model_sql = "select * from revit.model_floor_file_func('" + project_id + "') where folder_id = '"+ folder_id +"' and ( status in (31, 4) or  fid = '" + model_id + "')"

    involved_model = plpy.execute(involved_model_sql)
    try:
        # 返回结果为关系二维数组, 类似入参格式
        result = check_level_reasonable(involved_model)
        return involved_model
    except Exception as e:
        return dict()
$BODY$
  LANGUAGE plpython3u VOLATILE
  COST 100
  ROWS 1000

输入

1. project_id : 项目id
2. folder_id : 建筑文件夹id
3. model_id : 模型id

返回结果

id : 楼层id
floor_name : 楼层名
project_id : 项目id
folder_id : 楼层所属建筑文件夹id
fid : 模型id
accept_time : 模型接受时间
version : 模型版本
note : 备注
user_id : 上传模型的用户id
user_name : 用户名
log : 日志
url : 模型下载地址
md5 : 模型文件md5
status : 模型当前状态
has_error : 是否有标高冲突
error : 错误信息(如果有的话)
level : 模型标高
plan_name : 平面图名称