123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- """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)
|