def consumer(self): o = self.connection fields_to_read = [ 'name', 'cini', 'circuits', 'longitud_cad', 'linia', 'origen', 'final', 'coeficient', 'cable', 'tensio_max_disseny' ] data_pm_limit = '%s-01-01' % (self.year + 1) data_baixa = '%s-12-31' % self.year static_search_params = [ ('cini', '!=', '0000000'), '|', ('data_pm', '=', False), ('data_pm', '<', data_pm_limit), '|', ('data_baixa', '>', data_baixa), ('data_baixa', '=', False), ] # Revisem que si està de baixa ha de tenir la data informada. static_search_params += ['|', '&', ('active', '=', False), ('data_baixa', '!=', False), ('active', '=', True)] while True: try: # generar linies item = self.input_q.get() self.progress_q.put(item) linia = o.GiscedataAtLinia.read( item, ['trams', 'tensio', 'municipi', 'propietari', 'provincia'] ) o_prop = linia['propietari'] and '1' or '0' search_params = [('id', 'in', linia['trams'])] search_params += static_search_params ids = o.GiscedataAtTram.search( search_params, 0, 0, False, {'active_test': False}) for at in o.GiscedataAtTram.read(ids, fields_to_read): # Coeficient per ajustar longituds de trams coeficient = at['coeficient'] or 1.0 # Comprovar el tipus del cable fields_to_read_cable = [ 'tipus', 'resistencia', 'reactancia', 'intensitat_admisible' ] cable = o.GiscedataAtCables.read(at['cable'][0], fields_to_read_cable) o_tipus = o.GiscedataAtTipuscable.read(cable['tipus'][0], ['codi'])['codi'] # Si el tram tram es embarrat amb una longitud > 100 # no l'afegim if o_tipus == 'E' and at['longitud_cad'] > 100: continue if o_tipus == 'E': o_tipus = 'S' #Agafem la tensió o_nivell_tensio = ( (at['tensio_max_disseny'] or linia['tensio'])) o_nivell_tensio = format_f( float(o_nivell_tensio) / 1000.0, 3) o_tram = 'A%s' % at['name'] res = o.GiscegisEdge.search( [('id_linktemplate', '=', at['name']), ('layer', 'not ilike', self.layer), ('layer', 'not ilike', 'EMBARRA%BT%') ]) if not res or len(res) > 1: edge = {'start_node': (0, '%s_0' % at['name']), 'end_node': (0, '%s_1' % at['name'])} else: edge = o.GiscegisEdge.read(res[0], ['start_node', 'end_node']) o_node_inicial = tallar_text(edge['start_node'][1], 20) o_node_final = tallar_text(edge['end_node'][1], 20) o_cini = at['cini'] o_provincia = '' if linia['provincia']: o_provincia = self.get_provincia(linia['provincia'][0]) o_longitud = format_f( float(at['longitud_cad']) * coeficient / 1000.0 or 0.001 , decimals=3) o_num_circuits = at['circuits'] o_r = format_f( cable['resistencia'] * (float(at['longitud_cad']) * coeficient / 1000.0) or 0.0, decimals=6) o_x = format_f( cable['reactancia'] * (float(at['longitud_cad']) * coeficient / 1000.0) or 0.0, decimals=6) o_int_max = format_f( cable['intensitat_admisible'] or 0.0, decimals=3) o_op_habitual = 1 # Tots son actius o_cod_dis = 'R1-%s' % self.codi_r1[-3:] o_any = self.year self.output_q.put([ o_tram, o_node_inicial, o_node_final, o_cini, o_provincia, o_nivell_tensio, o_longitud, o_num_circuits, o_tipus, o_r, o_x, o_int_max, o_op_habitual, o_cod_dis, o_prop, o_any ]) except: traceback.print_exc() if self.raven: self.raven.captureException() finally: self.input_q.task_done()
def consumer(self): O = self.connection count = 0 fields_to_read = ['name', 'municipi', 'data_pm', 'ct', 'coeficient', 'cini', 'perc_financament', 'longitud_cad', 'cable', 'voltatge', 'data_alta', 'propietari', 'cnmc_tipo_instalacion'] while True: try: count += 1 item = self.input_q.get() self.progress_q.put(item) linia = O.GiscedataBtElement.read(item, fields_to_read) res = O.GiscegisEdge.search([('id_linktemplate', '=', linia['name']), ('layer', 'ilike', '%BT%')]) if not res: if not QUIET: sys.stderr.write( "**** ERROR: l'element %s (id:%s) no està en " "giscegis_edges.\n" % (linia['name'], linia['id'])) sys.stderr.flush() edge = {'start_node': (0, '%s_0' % linia['name']), 'end_node': (0, '%s_1' % linia['name'])} elif len(res) > 1: if not QUIET: sys.stderr.write("**** ERROR: l'element %s (id:%s) " "està més d'una vegada a " "giscegis_edges. %s\n" % (linia['name'], linia['id'], res)) sys.stderr.flush() edge = {'start_node': (0, '%s_0' % linia['name']), 'end_node': (0, '%s_1' % linia['name'])} else: edge = O.GiscegisEdge.read(res[0], ['start_node', 'end_node']) comunitat = '' if linia['municipi']: ccaa_obj = O.ResComunitat_autonoma id_comunitat = ccaa_obj.get_ccaa_from_municipi( linia['municipi'][0]) id_comunitat = id_comunitat[0] comunidad = ccaa_obj.read(id_comunitat, ['codi']) if comunidad: comunitat = comunidad['codi'] data_pm = '' if linia['data_pm']: data_pm_linia = datetime.strptime(str(linia['data_pm']), '%Y-%m-%d') data_pm = data_pm_linia.strftime('%Y') # Coeficient per ajustar longituds de trams coeficient = linia['coeficient'] or 1.0 try: tensio = (int(linia['voltatge']) / 1000.0) except: tensio = 0.0 propietari = linia['propietari'] and '1' or '0' codi = linia['cnmc_tipo_instalacion'] # Agafem el cable de la linia if linia['cable']: cable = O.GiscedataBtCables.read(linia['cable'][0], [ 'intensitat_admisible', 'seccio']) else: cable = {'seccio': 0, 'intensitat_admisible': 0} intensitat = cable['intensitat_admisible'] #Capacitat capacitat = round( (cable['intensitat_admisible'] * int(linia['voltatge']) * math.sqrt(3)) / 1000, 3) if not capacitat: capacitat = 1.0 #Descripció origen = tallar_text(edge['start_node'][1], 50) final = tallar_text(edge['end_node'][1], 50) longitud = round(linia['longitud_cad'] * coeficient / 1000.0, 3) or 0.001 output = [ 'B%s' % linia['name'], linia['cini'] or '', origen or '', final or '', codi or '', comunitat, comunitat, format_f(round(100 - int(linia['perc_financament']))), data_pm or '', 1, 1, format_f(tensio), format_f(longitud, 3), format_f(intensitat), format_f(cable['seccio']), format_f(capacitat), ] self.output_q.put(output) except: traceback.print_exc() if self.raven: self.raven.captureException() finally: self.input_q.task_done()
def consumer(self): """ Method that generates the csb file :return: List of arrays """ O = self.connection fields_to_read = [ 'baixa', 'data_pm', 'data_industria', 'coeficient', 'cini', 'propietari', 'tensio_max_disseny', 'name', 'origen', 'final', 'perc_financament', 'circuits', 'longitud_cad', 'cable', 'tipus_instalacio_cnmc_id', 'data_baixa', self.compare_field ] data_pm_limit = '{0}-01-01'.format(self.year + 1) data_baixa = '{0}-01-01'.format(self.year) static_search_params = [ ('propietari', '=', True), '|', ('data_pm', '=', False), ('data_pm', '<', data_pm_limit), '|', ('data_baixa', '=', False), ('data_baixa', '>', data_baixa) ] #print 'static_search_params:{}'.format(static_search_params) # Revisem que si està de baixa ha de tenir la data informada. static_search_params += [ '|', '&', ('active', '=', False), ('data_baixa', '!=', False), ('active', '=', True) ] while True: try: item = self.input_q.get() self.progress_q.put(item) linia = O.GiscedataAtLinia.read( item, ['trams', 'tensio', 'municipi', 'propietari'] ) propietari = linia['propietari'] and '1' or '0' search_params = [('linia', '=', linia['id'])] search_params += static_search_params ids = O.GiscedataAtTram.search( search_params, 0, 0, False, {'active_test': False}) id_desconegut = O.GiscedataAtCables.search( [('name', '=', 'DESCONEGUT')]) if not id_desconegut: search_params_cab = [('name', '=', 'DESCONOCIDO')] id_desconegut = O.GiscedataAtCables.search( search_params_cab)[0] for tram in O.GiscedataAtTram.read(ids, fields_to_read): # Comprovar el tipus del cable if 'cable' in tram: t_cab = tram['cable'][0] cable = O.GiscedataAtCables.read(t_cab, ['tipus']) if not self.embarrats and cable['tipus']: tipus = O.GiscedataAtTipuscable.read( cable['tipus'][0], ['codi'] ) # Si el tram tram es embarrat no l'afegim if tipus['codi'] == 'E': continue else: cable = O.GiscedataAtCables.read( id_desconegut, ['tipus']) # Calculem any posada en marxa data_pm = '' if 'data_pm' in tram and tram['data_pm'] and tram['data_pm'] < data_pm_limit: data_pm = datetime.strptime(str(tram['data_pm']), '%Y-%m-%d') data_pm = data_pm.strftime('%d/%m/%Y') # Coeficient per ajustar longituds de trams coeficient = tram.get('coeficient', 1.0) if tram.get('tipus_instalacio_cnmc_id', False): id_ti = tram.get('tipus_instalacio_cnmc_id')[0] codi_ccuu = O.GiscedataTipusInstallacio.read( id_ti, ['name'])['name'] else: codi_ccuu = '' #Agafem la tensió if 'tensio_max_disseny' in tram: tensio = tram['tensio_max_disseny'] / 1000.0 elif 'tensio' in linia: tensio = linia['tensio'] / 1000.0 else: tensio = 0 comunitat = '' if linia['municipi']: ccaa_obj = O.ResComunitat_autonoma id_comunitat = ccaa_obj.get_ccaa_from_municipi( linia['municipi'][0]) comunidad = O.ResComunitat_autonoma.read(id_comunitat, ['codi']) if comunidad: comunitat = comunidad[0]['codi'] # Agafem el cable de la linia if 'cable' in tram: cable = O.GiscedataAtCables.read( tram['cable'][0], ['intensitat_admisible', 'seccio']) else: cable = O.GiscedataAtCables.read( id_desconegut[0], ['tipus']) #Capacitat if 'intensitat_admisible' in cable: cap = (cable['intensitat_admisible'] * tensio * math.sqrt(3) / 1000.0) else: cap = 0 if cap < 1: capacitat = 1 else: capacitat = int(round(cap)) #Descripció origen = tallar_text(tram['origen'], 50) final = tallar_text(tram['final'], 50) if 'longitud_cad' in tram: longitud = round(tram['longitud_cad'] * coeficient/ 1000.0, 3) or 0.001 else: longitud = 0 if not origen or not final: res = O.GiscegisEdge.search( [ ('id_linktemplate', '=', tram['name']), ('layer', 'not ilike', self.layer), ('layer', 'not ilike', 'EMBARRA%BT%') ]) if not res or len(res) > 1: edge = {'start_node': (0, '{0}_0'.format(tram.get('name'))), 'end_node': (0, '{0}_1'.format(tram.get('name')))} else: edge = O.GiscegisEdge.read(res[0], ['start_node', 'end_node']) if tram.get('data_baixa'): if tram.get('data_baixa') > data_pm_limit: fecha_baja = '' else: tmp_date = datetime.strptime( tram.get('data_baixa'), '%Y-%m-%d') fecha_baja = tmp_date.strftime('%d/%m/%Y') else: fecha_baja = '' if tram[self.compare_field]: last_data = tram[self.compare_field] entregada = F1Res4771(**last_data) if tram['tipus_instalacio_cnmc_id']: id_ti = tram['tipus_instalacio_cnmc_id'][0] ti = O.GiscedataTipusInstallacio.read( id_ti, ['name'])['name'] else: ti = '' actual = F1Res4771( 'A{0}'.format(tram['name']), tram['cini'], tram['origen'], tram['final'], ti, comunitat, comunitat, format_f(round(100 - int(tram.get('perc_financament', 0) or 0))), data_pm, tram.get('circuits', 1) or 1, 1, tensio, format_f(longitud, 3), format_f(cable.get('intensitat_admisible', 0) or 0), format_f(float(cable.get('seccio', 0)), 2), str(capacitat), propietari ) if actual == entregada: estado = 0 else: estado = 1 else: estado = 2 output = [ 'A{0}'.format(tram['name']), tram.get('cini', '') or '', origen or edge['start_node'][1], final or edge['end_node'][1], codi_ccuu or '', comunitat, comunitat, format_f(round(100 - int(tram.get('perc_financament', 0) or 0))), data_pm, fecha_baja or '', tram.get('circuits', 1) or 1, 1, format_f(tensio), format_f(longitud, 3), format_f(cable.get('intensitat_admisible', 0) or 0), format_f(cable.get('seccio', 0) or 0), capacitat, propietari, estado ] self.output_q.put(output) except Exception: traceback.print_exc() if self.raven: self.raven.captureException() finally: self.input_q.task_done()
def consumer(self): O = self.connection fields_to_read = ['baixa', 'data_pm', 'data_industria', 'coeficient', 'cini', 'propietari', 'tensio_max_disseny', 'name', 'origen', 'final', 'perc_financament', 'circuits', 'longitud_cad', 'cable', 'expedients_ids'] data_pm_limit = '%s-01-01' % (self.year + 1) data_baixa = '%s-12-31' % self.year static_search_params = [('propietari', '=', True), '|', ('data_pm', '=', False), ('data_pm', '<', data_pm_limit), '|', ('data_baixa', '>', data_baixa), ('data_baixa', '=', False), ] # Revisem que si està de baixa ha de tenir la data informada. static_search_params += ['|', '&', ('active', '=', False), ('data_baixa', '!=', False), ('active', '=', True)] while True: try: item = self.input_q.get() self.progress_q.put(item) linia = O.GiscedataAtLinia.read( item, ['trams', 'tensio', 'municipi'] ) search_params = [('id', 'in', linia['trams'])] search_params += static_search_params ids = O.GiscedataAtTram.search( search_params, 0, 0, False, {'active_test': False}) for tram in O.GiscedataAtTram.read(ids, fields_to_read): #Comprovar el tipus del cable cable = O.GiscedataAtCables.read(tram['cable'][0], ['tipus']) tipus = O.GiscedataAtTipuscable.read(cable['tipus'][0], ['codi']) #Si el tram tram es embarrat no l'afegim if tipus['codi'] == 'E': continue # Calculem any posada en marxa data_pm = '' if tram['data_pm'] and tram['data_pm'] < data_pm_limit: data_pm = datetime.strptime(str(tram['data_pm']), '%Y-%m-%d') data_pm = data_pm.strftime('%d/%m/%Y') # Coeficient per ajustar longituds de trams coeficient = tram['coeficient'] or 1.0 tipus_inst_id = O.Giscedata_cnmcTipo_instalacion.search( [('cini', '=', tram['cini'])]) codigo = O.Giscedata_cnmcTipo_instalacion.read( tipus_inst_id, ['codi']) if codigo: codi = codigo[0] else: codi = {'codi': ' '} #Agafem la tensió tensio = tram['tensio_max_disseny'] or linia['tensio'] comunitat = '' if linia['municipi']: id_comunitat = O.ResComunitat_autonoma.get_ccaa_from_municipi( linia['municipi'][0]) comunidad = O.ResComunitat_autonoma.read(id_comunitat, ['codi']) if comunidad: comunitat = comunidad[0]['codi'] # Agafem el cable de la linia cable = O.GiscedataAtCables.read(tram['cable'][0], [ 'intensitat_admisible', 'seccio']) #Capacitat cap = round( (cable['intensitat_admisible'] * tensio * math.sqrt(3))/1000000, 3) if cap < 1: capacitat = 1 else: capacitat = int(round(cap)) #Descripció origen = tallar_text(tram['origen'], 50) final = tallar_text(tram['final'], 50) output = [ 'A%s' % tram['name'], tram['cini'] or '', origen or '', final or '', codi['codi'] or '', comunitat, comunitat, round(100 - int(tram['perc_financament'])), data_pm, '', tram['circuits'] or 1, 1, round(tram['longitud_cad'] * coeficient / 1000.0, 3) or 0, cable['seccio'], capacitat ] self.output_q.put(output) except: traceback.print_exc() if self.raven: self.raven.captureException() finally: self.input_q.task_done()
def consumer(self): o = self.connection fields_to_read = [ 'name', 'propietari', 'coeficient', 'cable', 'voltatge', 'cini', 'longitud_cad', 'municipi', 'longitud_cad', 'tipus_linia' ] while True: try: # generar linies item = self.input_q.get() self.progress_q.put(item) linia = o.GiscedataBtElement.read(item, fields_to_read) res = o.GiscegisEdge.search( [('id_linktemplate', '=', linia['name']), '|', ('layer', 'ilike', self.layer), ('layer', 'ilike', 'EMBARRA%BT%') ]) if not res or len(res) > 1: edge = {'start_node': (0, '%s_0' % linia['name']), 'end_node': (0, '%s_1' % linia['name'])} else: edge = o.GiscegisEdge.read(res[0], ['start_node', 'end_node']) o_prop = linia['propietari'] and '1' or '0' # Coeficient per ajustar longituds de trams coeficient = linia['coeficient'] or 1.0 # Comprovar el tipus del cable fields_to_read_cable = [ 'tipus', 'reactancia', 'resistencia', 'intensitat_admisible' ] # Agafem el cable de la linia cable = o.GiscedataBtCables.read(linia['cable'][0], fields_to_read_cable) #Agafem la tensió try: o_nivell_tensio = format_f( (int(linia['voltatge']) / 1000.0), 3 ) except: o_nivell_tensio = 0.0 o_tram = 'B%s' % linia['name'] o_node_inicial = tallar_text(edge['start_node'][1], 20) o_node_inicial = o_node_inicial.replace('*', '') o_node_final = tallar_text(edge['end_node'][1], 20) o_node_final = o_node_final.replace('*', '') o_cini = linia['cini'] o_provincia = '' if linia['municipi']: o_provincia = self.get_provincia(linia['municipi'][0]) o_longitud = format_f( round(float(linia['longitud_cad']) * coeficient / 1000.0, 3) or 0.001, decimals=3) o_num_circuits = 1 # a BT suposarem que sempre hi ha 1 o_tipus = self.get_tipus_cable( cable['tipus'][0], linia['tipus_linia'][0] ) o_r = format_f( cable['resistencia'] * (float(linia['longitud_cad']) * coeficient / 1000.0) or 0.0, 6) o_x = format_f( cable['reactancia'] * (float(linia['longitud_cad']) * coeficient / 1000.0) or 0.0, 6) o_int_max = format_f(cable['intensitat_admisible'], 3) o_op_habitual = 1 # Tots son actius o_cod_dis = 'R1-%s' % self.codi_r1[-3:] o_any = self.year if cable['tipus'][1] in ['EMBARRADO', 'EMBARRAT']: o_prop = 1 self.output_q.put([ o_tram, # TRAMO o_node_inicial, # NUDO INICIAL o_node_final, # NUDO FINAL o_cini, # CINI o_provincia, # PROVINCIA o_nivell_tensio, # NIVEL TENSION o_longitud, # LONGITUD o_num_circuits, # NUMERO CIRCUITOS o_tipus, # TIPO o_r, # RESISTENCIA o_x, # REACTANCIA o_int_max, # INTENSIDAD MAXIMA o_op_habitual, # ESTADO OPERACION HABITUAL o_cod_dis, # CODIGO DISTRIBUIDORA o_prop, # PROPIEDAD o_any # AÑO INFORMACION ]) except Exception: traceback.print_exc() if self.raven: self.raven.captureException() finally: self.input_q.task_done()
def consumer(self): """ Method that generates the csb file :return: List of arrays """ O = self.connection count = 0 fields_to_read = [ 'name', 'municipi', 'data_pm', 'ct', 'coeficient', 'cini', 'perc_financament', 'longitud_cad', 'cable', 'voltatge', 'data_alta', 'propietari', 'tipus_instalacio_cnmc_id', 'data_baixa', self.compare_field ] data_baixa_limit = '{0}-01-01'.format(self.year) data_pm_limit = '{0}-01-01'.format(self.year + 1) error_msg = "**** ERROR: l'element {0} (id:{1}) no està en giscegis_edges.\n" error_msg_multi = "**** ERROR: l'element {0} (id:{1}) està més d'una vegada a giscegis_edges. {2}\n" while True: try: count += 1 item = self.input_q.get() self.progress_q.put(item) linia = O.GiscedataBtElement.read(item, fields_to_read) res = O.GiscegisEdge.search([('id_linktemplate', '=', linia['name']), ('layer', 'ilike', '%BT%')]) if not res: if not QUIET: sys.stderr.write( error_msg.format(linia['name'], linia['id'])) sys.stderr.flush() edge = {'start_node': (0, '{0}_0'.format(linia['name'])), 'end_node': (0, '{0}_1'.format(linia['name']))} elif len(res) > 1: if not QUIET: sys.stderr.write( error_msg_multi.format(linia['name'], linia['id'], res)) sys.stderr.flush() edge = {'start_node': (0, '{0}_0'.format(linia['name'])), 'end_node': (0, '{0}_1'.format(linia['name']))} else: edge = O.GiscegisEdge.read(res[0], ['start_node', 'end_node']) comunitat = '' if linia['municipi']: ccaa_obj = O.ResComunitat_autonoma id_comunitat = ccaa_obj.get_ccaa_from_municipi( linia['municipi'][0]) id_comunitat = id_comunitat[0] comunidad = ccaa_obj.read(id_comunitat, ['codi']) if comunidad: comunitat = comunidad['codi'] data_pm = '' if linia['data_pm']: data_pm_linia = datetime.strptime(str(linia['data_pm']), '%Y-%m-%d') data_pm = data_pm_linia.strftime('%d/%m/%Y') # Coeficient per ajustar longituds de trams coeficient = linia['coeficient'] or 1.0 try: tensio = (int(linia['voltatge']) / 1000.0) except Exception: tensio = 0.0 propietari = linia['propietari'] and '1' or '0' if linia['tipus_instalacio_cnmc_id']: id_ti = linia.get('tipus_instalacio_cnmc_id')[0] codi_ccuu = O.GiscedataTipusInstallacio.read( id_ti, ['name'])['name'] else: codi_ccuu = '' # Agafem el cable de la linia if linia['cable']: cable = O.GiscedataBtCables.read(linia['cable'][0], [ 'intensitat_admisible', 'seccio']) else: cable = {'seccio': 0, 'intensitat_admisible': 0} intensitat = cable['intensitat_admisible'] #Capacitat capacitat = round( (cable['intensitat_admisible'] * int(linia['voltatge']) * math.sqrt(3)) / 1000, 3) if not capacitat: capacitat = 1.0 #Descripció origen = tallar_text(edge['start_node'][1], 50) final = tallar_text(edge['end_node'][1], 50) longitud = round(linia['longitud_cad'] * coeficient / 1000.0, 3) or 0.001 if linia['data_baixa']: if linia['data_baixa'] > data_pm_limit: fecha_baja = '' else: tmp_date = datetime.strptime( linia['data_baixa'], '%Y-%m-%d') fecha_baja = tmp_date.strftime('%d/%m/%Y') else: fecha_baja = '' if linia[self.compare_field]: last_data = linia[self.compare_field] entregada = F2Res4771(**last_data) actual = F2Res4771( 'B{0}'.format(linia['name']), linia['cini'], origen or '', final or '', codi_ccuu or '', comunitat, comunitat, format_f(round(100 - int(linia['perc_financament']))), data_pm, 1, 1, format_f(tensio), format_f(longitud, 3), format_f(intensitat), format_f(float(cable['seccio']),2), format_f(capacitat), propietari) if actual == entregada: estado = 0 else: estado = 1 else: estado = 2 output = [ 'B{}'.format(linia['name']), linia['cini'] or '', origen or '', final or '', codi_ccuu or '', comunitat, comunitat, format_f(round(100 - int(linia['perc_financament']))), data_pm or '', fecha_baja, 1, 1, format_f(tensio), format_f(longitud, 3), format_f(intensitat), format_f(cable['seccio']), format_f(capacitat), propietari, estado ] self.output_q.put(output) except Exception: traceback.print_exc() if self.raven: self.raven.captureException() finally: self.input_q.task_done()
def consumer(self): o = self.connection fields_to_read = [ 'name', 'cini', 'circuits', 'longitud_cad', 'linia', 'origen', 'final', 'coeficient', 'cable', 'tensio_max_disseny','tensio_max_disseny_id' ] data_pm_limit = '%s-01-01' % (self.year + 1) data_baixa = '%s-12-31' % self.year static_search_params = [ ('cini', '!=', '0000000'), '|', ('data_pm', '=', False), ('data_pm', '<', data_pm_limit), '|', ('data_baixa', '>', data_baixa), ('data_baixa', '=', False), ] # Revisem que si està de baixa ha de tenir la data informada. static_search_params += ['|', '&', ('active', '=', False), ('data_baixa', '!=', False), ('active', '=', True)] while True: try: # generar linies item = self.input_q.get() self.progress_q.put(item) linia = o.GiscedataAtLinia.read( item, ['trams', 'tensio', 'municipi', 'propietari', 'provincia'] ) o_prop = linia['propietari'] and '1' or '0' search_params = [('id', 'in', linia['trams'])] search_params += static_search_params ids = o.GiscedataAtTram.search( search_params, 0, 0, False, {'active_test': False}) for at in o.GiscedataAtTram.read(ids, fields_to_read): # Coeficient per ajustar longituds de trams coeficient = at['coeficient'] or 1.0 # Comprovar el tipus del cable fields_to_read_cable = [ 'tipus', 'resistencia', 'reactancia', 'intensitat_admisible' ] cable = o.GiscedataAtCables.read(at['cable'][0], fields_to_read_cable) o_tipus = o.GiscedataAtTipuscable.read(cable['tipus'][0], ['codi'])['codi'] # Si el tram tram es embarrat amb una longitud > 100 # no l'afegim if o_tipus == 'E' and at['longitud_cad'] > 100: continue if o_tipus == 'E': o_tipus = 'D' # Agafem la tensió if at.get('tensio_max_disseny_id', False): nivell_tensio_id = at['tensio_max_disseny_id'][0] o_nivell_tensio = o.GiscedataTensionsTensio.read(nivell_tensio_id, ["tensio"])["tensio"] else: o_nivell_tensio = linia["tensio"] o_nivell_tensio = format_f( float(o_nivell_tensio) / 1000.0, 3) o_tram = 'A%s' % at['name'] res = o.GiscegisEdge.search( [('id_linktemplate', '=', at['name']), ('layer', 'not ilike', self.layer), ('layer', 'not ilike', 'EMBARRA%BT%') ]) if not res or len(res) > 1: edge = {'start_node': (0, '%s_0' % at['name']), 'end_node': (0, '%s_1' % at['name'])} else: edge = o.GiscegisEdge.read(res[0], ['start_node', 'end_node']) o_node_inicial = tallar_text(edge['start_node'][1], 20) o_node_inicial = o_node_inicial.replace('*', '') if o_node_inicial in self.nodes_red: o_node_inicial = "{}-{}".format(o_node_inicial, o_nivell_tensio) o_node_final = tallar_text(edge['end_node'][1], 20) o_node_final = o_node_final.replace('*', '') if o_node_final in self.nodes_red: o_node_final = "{}-{}".format(o_node_final, o_nivell_tensio) o_cini = at['cini'] o_provincia = '' if linia['provincia']: o_provincia = self.get_provincia(linia['provincia'][0]) o_longitud = format_f( round(float(at['longitud_cad']) * coeficient / 1000.0, 3) or 0.001, decimals=3) o_num_circuits = at['circuits'] o_r = format_f( cable['resistencia'] * (float(at['longitud_cad']) * coeficient / 1000.0) or 0.0, decimals=6) o_x = format_f( cable['reactancia'] * (float(at['longitud_cad']) * coeficient / 1000.0) or 0.0, decimals=6) o_int_max = format_f( cable['intensitat_admisible'] or 0.0, decimals=3) o_op_habitual = 1 # Tots son actius o_cod_dis = 'R1-%s' % self.codi_r1[-3:] o_any = self.year self.output_q.put([ o_tram, # TRAMO o_node_inicial, # NUDO INICIAL o_node_final, # NUDO FINAL o_cini, # CINI o_provincia, # PROVINCIA o_nivell_tensio, # NIVEL TENSION o_longitud, # LONGITUD o_num_circuits, # NUMERO CIRCUITOS o_tipus, # TIPO o_r, # RESISTENCIA o_x, # REACTANCIA o_int_max, # INTENSIDAD MAXIMA o_op_habitual, # ESTADO OPERACION HABITUAL o_cod_dis, # CODIGO DISTRIBUIDORA o_prop, # PROPIEDAD o_any # AÑO INFORMACION ]) except Exception: traceback.print_exc() if self.raven: self.raven.captureException() finally: self.input_q.task_done()
def consumer(self): o = self.connection fields_to_read = [ 'name', 'propietari', 'coeficient', 'cable', 'voltatge', 'cini', 'longitud_cad', 'municipi', 'longitud_cad' ] while True: try: # generar linies item = self.input_q.get() self.progress_q.put(item) linia = o.GiscedataBtElement.read(item, fields_to_read) res = o.GiscegisEdge.search( [('id_linktemplate', '=', linia['name']), '|', ('layer', 'ilike', self.layer), ('layer', 'ilike', 'EMBARRA%BT%') ]) if not res or len(res) > 1: edge = {'start_node': (0, '%s_0' % linia['name']), 'end_node': (0, '%s_1' % linia['name'])} else: edge = o.GiscegisEdge.read(res[0], ['start_node', 'end_node']) o_prop = linia['propietari'] and '1' or '0' # Coeficient per ajustar longituds de trams coeficient = linia['coeficient'] or 1.0 # Comprovar el tipus del cable fields_to_read_cable = [ 'tipus', 'reactancia', 'resistencia', 'intensitat_admisible' ] # Agafem el cable de la linia cable = o.GiscedataBtCables.read(linia['cable'][0], fields_to_read_cable) #Agafem la tensió try: o_nivell_tensio = format_f( (int(linia['voltatge']) / 1000.0), 3 ) except: o_nivell_tensio = 0.0 o_tram = 'B%s' % linia['name'] o_node_inicial = tallar_text(edge['start_node'][1], 20) o_node_final = tallar_text(edge['end_node'][1], 20) o_cini = linia['cini'] o_provincia = '' if linia['municipi']: o_provincia = self.get_provincia(linia['municipi'][0]) o_longitud = format_f( float(linia['longitud_cad']) * coeficient / 1000.0 or 0.001, decimals=3) o_num_circuits = 1 # a BT suposarem que sempre hi ha 1 o_tipus = self.get_tipus_cable(cable['tipus'][0]) if o_tipus == 'E': o_tipus = 'S' o_r = format_f( cable['resistencia'] * (float(linia['longitud_cad']) * coeficient / 1000.0) or 0.0, 6) o_x = format_f( cable['reactancia'] * (float(linia['longitud_cad']) * coeficient / 1000.0) or 0.0, 6) o_int_max = format_f(cable['intensitat_admisible'], 3) o_op_habitual = 1 # Tots son actius o_cod_dis = 'R1-%s' % self.codi_r1[-3:] o_any = self.year if cable['tipus'][1] in ['EMBARRADO', 'EMBARRAT']: o_prop = 1 self.output_q.put([ o_tram, o_node_inicial, o_node_final, o_cini, o_provincia, o_nivell_tensio, o_longitud, o_num_circuits, o_tipus, o_r, o_x, o_int_max, o_op_habitual, o_cod_dis, o_prop, o_any ]) except: traceback.print_exc() if self.raven: self.raven.captureException() finally: self.input_q.task_done()
def consumer(self): """ Method that generates the csb file :return: List of arrays """ O = self.connection fields_to_read = [ 'baixa', 'data_pm', 'data_industria', 'coeficient', 'cini', 'propietari', 'tensio_max_disseny_id', 'name', 'origen', 'final', 'perc_financament', 'circuits', 'longitud_cad', 'cable', 'tipus_instalacio_cnmc_id', 'data_baixa', self.compare_field, 'baixa', 'data_baixa', 'conductors' ] data_pm_limit = '{0}-01-01'.format(self.year + 1) data_baixa = '{0}-01-01'.format(self.year) static_search_params = [ ('propietari', '=', True), '|', ('data_pm', '=', False), ('data_pm', '<', data_pm_limit), '|', '&', ('data_baixa', '>', data_baixa), ('baixa', '=', True), '|', ('data_baixa', '=', False), ('baixa', '=', False) ] # print 'static_search_params:{}'.format(static_search_params) # Revisem que si està de baixa ha de tenir la data informada. static_search_params += [ '|', '&', ('active', '=', False), ('data_baixa', '!=', False), ('active', '=', True) ] while True: try: item = self.input_q.get() self.progress_q.put(item) linia = O.GiscedataAtLinia.read( item, ['trams', 'tensio', 'municipi', 'propietari', 'provincia'] ) propietari = linia['propietari'] and '1' or '0' search_params = [('linia', '=', linia['id'])] search_params += static_search_params ids = O.GiscedataAtTram.search( search_params, 0, 0, False, {'active_test': False}) if item in self.linia_tram_include: ids = list(set(ids + self.linia_tram_include[item])) ids = list(set(ids) - set(self.forced_ids["exclude"])) id_desconegut = O.GiscedataAtCables.search( [('name', '=', 'DESCONEGUT')]) if not id_desconegut: id_desconegut = O.GiscedataAtCables.search( [('name', '=', 'DESCONOCIDO')])[0] for tram in O.GiscedataAtTram.read(ids, fields_to_read): if tram["baixa"] and tram["data_baixa"] is False: continue # Comprovar el tipus del cable if 'cable' in tram: cable = O.GiscedataAtCables.read( tram['cable'][0], ['tipus']) tipus = O.GiscedataAtTipuscable.read( cable['tipus'][0], ['codi'] ) if self.embarrats and tram["longitud_cad"] >= 100 and tipus["codi"] == "E": continue if not self.embarrats and cable['tipus']: # Si el tram tram es embarrat no l'afegim if tipus['codi'] == 'E': continue else: cable = O.GiscedataAtCables.read( id_desconegut, ['tipus']) # Calculem any posada en marxa data_pm = '' if 'data_pm' in tram and tram['data_pm'] and tram['data_pm'] < data_pm_limit: data_pm = datetime.strptime(str(tram['data_pm']), '%Y-%m-%d') data_pm = data_pm.strftime('%d/%m/%Y') # Calculem la data de baixa data_baixa = '' if tram['data_baixa'] and tram['baixa']: data_baixa = datetime.strptime(str(tram['data_baixa']), '%Y-%m-%d') data_baixa = data_baixa.strftime('%d/%m/%Y') # Coeficient per ajustar longituds de trams coeficient = tram.get('coeficient', 1.0) if tram.get('tipus_instalacio_cnmc_id', False): id_ti = tram.get('tipus_instalacio_cnmc_id')[0] codi_ccuu = O.GiscedataTipusInstallacio.read( id_ti, ['name'])['name'] else: codi_ccuu = '' # Agafem la tensió if 'tensio_max_disseny_id' in tram and tram['tensio_max_disseny_id']: if isinstance(tram['tensio_max_disseny_id'], (list, tuple)): id_tensio = int(tram['tensio_max_disseny_id'][0]) else: id_tensio = int(tram['tensio_max_disseny_id']) tensio_aplicar = self.connection.GiscedataTensionsTensio.read(id_tensio, ["tensio"])["tensio"] tensio = tensio_aplicar / 1000.0 elif 'tensio' in linia: tensio = linia['tensio'] / 1000.0 else: tensio = 0 comunitat = '' if linia['municipi']: ccaa_obj = O.ResComunitat_autonoma id_comunitat = ccaa_obj.get_ccaa_from_municipi( linia['municipi'][0]) comunidad = O.ResComunitat_autonoma.read(id_comunitat, ['codi']) if comunidad: comunitat = comunidad[0]['codi'] # Agafem el cable de la linia if 'cable' in tram: cable = O.GiscedataAtCables.read( tram['cable'][0], ['intensitat_admisible', 'seccio']) else: cable = O.GiscedataAtCables.read( id_desconegut[0], ['tipus']) # Capacitat if 'intensitat_admisible' in cable: cap = (cable['intensitat_admisible'] * tensio * math.sqrt(3) / 1000.0) else: cap = 0 if cap < 1: capacitat = 1 else: capacitat = int(round(cap)) # Descripció origen = tallar_text(tram['origen'], 50) final = tallar_text(tram['final'], 50) if 'longitud_cad' in tram: if self.dividir: long_tmp = tram['longitud_cad']/tram.get( 'circuits', 1 ) or 1 longitud = round( long_tmp * coeficient/1000.0, 3 ) or 0.001 else: longitud = round( tram['longitud_cad'] * coeficient/1000.0, 3 ) or 0.001 else: longitud = 0 if not origen or not final: res = O.GiscegisEdge.search( [ ('id_linktemplate', '=', tram['name']), ('layer', 'not ilike', self.layer), ('layer', 'not ilike', 'EMBARRA%BT%') ]) if not res or len(res) > 1: edge = {'start_node': (0, '{0}_0'.format(tram.get('name'))), 'end_node': (0, '{0}_1'.format(tram.get('name')))} else: edge = O.GiscegisEdge.read(res[0], ['start_node', 'end_node']) if tram.get('data_baixa'): if tram.get('data_baixa') > data_pm_limit: fecha_baja = '' else: tmp_date = datetime.strptime( tram.get('data_baixa'), '%Y-%m-%d') fecha_baja = tmp_date.strftime('%d/%m/%Y') else: fecha_baja = '' if tram[self.compare_field]: data_entregada = tram[self.compare_field] entregada = F1Res4666(**data_entregada) if tram['tipus_instalacio_cnmc_id']: id_ti = tram['tipus_instalacio_cnmc_id'][0] ti = O.GiscedataTipusInstallacio.read( id_ti, ['name'])['name'] else: ti = '' actual = F1Res4666( '{}{}'.format(self.prefix, tram['name']), tram['cini'], tram['origen'], tram['final'], ti, comunitat, comunitat, format_f( 100.0 - tram.get('perc_financament', 0.0), 2 ), data_pm, data_baixa, tram.get('circuits', 1) or 1, 1, tensio, format_f(longitud, 3), format_f(cable.get('intensitat_admisible', 0) or 0), format_f(float(cable.get('seccio', 0)), 2), str(capacitat), 0 ) if actual == entregada: estado = 0 else: self.output_m.put("{} {}".format(tram["name"], adapt_diff(actual.diff(entregada)))) estado = 1 else: if tram['data_pm']: if tram['data_pm'][:4] != str(self.year): self.output_m.put("Identificador:{} No estava en el fitxer carregat al any n-1 i la data de PM es diferent al any actual".format(tram["name"])) estado = '1' else: estado = '2' else: self.output_m.put("Identificador:{} No estava en el fitxer carregat al any n-1".format(tram["name"])) estado = '1' if tram['conductors']: conductors = tram['conductors'] else: conductors = 1 output = [ '{}{}'.format(self.prefix, tram['name']), # IDENTIFIC. tram.get('cini', '') or '', # CINI origen or edge['start_node'][1], # ORIGEN final or edge['end_node'][1], # DESTINO codi_ccuu or '', # CODIGO_CCUU comunitat, # CODIGO_CCAA_1 comunitat, # CODIGO_CCAA_2 format_f( 100.0 - tram.get('perc_financament', 0.0), 2 ), # FINANCIADO data_pm, # FECHA APS fecha_baja or '', # FECHA BAJA tram.get('circuits', 1) or 1, # NUMERO_CIRCUITOS conductors, # NUMERO_CONDUCTORES format_f(tensio, 3), # NIVEL TENSION format_f(longitud, 3), # LONGITUD format_f(cable.get('intensitat_admisible', 0) or 0), # INTENSIDAD MAXIMA format_f(cable.get('seccio', 0) or 0, 3), # SECCION capacitat, # CAPACIDAD estado # ESTADO ] if self.extended: # S'ha especificat que es vol la versio extesa if 'provincia' in linia: provincia = O.ResCountryState.read( linia['provincia'][0], ['name'] ) output.append(provincia.get('name', "")) else: output.append("") if 'municipi' in linia: municipi = O.ResMunicipi.read( linia['municipi'][0], ['name'] ) output.append(municipi.get('name', "")) else: output.append("") self.output_q.put(output) except Exception: traceback.print_exc() if self.raven: self.raven.captureException() finally: self.input_q.task_done()