def consultarLocalidadeRedirecionada(cod_empresa, city_name, localidades_redirecionada): cod_localidade_redirecionada = 0 if len(localidades_redirecionada) > 0: for row in localidades_redirecionada: if row[1] == city_name: cod_localidade_redirecionada = row[0] break if cod_localidade_redirecionada == 0: con = AbrirConexao(cod_empresa) sql = "select max(cod_localidade) cod_localidade, nommun from (select lm.cod_localidade, nommun from localidade_mapeamento lm, municipio mu where mu.codmun = lm.cod_municipio_ibge and mu.nommun = :city_name " sql = sql + " union all " sql = sql + "select lm.cod_localidade, mu.nommun from municipio_sem_localidade lm, municipio mu where mu.codmun = lm.cod_municipio_ibge and mu.nommun = :city_name) " sql = sql + " group by nommun " con.cursor.execute(sql, city_name=city_name) res = con.cursor.fetchall() if len(res) > 0: localidades_redirecionada.append(res[0]) cod_localidade_redirecionada = res[0][0] return cod_localidade_redirecionada, localidades_redirecionada
def listarOS(cod_empresa, mesExecucao): con = AbrirConexao(cod_empresa) con.cursor.execute( "select ao.num_os, ao.cod_localidade, ao.num_coordenada_latitude, ao.num_coordenada_longitude, mu.sgluf, mu.nommun, ' ' as cod_localidade_anterior from atendimento_os ao, localidade_mapeamento lm, municipio mu where lm.cod_localidade = ao.cod_localidade and mu.codmun = lm.cod_municipio_ibge and ao.num_coordenada_latitude != 0 and ao.ind_os_validada = 'N' and ao.mes_ano_extracao = " + mesExecucao) res = con.cursor.fetchall() return res
def sizing(cod_estudo, cod_modulo, cod_empresa): print('Lendo dados de entrada para modulo tático...', flush=True) data = Data('tatic') try: data.read(cod_modulo, cod_estudo, cod_empresa) # leitura dos dados try: print('Executando módulo de dimensionamento...', end='', flush=True) sched = Scheduling(data, cod_modulo, cod_estudo) status, msg_status, trash = sched.run() except: msg_status = 'Erro ao executar o módulo tático' status = 4 except Exception as e: print(e) msg_status = 'Erro na leitura dos dados' status = 4 print('\nEscrevendo resultados...', flush=True) conexao_oracle=AbrirConexao(cod_empresa) try: if isinstance(status,int) and status == 3: status_output = sched.status_output status_output.loc[0, 'IND_SITUACAO_PROCESSAMENTO'] = status status_output.loc[0, 'DSC_MENSAGEM_SITUACAO_PRCSM'] = msg_status elif isinstance(status,int) and status == 4: date = datetime.now() date = date.strftime('%y/%m/%d %H:%M:%S') status_output = pd.DataFrame(columns=['IND_SITUACAO_PROCESSAMENTO','DSC_MENSAGEM_SITUACAO_PRCSM','DTH_INCLUSAO_RETORNO', 'CODIGO_DO_ESTUDO']) status_output.loc[0] = [3, msg_status, date, int(cod_estudo)] else: msg_status = 'Processado' status_output = sched.status_output print('Escrevendo SAIDA_TATICO_ESCALAS', flush=True) menu_insert(conexao_oracle,sched.elect_by_sched,'at09') print('Escrevendo SAIDA_TATICO_GERAL', flush=True) menu_insert(conexao_oracle,sched.gen_output,'at10') print('Escrevendo SAIDA_TATICO_POR_GARAGEM', flush=True) menu_insert(conexao_oracle,sched.base_output,'at11') print('Escrevendo RETORNO_GRAFICO_TATICO', flush=True) menu_insert(conexao_oracle,sched.plots_output,'at17') except Exception as erro: print(erro) msg_status = 'Erro na escrita do resultados' date = datetime.now() date = date.strftime('%y/%m/%d %H:%M:%S') status_output = pd.DataFrame(columns=['IND_SITUACAO_PROCESSAMENTO','DSC_MENSAGEM_SITUACAO_PRCSM','DTH_INCLUSAO_RETORNO', 'CODIGO_DO_ESTUDO']) status_output.loc[0] = [3, msg_status, date, int(cod_estudo)] finally: print('Escrevendo PARAMETRO_CONTROLE_PRCSM_ETUDO', flush=True) menu_insert(conexao_oracle,status_output,'at15') conexao_oracle.con.close() print(msg_status) print('\nDone!')
def atualizarOsValidas(cod_empresa, mesExecucao): con = AbrirConexao(cod_empresa) sqlUpdate = "BEGIN " sqlUpdate = sqlUpdate + " UPDATE atendimento_os SET ind_os_validada = 'S', COD_LOCALIDADE_VALIDADA = COD_LOCALIDADE where mes_ano_extracao = " + mesExecucao + " and ind_os_validada NOT IN ('E', 'S'); " sqlUpdate = sqlUpdate + " END;" con.cursor.execute(sqlUpdate) con.con.commit() return
def atualizarMensagemProcesso(cod_empresa, mesExecucao, cod_processo, msgmProcessamento): con = AbrirConexao(cod_empresa) sqlUpdate = "UPDATE controle_preparacao_dado_imptd cppp SET cppp.dsc_mensagem = '" + normalize_string( msgmProcessamento ) + "' WHERE cppp.mes_ano_referencia = " + mesExecucao + " AND cppp.idt_parametro_prprc_dado_imptd = " + str( cod_processo) con.cursor.execute(sqlUpdate) con.con.commit() return
def scheduling(cod_estudo, cod_modulo, cod_empresa): print('Lendo dados de entrada para módulo operacional...', flush=True) data = Data('operational') try: data.read(cod_modulo, cod_estudo, cod_empresa) # leitura dos dados try: print('Executando módulo de definição de escalas...', end='', flush=True) sched = Scheduling(data, cod_modulo, cod_estudo) status, msg_status, trash = sched.run(sizing=False) except: msg_status = 'Erro ao executar o modulo operacional' status = 4 except: msg_status = 'Erro na leitura dos dados' status = 4 print('\nEscrevendo resultados...', flush=True) conexao_oracle=AbrirConexao(cod_empresa) try: if status == 3: status_output = sched.status_output status_output.loc[0, 'IND_SITUACAO_PROCESSAMENTO'] = status status_output.loc[0, 'DSC_MENSAGEM_SITUACAO_PRCSM'] = msg_status elif status == 4: date = datetime.now() date = date.strftime('%y/%m/%d %H:%M:%S') status_output = pd.DataFrame(columns=['IND_SITUACAO_PROCESSAMENTO','DSC_MENSAGEM_SITUACAO_PRCSM','DTH_INCLUSAO_RETORNO', 'CODIGO_DO_ESTUDO']) status_output.loc[0] = [3, msg_status, date, int(cod_estudo)] else: msg_status = 'Processado' status_output = sched.status_output print('Escrevendo SAIDA_OPERACIONAL_ESCALAS', flush=True) menu_insert(conexao_oracle,sched.elect_by_sched,'at12') print('Escrevendo RETORNO_GRAFICO_OPERACIONAL', flush=True) menu_insert(conexao_oracle,sched.plots_output,'at18') sched.plots_output.to_csv('RETORNO_GRAFICO_OPERACIONAL.csv',sep=';') # Remover - RL except: msg_status = 'Erro na escrita do resultados' date = datetime.now() date = date.strftime('%y/%m/%d %H:%M:%S') status_output = pd.DataFrame(columns=['IND_SITUACAO_PROCESSAMENTO','DSC_MENSAGEM_SITUACAO_PRCSM','DTH_INCLUSAO_RETORNO', 'CODIGO_DO_ESTUDO']) status_output.loc[0] = [3, msg_status, date, int(cod_estudo)] finally: print('Escrevendo PARAMETRO_CONTROLE_PRCSM_ETUDO', flush=True) menu_insert(conexao_oracle,status_output,'at16') conexao_oracle.con.close() print(msg_status) print('\nDone!')
def verificarProcessamento(cod_empresa, mesExecucao, cod_processo): permiteProcessamento = True con = AbrirConexao(cod_empresa) con.cursor.execute( 'SELECT cpp.idt_parametro_prprc_dado_imptd, cpp.ind_situacao_processamento FROM controle_preparacao_dado_imptd cpp WHERE cpp.mes_ano_referencia = ' + mesExecucao + ' and cpp.idt_parametro_prprc_dado_imptd = ' + str(cod_processo) + ' ORDER BY cpp.idt_parametro_prprc_dado_imptd') res = con.cursor.fetchall() for row in res: if row[1] == 1 or row[1] == 2: permiteProcessamento = False return permiteProcessamento
def finalizarProcessamento(cod_empresa, mesExecucao, cod_processo, statusProcessamento, msgmProcessamento, osCorrestas, osRedirecionadas, osForaLocalidade): con = AbrirConexao(cod_empresa) sqlUpdate = "UPDATE controle_preparacao_dado_imptd cppp SET cppp.ind_situacao_processamento = '" + str( statusProcessamento ) + "', cppp.dth_processamento = SYSDATE, cppp.dsc_mensagem = '" + normalize_string( msgmProcessamento ) + "' WHERE cppp.mes_ano_referencia = " + mesExecucao + " AND cppp.idt_parametro_prprc_dado_imptd = " + str( cod_processo) con.cursor.execute(sqlUpdate) con.con.commit() objetoRetorno = { "retornoProcessamento": statusProcessamento, "mensagemProcessamento": msgmProcessamento, "osCorrestas": len(osCorrestas), "osRedirecionadas": len(osRedirecionadas), "osForaLocalidade": len(osForaLocalidade) } return objetoRetorno
def atualizarOsForaLocalidade(cod_empresa, oss_list): con = AbrirConexao(cod_empresa) blocoCommit = 0 sqlUpdate = "BEGIN " for row in oss_list: blocoCommit = blocoCommit + 1 sqlUpdate = sqlUpdate + " UPDATE atendimento_os SET ind_os_validada = 'E', COD_LOCALIDADE_VALIDADA = COD_LOCALIDADE where num_os = " + row[ 0] + "; " if blocoCommit > 1000: sqlUpdate = sqlUpdate + " END;" con.cursor.execute(sqlUpdate) con.con.commit() sqlUpdate = "BEGIN " blocoCommit = 0 if sqlUpdate != "BEGIN ": sqlUpdate = sqlUpdate + " END;" con.cursor.execute(sqlUpdate) con.con.commit() return
def atualizarClientesOsForaLocalidade(cod_empresa, oss_list, mesExecucao): con = AbrirConexao(cod_empresa) blocoCommit = 0 sqlUpdate = "BEGIN " for row in oss_list: blocoCommit = blocoCommit + 1 sqlUpdate = sqlUpdate + " UPDATE cliente_afetado SET ind_cliente_validado = 'E', COD_LOCALIDADE_VALIDADA = COD_LOCALIDADE where cod_uc = " + row[ 0] + " and mes_ano_extracao = " + mesExecucao + "; " if blocoCommit > 1000: sqlUpdate = sqlUpdate + " END;" con.cursor.execute(sqlUpdate) con.con.commit() sqlUpdate = "BEGIN " blocoCommit = 0 if sqlUpdate != "BEGIN ": sqlUpdate = sqlUpdate + " END;" con.cursor.execute(sqlUpdate) con.con.commit() return
def iniciarProcessamento(cod_empresa, mesExecucao, cod_processo, sgl_empregado): con = AbrirConexao(cod_empresa) con.cursor.execute( 'SELECT cpp.idt_parametro_prprc_dado_imptd, cpp.ind_situacao_processamento FROM controle_preparacao_dado_imptd cpp WHERE cpp.mes_ano_referencia = ' + mesExecucao + ' and cpp.idt_parametro_prprc_dado_imptd = ' + str(cod_processo) + ' ORDER BY cpp.idt_parametro_prprc_dado_imptd') res = con.cursor.fetchall() if len(res) > 0: con.cursor.execute( "UPDATE controle_preparacao_dado_imptd cppp SET cppp.ind_situacao_processamento = 1, cppp.dth_processamento = SYSDATE, cppp.sgl_empregado_processamento = '" + sgl_empregado + "', cppp.dsc_mensagem = NULL WHERE cppp.mes_ano_referencia = " + mesExecucao + " AND cppp.idt_parametro_prprc_dado_imptd = " + cod_processo) con.con.commit() else: insert = "INSERT INTO controle_preparacao_dado_imptd (idt_parametro_prprc_dado_imptd, mes_ano_referencia, ind_situacao_processamento, dth_processamento, sgl_empregado_processamento) VALUES (" + cod_processo + ", " + mesExecucao + ", 1, SYSDATE, '" + sgl_empregado + "')" con.cursor.execute(insert) con.con.commit() return
def read(self,cod_modulo,cod_estudo,cod_empresa): self.cod_modulo = cod_modulo self.cod_estudo = cod_estudo queries = ReceberESeparar('query_list/select/queries.txt') conexao_oracle = AbrirConexao(cod_empresa) # abre conexao com banco de dados if self.modulo =='forecast': # sql="update controle_processamento_estudo set DSC_MENSAGEM_SITUACAO_PRCSM='Lendo dados para simulacao' where IDT_CONTROLE_PRCSM_ETUDO=" +str(cod_estudo) conexao_oracle.cursor.execute(sql) conexao_oracle.con.commit() print("\nLendo dados para simulação da previsão...\n Código do estudo: ",cod_estudo) # Status - RL #self.os_input_forecast=pd.read_csv('input/OS_ENTRADA_SIDEC.csv', sep=";", encoding='latin-1') #self.services = pd.read_csv('input/SERVICOS_PREVISAO.csv', sep=";", index_col='IDT_BLOCO_SERVICO', encoding='latin-1') #CS01 OK os_input_forecast=menu_select(conexao_oracle, "CS01", cod_estudo)[0] print("\ndata.py, linha 32, CS01: ",os_input_forecast) # Remover - RL print("\ndata.py, linha 33, CS01, dtype: ",os_input_forecast.dtypes) print("\ndata.py, linha 34, CS01, columns: ",os_input_forecast.columns) self.os_input_forecast=os_input_forecast self.os_input_forecast.to_csv('CS01.csv',sep=';') # Comentar - RL #CS02 OK services_raw = menu_select(conexao_oracle,'CS02',cod_estudo) # obtem tabela bruta do banco de dados # services_raw = services_raw[0].drop('COD_SERVICO', 1) # services_raw = services_raw.drop('COD_PERFIL_EQUIPE', 1) # services_raw = services_raw.drop_duplicates() # services_raw = services_raw.rename(columns={"IDT_BLOCO_SERVICO": "COD_SERVICO", "IDT_DEPARTAMENTO_EQUIPE": "DEPARTAMENTO", "IND_TIPO_OCORRENCIA" : "TIPO_OCORRENCIA", # "IND_TMD_EXCECAO" : "TMD_INTERNO_EXCECAO", "VLR_TME_BLOCO_SERVICO" : "TME", "VLR_TMP_BLOCO_SERVICO" : "TMP" }) # services_raw = services_raw.set_index('COD_SERVICO') self.services = services_raw[0] self.services = self.services.set_index('IDT_BLOCO_SERVICO') print("\ndata.py, linha 46, cs02: ",self.services) # Remover - RL print("\ndata.py, linha 47, cs02, dtype: ",self.services.dtypes) print("\ndata.py, linha 48, cs02, columns: ",self.services.columns) self.services.to_csv('CS02.csv',sep=';') # Serviços.csv Comentar - RL #CS03 OK locs_bases_forecast=menu_select(conexao_oracle, "CS03", cod_estudo)[0] locs_bases_forecast=locs_bases_forecast.set_index('COD_LOCALIDADE') self.locs_bases_forecast=locs_bases_forecast #self.locs_bases_forecast.to_csv('bases.csv',sep=';') elif self.modulo =='strategic': sql="update controle_processamento_estudo set DSC_MENSAGEM_SITUACAO_PRCSM='Lendo dados para simulacao' where IDT_CONTROLE_PRCSM_ETUDO=" +str(cod_estudo) conexao_oracle.cursor.execute(sql) conexao_oracle.con.commit() #self.os_volume = pd.read_csv('input/PREVISAO_DEMANDA_VOLUME.csv', sep=";", encoding='latin-1') #self.services = pd.read_csv('input/SERVICOS.csv', sep=";", index_col='COD_SERVICO', encoding='latin-1') #self.locs_bases = pd.read_csv('input/LOCALIDADES.csv', sep=";", index_col='COD_LOCALIDADE', encoding='latin-1') #self.bases_profiles = pd.read_csv('input/PERFIL_BASE.csv', sep=";", encoding='latin-1') #self.electrician_profiles = pd.read_csv('input/PERFIL_ELETRICISTA.csv', sep=";") #self.crew_profiles = pd.read_csv('input/PERFIL_EQUIPE.csv', sep=";", index_col='COD_PERFIL_EQUIPE', encoding='latin-1') #self.crew_formation = pd.read_csv('input/EQUIPE_FORMACAO.csv', sep=";", encoding='latin-1') #self.crew_service = pd.read_csv('input/EQUIPE_SERVICO.csv', sep=";", encoding='latin-1') #self.electrician_per_loc = pd.read_csv('input/ELETRICISTAS_POR_LOCALIDADE.csv', sep=";", index_col='COD_LOCALIDADE', encoding='latin-1') #self.loc_distances = pd.read_csv('input/DISTANCIA_ENTRE_LOCALIDADES.csv', sep=";", index_col='COD_LOCALIDADE') #self.loc_times = pd.read_csv('input/TEMPO_ENTRE_LOCALIDADES.csv', sep=";", index_col='COD_LOCALIDADE') #self.electricians_costs = pd.read_csv('input/CUSTO_ELETRICISTA.csv', sep=";", index_col='COD_PERFIL_ELETRICISTA', encoding='latin-1') #self.os_hour = pd.read_csv('input/PREVISAO_DEMANDA_POR_HORA.csv', sep=";", index_col='COD_LOCALIDADE', encoding='latin-1') #self.schedule = pd.read_csv('input/ESCALAS.csv', sep=";", encoding='latin-1') #self.vehicles = pd.read_csv('input/PERFIL_VEICULO.csv', sep=";", index_col='COD_PERFIL_VEICULO', encoding='latin-1') #self.misc_input = pd.read_csv('input/OUTRAS_ENTRADAS.csv', sep=";", encoding='latin-1', index_col='PARAMETRO') #self.depot = pd.read_csv('input/ATENDIMENTO_BASE_LOCALIDADE.csv', sep=';') #self.clients = pd.read_csv('input/CLIENTES.csv', sep=";", encoding='latin-1') #self.os_emergency = pd.read_csv('input/PREVISAO_DEMANDA_EMERGENCIAL.csv', sep=";", encoding='latin-1') #self.veicle_km_costs = pd.read_csv('input/CUSTO_KM.csv', sep=";", index_col='COD_PERFIL_VEICULO', encoding='latin-1') #self.hotel_cost = pd.read_csv('input/CUSTO_HOTEL.csv', sep=";", encoding='latin-1')['DIARIA'].iat[0] #self.bases_costs = pd.read_csv('input/CUSTO_BASE.csv', index_col='COD_PERFIL_BASE', sep=";", encoding='latin-1') #CS02 OK services_raw = menu_select(conexao_oracle,'CS02',cod_estudo) # obtem tabela bruta do banco de dados services_raw = services_raw[0].drop('COD_SERVICO', 1) services_raw = services_raw.drop('COD_PERFIL_EQUIPE', 1) services_raw = services_raw.drop_duplicates() services_raw = services_raw.rename(columns={"IDT_BLOCO_SERVICO": "COD_SERVICO", "IDT_DEPARTAMENTO_EQUIPE": "DEPARTAMENTO", "IND_TIPO_OCORRENCIA" : "TIPO_OCORRENCIA", "IND_TMD_EXCECAO" : "TMD_INTERNO_EXCECAO", "VLR_TME_BLOCO_SERVICO" : "TME", "VLR_TMP_BLOCO_SERVICO" : "TMP" }) services_raw = services_raw.set_index('COD_SERVICO') self.services = services_raw #print("\nData.py, linha 89, self.services TME antes da conversão: \n",self.services['TME']) # Remover - RL #print("\nself.services TMP antes da conversão: \n",self.services['TMP']) # Remover - RL self.services['TME'] = self.services['TME']/60 self.services['TMP'] = self.services['TMP']/60 #print("\nData.py, linha 93, self.services TME após conversão: \n",self.services['TME']) # Remover - RL #print("\nself.services TMP após conversão: \n",self.services['TMP']) # Remover - RL self.services.to_csv('SERVICOS.csv',sep=';') #CS15 OK locs_bases=menu_select(conexao_oracle, "CS15", cod_estudo)[0] locs_bases=locs_bases.rename(columns={'VLR_TMD_INTERNO':'TEMPO_MEDIO_ENTRE_OS','VLR_TMD_EXCECAO':'TEMPO_MEDIO_ENTRE_OS_EXCESSAO','IND_BASE_FIXA':'BASE_FIXA'}) self.locs_bases=locs_bases.set_index('COD_LOCALIDADE') self.locs_bases.to_csv('LOCALIDADES.csv',sep=';') #CS32 OK os_volume_raw=menu_select(conexao_oracle, "CS32", cod_estudo)[0] os_volume_cols = ['COD_LOCALIDADE','ANO','MES'] for s in self.services.index.values: os_volume_cols.append('SERVICO '+str(s)) self.os_volume = pd.DataFrame(columns=os_volume_cols) self.os_volume = self.os_volume.set_index(['COD_LOCALIDADE', 'ANO', 'MES']) for index, row in os_volume_raw.iterrows(): loc, year = row['COD_LOCALIDADE_VIRTUAL'], row['ANO_PREVISAO_DEMANDA'] month, serv = row['MES_PREVISAO_DEMANDA'], row['IDT_BLOCO_SERVICO'] vol = row['QTD_OS_DEMANDA'] if self.os_volume.index.isin([(loc, year, month)]).any(): self.os_volume.loc[(loc, year, month), 'SERVICO '+str(serv)] = vol else: new_row = [0 for s in self.services.index.values] for (i,s) in enumerate(self.services.index.values): if s == serv: new_row[i] = vol self.os_volume.loc[(loc, year, month)] = new_row self.os_volume = self.os_volume.reset_index() self.os_volume.to_csv('PREVISAO_DEMANDA_VOLUME.csv',sep=';') #CS16 OK bases_profiles=menu_select(conexao_oracle, "CS16", cod_estudo)[0] self.bases_profiles=bases_profiles self.bases_profiles.to_csv('PERFIL_BASE.csv',sep=';') # CS07 OK electrician_profiles_raw= menu_select(conexao_oracle, "CS07", cod_estudo)[0] electrician_profiles_raw=electrician_profiles_raw.rename(columns={'DSC_PERFIL':'DESC_PERFIL_ELETRICISTA','VLR_CUSTO_CONTRATACAO':'CUSTO_CONTRATACAO','VLR_CUSTO_DEMISSAO':'CUSTO_DEMISSAO','VLR_CUSTO_TRANSFERENCIA':'CUSTO_TRANSFERENCIA', 'VLR_CUSTO_MANUTENCAO':'CUSTO_MANUTENCAO','VLR_CUSTO_HH':'CUSTO_HH','VLR_CUSTO_HH_NOTURNO':'CUSTO_HH_NOTURNO','VLR_CUSTO_HH_FIM_SEMANA':'CUSTO_HH_FDS','VLR_CUSTO_HH_FIM_SEMANA_NOTUR':'CUSTO_HH_FDS_NOTURNO'}) self.electrician_profiles=electrician_profiles_raw[['COD_PERFIL_ELETRICISTA', 'DESC_PERFIL_ELETRICISTA']] self.electrician_profiles.to_csv('PERFIL_ELETRICISTA.csv',sep=';') self.electricians_costs=electrician_profiles_raw[['COD_PERFIL_ELETRICISTA','CUSTO_CONTRATACAO','CUSTO_DEMISSAO', 'CUSTO_TRANSFERENCIA', 'CUSTO_MANUTENCAO','CUSTO_HH','CUSTO_HH_NOTURNO','CUSTO_HH_FDS','CUSTO_HH_FDS_NOTURNO']] self.electricians_costs = self.electricians_costs.set_index('COD_PERFIL_ELETRICISTA') self.electricians_costs.to_csv('CUSTO_ELETRICISTA.csv',sep=';') # CS17 OK crew_profiles=menu_select(conexao_oracle, "CS17", cod_estudo)[0] crew_profiles=crew_profiles.rename(columns={'QTD_HH_DIARIO':'HH_TOTAL','VLR_MIP':'MIP','QTD_DIA_TRABALHADO_ANO':'QTD_DIAS_TRABALHO_ANO'}) self.crew_profiles=crew_profiles self.crew_profiles = self.crew_profiles.set_index('COD_PERFIL_EQUIPE') self.crew_profiles.to_csv('PERFIL_EQUIPE.csv',sep=';') # CS12 OK crew_formation=menu_select(conexao_oracle, "CS12", cod_estudo)[0] #crew_formation=crew_formation.rename(columns={'SUM(PPEBE.QTD_ELETRICISTA)':'QTD_ELETRICISTAS'}) crew_formation=crew_formation.rename(columns={'QTD_ELETRICISTA':'QTD_ELETRICISTAS'}) self.crew_formation=crew_formation self.crew_formation.to_csv('EQUIPE_FORMACAO.csv',sep=';') # CS13 OK crew_service_strategic=menu_select(conexao_oracle, "CS13", cod_estudo)[0] self.crew_service =crew_service_strategic.rename(columns={'IDT_BLOCO_SERVICO':'COD_SERVICO'}) self.crew_service.to_csv('EQUIPE_SERVICO.csv',sep=';') # CS11 OK electrician_per_loc=menu_select(conexao_oracle, "CS11", cod_estudo)[0] electrician_per_loc=electrician_per_loc.rename(columns={'COD_LOCALIDADE_VIRTUAL':'COD_LOCALIDADE','SUM(PPEBE.QTD_ELETRICISTA)':'QTD_ELETRICISTAS'}) self.electrician_per_loc=electrician_per_loc.set_index('COD_LOCALIDADE') self.electrician_per_loc.to_csv('ELETRICISTAS_POR_LOCALIDADE.csv',sep=';') # CS10 OK loc_distances_raw=menu_select(conexao_oracle, "CS10", cod_estudo)[0] L_ = sorted(self.locs_bases.index.values) drows = [] for i in L_: drow = [i] for j in L_: vlr = loc_distances_raw.loc[(loc_distances_raw['COD_LOCALIDADE_ORIGEM']==i) & (loc_distances_raw['COD_LOCALIDADE_DESTINO']==j), 'VLR_DISTANCIA'].values if not vlr or math.isnan(vlr): vlr = loc_distances_raw.loc[(loc_distances_raw['COD_LOCALIDADE_ORIGEM']==j) & (loc_distances_raw['COD_LOCALIDADE_DESTINO']==i), 'VLR_DISTANCIA'].values if not vlr or math.isnan(vlr): drow.append(0.0) else: drow.append(float(vlr)) else: drow.append(float(vlr)) drows.append(drow) dist_cols = ['COD_LOCALIDADE'] for l in L_: dist_cols.append(str(l)) self.loc_distances = pd.DataFrame(drows, columns=dist_cols) self.loc_distances = self.loc_distances.set_index('COD_LOCALIDADE') self.loc_distances.to_csv('DISTANCIA_ENTRE_LOCALIDADES.csv',sep=';') # CS18 OK loc_times_raw=menu_select(conexao_oracle, "CS18", cod_estudo)[0] drows = [] for i in L_: drow = [i] for j in L_: vlr = loc_times_raw.loc[(loc_times_raw['COD_LOCALIDADE_ORIGEM']==i) & (loc_times_raw['COD_LOCALIDADE_DESTINO']==j), 'TEM_CALCULADO'].values if not vlr or math.isnan(vlr): vlr = loc_times_raw.loc[(loc_times_raw['COD_LOCALIDADE_ORIGEM']==j) & (loc_times_raw['COD_LOCALIDADE_DESTINO']==i), 'TEM_CALCULADO'].values if not vlr or math.isnan(vlr): drow.append(0.0) else: drow.append(float(vlr)) else: drow.append(float(vlr)) drows.append(drow) dist_cols = ['COD_LOCALIDADE'] for l in L_: dist_cols.append(str(l)) self.loc_times = pd.DataFrame(drows, columns=dist_cols) self.loc_times = self.loc_times.set_index('COD_LOCALIDADE') self.loc_times.to_csv('TEMPO_ENTRE_LOCALIDADES.csv',sep=';') # CS04 OK misc_input_raw=menu_select(conexao_oracle, "CS04", cod_estudo)[0] misc_input_raw=misc_input_raw.rename(columns={'PCT_ATENDIMENTO_OS':'PERCENTUAL_BACKLOG',"TO_CHAR(DTH_INICIO_HORARIO_COMERCIAL,'HH24:MI:SS')":'INICIO_HORA_COMERCIAL', "TO_CHAR(DTH_FIM_HORARIO_COMERCIAL,'HH24:MI:SS')":'FIM_HORA_COMERCIAL','IND_MES_BASE':'MES_DEMANDA'}) self.misc_input = pd.DataFrame(columns=['PARAMETRO', 'VALOR']) self.misc_input.loc[0] = ['PERCENTUAL_BACKLOG', misc_input_raw.iloc[0]['PERCENTUAL_BACKLOG']] inic_hc = int(misc_input_raw.iloc[0]['INICIO_HORA_COMERCIAL'].split(':')[0]) fim_hc = int(misc_input_raw.iloc[0]['FIM_HORA_COMERCIAL'].split(':')[0])-1 print("\nData.py, linha 226, Início hora comercial: ",inic_hc," / fim hora comercial: ",fim_hc) # Remover - RL self.misc_input.loc[2] = ['INICIO_HORA_COMERCIAL', inic_hc] self.misc_input.loc[3] = ['FIM_HORA_COMERCIAL', fim_hc] self.misc_input.loc[4] = ['MES_DEMANDA', misc_input_raw.iloc[0]['MES_DEMANDA']] if misc_input_raw.iloc[0]['IND_TIPO_EXECUCAO'] == 2: self.misc_input.loc[5] = ['MONO_OBJ_EXEC', 'S'] self.misc_input.loc[6] = ['MONO_OBJ_EXEC_BASES_LIVRE', 'S'] self.misc_input.loc[7] = ['MONO_OBJ_VARIACAO_BASES', 0] self.misc_input.loc[8]= ['EXEC_COMPLETA_BASES',1] elif misc_input_raw.iloc[0]['IND_TIPO_EXECUCAO'] == 3: self.misc_input.loc[5] = ['MONO_OBJ_EXEC', 'S'] self.misc_input.loc[6] = ['MONO_OBJ_EXEC_BASES_LIVRE', 'N'] delta = misc_input_raw.iloc[0]['QTD_BASE_ALOCADA'] if delta == 0 or math.isnan(delta): delta = -misc_input_raw.iloc[0]['QTD_BASE_DESLIGADA'] self.misc_input.loc[7] = ['MONO_OBJ_VARIACAO_BASES', delta] self.misc_input.loc[8]= ['EXEC_COMPLETA_BASES',1] else: # multiobj self.misc_input.loc[5] = ['MONO_OBJ_EXEC', 'N'] self.misc_input.loc[6] = ['MONO_OBJ_EXEC_BASES_LIVRE', 'N'] self.misc_input.loc[7] = ['MONO_OBJ_VARIACAO_BASES', 0] self.misc_input.loc[8]=['EXEC_COMPLETA_BASES',1] # self.misc_input.loc[8] = ['CARREGA_PRECALC', misc_input_raw.iloc[0]['XXXXX']] self.misc_input = self.misc_input.set_index('PARAMETRO') self.misc_input.to_csv('OUTRAS_ENTRADAS.csv',sep=';') # CS14 OK schedule_raw=menu_select(conexao_oracle, "CS14", cod_estudo)[0] schedule_raw=schedule_raw.rename(columns={'ESCALA':'COD_ESCALA','DSC_DIA_SEMANA':'DIA_SEMANA','H0':'0','H1':'1','H2':'2','H3':'3', 'H4':'4','H5':'5','H6':'6','H7':'7','H8':'8','H9':'9','H10':'10','H11':'11','H12':'12','H13':'13','H14':'14','H15':'15','H16':'16','H17':'17', 'H18':'18','H19':'19','H20':'20','H21':'21','H22':'22','H23':'23'}) self.schedule=schedule_raw #### Solicitar alteracoes abaixo na base para evitar substituicao self.schedule = self.schedule.replace('N', '-') self.schedule = self.schedule.replace('S', 'X') self.schedule = self.schedule.replace('I', 'P') self.schedule = self.schedule.replace('E', 'T') self.schedule = self.schedule.replace('SEGUNDA', 'SEG') self.schedule = self.schedule.replace('TERÇA', 'TER') self.schedule = self.schedule.replace('QUARTA', 'QUA') self.schedule = self.schedule.replace('QUINTA', 'QUI') self.schedule = self.schedule.replace('SEXTA', 'SEX') self.schedule = self.schedule.replace('SABADO', 'SAB') self.schedule = self.schedule.replace('DOMINGO', 'DOM') self.schedule.to_csv('ESCALAS.csv',sep=';') # CS31 OK os_hour_raw=menu_select(conexao_oracle, "CS31", cod_estudo)[0] os_hour_raw=os_hour_raw.rename(columns={'COD_LOCALIDADE_VIRTUAL':'COD_LOCALIDADE', 'ANO_PREVISAO_DEMANDA':'ANO','MES_PREVISAO_DEMANDA':'MES' ,'DIA_PREVISAO_DEMANDA':'DIA', 'IND_DIA_SEMANA':'DIA_DA_SEMANA', 'HOR_PREVISAO_DEMANDA':'HORA'}) self.os_hour = os_hour_raw.set_index('COD_LOCALIDADE') self.os_hour.to_csv('PREVISAO_DEMANDA_POR_HORA.csv',sep=';') # CS08 OK vehicles_raw=menu_select(conexao_oracle, "CS08", cod_estudo)[0] vehicles_raw=vehicles_raw.rename(columns={'VLR_CUSTO_KM':'CUSTO_KM'}) self.vehicles=vehicles_raw[['COD_PERFIL_VEICULO','DSC_TIPO_VEICULO']] self.vehicles = self.vehicles.set_index('COD_PERFIL_VEICULO') self.vehicles.to_csv('PERFIL_VEICULO.csv',sep=';', encoding='latin-1') self.veicle_km_costs = vehicles_raw[['COD_PERFIL_VEICULO','CUSTO_KM']] self.veicle_km_costs = self.veicle_km_costs.set_index('COD_PERFIL_VEICULO') self.veicle_km_costs.to_csv('CUSTO_KM.csv',sep=';') # CS35 Ok depot_raw=menu_select(conexao_oracle, "CS35", cod_estudo)[0] self.depot=depot_raw.rename(columns={'NUM_CENARIO':'ID_SOLUCAO','IDT_PERFIL_BASE_OPERACIONAL':'COD_PERFIL_BASE'}) self.depot = self.depot[['COD_LOCALIDADE_CLIENTE', 'COD_LOCALIDADE_BASE']] self.depot.to_csv('ATENDIMENTO_BASE_LOCALIDADE.csv',sep=';') # CS05 OK clients_raw=menu_select(conexao_oracle, "CS05", cod_estudo)[0] clients_raw=clients_raw.rename(columns={"NUM_COORDENADA_LATITUDE":"COORD_X",'NUM_COORDENADA_LONGITUDE':'COORD_Y','COD_LOCALIDADE_VIRTUAL':'COD_LOCALIDADE', 'COD_GRUPO_FORNECIMENTO':'GRUPO_FORNECIMENTO','QTD_DMIC':'LIMITE_DMIC'}) self.clients=clients_raw self.clients.to_csv('CLIENTES.csv',sep=';') #self.clients = pd.read_csv('CLIENTES.csv', sep=";", encoding='latin-1') # CS30 OK os_emergency_raw=menu_select(conexao_oracle, "CS30", cod_estudo)[0] self.os_emergency=os_emergency_raw.rename(columns={'NUM_OS_VIRTUAL_PREVISAO':'NUM_OS','COD_LOCALIDADE_VIRTUAL':'COD_LOCALIDADE','IDT_BLOCO_SERVICO':'COD_SERVICO','DSC_CONJUNTO_UC_PREVISAO':'COD_UC'}) self.os_emergency.to_csv('PREVISAO_DEMANDA_EMERGENCIAL.csv',sep=';') #CS09 OK hotel_cost_raw=menu_select(conexao_oracle, "CS09", cod_estudo)[0] hotel_cost_raw.to_csv('HOTEL.csv',sep=';') diaria = 0.0 for index, row in hotel_cost_raw.iterrows(): if hotel_cost_raw.loc[index, 'DSC_TIPO_CUSTO_DIVERSO'] == 'HOSPEDAGEM': diaria = hotel_cost_raw.loc[index, 'VLR_CUSTO_DIVERSO'] break self.hotel_cost=diaria #CS06 OK bases_costs=menu_select(conexao_oracle, "CS06", cod_estudo)[0] bases_costs=bases_costs.rename(columns={'IDT_PERFIL_BASE_OPERACIONAL':'COD_PERFIL_BASE','VLR_CUSTO_MANUTENCAO':'CUSTO_MANUTENCAO','VLR_CUSTO_INSTALACAO':'CUSTO_INSTALACAO','VLR_CUSTO_FECHAMENTO':'CUSTO_FECHAMENTO'}) self.bases_costs=bases_costs.set_index('COD_PERFIL_BASE') self.bases_costs = self.bases_costs.drop(columns=['IND_TIPO_PERFIL_BASE_OPERL']) self.bases_costs.to_csv('CUSTO_BASE.csv',sep=';') elif self.modulo =='tatic' or self.modulo == 'operational': sql="update controle_processamento_estudo set DSC_MENSAGEM_SITUACAO_PRCSM='Lendo dados para simulacao' where IDT_CONTROLE_PRCSM_ETUDO=" +str(cod_estudo) conexao_oracle.cursor.execute(sql) conexao_oracle.con.commit() '''self.os_volume = pd.read_csv('input/PREVISAO_DEMANDA_VOLUME.csv', sep=";", encoding='latin-1') self.services = pd.read_csv('input/SERVICOS.csv', sep=";", index_col='COD_SERVICO', encoding='latin-1') self.locs_bases = pd.read_csv('input/LOCALIDADES.csv', sep=";", index_col='COD_LOCALIDADE', encoding='latin-1') self.electrician_profiles = pd.read_csv('input/PERFIL_ELETRICISTA.csv', sep=";") self.crew_profiles = pd.read_csv('input/PERFIL_EQUIPE.csv', sep=";", index_col='COD_PERFIL_EQUIPE', encoding='latin-1') self.crew_formation = pd.read_csv('input/EQUIPE_FORMACAO.csv', sep=";", encoding='latin-1') self.crew_service = pd.read_csv('input/EQUIPE_SERVICO.csv', sep=";", encoding='latin-1') self.electrician_per_loc = pd.read_csv('input/ELETRICISTAS_POR_LOCALIDADE.csv', sep=";", index_col='COD_LOCALIDADE', encoding='latin-1') self.loc_distances = pd.read_csv('input/DISTANCIA_ENTRE_LOCALIDADES.csv', sep=";", index_col='COD_LOCALIDADE') self.loc_times = pd.read_csv('input/TEMPO_ENTRE_LOCALIDADES.csv', sep=";", index_col='COD_LOCALIDADE') self.electricians_costs = pd.read_csv('input/CUSTO_ELETRICISTA.csv', sep=";", index_col='COD_PERFIL_ELETRICISTA', encoding='latin-1') self.os_hour = pd.read_csv('input/PREVISAO_DEMANDA_POR_HORA.csv', sep=";", index_col='COD_LOCALIDADE', encoding='latin-1') self.schedule = pd.read_csv('input/ESCALAS.csv', sep=";", encoding='latin-1') self.vehicles = pd.read_csv('input/PERFIL_VEICULO.csv', sep=";", index_col='COD_PERFIL_VEICULO', encoding='latin-1') self.misc_input = pd.read_csv('input/OUTRAS_ENTRADAS.csv', sep=";", encoding='latin-1', index_col='PARAMETRO') self.bases_profiles = pd.read_csv('PERFIL_BASE.csv', sep=";", encoding='latin-1') self.depot = pd.read_csv('ATENDIMENTO_BASE_LOCALIDADE.csv', sep=';')''' #CS02 OK services_raw = menu_select(conexao_oracle,'CS02',cod_estudo) # obtem tabela bruta do banco de dados services_raw = services_raw[0].drop('COD_SERVICO', 1) services_raw = services_raw.drop('COD_PERFIL_EQUIPE', 1) services_raw = services_raw.drop_duplicates() services_raw = services_raw.rename(columns={"IDT_BLOCO_SERVICO": "COD_SERVICO", "IDT_DEPARTAMENTO_EQUIPE": "DEPARTAMENTO", "IND_TIPO_OCORRENCIA" : "TIPO_OCORRENCIA", "IND_TMD_EXCECAO" : "TMD_INTERNO_EXCECAO", "VLR_TME_BLOCO_SERVICO" : "TME", "VLR_TMP_BLOCO_SERVICO" : "TMP" }) services_raw = services_raw.set_index('COD_SERVICO') self.services = services_raw #print("\nData.py, linha 89, self.services TME antes da conversão: \n",self.services['TME']) # Remover - RL #print("\nself.services TMP antes da conversão: \n",self.services['TMP']) # Remover - RL self.services['TME'] = self.services['TME']/60 self.services['TMP'] = self.services['TMP']/60 #print("\nData.py, linha 93, self.services TME após conversão: \n",self.services['TME']) # Remover - RL #print("\nself.services TMP após conversão: \n",self.services['TMP']) # Remover - RL self.services.to_csv('SERVICOS_TTC.csv',sep=';') #CS25 OK locs_bases=menu_select(conexao_oracle, "CS25", cod_estudo)[0] locs_bases=locs_bases.rename(columns={'VLR_TMD_INTERNO':'TEMPO_MEDIO_ENTRE_OS','VLR_TMD_EXCECAO':'TEMPO_MEDIO_ENTRE_OS_EXCESSAO','IND_BASE_FIXA':'BASE_FIXA'}) self.locs_bases=locs_bases.set_index('COD_LOCALIDADE') self.locs_bases.to_csv('LOCALIDADES_TTC.csv',sep=';') #CS32 OK os_volume_raw=menu_select(conexao_oracle, "CS32", cod_estudo)[0] os_volume_cols = ['COD_LOCALIDADE','ANO','MES'] for s in self.services.index.values: os_volume_cols.append('SERVICO '+str(s)) self.os_volume = pd.DataFrame(columns=os_volume_cols) self.os_volume = self.os_volume.set_index(['COD_LOCALIDADE', 'ANO', 'MES']) for index, row in os_volume_raw.iterrows(): loc, year = row['COD_LOCALIDADE_VIRTUAL'], row['ANO_PREVISAO_DEMANDA'] month, serv = row['MES_PREVISAO_DEMANDA'], row['IDT_BLOCO_SERVICO'] vol = row['QTD_OS_DEMANDA'] if self.os_volume.index.isin([(loc, year, month)]).any(): self.os_volume.loc[(loc, year, month), 'SERVICO '+str(serv)] = vol else: new_row = [0 for s in self.services.index.values] for (i,s) in enumerate(self.services.index.values): if s == serv: new_row[i] = vol self.os_volume.loc[(loc, year, month)] = new_row self.os_volume = self.os_volume.reset_index() self.os_volume.to_csv('PREVISAO_DEMANDA_VOLUME_TTC.csv',sep=';') # CS20 OK electrician_profiles_raw= menu_select(conexao_oracle, "CS20", cod_estudo)[0] electrician_profiles_raw=electrician_profiles_raw.rename(columns={'DSC_PERFIL':'DESC_PERFIL_ELETRICISTA','VLR_CUSTO_CONTRATACAO':'CUSTO_CONTRATACAO','VLR_CUSTO_DEMISSAO':'CUSTO_DEMISSAO','VLR_CUSTO_TRANSFERENCIA':'CUSTO_TRANSFERENCIA', 'VLR_CUSTO_MANUTENCAO':'CUSTO_MANUTENCAO','VLR_CUSTO_HH':'CUSTO_HH','VLR_CUSTO_HH_NOTURNO':'CUSTO_HH_NOTURNO','VLR_CUSTO_HH_FIM_SEMANA':'CUSTO_HH_FDS','VLR_CUSTO_HH_FIM_SEMANA_NOTUR':'CUSTO_HH_FDS_NOTURNO'}) self.electrician_profiles=electrician_profiles_raw[['COD_PERFIL_ELETRICISTA', 'DESC_PERFIL_ELETRICISTA']] self.electrician_profiles.to_csv('PERFIL_ELETRICISTA_TTC.csv',sep=';') self.electricians_costs=electrician_profiles_raw[['COD_PERFIL_ELETRICISTA','CUSTO_CONTRATACAO','CUSTO_DEMISSAO', 'CUSTO_TRANSFERENCIA', 'CUSTO_MANUTENCAO','CUSTO_HH','CUSTO_HH_NOTURNO','CUSTO_HH_FDS','CUSTO_HH_FDS_NOTURNO']] self.electricians_costs = self.electricians_costs.set_index('COD_PERFIL_ELETRICISTA') self.electricians_costs.to_csv('CUSTO_ELETRICISTA_TTC.csv',sep=';') # CS27 OK crew_profiles=menu_select(conexao_oracle, "CS27", cod_estudo)[0] crew_profiles=crew_profiles.rename(columns={'QTD_HH_DIARIO':'HH_TOTAL','VLR_MIP':'MIP','QTD_DIA_TRABALHADO_ANO':'QTD_DIAS_TRABALHO_ANO'}) self.crew_profiles=crew_profiles self.crew_profiles = self.crew_profiles.set_index('COD_PERFIL_EQUIPE') self.crew_profiles.to_csv('PERFIL_EQUIPE_TTC.csv',sep=';') # CS23 OK crew_formation=menu_select(conexao_oracle, "CS23", cod_estudo)[0] #crew_formation=crew_formation.rename(columns={'SUM(PPEBE.QTD_ELETRICISTA)':'QTD_ELETRICISTAS'}) crew_formation=crew_formation.rename(columns={'QTD_ELETRICISTA':'QTD_ELETRICISTAS'}) self.crew_formation=crew_formation self.crew_formation.to_csv('EQUIPE_FORMACAO_TTC.csv',sep=';') # CS24 OK crew_service_raw=menu_select(conexao_oracle, "CS24", cod_estudo)[0] self.crew_service =crew_service_raw.rename(columns={'IDT_BLOCO_SERVICO':'COD_SERVICO'}) self.crew_service.to_csv('EQUIPE_SERVIÇO_TTC.csv',sep=';')#REN # CS22 OK electrician_per_loc=menu_select(conexao_oracle, "CS22", cod_estudo)[0] electrician_per_loc=electrician_per_loc.rename(columns={'COD_LOCALIDADE_VIRTUAL':'COD_LOCALIDADE','SUM(PPEBE.QTD_ELETRICISTA)':'QTD_ELETRICISTAS'}) self.electrician_per_loc=electrician_per_loc.set_index('COD_LOCALIDADE') self.electrician_per_loc.to_csv('ELETRICISTAS_POR_LOCALIDADE_TTC.csv',sep=';') # CS21 OK loc_distances_raw=menu_select(conexao_oracle, "CS21", cod_estudo)[0] L_ = sorted(self.locs_bases.index.values) drows = [] for i in L_: drow = [i] for j in L_: vlr = loc_distances_raw.loc[(loc_distances_raw['COD_LOCALIDADE_ORIGEM']==i) & (loc_distances_raw['COD_LOCALIDADE_DESTINO']==j), 'VLR_DISTANCIA'].values if not vlr or math.isnan(vlr): vlr = loc_distances_raw.loc[(loc_distances_raw['COD_LOCALIDADE_ORIGEM']==j) & (loc_distances_raw['COD_LOCALIDADE_DESTINO']==i), 'VLR_DISTANCIA'].values if not vlr or math.isnan(vlr): drow.append(0.0) else: drow.append(float(vlr)) else: drow.append(float(vlr)) drows.append(drow) dist_cols = ['COD_LOCALIDADE'] for l in L_: dist_cols.append(str(l)) self.loc_distances = pd.DataFrame(drows, columns=dist_cols) self.loc_distances = self.loc_distances.set_index('COD_LOCALIDADE') self.loc_distances.to_csv('DISTANCIA_ENTRE_LOCALIDADES_TTC.csv',sep=';') # CS29 OK loc_times_raw=menu_select(conexao_oracle, "CS29", cod_estudo)[0] drows = [] for i in L_: drow = [i] for j in L_: vlr = loc_times_raw.loc[(loc_times_raw['COD_LOCALIDADE_ORIGEM']==i) & (loc_times_raw['COD_LOCALIDADE_DESTINO']==j), 'TEM_CALCULADO'].values if not vlr or math.isnan(vlr): vlr = loc_times_raw.loc[(loc_times_raw['COD_LOCALIDADE_ORIGEM']==j) & (loc_times_raw['COD_LOCALIDADE_DESTINO']==i), 'TEM_CALCULADO'].values if not vlr or math.isnan(vlr): drow.append(0.0) else: drow.append(float(vlr)) else: drow.append(float(vlr)) drows.append(drow) dist_cols = ['COD_LOCALIDADE'] for l in L_: dist_cols.append(str(l)) self.loc_times = pd.DataFrame(drows, columns=dist_cols) self.loc_times = self.loc_times.set_index('COD_LOCALIDADE') self.loc_times.to_csv('TEMPO_ENTRE_LOCALIDADES_TTC.csv',sep=';') # CS31 OK os_hour_raw=menu_select(conexao_oracle, "CS31", cod_estudo)[0] os_hour_raw=os_hour_raw.rename(columns={'COD_LOCALIDADE_VIRTUAL':'COD_LOCALIDADE', 'ANO_PREVISAO_DEMANDA':'ANO','MES_PREVISAO_DEMANDA':'MES' ,'DIA_PREVISAO_DEMANDA':'DIA', 'IND_DIA_SEMANA':'DIA_DA_SEMANA', 'HOR_PREVISAO_DEMANDA':'HORA'}) self.os_hour = os_hour_raw.set_index('COD_LOCALIDADE') self.os_hour.to_csv('PREVISAO_DEMANDA_POR_HORA_TTC.csv',sep=';') # CS19 OK schedule_raw=menu_select(conexao_oracle, "CS19", cod_estudo)[0] schedule_raw=schedule_raw.rename(columns={'ESCALA':'COD_ESCALA','DSC_DIA_SEMANA':'DIA_SEMANA','H0':'0','H1':'1','H2':'2','H3':'3', 'H4':'4','H5':'5','H6':'6','H7':'7','H8':'8','H9':'9','H10':'10','H11':'11','H12':'12','H13':'13','H14':'14','H15':'15','H16':'16','H17':'17', 'H18':'18','H19':'19','H20':'20','H21':'21','H22':'22','H23':'23'}) self.schedule=schedule_raw #### Solicitar alteracoes abaixo na base para evitar substituicao self.schedule = self.schedule.replace('N', '-') self.schedule = self.schedule.replace('S', 'X') self.schedule = self.schedule.replace('I', 'P') self.schedule = self.schedule.replace('E', 'T') self.schedule = self.schedule.replace('SEGUNDA', 'SEG') self.schedule = self.schedule.replace('TERÇA', 'TER') self.schedule = self.schedule.replace('QUARTA', 'QUA') self.schedule = self.schedule.replace('QUINTA', 'QUI') self.schedule = self.schedule.replace('SEXTA', 'SEX') self.schedule = self.schedule.replace('SABADO', 'SAB') self.schedule = self.schedule.replace('DOMINGO', 'DOM') self.schedule.to_csv('ESCALAS_TTC.csv',sep=';') # CS28 OK vehicles_raw=menu_select(conexao_oracle, "CS28", cod_estudo)[0] vehicles_raw=vehicles_raw.rename(columns={'VLR_CUSTO_KM':'CUSTO_KM'}) self.vehicles=vehicles_raw[['COD_PERFIL_VEICULO','DSC_TIPO_VEICULO']] self.vehicles = self.vehicles.set_index('COD_PERFIL_VEICULO') self.vehicles.to_csv('PERFIL_VEICULO_TTC.csv',sep=';') # CS26 OK misc_input_raw=menu_select(conexao_oracle, "CS26", cod_estudo)[0] misc_input_raw=misc_input_raw.rename(columns={'PCT_ATENDIMENTO_OS':'PERCENTUAL_BACKLOG',"TO_CHAR(DTH_INICIO_HORARIO_COMERCIAL,'HH24:MI:SS')":'INICIO_HORA_COMERCIAL', "TO_CHAR(DTH_FIM_HORARIO_COMERCIAL,'HH24:MI:SS')":'FIM_HORA_COMERCIAL','IND_MES_BASE':'MES_DEMANDA'}) self.misc_input = pd.DataFrame(columns=['PARAMETRO', 'VALOR']) self.misc_input.loc[0] = ['PERCENTUAL_BACKLOG', misc_input_raw.iloc[0]['PERCENTUAL_BACKLOG']] inic_hc = int(misc_input_raw.iloc[0]['INICIO_HORA_COMERCIAL'].split(':')[0]) fim_hc = int(misc_input_raw.iloc[0]['FIM_HORA_COMERCIAL'].split(':')[0])-1 #.split(':')[0] self.misc_input.loc[2] = ['INICIO_HORA_COMERCIAL', inic_hc] self.misc_input.loc[3] = ['FIM_HORA_COMERCIAL', fim_hc] self.misc_input.loc[4] = ['MES_DEMANDA', misc_input_raw.iloc[0]['MES_DEMANDA']] #self.misc_input.loc[5] = ['EXEC_COMPLETA_BASES', misc_input_raw.iloc[0]['EXEC_COMPLETA_BASES']] #self.misc_input.loc[8] = ['CARREGA_PRECALC', misc_input_raw.iloc[0]['XXXXX']] self.misc_input = self.misc_input.set_index('PARAMETRO') self.misc_input.to_csv('OUTRAS_ENTRADAS_TTC.csv',sep=';') # CS35 Ok depot_raw=menu_select(conexao_oracle, "CS35", cod_estudo)[0] self.depot=depot_raw.rename(columns={'NUM_CENARIO':'ID_SOLUCAO','IDT_PERFIL_BASE_OPERACIONAL':'COD_PERFIL_BASE'}) self.depot = self.depot[['COD_LOCALIDADE_CLIENTE', 'COD_LOCALIDADE_BASE']] self.depot.to_csv('ATENDIMENTO_BASE_LOCALIDADE_TTC.csv',sep=';') #CS36 OK bases_profiles=menu_select(conexao_oracle, "CS36", cod_estudo)[0] self.bases_profiles=bases_profiles self.bases_profiles.to_csv('PERFIL_BASE_TTC.csv',sep=';') conexao_oracle.con.close() # fecha conexao com banco de dados
def location(cod_estudo, cod_modulo, cod_empresa): print('Lendo dados de entrada...', flush=True) data = Data('strategic') try: data.read(cod_modulo, cod_estudo,cod_empresa) # leitura dos dados try: print('Executando módulo de posicionamento de bases...', flush=True) location = Location(data,cod_modulo,cod_estudo,cod_empresa) status=location.run() except Exception as erro: print(erro) msg_status = 'Erro ao executar o módulo estratégico' status = 4 traceback.print_exc() except Exception as erro: print(erro) msg_status = 'Erro na leitura dos dados' status = 4 print('\nEscrevendo resultados...', flush=True) conexao_oracle=AbrirConexao(cod_empresa) try: if status == 0: msg_status = 'Erro de simulação' elif status == 4: date = datetime.now() date = date.strftime('%y/%m/%d %H:%M:%S') status_output = pd.DataFrame({'IND_SITUACAO_MODULO_ETTGC': [3], 'DSC_MENSAGEM_SITUACAO_PRCSM': [msg_status], 'DTH_RETORNO_MODULO_ESTRATEGICO': [date], 'IDT_CONTROLE_PRCSM_ETUDO': [int(cod_estudo)]}) elif status == 1: print('Escrevendo resultados...', flush=True) msg_status = 'Processado' menu_insert(conexao_oracle,location.saida_atendimento,'at04') menu_insert(conexao_oracle,location.bases_configuration,'at05') menu_insert(conexao_oracle,location.electricians_data,'at06') menu_insert(conexao_oracle,location.electricians_locality,'at07') menu_insert(conexao_oracle,location.general_results,'at08') except Exception as erro: print(erro) status = 4; msg_status = 'Erro na escrita do resultados' date = datetime.now() date = date.strftime('%y/%m/%d %H:%M:%S') status_output = pd.DataFrame({'IND_SITUACAO_MODULO_ETTGC': [3], 'DSC_MENSAGEM_SITUACAO_PRCSM': [msg_status], 'DTH_RETORNO_MODULO_ESTRATEGICO': [date], 'IDT_CONTROLE_PRCSM_ETUDO': [int(cod_estudo)]}) finally: if status != 1 and status != 0: menu_insert(conexao_oracle,status_output,'at14') conexao_oracle.con.close() print(msg_status) print('\nDone!') if status == 1: location.general_results.to_csv('output/SAIDA_ESTRATEGICO.csv',sep=';',index=False) location.saida_atendimento.to_csv('output/SAIDA_ESTRATEGICO_ATENDIMENTO.csv',sep=';',index=False) location.bases_configuration.to_csv('output/SAIDA_ESTRATEGICO_BASES.csv',sep=';',index=False) location.electricians_data.to_csv('output/SAIDA_ESTRATEGICO_ELETRICISTAS.csv',sep=';',index=False) location.electricians_locality.to_csv('output/SAIDA_ESTRATEGICO_ELETRICISTAS_POR_LOCALIDADE.csv',sep=';',index=False)