This commit is contained in:
daniel.rodrigues 2026-01-16 09:31:33 -03:00
parent f2e091739c
commit e568673a14

View File

@ -523,9 +523,26 @@ def process_stores(stores_to_process, all_data, base_headers, token, is_retry=Fa
all_data = [] all_data = []
failed_stores = [] 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 # Primeira passagem: processar todas as lojas
failed_stores, TOKEN = process_stores(STORES, all_data, BASE_HEADERS, TOKEN) 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 das lojas que falharam
retry_round = 0 retry_round = 0
while failed_stores and retry_round < FAILED_STORES_MAX_RETRIES: 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["authorization"] = TOKEN
BASE_HEADERS["x-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) # Tentar processar as lojas que falharam (is_retry=True para evitar duplicação)
stores_to_retry = failed_stores.copy() stores_to_retry = failed_stores.copy()
failed_stores, TOKEN = process_stores(stores_to_retry, all_data, BASE_HEADERS, TOKEN, is_retry=True) 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: if not failed_stores:
print(f"\n[SUCESSO] Todas as lojas foram processadas com sucesso no retry {retry_round}!") 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 # Resumo final das lojas que ainda falharam
if failed_stores: if failed_stores:
print(f"\n{'=' * 60}") print(f"\n{'=' * 60}")
@ -587,6 +614,7 @@ if all_data:
print(f"[AVISO] Removidas {duplicates_removed} linhas duplicadas de all_data") print(f"[AVISO] Removidas {duplicates_removed} linhas duplicadas de all_data")
all_data = unique_data all_data = unique_data
stats["duplicatas_removidas"] = duplicates_removed
print(f"Total de registros após deduplicação: {len(all_data)}") print(f"Total de registros após deduplicação: {len(all_data)}")
print(f"\nConectando ao banco de dados...") print(f"\nConectando ao banco de dados...")
@ -600,6 +628,7 @@ if all_data:
# Obter lista única de pedidos para deletar # Obter lista única de pedidos para deletar
unique_orders = list(set([record["Pedido"] for record in all_data])) 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)}") print(f"Total de pedidos únicos a processar: {len(unique_orders)}")
# Deletar registros existentes em lotes de 500 # Deletar registros existentes em lotes de 500
@ -617,6 +646,7 @@ if all_data:
conn.commit() conn.commit()
print(f" Deletados {deleted_count} registros (lote {i//batch_size + 1}/{(len(unique_orders)-1)//batch_size + 1})...") 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}") print(f"Total de registros deletados: {deleted_count}")
# Query de inserção # Query de inserção
@ -676,6 +706,7 @@ if all_data:
# Commit final # Commit final
conn.commit() conn.commit()
stats["registros_inseridos"] = records_inserted
print(f"\n✓ Dados salvos com sucesso no banco de dados!") print(f"\n✓ Dados salvos com sucesso no banco de dados!")
print(f"Total de registros inseridos: {records_inserted}") print(f"Total de registros inseridos: {records_inserted}")
@ -688,3 +719,52 @@ if all_data:
else: else:
print("\nNenhum dado encontrado para salvar.") 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)