"""PipeNetwork Data . """ import test from systemrelation import systemutils from systemrelation import graph_model def get_dicdata(sql,dic): """ Request db for data through sql. Convert data to dict. :param sql: :param dic: :return: """ data=test.get_data(sql) dic_data=[dict(zip(dic,item)) for item in data] return list(dic_data) def get_project_models(project_id): ''' Get all the models in the project. project-->folder-->model. :param project_id: :return: ''' element_data = [] sql ="select " \ "file.id as file_id" \ ",file.original_name as file_name" \ ",file.status as file_status" \ ",floor.id as floor_id" \ ",floor.floor_name as floor_name" \ ",folder.id as folder_id" \ ",folder.name as folder_name" \ ",folder.project_id as project_id " \ "from revit.model_file as file " \ "inner join " \ "revit.model_floor as floor " \ "on ( file.id=floor.current_model_id) " \ "inner join " \ "revit.model_folder as folder " \ "on (floor.folder_id=folder.id )" \ "where folder.project_id='%s'" \ "and folder.id='bbe510dbe26011e999b69b669ea08505'"\ % (project_id) #"and file.status=4 "\ COMPONENT_KEYS = [ 'file_id', 'file_name', 'file_status', 'floor_id', 'floor_name', 'folder_id', 'folder_name', 'project_id' ] element_data.extend(get_dicdata(sql, COMPONENT_KEYS)) element_data = list(map(systemutils.dic2obj, element_data)) return element_data def get_element_data(model_id): """ Cache all Element from Db :return: """ element_data=[] component_sql="select * from revit.component where model_id='%s'"%(model_id) COMPONENT_KEYS = [ 'id', 'model_id', 'local_id', 'local_name', 'family', 'location', 'outline', 'source_id', 'name', 'revit_id', 'parameters', 'type', 'tag', 'owner', 'last_update', 'create_time', 'owner_id', 'family_name', 'owner_source_id' ] element_data.extend(get_dicdata(component_sql,COMPONENT_KEYS)) equipment_sql="select * from revit.equipment where model_id='%s'"%(model_id) EQUIPMENT_KEYS = [ 'id', 'model_id', 'local_id', 'local_name', 'family', 'location', 'outline', 'last_update', 'create_time', 'source_id', 'name', 'parameters', 'revit_id', 'type', 'tag', 'family_name', ] element_data.extend(get_dicdata(equipment_sql,EQUIPMENT_KEYS)) other_sql="select * from revit.other where model_id='%s'"%(model_id) OTHER_KEYS = [ 'id', 'model_id', 'connected_ids', 'source_id', 'name', 'revit_id', 'type', 'create_time', 'last_update', 'location', 'outline' ] element_data.extend(get_dicdata(other_sql,OTHER_KEYS)) pipe_sql = "select * from revit.pipe where model_id='%s'" % (model_id) PIPE_KEYS = [ 'id', 'model_id', 'location', 'outline', 'connected_ids', 'mep_system_type', 'diameter', 'source_id', 'name', 'revit_id', 'type', 'last_update', 'create_time', 'parameters' ] element_data.extend(get_dicdata(pipe_sql, PIPE_KEYS)) duct_sql="select * from revit.duct where model_id='%s'"%(model_id) DUCT_KEYS = [ 'id', 'model_id', 'location', 'outline', 'connected_ids', 'mep_system_type', 'shape', 'diameter', 'width', 'height', 'source_id', 'revit_id', 'name', 'type', 'last_update', 'create_time', 'parameters' ] element_data.extend(get_dicdata(duct_sql,DUCT_KEYS)) element_data=list(map(systemutils.dic2obj, element_data)) return element_data def get_connectors_data(model_id, system_name, domain): """Cache all connector from Db。""" connector_data=[] connector_sql = "SELECT * FROM revit.connector where model_id='%s' and mep_system_type='%s' and domain='%s'" % (model_id,system_name,domain) print(connector_sql) CONNECTOR_KEYS = [ 'id', 'model_id', 'belong', 'belong_type', 'origin', 'domain', 'description', 'connected', 'owner', 'connected_ids', 'mep_system_type', 'source_id', 'revit_id', 'type', 'create_time', 'last_update', 'connect_id_json' ] connector_data.extend(get_dicdata(connector_sql, CONNECTOR_KEYS)) connector_data=list(map(systemutils.dic2obj,connector_data)) return connector_data def save_project_data(project_graph,project_id): """ Sava project graph data. :param floor_graph: :return: """ del_project_data(project_id) # Create block_id=0 for g in project_graph.groupedsystemgraphs: for s in g.systemgraphs: for e in s.system_edges: save_edge_data(e, block_id) for e in g.connectedges: save_edge_data(e,block_id) block_id+=1 def save_edge_data(edge,block_id): """ Save edge info using sql :param edge: :param block_id: :return: """ vertex1=edge.start_vertex vertex2=edge.end_vertex c1=vertex1.system_data c2=vertex2.system_data model1=systemutils.get_specify_type_parent(vertex1,graph_model.FloorGraph).model model2 = systemutils.get_specify_type_parent(vertex2, graph_model.FloorGraph).model sql="insert into revit_calc.connected_block" \ "(id1,type1,model_id1,id2,type2,model_id2,block_id,project_id) values " \ "('%s','%s','%s','%s','%s','%s','%s','%s')"\ %(c1.id,c1.type,model1.file_id,c2.id,c2.type,model2.file_id,block_id,model1.project_id) data = test.save_data(sql) def del_project_data(project_id): """ Before save.delete old data. :param project_id: :return: """ sql = "delete from revit_calc.connected_block where project_id='%s'"% (project_id) data = test.save_data(sql) def get_connected_block_data(project_id,block_id): ''' Get all the connected_block . :param project_id: :param block_id: :return: ''' element_data = [] sql = "select * from revit_calc.connected_block " \ "where project_id='%s'" \ "and block_id='%s'" \ % (project_id,block_id) sql = "select * from revit_calc.connected_block " \ "where project_id='%s'" \ "order by cast(block_id as int) asc"\ % (project_id) KEYS = [ 'id', 'id1', 'type1', 'model_id1', 'id2', 'type2', 'model_id2', 'direction', 'block_id', 'project_id', ] element_data.extend(get_dicdata(sql, KEYS)) element_data = list(map(systemutils.dic2obj, element_data)) return element_data def get_connected_block_source_data(project_id,block_id): ''' Get all the connected_block source . :param project_id: :param block_id: :return: ''' element_data = [] sql = "select * from revit_calc.connected_block_source " \ "where project_id='%s'" \ "and block_id='%s'" \ % (project_id,block_id) KEYS = [ 'id', 'project_id', 'block_id', 'source_id', ] element_data.extend(get_dicdata(sql, KEYS)) element_data = list(map(systemutils.dic2obj, element_data)) return element_data def update_connected_block_data(block_datas): ''' update connected_block direction by id. :param block_datas: :return: ''' for block_data in block_datas: sql="update revit_calc.connected_block set direction='%s' ,block_id='%s' where id='%s'"%(block_data.direction,block_data.block_id,block_data.id) data = test.save_data(sql) if '__main__'==__name__: # model_id="cf4e11a0e25811e999b6dbc4c75fa946" # system_name="喷淋管" # domain="DomainPiping" # g=get_connectors_data(model_id,system_name,domain) # print (g) project_id='Pj1101010015' models=get_project_models(project_id) print(models)