Add ICalendarioService interface and implement CalendarioService for event retrieval
This commit is contained in:
parent
fa893c91ad
commit
7d8aff1982
7
Application/ICalendarioService.cs
Normal file
7
Application/ICalendarioService.cs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
namespace Application
|
||||||
|
{
|
||||||
|
public interface ICalendarioService
|
||||||
|
{
|
||||||
|
Task<string?> ObterEventoLimiteColetaAsync(DateTime dataReferencia, CancellationToken ct = default);
|
||||||
|
}
|
||||||
|
}
|
||||||
84
Infrastructure/CalendarioService.cs
Normal file
84
Infrastructure/CalendarioService.cs
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
using System.Text.Json;
|
||||||
|
using System.Globalization;
|
||||||
|
using Application;
|
||||||
|
|
||||||
|
namespace Infrastructure
|
||||||
|
{
|
||||||
|
public class CalendarioService : ICalendarioService
|
||||||
|
{
|
||||||
|
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<string?> ObterEventoLimiteColetaAsync(DateTime dataReferencia, CancellationToken ct = default)
|
||||||
|
{
|
||||||
|
var year = dataReferencia.Year;
|
||||||
|
var month = dataReferencia.Month - 1;
|
||||||
|
var dayFinal = DateTime.DaysInMonth(year, month + 1);
|
||||||
|
|
||||||
|
var values = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_calendarIds"] = "55985",
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeDay"] = dayFinal.ToString(),
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeHour"] = "23",
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeMinute"] = "59",
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeMonth"] = month.ToString(),
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeYear"] = year.ToString(),
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_eventsPerPage"] = "-1",
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeDay"] = "1",
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeHour"] = "0",
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeMinute"] = "0",
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeMonth"] = month.ToString(),
|
||||||
|
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeYear"] = year.ToString(),
|
||||||
|
};
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var client = new HttpClient();
|
||||||
|
using var content = new FormUrlEncodedContent(values);
|
||||||
|
var resp = await client.PostAsync(Url, content, ct);
|
||||||
|
var resposta = await resp.Content.ReadAsStringAsync(ct);
|
||||||
|
|
||||||
|
var alvo = $"Data limite para coleta diária dos dados de medição no SCDE";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var doc = JsonDocument.Parse(resposta);
|
||||||
|
string? found = null;
|
||||||
|
void SearchJson(JsonElement el)
|
||||||
|
{
|
||||||
|
if (found != null) return;
|
||||||
|
switch (el.ValueKind)
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SearchJson(doc.RootElement);
|
||||||
|
if (found != null) return found;
|
||||||
|
}
|
||||||
|
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
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -10,11 +10,15 @@ class Program
|
|||||||
// string PG_CONN_STRING_PROD = "Server = 192.168.10.248; Port = 5432; Database = smartenergiadev; Username = postgres; Password = gds21; Timeout = 60; CommandTimeout = 60; ApplicationName = new_med_5_min; Connection Lifetime = 120; Minimum Pool Size = 2; Maximum Pool Size = 4;";
|
// string PG_CONN_STRING_PROD = "Server = 192.168.10.248; Port = 5432; Database = smartenergiadev; Username = postgres; Password = gds21; Timeout = 60; CommandTimeout = 60; ApplicationName = new_med_5_min; Connection Lifetime = 120; Minimum Pool Size = 2; Maximum Pool Size = 4;";
|
||||||
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 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";
|
string caminhoLog = $@"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_{inicio:MM_dd_HH_mm}.csv";
|
||||||
//DateTime dataIni = new DateTime(inicio.Year, inicio.Month, 1);
|
|
||||||
//DateTime dataFim = new DateTime(inicio.Year, inicio.Month, inicio.Day);
|
|
||||||
//agosto finalizado
|
//agosto finalizado
|
||||||
DateTime dataIni = new DateTime(inicio.Year, 09, 01);
|
DateTime dataIni = new DateTime(inicio.Year, 11, 01);
|
||||||
DateTime dataFim = new DateTime(inicio.Year, 10, 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.");
|
||||||
|
|
||||||
// Configuração de dependências (pode usar um container DI depois)
|
// Configuração de dependências (pode usar um container DI depois)
|
||||||
var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);
|
var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user