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