From 9b1370144104ca1f4b3159b292ea8e702c0d767e Mon Sep 17 00:00:00 2001 From: Adriano Serighelli Date: Tue, 30 Sep 2025 13:17:50 -0300 Subject: [PATCH] =?UTF-8?q?Paralelismo=20realizado=20por=20ponto=20de=20me?= =?UTF-8?q?di=C3=A7=C3=A3o=20em=20vez=20de=20dias=20a=20serem=20processado?= =?UTF-8?q?s.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 53 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/Program.cs b/Program.cs index 62cb271..7a16155 100644 --- a/Program.cs +++ b/Program.cs @@ -76,11 +76,8 @@ internal class Plat_integ var errosPersistentes = new ConcurrentBag(); - //using var conn = new NpgsqlConnection(PG_CONN_STRING_PROD); - //await conn.OpenAsync(); await using var dataSource = NpgsqlDataSource.Create(PG_CONN_STRING_PROD); - //client.DefaultRequestHeaders.Clear(); client.DefaultRequestHeaders.Add("SOAPAction", "listarMedidaCincoMinutos"); var endpoint = new Uri("https://servicos.ccee.org.br/ws/v2/MedidaCincoMinutosBSv2"); @@ -88,8 +85,49 @@ internal class Plat_integ await Parallel.ForEachAsync(perfis, async (perfil, ct) => { - foreach (var item in perfis) + try { + Console.WriteLine($"{DateTime.Now}: Iniciado ponto {perfil._Codigo_SCDE}"); + if (perfil._Cod_5min == "0" || perfil._Cod_5min == string.Empty) + { + Console.WriteLine($"Pular {perfil._Codigo_SCDE} - (cod 5 min pendente)"); + errosPersistentes.Add($"{perfil._Cod_5min};{perfil._Codigo_SCDE}; cod_5min pendente"); + return; + } + string sqlSelect = @" + SELECT ponto, dia_num, minuto, origem, + ativa_consumo, ativa_geracao, reativa_consumo, reativa_geracao + FROM med_5min + WHERE ponto = @ponto AND dia_num >= @data_ini AND dia_num < @data_fim; + "; + + var existentes = new Dictionary<(string, double, int), dynamic>(); + + await using (var command = dataSource.CreateCommand(sqlSelect)) + { + + command.Parameters.AddWithValue("ponto", perfil._Codigo_SCDE + "P"); + command.Parameters.AddWithValue("data_ini", dataIni.ToOADate()); + command.Parameters.AddWithValue("data_fim", dataFim.ToOADate()); + + await using (var reader = await command.ExecuteReaderAsync(ct)) + { + while (await reader.ReadAsync()) + { + existentes[(reader.GetString(0), reader.GetDouble(1), reader.GetInt32(2))] = new + { + Origem = reader.GetString(3), + AtivaC = reader.GetDouble(4), + AtivaG = reader.GetDouble(5), + ReatC = reader.GetDouble(6), + ReatG = reader.GetDouble(7) + }; + } + } + } + + foreach (DateTime dia in datas) + { int tentativas = 0; bool sucesso = false; @@ -135,6 +173,13 @@ internal class Plat_integ } } } + Console.WriteLine($"{DateTime.Now}: Finalizado ponto {perfil._Codigo_SCDE}"); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + }); if (errosPersistentes.Count > 0)