diff --git a/Services/PLDService.cs b/Services/PLDService.cs index af152de..0a7019c 100644 --- a/Services/PLDService.cs +++ b/Services/PLDService.cs @@ -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..."); - await _requestLimiter.WaitAsync(); - string resposta = await _httpClient.EnviarRequisicaoAsync(xmlRequest); - _requestLimiter.Release(); + List> tarefasRequisicoes = new List>(); + for (DateTime data = menorDataInicial; data < dataFinal; data = data.AddDays(1)) + { + DateTime dataInicio = data; + DateTime dataFim = dataInicio.AddDays(1); - // Criar processador e processar XML + tarefasRequisicoes.Add(Task.Run(async () => + { + await _requestLimiter.WaitAsync(); + string xmlResponse = await _httpClient.EnviarRequisicaoAsync(PrepararXML(dataInicio, dataFim)); + _requestLimiter.Release(); + return xmlResponse; + })); + } + + // 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 todosPLDs = new List(); + + 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."); } }