From ae5be9853bac3e459ce579fde78172fe5e9beb32 Mon Sep 17 00:00:00 2001 From: Adriano Serighelli Date: Wed, 19 Nov 2025 16:10:35 -0300 Subject: [PATCH] =?UTF-8?q?Data=20inicial=20c=C3=A1lculada=20conforme=20ca?= =?UTF-8?q?lend=C3=A1rio=20CCEE.=20Caso=20ainda=20esteja=20dentro=20do=20p?= =?UTF-8?q?er=C3=ADodo=20de=20coleta=20ainda=20=C3=A9=20feito=20as=20busca?= =?UTF-8?q?=20dos=20dados=20do=20m=C3=AAs=20anterior=20(M-1).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Application/ICalendarioService.cs | 2 +- Infrastructure/CalendarioService.cs | 58 +++++++++++++++++------------ Presentation/Program.cs | 15 +++++--- 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/Application/ICalendarioService.cs b/Application/ICalendarioService.cs index 4ee1fc4..8081a56 100644 --- a/Application/ICalendarioService.cs +++ b/Application/ICalendarioService.cs @@ -2,6 +2,6 @@ namespace Application { public interface ICalendarioService { - Task ObterEventoLimiteColetaAsync(DateTime dataReferencia, CancellationToken ct = default); + Task ObterEventoLimiteColetaAsync(DateTime dataReferencia, CancellationToken ct = default); } } \ No newline at end of file diff --git a/Infrastructure/CalendarioService.cs b/Infrastructure/CalendarioService.cs index 5fd5bb9..b340a13 100644 --- a/Infrastructure/CalendarioService.cs +++ b/Infrastructure/CalendarioService.cs @@ -8,7 +8,7 @@ namespace Infrastructure { private const string Url = "https://www.ccee.org.br/en/web/guest/calendario?p_p_id=com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn&p_p_lifecycle=2&p_p_cacheability=cacheLevelPage&doAsUserId=&p_p_resource_id=calendarBookings"; - public async Task ObterEventoLimiteColetaAsync(DateTime dataReferencia, CancellationToken ct = default) + public async Task ObterEventoLimiteColetaAsync(DateTime dataReferencia, CancellationToken ct = default) { var year = dataReferencia.Year; var month = dataReferencia.Month - 1; @@ -42,37 +42,49 @@ namespace Infrastructure try { using var doc = JsonDocument.Parse(resposta); - string? found = null; + + double? encontrado = null; + double? startTimeDay = null; + void SearchJson(JsonElement el) { - if (found != null) return; - switch (el.ValueKind) + if (encontrado != null) return; + + if (el.ValueKind == JsonValueKind.Object) { - case JsonValueKind.String: - var s = el.GetString() ?? ""; - if (s.Contains(alvo, StringComparison.OrdinalIgnoreCase)) found = s; - break; - case JsonValueKind.Object: - foreach (var prop in el.EnumerateObject()) SearchJson(prop.Value); - break; - case JsonValueKind.Array: - foreach (var item in el.EnumerateArray()) SearchJson(item); - break; + // Verifica se alguma propriedade contém o texto alvo + foreach (var prop in el.EnumerateObject()) + { + if (prop.Value.ValueKind == JsonValueKind.String) + { + var s = prop.Value.GetString() ?? ""; + if (s.Contains(alvo, StringComparison.OrdinalIgnoreCase)) + { + // Encontrou o evento, extrair dados do mesmo objeto + if (el.TryGetProperty("startTimeDay", out var day)) + startTimeDay = day.GetInt32(); + if (startTimeDay != null) + encontrado = startTimeDay; + return; + } + } + } + + foreach (var prop in el.EnumerateObject()) + SearchJson(prop.Value); + } + else if (el.ValueKind == JsonValueKind.Array) + { + foreach (var item in el.EnumerateArray()) + SearchJson(item); } } + SearchJson(doc.RootElement); - if (found != null) return found; + if (encontrado != null) return encontrado; } catch { } - var idx = resposta.IndexOf(alvo, StringComparison.OrdinalIgnoreCase); - if (idx >= 0) - { - var start = Math.Max(0, idx - 60); - var len = Math.Min(400, resposta.Length - start); - return resposta.Substring(start, len).Replace("\r", " ").Replace("\n", " "); - } - return null; } catch diff --git a/Presentation/Program.cs b/Presentation/Program.cs index bf068ca..b0cc40b 100644 --- a/Presentation/Program.cs +++ b/Presentation/Program.cs @@ -11,14 +11,17 @@ class Program string ACCESS_CONN_STRING = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\srv-dados\documentos\Middle\Informativo Setorial\Modelo Word\BD1_dados cadastrais e faturas.accdb;Jet OLEDB:Database Password=gds21"; string caminhoLog = $@"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_{inicio:MM_dd_HH_mm}.csv"; - //agosto finalizado - DateTime dataIni = new DateTime(inicio.Year, 11, 01); - // var a = dataFim == DateTime.Today; - DateTime dataFim = inicio.Date; - var calendarioService = new CalendarioService(); var evento = await calendarioService.ObterEventoLimiteColetaAsync(inicio, CancellationToken.None); - Console.WriteLine(evento != null ? $"Evento encontrado: {evento}" : "Evento não encontrado no calendário."); + + //agosto finalizado + DateTime dataIni = new DateTime(inicio.Year, inicio.Month, 01); + DateTime dataFim = inicio.Date; + + if (dataFim.Day <= evento + 1) + { + dataIni = dataIni.AddMonths(-1); + } // Configuração de dependências (pode usar um container DI depois) var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);