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)
|
Retorna tupla (lista de dados da loja, needs_token_refresh)
|
||||||
needs_token_refresh indica se o token precisa ser renovado
|
needs_token_refresh indica se o token precisa ser renovado
|
||||||
"""
|
"""
|
||||||
store_data = []
|
|
||||||
needs_token_refresh = False
|
needs_token_refresh = False
|
||||||
|
|
||||||
for attempt in range(max_retries):
|
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:
|
try:
|
||||||
# Primeira chamada para obter totalElements e calcular total de páginas
|
# Primeira chamada para obter totalElements e calcular total de páginas
|
||||||
params = PARAMS_BASE.copy()
|
params = PARAMS_BASE.copy()
|
||||||
@ -457,9 +460,10 @@ BASE_HEADERS = {
|
|||||||
# 4) LOOP POR LOJA
|
# 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.
|
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 = []
|
failed = []
|
||||||
processed_count = 0
|
processed_count = 0
|
||||||
@ -496,6 +500,15 @@ def process_stores(stores_to_process, all_data, base_headers, token):
|
|||||||
base_headers["authorization"] = token
|
base_headers["authorization"] = token
|
||||||
base_headers["x-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
|
# Adicionar dados da loja ao total
|
||||||
all_data.extend(store_data)
|
all_data.extend(store_data)
|
||||||
processed_count += 1
|
processed_count += 1
|
||||||
@ -531,9 +544,9 @@ 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
|
||||||
|
|
||||||
# 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()
|
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:
|
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}!")
|
||||||
@ -550,6 +563,32 @@ if failed_stores:
|
|||||||
# ===============================
|
# ===============================
|
||||||
|
|
||||||
if all_data:
|
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...")
|
print(f"\nConectando ao banco de dados...")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user