# 一个建筑内的多楼层轴网冲突检查 ## 前置条件 模型有轴网数据 ## 处理逻辑 1. 查询出参与检查的所有模型(指定建筑文件夹下的所有已经处理完的模型 + 指定要被检查的模型) 2. 查询出 1 中参与检查模型的轴网数据 3. 将所有模型的轴网分组 分组逻辑: 1. 在对两个模型的轴网时, 只对比他们具有相同名字的轴网, 如果相同名字轴网的location表达的是同一条直线, 则认为轴网一致, 否则认为不一致 2. 只有轴网一致的模型才能分在一个分组内 3. 所有模型分完组后, 如果有两个或以上的分组, 则认为轴网不一致, 有冲突 返回结果中有分组id表示模型所处分组, 从0开始. # 函数
源码 ``` CREATE OR REPLACE FUNCTION "revit_calc"."check_grid_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, "group_id" int4, "plan_name" varchar) AS $BODY$ from relations.src.grid.check_grid import check_grid_upright involved_model_sql = "select * from revit.model_floor_file_func('" + project_id + "') where folder_id = '"+ folder_id +"' and ( status in (4) or fid = '" + model_id + "')" grid_sql = "select * from revit.grid where model_id = " involved_model = plpy.execute(involved_model_sql) grid_data = dict() for item in involved_model: current_grid_sql = grid_sql + '\'{model_id}\''.format(model_id=item.get('fid')) single_model_grid = plpy.execute(current_grid_sql) grid_data[item.get('fid')] = single_model_grid result = check_grid_upright(involved_model, grid_data) return involved_model $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 : 模型当前状态 group_id : 模型所处分组 plan_name : 平面图名称