Teste requições diárias parelelas.

This commit is contained in:
Adriano Serighelli 2025-03-22 15:37:59 -03:00
parent 751e7da3a6
commit cfe6605f49

View File

@ -22,34 +22,51 @@ public class PLDService
.ToDictionary(repo => repo, repo => repo.ObterDataInicial());
DateTime dataFinal = DateTime.Now.Date.AddDays(1);
DateTime dataInicial = datasIniciais.Values.Min();
DateTime menorDataInicial = datasIniciais.Values.Min();
// Criar um timer que reseta a cada segundo 00
// Criar um timer que reseta a cada minuto no segundo 00
_ = Task.Run(() => ResetarLimitePorMinuto());
Console.WriteLine($"Buscando dados de {dataInicial} até {dataFinal}...");
string xmlRequest = PrepararXML(dataInicial, dataFinal);
Console.WriteLine($"Buscando dados de {menorDataInicial} até {dataFinal} em períodos de 1 dia...");
List<Task<string>> tarefasRequisicoes = new List<Task<string>>();
for (DateTime data = menorDataInicial; data < dataFinal; data = data.AddDays(1))
{
DateTime dataInicio = data;
DateTime dataFim = dataInicio.AddDays(1);
tarefasRequisicoes.Add(Task.Run(async () =>
{
await _requestLimiter.WaitAsync();
string resposta = await _httpClient.EnviarRequisicaoAsync(xmlRequest);
string xmlResponse = await _httpClient.EnviarRequisicaoAsync(PrepararXML(dataInicio, dataFim));
_requestLimiter.Release();
return xmlResponse;
}));
}
// Criar processador e processar XML
// Aguarda todas as requisições finalizarem e junta os resultados
string[] respostasXML = await Task.WhenAll(tarefasRequisicoes);
// Criar processador e consolidar todos os PLDs
var processor = new PLDProcessor();
var plds = processor.ProcessarXML(resposta);
List<PLDModel> todosPLDs = new List<PLDModel>();
foreach (string xml in respostasXML)
{
todosPLDs.AddRange(processor.ProcessarXML(xml));
}
// Atualiza ambos os bancos apenas se houver novos dados
if (plds.Count > 0)
if (todosPLDs.Count > 0)
{
// Para cada repositório, passar a data inicial correta
Parallel.ForEach(datasIniciais, kvp =>
{
var repo = kvp.Key;
var ultimaData = kvp.Value;
repo.SalvarPLDs(plds, ultimaData);
repo.SalvarPLDs(todosPLDs, ultimaData);
});
Console.WriteLine("PLDs salvos com sucesso.");
Console.WriteLine($"PLDs de {menorDataInicial} a {dataFinal} salvos com sucesso.");
}
}