From e568673a14e34ad258f95c85ab2e3437ff7138ef Mon Sep 17 00:00:00 2001 From: "daniel.rodrigues" Date: Fri, 16 Jan 2026 09:31:33 -0300 Subject: [PATCH] att --- Pedidos_mar.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/Pedidos_mar.py b/Pedidos_mar.py index d52f535..0c03f8a 100644 --- a/Pedidos_mar.py +++ b/Pedidos_mar.py @@ -523,9 +523,26 @@ def process_stores(stores_to_process, all_data, base_headers, token, is_retry=Fa all_data = [] failed_stores = [] +# Estatísticas para relatório final +stats = { + "total_lojas": len(STORES), + "lojas_sucesso_primeira": 0, + "lojas_falha_inicial": [], + "lojas_recuperadas_retry": [], + "lojas_falha_final": [], + "registros_inseridos": 0, + "registros_deletados": 0, + "duplicatas_removidas": 0, + "pedidos_unicos": 0 +} + # Primeira passagem: processar todas as lojas failed_stores, TOKEN = process_stores(STORES, all_data, BASE_HEADERS, TOKEN) +# Guardar lojas que falharam na primeira tentativa +stats["lojas_falha_inicial"] = failed_stores.copy() +stats["lojas_sucesso_primeira"] = len(STORES) - len(failed_stores) + # Retry das lojas que falharam retry_round = 0 while failed_stores and retry_round < FAILED_STORES_MAX_RETRIES: @@ -544,13 +561,23 @@ while failed_stores and retry_round < FAILED_STORES_MAX_RETRIES: BASE_HEADERS["authorization"] = TOKEN BASE_HEADERS["x-authorization"] = TOKEN + # Guardar lojas antes do retry para comparar depois + lojas_antes_retry = set(failed_stores) + # Tentar processar as lojas que falharam (is_retry=True para evitar duplicação) stores_to_retry = failed_stores.copy() failed_stores, TOKEN = process_stores(stores_to_retry, all_data, BASE_HEADERS, TOKEN, is_retry=True) + # Identificar lojas que foram recuperadas neste retry + lojas_recuperadas = lojas_antes_retry - set(failed_stores) + stats["lojas_recuperadas_retry"].extend(lojas_recuperadas) + if not failed_stores: print(f"\n[SUCESSO] Todas as lojas foram processadas com sucesso no retry {retry_round}!") +# Guardar lojas que falharam definitivamente +stats["lojas_falha_final"] = failed_stores.copy() + # Resumo final das lojas que ainda falharam if failed_stores: print(f"\n{'=' * 60}") @@ -587,6 +614,7 @@ if all_data: print(f"[AVISO] Removidas {duplicates_removed} linhas duplicadas de all_data") all_data = unique_data + stats["duplicatas_removidas"] = duplicates_removed print(f"Total de registros após deduplicação: {len(all_data)}") print(f"\nConectando ao banco de dados...") @@ -600,6 +628,7 @@ if all_data: # Obter lista única de pedidos para deletar unique_orders = list(set([record["Pedido"] for record in all_data])) + stats["pedidos_unicos"] = len(unique_orders) print(f"Total de pedidos únicos a processar: {len(unique_orders)}") # Deletar registros existentes em lotes de 500 @@ -617,6 +646,7 @@ if all_data: conn.commit() print(f" Deletados {deleted_count} registros (lote {i//batch_size + 1}/{(len(unique_orders)-1)//batch_size + 1})...") + stats["registros_deletados"] = deleted_count print(f"Total de registros deletados: {deleted_count}") # Query de inserção @@ -676,6 +706,7 @@ if all_data: # Commit final conn.commit() + stats["registros_inseridos"] = records_inserted print(f"\n✓ Dados salvos com sucesso no banco de dados!") print(f"Total de registros inseridos: {records_inserted}") @@ -688,3 +719,52 @@ if all_data: else: print("\nNenhum dado encontrado para salvar.") + +# =============================== +# 6) RELATÓRIO FINAL +# =============================== + +print("\n") +print("=" * 70) +print(" RELATÓRIO FINAL DE EXECUÇÃO") +print("=" * 70) + +print("\n📊 ESTATÍSTICAS DE LOJAS:") +print(f" Total de lojas processadas: {stats['total_lojas']}") +print(f" Lojas com sucesso na 1ª tentativa: {stats['lojas_sucesso_primeira']}") +print(f" Lojas que falharam inicialmente: {len(stats['lojas_falha_inicial'])}") +print(f" Lojas recuperadas após retry: {len(stats['lojas_recuperadas_retry'])}") +print(f" Lojas que falharam definitivamente: {len(stats['lojas_falha_final'])}") + +if stats['lojas_recuperadas_retry']: + print(f"\n Lojas recuperadas no retry:") + for loja in stats['lojas_recuperadas_retry']: + print(f" - {loja}") + +if stats['lojas_falha_final']: + print(f"\n Lojas com falha definitiva:") + for loja in stats['lojas_falha_final']: + print(f" - {loja}") + +print("\n📦 ESTATÍSTICAS DE DADOS:") +print(f" Pedidos únicos processados: {stats['pedidos_unicos']}") +print(f" Duplicatas removidas (memória): {stats['duplicatas_removidas']}") +print(f" Registros deletados do banco: {stats['registros_deletados']}") +print(f" Registros inseridos no banco: {stats['registros_inseridos']}") + +# Calcular taxa de sucesso +taxa_sucesso = ((stats['total_lojas'] - len(stats['lojas_falha_final'])) / stats['total_lojas'] * 100) if stats['total_lojas'] > 0 else 0 + +print("\n📈 RESUMO:") +print(f" Taxa de sucesso: {taxa_sucesso:.1f}%") + +if len(stats['lojas_falha_final']) == 0: + print(f" Status: ✓ SUCESSO TOTAL") +elif len(stats['lojas_falha_final']) < stats['total_lojas']: + print(f" Status: ⚠ SUCESSO PARCIAL") +else: + print(f" Status: ✗ FALHA TOTAL") + +print("\n" + "=" * 70) +print(" FIM DO RELATÓRIO") +print("=" * 70)