att
This commit is contained in:
parent
0620fa776d
commit
f2e091739c
@ -177,10 +177,13 @@ def process_store_with_retry(store, headers, max_retries=3, retry_delay=5, token
|
||||
Retorna tupla (lista de dados da loja, needs_token_refresh)
|
||||
needs_token_refresh indica se o token precisa ser renovado
|
||||
"""
|
||||
store_data = []
|
||||
needs_token_refresh = False
|
||||
|
||||
for attempt in range(max_retries):
|
||||
# IMPORTANTE: Limpar dados a cada tentativa para evitar duplicação
|
||||
# caso uma tentativa anterior tenha processado pedidos parcialmente antes de falhar
|
||||
store_data = []
|
||||
|
||||
try:
|
||||
# Primeira chamada para obter totalElements e calcular total de páginas
|
||||
params = PARAMS_BASE.copy()
|
||||
@ -457,9 +460,10 @@ BASE_HEADERS = {
|
||||
# 4) LOOP POR LOJA
|
||||
# ===============================
|
||||
|
||||
def process_stores(stores_to_process, all_data, base_headers, token):
|
||||
def process_stores(stores_to_process, all_data, base_headers, token, is_retry=False):
|
||||
"""
|
||||
Processa uma lista de lojas e retorna os dados coletados e as lojas que falharam.
|
||||
Se is_retry=True, remove dados existentes da loja antes de adicionar novos (evita duplicação).
|
||||
"""
|
||||
failed = []
|
||||
processed_count = 0
|
||||
@ -496,6 +500,15 @@ def process_stores(stores_to_process, all_data, base_headers, token):
|
||||
base_headers["authorization"] = token
|
||||
base_headers["x-authorization"] = token
|
||||
|
||||
# Se é retry e a loja foi processada com sucesso, remove dados antigos dessa loja
|
||||
# para evitar duplicação (caso tenha coletado dados parciais antes de falhar)
|
||||
if is_retry and len(store_data) > 0:
|
||||
old_count = len(all_data)
|
||||
all_data[:] = [record for record in all_data if record["Loja"] != store]
|
||||
removed = old_count - len(all_data)
|
||||
if removed > 0:
|
||||
print(f" [RETRY] Removidos {removed} registros antigos da loja {store} para evitar duplicação")
|
||||
|
||||
# Adicionar dados da loja ao total
|
||||
all_data.extend(store_data)
|
||||
processed_count += 1
|
||||
@ -531,9 +544,9 @@ while failed_stores and retry_round < FAILED_STORES_MAX_RETRIES:
|
||||
BASE_HEADERS["authorization"] = TOKEN
|
||||
BASE_HEADERS["x-authorization"] = TOKEN
|
||||
|
||||
# Tentar processar as lojas que falharam
|
||||
# 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)
|
||||
failed_stores, TOKEN = process_stores(stores_to_retry, all_data, BASE_HEADERS, TOKEN, is_retry=True)
|
||||
|
||||
if not failed_stores:
|
||||
print(f"\n[SUCESSO] Todas as lojas foram processadas com sucesso no retry {retry_round}!")
|
||||
@ -550,6 +563,32 @@ if failed_stores:
|
||||
# ===============================
|
||||
|
||||
if all_data:
|
||||
# Remover duplicatas em all_data antes de inserir
|
||||
# Usa uma chave composta: Loja + Pedido + SKU
|
||||
print(f"\nVerificando duplicatas em all_data...")
|
||||
seen = set()
|
||||
unique_data = []
|
||||
duplicates_removed = 0
|
||||
|
||||
for record in all_data:
|
||||
# Criar chave única baseada nos campos que identificam um registro
|
||||
key = (
|
||||
record.get("Loja", ""),
|
||||
record.get("Pedido", ""),
|
||||
record.get("SKU", "")
|
||||
)
|
||||
if key not in seen:
|
||||
seen.add(key)
|
||||
unique_data.append(record)
|
||||
else:
|
||||
duplicates_removed += 1
|
||||
|
||||
if duplicates_removed > 0:
|
||||
print(f"[AVISO] Removidas {duplicates_removed} linhas duplicadas de all_data")
|
||||
all_data = unique_data
|
||||
|
||||
print(f"Total de registros após deduplicação: {len(all_data)}")
|
||||
|
||||
print(f"\nConectando ao banco de dados...")
|
||||
|
||||
try:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user