模型有轴网数据
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 : 平面图名称