Requisições realizadas por dia.

Dados inseridos no Postgres em Bulk.
This commit is contained in:
Adriano Serighelli 2025-03-24 11:36:42 -03:00
parent cfe6605f49
commit d3536ef422
3 changed files with 36 additions and 18 deletions

View File

@ -2,8 +2,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using Npgsql; using Npgsql;
using PI_Assync_PLD.Models; using PI_Assync_PLD.Models;
using Windows.Devices.Sensors;
public class PostgresRepository : IDataRepository public class PostgresRepository : IDataRepository
{ {
private readonly string _connectionString; private readonly string _connectionString;
@ -39,23 +40,33 @@ using PI_Assync_PLD.Models;
using var transaction = conn.BeginTransaction(); using var transaction = conn.BeginTransaction();
string query = "INSERT INTO pld (dia_num, hora, submercado, valor, mes_ref, dia_da_semana) " + var sb = new System.Text.StringBuilder();
"VALUES (@Dia, @Hora, @Submercado, @Valor, @MesRef, @DiaSemana)"; sb.Append("INSERT INTO pld (dia_num, hora, submercado, valor, mes_ref, dia_da_semana) VALUES ");
using var cmd = new NpgsqlCommand(query, conn, transaction); var parametros = new List<NpgsqlParameter>();
int count = 0;
foreach (var pld in novosPLDs) foreach (var pld in novosPLDs)
{ {
cmd.Parameters.Clear(); sb.Append($"(@Dia{count}, @Hora{count}, @Submercado{count}, @Valor{count}, @MesRef{count}, @DiaSemana{count}),");
cmd.Parameters.AddWithValue("@Dia", pld.Dia.ToOADate());
cmd.Parameters.AddWithValue("@Hora", pld.Hora); parametros.Add(new NpgsqlParameter($"@Dia{count}", NpgsqlTypes.NpgsqlDbType.Integer) { Value = pld.Dia.ToOADate() });
cmd.Parameters.AddWithValue("@Submercado", pld.Submercado); parametros.Add(new NpgsqlParameter($"@Hora{count}", NpgsqlTypes.NpgsqlDbType.Integer) { Value = pld.Hora });
cmd.Parameters.AddWithValue("@Valor", pld.Valor); parametros.Add(new NpgsqlParameter($"@Submercado{count}", NpgsqlTypes.NpgsqlDbType.Text) { Value = pld.Submercado });
cmd.Parameters.AddWithValue("@MesRef", pld.Mes); parametros.Add(new NpgsqlParameter($"@Valor{count}", NpgsqlTypes.NpgsqlDbType.Double) { Value = pld.Valor });
cmd.Parameters.AddWithValue("@DiaSemana", pld.DiaSemana); parametros.Add(new NpgsqlParameter($"@MesRef{count}", NpgsqlTypes.NpgsqlDbType.Text) { Value = pld.Mes });
cmd.ExecuteNonQuery(); parametros.Add(new NpgsqlParameter($"@DiaSemana{count}", NpgsqlTypes.NpgsqlDbType.Integer) { Value = pld.DiaSemana });
count++;
} }
// Removemos a última vírgula da query
sb.Length--;
using var cmd = new NpgsqlCommand(sb.ToString(), conn, transaction);
cmd.Parameters.AddRange(parametros.ToArray());
cmd.ExecuteNonQuery();
transaction.Commit(); transaction.Commit();
} }
} }

View File

@ -1,4 +1,5 @@
using System.Security.Cryptography.X509Certificates; using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Text; using System.Text;
public class HttpClientService public class HttpClientService
@ -9,7 +10,14 @@ public class HttpClientService
{ {
var handler = new HttpClientHandler var handler = new HttpClientHandler
{ {
ClientCertificates = { new X509Certificate2("X:\\Back\\APP Smart\\Certificado\\cert_ssl.pfx", "appsmart") } ClientCertificates = { new X509Certificate2("X:\\Back\\APP Smart\\Certificado\\cert_ssl.pfx", "appsmart") },
//// Configura o proxy do Fiddler
//Proxy = new WebProxy("127.0.0.1", 8888),
//UseProxy = true,
//// Permite qualquer certificado SSL (para evitar erros com o proxy do Fiddler)
//ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true
}; };
_client = new HttpClient(handler) { DefaultRequestHeaders = { { "SOAPAction", "listarPLD" } } }; _client = new HttpClient(handler) { DefaultRequestHeaders = { { "SOAPAction", "listarPLD" } } };
} }

View File

@ -33,12 +33,11 @@ public class PLDService
for (DateTime data = menorDataInicial; data < dataFinal; data = data.AddDays(1)) for (DateTime data = menorDataInicial; data < dataFinal; data = data.AddDays(1))
{ {
DateTime dataInicio = data; DateTime dataInicio = data;
DateTime dataFim = dataInicio.AddDays(1);
tarefasRequisicoes.Add(Task.Run(async () => tarefasRequisicoes.Add(Task.Run(async () =>
{ {
await _requestLimiter.WaitAsync(); await _requestLimiter.WaitAsync();
string xmlResponse = await _httpClient.EnviarRequisicaoAsync(PrepararXML(dataInicio, dataFim)); string xmlResponse = await _httpClient.EnviarRequisicaoAsync(PrepararXML(dataInicio));
_requestLimiter.Release(); _requestLimiter.Release();
return xmlResponse; return xmlResponse;
})); }));
@ -81,11 +80,11 @@ public class PLDService
} }
} }
private string PrepararXML(DateTime inicio, DateTime fim) private string PrepararXML(DateTime inicio)
{ {
string xmlTemplate = System.IO.File.ReadAllText(@"X:\Back\PLD Horário\listarPLD.txt"); string xmlTemplate = System.IO.File.ReadAllText(@"X:\Back\PLD Horário\listarPLD.txt");
return xmlTemplate.Replace("DATA_INI", inicio.ToString("yyyy-MM-ddT00:00:00")) return xmlTemplate.Replace("DATA_INI", inicio.ToString("yyyy-MM-ddT00:00:00"))
.Replace("DATA_FIM", fim.ToString("yyyy-MM-ddT00:00:00")) .Replace("DATA_FIM", inicio.ToString("yyyy-MM-ddT00:00:00"))
.Replace("PAG_NUM", "1"); .Replace("PAG_NUM", "1");
} }
} }