From 59b8f4bbb97d29593c5aff7ddc2e7ef364a9164e Mon Sep 17 00:00:00 2001 From: Adriano Serighelli Date: Wed, 17 Sep 2025 14:46:07 -0300 Subject: [PATCH] =?UTF-8?q?Remo=C3=A7=C3=A3o=20de=20trechos=20de=20c=C3=B3?= =?UTF-8?q?digos=20n=C3=A3o=20utilizados.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Função reeoganizadas conforme utilização. --- PI_Assync_SCDE.csproj | 7 +- Program.cs | 633 ++++++++---------------------------------- 2 files changed, 118 insertions(+), 522 deletions(-) diff --git a/PI_Assync_SCDE.csproj b/PI_Assync_SCDE.csproj index 7294f02..095c5ff 100644 --- a/PI_Assync_SCDE.csproj +++ b/PI_Assync_SCDE.csproj @@ -5,18 +5,19 @@ net6.0-windows enable enable - x64 + AnyCPU 7.0 False + - True + False $(DefineConstants)TRACE - True + False $(DefineConstants)TRACE diff --git a/Program.cs b/Program.cs index 10fe7d7..ebf3bec 100644 --- a/Program.cs +++ b/Program.cs @@ -7,15 +7,11 @@ using System.Text; using System.Xml; using System.Xml.Linq; - internal class Plat_integ { - static string PG_CONN_STRING_DEV = "Server = smart-energia-dev-pgsql.cykff7tj7mik.us-east-1.rds.amazonaws.com; Port = 5432; Database = smartimptest; User Id = postgres; Password = VfHml#Z78!%kvvNM;"; static string PG_CONN_STRING_PROD = "Server = smart-energia-dev-pgsql.cykff7tj7mik.us-east-1.rds.amazonaws.com; Port = 5432; Database = smartenergiaprod; User Id = postgres; Password = VfHml#Z78!%kvvNM; Timeout = 300;CommandTimeout = 300"; static string ENVIRONMENT = "dev"; // "dev" | "prod" - static Boolean SAVE_XML_IN = false; - static Boolean SAVE_XML_OUT = false; public static IEnumerable? pag_ant; static void Main(string[] args) { @@ -24,25 +20,18 @@ internal class Plat_integ { loadFromArgs = true; } - //MainAsync().GetAwaiter().GetResult(); - - //MainAsync(); //Metodo Assincrono down_sync(loadFromArgs, args); //metodo sincrono - //ler_xml_salvos(); //teste ler arquivos salvos - POSTGRESQL - Console.WriteLine("" + "Pressione qualquer tecla para finalizar"); _ = Console.ReadLine(); Environment.Exit(0); return; } - - public static async Task MainAsync() + public static void down_sync(bool loadFromArgs, string[] args) { - string caminho_BD, caminho_log; - Task tk_proces; + string caminho_BD, caminho_log, caminho_log_sec; DateTime tempo_ini; List> lt_perf_pto; @@ -52,252 +41,65 @@ internal class Plat_integ tempo_ini = DateTime.Now; //busca os dados para compor a lista perfis x - caminho_BD = @"X:\Middle\Informativo Setorial\Modelo Word\BD1_dados cadastrais e faturas.accdb"; - caminho_log = @"X:\Back\Carteira x.x\Codigo\log_erros.csv"; - lt_perf_pto = Busca_dad_BD(caminho_BD); + caminho_BD = @"\\srv-dados\documentos\Middle\Informativo Setorial\Modelo Word\BD1_dados cadastrais e faturas.accdb"; + caminho_log = @"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_" + DateTime.Now.Month + "_" + DateTime.Now.Day + "_" + DateTime.Now.Hour + "_" + DateTime.Now.Second + ".csv"; + lt_perf_pto = Busca_dad_BD(caminho_BD); //ACCESS OK - PG OK //exlclui os dados do mes atual salvos no BD - caminho_BD = @"X:\Back\Carteira x.x\Gestão Geral v1\Access\BDs teste\DB_med_5min.accdb"; - + caminho_BD = @"\\srv-dados\documentos\Back\Carteira x.x\Gestão Geral v1\Access\BDs teste\DB_med_5min.accdb"; DateTime now = DateTime.Now; - DateTime data_ini = new DateTime(now.Year, now.Month, 1); - DateTime data_fim = new DateTime(now.Year, now.Month, now.Day); + //PROD + DateTime data_ini; + DateTime data_fim; + if (loadFromArgs) + { + int ano_ini = Int32.Parse(args[0]); + int mes_ini = Int32.Parse(args[1]); + int ano_fim = Int32.Parse(args[2]); + int mes_fim = Int32.Parse(args[3]); + data_ini = new DateTime(ano_ini, mes_ini, 1); + data_fim = new DateTime(ano_fim, mes_fim, 1).AddMonths(1); + } + else + { + if (ENVIRONMENT is "dev") + { + data_ini = new DateTime(2021, 3, 1); + data_fim = new DateTime(2021, 3, 2); + } + else + { + //configuração mês atual + data_ini = new DateTime(now.Year, now.Month, 1); + data_fim = new DateTime(now.Year, now.Month, now.Day); + } + } Exclui_med(data_ini.ToOADate(), data_fim.ToOADate(), caminho_BD); - //abre a conexao com o BD onde serao salvos os dados - caminho_BD = @"X:\Back\Carteira x.x\Gestão Geral v1\Access\BDs teste\DB_med_5min.accdb"; - OleDbConnection conn = new("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + caminho_BD + ";Jet OLEDB:Database Password=gds21"); - conn.Open(); + caminho_BD = @"\\srv-dados\documentos\Back\Carteira x.x\Gestão Geral v1\Access\BDs teste\DB_med_5min.accdb"; + OleDbConnection access_conn = new("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + caminho_BD + ";Jet OLEDB:Database Password=gds21"); + + NpgsqlConnection pg_conn; + if (ENVIRONMENT is "dev") + { + pg_conn = new(PG_CONN_STRING_DEV); + } + else + { + pg_conn = new(PG_CONN_STRING_PROD); + } //loop para cada dia e cada cod ponto salvando os dados no BD - await assync_requisicao_http(data_ini, data_fim, lt_perf_pto, conn, caminho_log); + req_sincrona(data_ini, data_fim, lt_perf_pto, access_conn, pg_conn, caminho_log); - //await Task.WhenAll(tk_proces); - - Thread.Sleep(2000); Console.WriteLine("Concluido. Tempo TOTAL de execucao: {0}", DateTime.Now - tempo_ini); - //conn.Close(); - return 0; - - } - - public static async Task assync_requisicao_http(DateTime data_inicial, DateTime data_final, List> lt_perf_pto, OleDbConnection conn, string caminho_log) - { - string log_erros; - int i; - long erros = 0; - var handler = new HttpClientHandler(); - int tam_arr; - - tam_arr = ((data_final - data_inicial).Days) * lt_perf_pto.Count; - - Task[] arr_Tks = new Task[tam_arr - 1]; - Task[] arr_Tks_gen = new Task[tam_arr - 1]; - var arr_Var = new HttpResponseMessage[tam_arr - 1]; - //handler.ClientCertificateOptions = ClientCertificateOption.Manual; - //CURRENT_USER\My\Smart - //handler.ClientCertificates.Add(new X509Certificate2(@"X:\Back\APP Smart\Certificado\Nova\certificado-20207591.pfx", "appsmart")); - //handler.ClientCertificates.Add(new certificate); - handler.ClientCertificateOptions = ClientCertificateOption.Automatic; - - DateTime aux_tempo = DateTime.Now; - var client = new HttpClient(handler); - client.DefaultRequestHeaders.Add("SOAPAction", "listarMedidaCincoMinutos"); - var endpoint = new Uri("https://servicos.ccee.org.br:443/ws/v2/MedidaCincoMinutosBSv2"); - - i = 0; - while (data_inicial < data_final) - { - foreach (Tuple item in lt_perf_pto) - { - var payload = new StringContent(Xml_requisicao(data_inicial, item.Item1, item.Item2, 1), Encoding.UTF8, "application/json"); - //Salva_arquivos_entrada(Xml_requisicao(data_inicial, item.Item1, item.Item2), conn, i); - arr_Tks[i] = client.PostAsync(endpoint, payload); - Console.WriteLine("Iteracao {0,3}: {1,20} - {2,15}", i, item.Item1, item.Item2); - i++; - } - data_inicial = data_inicial.AddDays(1); - } - Console.WriteLine("{0} Requisicoes realizadas", i); - tam_arr = i; - //Parallel.For(0, tam_arr, (i, state) => { - // //Parallel.For(1, 3, (i, state) => { - // var retorno = arr_Tks[i].Result; - // try { - // arr_Tks_gen[i] = processar_XML_assync(retorno.Content.ReadAsStringAsync().Result, conn); - // Console.WriteLine("Processando requisicao {0,2}", i); - // } catch (Exception) { - // Task.Delay(1000); - // //arr_Tks_gen[i] = processar_XML_assync(retorno.Content.ReadAsStringAsync().Result, conn); - // erros++; - // } - //}); - - log_erros = "Perfil;Ponto;\n"; - await Task.Run(() => - { - //for (i = 0; i < tam_arr; i++) { - Parallel.For(1, tam_arr, async (i, state) => - { - var retorno = await arr_Tks[i]; - try - { - if (retorno.IsSuccessStatusCode) - { - arr_Tks_gen[i] = processar_XML_assync(retorno.Content.ReadAsStringAsync().Result, conn); - Console.WriteLine("Processando requisicao {0,2}", i); - } - else - { - erros++; - log_erros += lt_perf_pto[i].Item1 + ";" + lt_perf_pto[i].Item2 + ";\n"; - } - - } - catch (Exception) - { - await Task.Delay(1000); - arr_Tks_gen[i] = processar_XML_assync(retorno.Content.ReadAsStringAsync().Result, conn); - erros++; - } - }); - }); - - - await Task.WhenAll(arr_Tks_gen.ToArray()); - await Task.WhenAll(arr_Tks_gen); - Task.WaitAll(arr_Tks_gen); - Task.WaitAll(arr_Tks_gen.ToArray()); - - Console.WriteLine("Houve {0} requisicoes, com {1} erros", tam_arr, erros); - File.WriteAllText(caminho_log, log_erros); - client.Dispose(); - - //Console.WriteLine("Tempo esperando o processamento {0}", DateTime.Now - aux_tempo); - return 2; - } - - - //processa as respostas de forma assincrona -#pragma warning disable CS8602 // Dereference of a possibly null reference. - public static async Task processar_XML_assync(string entrada, OleDbConnection conn) - { - XmlDocument doc = new XmlDocument(); - doc.LoadXml(entrada); - //doc.Save(@"X:\Back\PLD Horário\xmlresposta.xml - DateTime aux_data = new DateTime(2005, 01, 01); - DateTime tempo_xml; - string strCOM; - - tempo_xml = DateTime.Now; - - double data, ativa_g, ativa_c, reat_g, reat_c; - long min; - string ponto, origem; - - - XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); - nsmgr.AddNamespace("hdr", "http://xmlns.energia.org.br/MH/v2"); - nsmgr.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope"); - nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - nsmgr.AddNamespace("bmv2", "http://xmlns.energia.org.br/BM/v2"); - nsmgr.AddNamespace("bov2", "http://xmlns.energia.org.br/BO/v2"); - - await Task.Run(() => - { - foreach (XmlNode n1 in doc.SelectNodes("//bmv2:medidas//bov2:medida", nsmgr)) - { - if (n1.SelectSingleNode("bov2:tipoEnergia//bov2:codigo", nsmgr).InnerText == "L") - { - - aux_data = DateTime.ParseExact(n1.SelectSingleNode("bov2:data", nsmgr).InnerText, "yyyy-MM-dd'T'HH:mm:ss'-03:00'", null); - data = (aux_data.ToOADate() - aux_data.ToOADate() % 1); - min = aux_data.Hour * 60 + aux_data.Minute; - - if (min == 0) - { - min = 1440; - data--; - } - - ponto = n1.SelectSingleNode("bov2:medidor//bov2:codigo", nsmgr).InnerText; - origem = n1.SelectSingleNode("bov2:coletaMedicao//bov2:tipo//bov2:nome", nsmgr).InnerText; - - Double.TryParse(n1.SelectSingleNode("bov2:energiaAtiva//bov2:consumo//bov2:valor", nsmgr).InnerText, out ativa_c); - Double.TryParse(n1.SelectSingleNode("bov2:energiaAtiva//bov2:geracao//bov2:valor", nsmgr).InnerText, out ativa_g); - Double.TryParse(n1.SelectSingleNode("bov2:energiaReativa//bov2:consumo//bov2:valor", nsmgr).InnerText, out reat_c); - Double.TryParse(n1.SelectSingleNode("bov2:energiaReativa//bov2:geracao//bov2:valor", nsmgr).InnerText, out reat_g); - - strCOM = "INSERT INTO Med_5min (Origem, Data, Minuto, Ativa_consumo, Ativa_geracao, Reativa_consumo, Reativa_geracao, Ponto)"; - strCOM += " VALUES (\"" + origem + "\"," + data + "," + min + "," + ativa_c + "," + ativa_g + "," + reat_c + "," + reat_g + ",\"" + ponto + "\")"; - - OleDbCommand tcMed = new(strCOM, conn); - OleDbDataReader reader = tcMed.ExecuteReader(); - reader.Close(); - - } - - } - }); - - } -#pragma warning restore CS8602 // Dereference of a possibly null reference. - - //salva arquivos RESPOSTA - APENAS PARA TESTES -#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously - public static async Task Salva_arquivos(string entrada, int i, int pagina) - { - XmlDocument doc = new XmlDocument(); - doc.LoadXml(entrada); - doc.Save(@"X:\Back\Carteira x.x\Codigo\__Medicoes\Dev\Resposta " + i + "_" + pagina + ".xml"); - } - - //salva arquivos REQUISICAO - APENAS PARA TESTES - public static async Task Salva_arquivos_entrada(string entrada, int i, int pagina) - { - XmlDocument doc = new XmlDocument(); - doc.LoadXml(entrada); - doc.Save(@"X:\Back\Carteira x.x\Codigo\__Medicoes\Dev\Entrada " + i + "_" + pagina + ".xml"); - } -#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------BUSCA_DAD------------------------------------------------------------- - - //prepara o xml de entrada a ser enviado à CCEE - public static string Xml_requisicao(DateTime data_req, string perfil, string cod_ponto, int pagina) - { - string cam_ent, tex_req, sdat_req; - //cam_ent = @"X:\Back\Plataforma de Integração CCEE\Medições\RequestPaginate.txt"; - cam_ent = @"X:\Back\Plataforma de Integração CCEE\RequestPaginate.txt"; - cod_ponto += "P"; - sdat_req = data_req.ToString("yyyy-MM-ddT00:00:00"); //2022-12-31T00:00:00 - tex_req = File.ReadAllText(cam_ent); - tex_req = tex_req.Replace("DATAALTERADA", sdat_req); - tex_req = tex_req.Replace("PONTOMEDICAO", cod_ponto); - tex_req = tex_req.Replace("CODPERFIL", perfil); - tex_req = tex_req.Replace("PAGNUM", pagina.ToString()); - return tex_req; } //busca lista de PerfisCCEE e codigos ponto de medicao no BD cadastral public static List> Busca_dad_BD(string caminho_BD) { var lt_perf_pto = new List>(); - //lt_perf_pto.Add(new Tuple(2, "USA", "328 Millionen")); string strCOM; int i; @@ -313,9 +115,7 @@ internal class Plat_integ i = 0; while (reader.Read()) { -#pragma warning disable CS8604 // Possible null reference argument. lt_perf_pto.Add(new Tuple(reader["Cod_5min"].ToString(), reader["Codigo_SCDE"].ToString())); -#pragma warning restore CS8604 // Possible null reference argument. i++; } @@ -356,119 +156,90 @@ internal class Plat_integ return; } - - //MÉTODO SÍNCRONO - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -#pragma warning disable CS8602 // Possible null reference argument. - public static void down_sync(bool loadFromArgs, string[] args) + public static void req_sincrona(DateTime data_inicial, DateTime data_final, List> lt_perf_pto, OleDbConnection access_conn, NpgsqlConnection pg_conn, string caminho_log) { - string caminho_BD, caminho_log, caminho_log_sec; - DateTime tempo_ini; - List> lt_perf_pto; + string log_erros; + int i; + long erros = 0; + var handler = new HttpClientHandler(); + int tam_arr; + tam_arr = ((data_final - data_inicial).Days) * lt_perf_pto.Count; - Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB"); + handler.ClientCertificateOptions = ClientCertificateOption.Automatic; - //auxiliar para calculo do tempo de execucao do codigo - tempo_ini = DateTime.Now; + DateTime aux_tempo = DateTime.Now; + var client = new HttpClient(handler); + client.DefaultRequestHeaders.Add("SOAPAction", "listarMedidaCincoMinutos"); + var endpoint = new Uri("https://servicos.ccee.org.br:443/ws/v2/MedidaCincoMinutosBSv2"); - //busca os dados para compor a lista perfis x - caminho_BD = @"\\srv-dados\documentos\Middle\Informativo Setorial\Modelo Word\BD1_dados cadastrais e faturas.accdb"; - caminho_log = @"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_" + DateTime.Now.Month + "_" + DateTime.Now.Day + "_" + DateTime.Now.Hour + "_" + DateTime.Now.Second + ".csv"; - lt_perf_pto = Busca_dad_BD(caminho_BD); //ACCESS OK - PG OK + i = 0; + log_erros = "Perfil;Ponto;Status;Message\n"; - //exlclui os dados do mes atual salvos no BD - caminho_BD = @"\\srv-dados\documentos\Back\Carteira x.x\Gestão Geral v1\Access\BDs teste\DB_med_5min.accdb"; - DateTime now = DateTime.Now; - //PROD - DateTime data_ini; - DateTime data_fim; - if (loadFromArgs) + while (data_inicial < data_final) { - /* - args[0] ano inicio - args[1] mes inicio - args[2] ano fim - args[3] mes fim - */ - int ano_ini = Int32.Parse(args[0]); - int mes_ini = Int32.Parse(args[1]); - int ano_fim = Int32.Parse(args[2]); - int mes_fim = Int32.Parse(args[3]); - - //DateTime now = DateTime.Now.AddMonths(-1); - //DateTime data_ini = new DateTime(now.Year, now.Month, 1); - //DateTime data_fim = new DateTime(now.Year, now.Month, now.Day); - - data_ini = new DateTime(ano_ini, mes_ini, 1); - data_fim = new DateTime(ano_fim, mes_fim, 1).AddMonths(1); - } - else - { - if (ENVIRONMENT is "dev") + foreach (Tuple item in lt_perf_pto) { - data_ini = new DateTime(2021, 3, 1); - data_fim = new DateTime(2021, 3, 2); + int pagina = 1; + int paginasTotal = 1; + try + { + while (pagina <= paginasTotal) + { + var payload = new StringContent(Xml_requisicao(data_inicial, item.Item1, item.Item2, pagina), Encoding.UTF8, "application/json"); + var retorno = client.PostAsync(endpoint, payload).Result.Content.ReadAsStringAsync().Result.ToString(); + Console.WriteLine("Processando requisicao {0,5}, Perf: {1,6}, Ponto: {2,10}, Página: {3}", i, item.Item1, item.Item2, pagina); + if (access_conn != null && access_conn.State == ConnectionState.Closed) + { + access_conn.Open(); + } + if (pg_conn != null && pg_conn.State == ConnectionState.Closed) + { + pg_conn.Open(); + } + paginasTotal = processar_XML_sincrono(retorno, access_conn, pg_conn); + + pagina++; + } + } + catch (Exception he) + { + Console.WriteLine(he.Message); + Console.WriteLine("caught exception"); + erros++; + log_erros += item.Item1 + ";" + item.Item2 + ";Erro;" + he.Message.Replace("\n", "-n-") + "\n"; + continue; + } + + i++; + pag_ant = null; } - else - { - //configuração puxar desde o início do ano anterior - //data_ini = new DateTime(now.Year - 1, 1, 1); - //data_fim = new DateTime(now.Year, now.Month, now.Day); - - //configuração mês anterior - //data_ini = new DateTime(now.Year, now.Month, 1).AddMonths(-1); - //data_fim = new DateTime(now.Year, now.Month, 1); - - //configuração mês atual - data_ini = new DateTime(now.Year, now.Month, 1); - data_fim = new DateTime(now.Year, now.Month, now.Day); - - //configuração mês especifico - //data_ini = new DateTime(2022, 6, 1); - //data_fim = new DateTime(2022, 7, 1); - } - } - Exclui_med(data_ini.ToOADate(), data_fim.ToOADate(), caminho_BD); - //abre a conexao com o BD onde serao salvos os dados - caminho_BD = @"\\srv-dados\documentos\Back\Carteira x.x\Gestão Geral v1\Access\BDs teste\DB_med_5min.accdb"; - OleDbConnection access_conn = new("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + caminho_BD + ";Jet OLEDB:Database Password=gds21"); - //OleDbConnection conn = new("Provider=PostgreSQL OLE DB Provider;Data Source=Local;location=primeira_DB;User ID=postgres;password=bdnp;"); - //conn.Open(); - - NpgsqlConnection pg_conn; - if (ENVIRONMENT is "dev") - { - pg_conn = new(PG_CONN_STRING_DEV); - } - else - { - pg_conn = new(PG_CONN_STRING_PROD); + data_inicial = data_inicial.AddDays(1); } - //loop para cada dia e cada cod ponto salvando os dados no BD - req_sincrona(data_ini, data_fim, lt_perf_pto, access_conn, pg_conn, caminho_log); + Console.WriteLine("Houve {0} requisicoes, com {1} erros", i, erros); + File.WriteAllText(caminho_log, log_erros); + client.Dispose(); + } - Console.WriteLine("Concluido. Tempo TOTAL de execucao: {0}", DateTime.Now - tempo_ini); + //prepara o xml de entrada a ser enviado à CCEE + public static string Xml_requisicao(DateTime data_req, string perfil, string cod_ponto, int pagina) + { + string cam_ent, tex_req, sdat_req; + //cam_ent = @"X:\Back\Plataforma de Integração CCEE\Medições\RequestPaginate.txt"; + cam_ent = @"X:\Back\Plataforma de Integração CCEE\RequestPaginate.txt"; + cod_ponto += "P"; + sdat_req = data_req.ToString("yyyy-MM-ddT00:00:00"); //2022-12-31T00:00:00 + tex_req = File.ReadAllText(cam_ent); + tex_req = tex_req.Replace("DATAALTERADA", sdat_req); + tex_req = tex_req.Replace("PONTOMEDICAO", cod_ponto); + tex_req = tex_req.Replace("CODPERFIL", perfil); + tex_req = tex_req.Replace("PAGNUM", pagina.ToString()); + return tex_req; } public static int processar_XML_sincrono(string entrada, OleDbConnection access_conn, NpgsqlConnection pg_conn) { XmlDocument doc = new XmlDocument(); doc.LoadXml(entrada); - //doc.Save(@"X:\Back\PLD Horário\xmlresposta.xml DateTime aux_data = new DateTime(2005, 01, 01); DateTime tempo_xml; string access_strCOM, pg_strCOM, log_erros; @@ -558,29 +329,9 @@ internal class Plat_integ Double.TryParse(node.SelectSingleNode("bov2:energiaReativa//bov2:consumo//bov2:valor", nsmgr).InnerText, out reat_c); Double.TryParse(node.SelectSingleNode("bov2:energiaReativa//bov2:geracao//bov2:valor", nsmgr).InnerText, out reat_g); - /* - TODO: - - Study -> Batch insert + Single transaction - */ - //ACCESS DB START access_strCOM = "INSERT INTO Med_5min (Origem, Data, Minuto, Ativa_consumo, Ativa_geracao, Reativa_consumo, Reativa_geracao, Ponto)"; access_strCOM += " VALUES (\"" + origem + "\"," + data + "," + min + "," + ativa_c + "," + ativa_g + "," + reat_c + "," + reat_g + ",\"" + ponto + "\")"; - //OleDbCommand access_tcMed = new(access_strCOM, access_conn); - //OleDbDataReader access_reader = access_tcMed.ExecuteReader(); - //access_reader.Close(); - //ACCESS DB END - /* - TODO: - - Multi/batch insert - - Single transaction insert (or batch size) - */ - //PGSQL START - //pg_strCOM = "INSERT INTO \"med_5min\"(\"origem\", \"dia_num\", \"minuto\", \"ativa_consumo\", \"ativa_geracao\", \"reativa_consumo\", \"reativa_geracao\", \"ponto\")\n"; - //NpgsqlCommand pg_tcMed = new(pg_strCOM, pg_conn); - //NpgsqlDataReader pg_reader = pg_tcMed.ExecuteReader(); - //pg_reader.Close(); - //pg_strCOM += " VALUES ('" + origem + "'," + data + "," + min + "," + ativa_c + "," + ativa_g + "," + reat_c + "," + reat_g + ",'" + ponto + "');"; pg_writer.StartRow(); pg_writer.Write(origem); pg_writer.Write(data, NpgsqlTypes.NpgsqlDbType.Numeric); @@ -598,11 +349,6 @@ internal class Plat_integ var data_fut = "a"; if (i + 1 < pag_ant.Count()) { - //XmlDocument node_futDoc = new XmlDocument(); - //node_futDoc.LoadXml(pag_ant.ElementAt(i + 1).ToString()); - //XmlNode node_fut = node_futDoc.SelectSingleNode("//bov2:medida", nsmgr); - //data_fut = node_fut.SelectSingleNode("bov2:data", nsmgr).InnerText; - data_fut = pag_ant.ElementAt(i + 1).Element("{http://xmlns.energia.org.br/BO/v2}data").Value; } @@ -633,29 +379,10 @@ internal class Plat_integ Double.TryParse(node.SelectSingleNode("bov2:energiaReativa//bov2:consumo//bov2:valor", nsmgr).InnerText, out reat_c); Double.TryParse(node.SelectSingleNode("bov2:energiaReativa//bov2:geracao//bov2:valor", nsmgr).InnerText, out reat_g); - /* - TODO: - - Study -> Batch insert + Single transaction - */ - //ACCESS DB START + access_strCOM = "INSERT INTO Med_5min (Origem, Data, Minuto, Ativa_consumo, Ativa_geracao, Reativa_consumo, Reativa_geracao, Ponto)"; access_strCOM += " VALUES (\"" + origem + "\"," + data + "," + min + "," + ativa_c + "," + ativa_g + "," + reat_c + "," + reat_g + ",\"" + ponto + "\")"; - //OleDbCommand access_tcMed = new(access_strCOM, access_conn); - //OleDbDataReader access_reader = access_tcMed.ExecuteReader(); - //access_reader.Close(); - //ACCESS DB END - /* - TODO: - - Multi/batch insert - - Single transaction insert (or batch size) - */ - //PGSQL START - //pg_strCOM = "INSERT INTO \"med_5min\"(\"origem\", \"dia_num\", \"minuto\", \"ativa_consumo\", \"ativa_geracao\", \"reativa_consumo\", \"reativa_geracao\", \"ponto\")\n"; - //NpgsqlCommand pg_tcMed = new(pg_strCOM, pg_conn); - //NpgsqlDataReader pg_reader = pg_tcMed.ExecuteReader(); - //pg_reader.Close(); - //pg_strCOM += " VALUES ('" + origem + "'," + data + "," + min + "," + ativa_c + "," + ativa_g + "," + reat_c + "," + reat_g + ",'" + ponto + "');"; pg_writer.StartRow(); pg_writer.Write(origem); pg_writer.Write(data, NpgsqlTypes.NpgsqlDbType.Numeric); @@ -683,137 +410,5 @@ internal class Plat_integ File.WriteAllText(caminho_log_sec, log_erros); return 1; } - } -#pragma warning restore CS8602 // Possible null reference argument. - - public static void req_sincrona(DateTime data_inicial, DateTime data_final, List> lt_perf_pto, OleDbConnection access_conn, NpgsqlConnection pg_conn, string caminho_log) - { - string log_erros; - int i; - long erros = 0; - var handler = new HttpClientHandler(); - int tam_arr; - //data_inicial = new DateTime(2022, 4, 2); - tam_arr = ((data_final - data_inicial).Days) * lt_perf_pto.Count; - - //handler.ClientCertificateOptions = ClientCertificateOption.Manual; - //CURRENT_USER\My\Smart - //handler.ClientCertificates.Add(new X509Certificate2(@"X:\Back\APP Smart\Certificado\Nova\certificado-20207591.pfx", "appsmart")); - //handler.ClientCertificates.Add(new certificate); - handler.ClientCertificateOptions = ClientCertificateOption.Automatic; - - DateTime aux_tempo = DateTime.Now; - var client = new HttpClient(handler); - client.DefaultRequestHeaders.Add("SOAPAction", "listarMedidaCincoMinutos"); - var endpoint = new Uri("https://servicos.ccee.org.br:443/ws/v2/MedidaCincoMinutosBSv2"); - - i = 0; - log_erros = "Perfil;Ponto;Status;Message\n"; - - while (data_inicial < data_final) - { - foreach (Tuple item in lt_perf_pto) - { - /* - TODO: - - Incluir paginação - */ - int pagina = 1; - int paginasTotal = 1; - try - { - while (pagina <= paginasTotal) - { - var payload = new StringContent(Xml_requisicao(data_inicial, item.Item1, item.Item2, pagina), Encoding.UTF8, "application/json"); - if (SAVE_XML_IN) - { - Salva_arquivos_entrada(Xml_requisicao(data_inicial, item.Item1, item.Item2, pagina), i, pagina).Wait(); - } - var retorno = client.PostAsync(endpoint, payload).Result.Content.ReadAsStringAsync().Result.ToString(); - Console.WriteLine("Processando requisicao {0,5}, Perf: {1,6}, Ponto: {2,10}, Página: {3}", i, item.Item1, item.Item2, pagina); - if (SAVE_XML_OUT) - { - Salva_arquivos(retorno, i, pagina).Wait(); - } - if (access_conn != null && access_conn.State == ConnectionState.Closed) - { - access_conn.Open(); - } - if (pg_conn != null && pg_conn.State == ConnectionState.Closed) - { - pg_conn.Open(); - } - paginasTotal = processar_XML_sincrono(retorno, access_conn, pg_conn); - - //log_erros += item.Item1 + ";" + item.Item2 + ";OK;\n"; - pagina++; - } - } - catch (Exception he) - { - Console.WriteLine(he.Message); - Console.WriteLine("caught exception"); - erros++; - log_erros += item.Item1 + ";" + item.Item2 + ";Erro;" + he.Message.Replace("\n", "-n-") + "\n"; - //Console.ReadKey(); - continue; - } - //} catch (IOException ie) { - // Console.WriteLine("caught exception" + ie.Message); - // erros++; - // log_erros += item.Item1 + ";" + item.Item2 + ";Erro;\n"; - //} catch (SocketException se) { - // Console.WriteLine("caught exception" + se.Message); - // erros++; - // log_erros += item.Item1 + ";" + item.Item2 + ";Erro;\n"; - //} finally { - - //} - i++; - pag_ant = null; - } - data_inicial = data_inicial.AddDays(1); - } - - Console.WriteLine("Houve {0} requisicoes, com {1} erros", i, erros); - File.WriteAllText(caminho_log, log_erros); - client.Dispose(); - - } - - //public static void ler_xml_salvos() { - // long i=0, max_i,err=0; - - // string caminho_BD = @"X:\Back\Carteira x.x\Gestão Geral v1\Access\BDs teste\DB_med_5min.accdb"; - // string caminho_xmls = @"X:\Back\Carteira x.x\Codigo\__Medicoes"; - // OleDbConnection conn = new("Provider =Microsoft.ACE.OLEDB.12.0;Data Source=" + caminho_BD + ";Jet OLEDB:Database Password=gds21"); - // //OleDbConnection conn = new("Provider=PostgreSQL OLE DB Provider;Data Source=Local;location=primeira_DB;User ID=postgres;password=bdnp;"); - // //NpgsqlConnection conn = new("Server = 127.0.0.1; Port = 5432; Database = primeira_db; User Id = postgres; Password = bdnp;"); - - - // var pasta = Directory.GetFiles(caminho_xmls); - // max_i=pasta.Length; - - // //var files = from file in Directory.EnumerateFiles(caminho_xml) select file; - - // conn.Open(); - // foreach (string arqs in pasta) { - // try { - // processar_XML_sincrono(System.IO.File.ReadAllText(arqs), conn); - // } catch (Exception e) { - // if (conn.State != ConnectionState.Open) { - // conn.Open(); - // } - // err++; - // } - // Console.WriteLine("Processando arquivo {0} de {1}",i,max_i); - // i++; - // } - - // Console.WriteLine("Finalizado. Arquivos armazenados lidos e salvos no BD, com {0} erros",err); - // conn.Close(); - - //} - } \ No newline at end of file