From 657fd50ac95be2b7e51339d5f1e10dea5852c987 Mon Sep 17 00:00:00 2001 From: bcastrogallardo Date: Wed, 16 Jul 2025 20:39:24 -0400 Subject: [PATCH 1/9] =?UTF-8?q?integraci=C3=B3n=20nueva=20tabla?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...{BusinessLogic.cs => ObtencionDatosDga.cs} | 71 ++++------- BLL/Recuperacion_DGA/EnvioDGA.cs | 111 ++++-------------- DAL/Encriptador.cs | 54 --------- DAL/JobsDgaSupFlujRepository.cs | 74 ------------ ...adaRepository.cs => LogEnvioRepository.cs} | 4 +- ...Repository.cs => MedicionDGARepository.cs} | 8 +- DAS/RegistrarMedicion.cs | 71 ++++++----- Integracion_DGA/Program.cs | 11 +- Recuperacion_DGA/Program.cs | 4 +- SHARED/DTO/Envios_DGA/ApiResponse.cs | 15 +++ SHARED/DTO/Envios_DGA/DatoDGA.cs | 27 +++++ SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs | 12 ++ SHARED/DTO/Envios_DGA/LogMedicionScada.cs | 12 -- SHARED/DTO/Envios_DGA/MedicionScada.cs | 28 ----- .../Envios_DGA/MedicionSubterraneaRequest.cs | 20 ++-- .../Envios_DGA/MedicionSubterraneaResponse.cs | 13 ++ .../DTO/Integracion_DGA/DgaMacroResultado.cs | 12 -- .../DgaMacroResultadoSupFluj.cs | 12 -- .../DgaMacroResultadoSupFlujSuma.cs | 12 -- .../DTO/Integracion_DGA/DgaSensorResultado.cs | 12 -- SHARED/Helper/ConsoleLoggerHelper.cs | 39 ++++++ SHARED/Helper/FileLoggerHelper.cs | 28 +---- 22 files changed, 203 insertions(+), 447 deletions(-) rename BLL/Integracion_DGA/{BusinessLogic.cs => ObtencionDatosDga.cs} (67%) delete mode 100644 DAL/Encriptador.cs delete mode 100644 DAL/JobsDgaSupFlujRepository.cs rename DAL/{LogMedicionScadaRepository.cs => LogEnvioRepository.cs} (88%) rename DAL/{MedicionScadaRepository.cs => MedicionDGARepository.cs} (79%) create mode 100644 SHARED/DTO/Envios_DGA/ApiResponse.cs create mode 100644 SHARED/DTO/Envios_DGA/DatoDGA.cs create mode 100644 SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs delete mode 100644 SHARED/DTO/Envios_DGA/LogMedicionScada.cs delete mode 100644 SHARED/DTO/Envios_DGA/MedicionScada.cs create mode 100644 SHARED/DTO/Envios_DGA/MedicionSubterraneaResponse.cs delete mode 100644 SHARED/DTO/Integracion_DGA/DgaMacroResultado.cs delete mode 100644 SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFluj.cs delete mode 100644 SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFlujSuma.cs delete mode 100644 SHARED/DTO/Integracion_DGA/DgaSensorResultado.cs create mode 100644 SHARED/Helper/ConsoleLoggerHelper.cs diff --git a/BLL/Integracion_DGA/BusinessLogic.cs b/BLL/Integracion_DGA/ObtencionDatosDga.cs similarity index 67% rename from BLL/Integracion_DGA/BusinessLogic.cs rename to BLL/Integracion_DGA/ObtencionDatosDga.cs index fb22fe4..6d702b2 100644 --- a/BLL/Integracion_DGA/BusinessLogic.cs +++ b/BLL/Integracion_DGA/ObtencionDatosDga.cs @@ -7,33 +7,28 @@ using Shared.Helper; namespace BLL.Integracion_DGA { - public class BusinessLogic + public class ObtencionDatosDga { private readonly IConfiguration _configuration; private readonly ApiService _apiService; private readonly JobsDgaRepository _jobs; - private readonly JobsDgaSupFlujRepository _jobsSupFluj; - private readonly FileLoggerHelper _fileLoggerHelper; - public BusinessLogic(IConfiguration configuration, ApiService apiService, JobsDgaRepository jobs, JobsDgaSupFlujRepository jobsSupFluj) + public ObtencionDatosDga(IConfiguration configuration, ApiService apiService, JobsDgaRepository jobs) { _configuration = configuration; _apiService = apiService; _jobs = jobs; - _jobsSupFluj = jobsSupFluj; FileLoggerHelper.ConfigureLogger(_configuration); } - public async Task Run() + public async Task ObtenerDatosDga() { - DateTimeOffset dateEnd = DateTimeOffset.Now; DateTimeOffset dateStart = dateEnd.AddHours(-1); JsonSerializerOptions options = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }; - //FileLoggerHelper.ConfigureLogger(_configuration); - WriteLineAndLog($"Inicia Proceso DGA"); + ConsoleLoggerHelper.WriteLineAndLogInfo($"INICIO OBTENER DATOS DGA"); try { string apiUrlBase = NexusApiUrl.ApiUrl; @@ -44,19 +39,25 @@ namespace BLL.Integracion_DGA { "accept", "application/json" } }; - WriteLineAndLog($"Obteniendo Documentos"); + ConsoleLoggerHelper.WriteLineAndLogInfo($"OBTENIENDO DOCUMENTOS"); string apiUrlDocuments = apiUrlBase + "/api/Documents"; // Utiliza el servicio para realizar la solicitud a la API con URL y encabezados personalizados string responseData = await _apiService.GetApiResponseAsync(apiUrlDocuments, headers); var documento = JsonSerializer.Deserialize>(responseData, options); + + if (documento == null || documento.Count == 0) + { + return; + } + foreach (DocumentResponse item in documento) { - WriteLineAndLog($"Obteniendo Tagviews"); + ConsoleLoggerHelper.WriteLineAndLogInfo($"OBTENIENDO TAGVIEWS"); string apiUrlTagViews = $"{apiUrlBase}/api/Documents/tagviews/{item.uid}"; responseData = await _apiService.GetApiResponseAsync(apiUrlTagViews, headers); - TagviewsResponse tagviews = JsonSerializer.Deserialize(responseData, options); + TagviewsResponse tagviews = JsonSerializer.Deserialize(responseData, options) ?? new TagviewsResponse(); List listTagsID = tagviews.Columns.Select(x => x.Uid).ToList(); @@ -69,15 +70,16 @@ namespace BLL.Integracion_DGA EndTs = dateEnd.ToUnixTimeSeconds() }; - WriteLineAndLog($"Obteniendo Tagviews Historic"); + ConsoleLoggerHelper.WriteLineAndLogInfo($"OBTENIENDO TAGVIEWS HISTORIC"); string apiUrlHistoric = $"{apiUrlBase}/api/Documents/tagviews/{item.uid}/historic"; responseData = await _apiService.PostApiResponseAsync(apiUrlHistoric, headers, historicRequest); - List historicResponse = JsonSerializer.Deserialize>(responseData, options); + List historicResponse = JsonSerializer.Deserialize>(responseData, options) ?? new List(); TimeZoneInfo zonaHorariaChile = TimeZoneInfo.FindSystemTimeZoneById("Pacific SA Standard Time"); if (item.name == "API - DGA - CAUDALES") { + ConsoleLoggerHelper.WriteLineAndLogInfo($"OBTENIENDO DATOS DGA CAUDAL"); var caudalData = tagviews.Columns .SelectMany(tag => historicResponse.Where(h => h.Uid == tag.Uid) @@ -95,6 +97,7 @@ namespace BLL.Integracion_DGA } else if (item.name == "API - DGA - NIVELES") { + ConsoleLoggerHelper.WriteLineAndLogInfo($"OBTENIENDO DATOS DGA NIVEL"); var nivelData = tagviews.Columns .SelectMany(tag => historicResponse.Where(h => h.Uid == tag.Uid) @@ -110,51 +113,17 @@ namespace BLL.Integracion_DGA await _jobs.InsertarDgaNivel(nivelData); } - else if (item.name == "API - DGA") - { - var nivelData = tagviews.Columns - .SelectMany(tag => - historicResponse.Where(h => h.Uid == tag.Uid) - .Select(h => new - { - TAG = tag.Name, - NIVEL_FREATICO = h.Value?.ToString(), - FECHAMEDICION = TimeZoneInfo.ConvertTimeFromUtc( - new DateTime(1970, 1, 1).AddSeconds(h.TimeStamp).ToUniversalTime(), - zonaHorariaChile) - }) - ).ToList(); - } } - WriteLineAndLog($"INICIO REGISTRO DE MEDICIONES DGA"); + ConsoleLoggerHelper.WriteLineAndLogInfo($"INICIO REGISTRO DE MEDICIONES DGA"); await _jobs.SpRegistrarMedicionesDga(); - WriteLineAndLog($"FIN REGISTRO DE MEDICIONES DGA"); - - WriteLineAndLog($"FIN PROCESO DGA"); + ConsoleLoggerHelper.WriteLineAndLogInfo($"FIN REGISTRO DE MEDICIONES DGA"); } catch (Exception ex) { FileLoggerHelper.LogError($"{ex.Message}", ex); - WriteLineAndLog($"{ex.Message}", ConsoleColor.Red); + ConsoleLoggerHelper.WriteLineAndLogInfo($"{ex.Message}", ConsoleColor.Red); } - - } - - static void WriteLineAndLog(string msj, ConsoleColor? color = null) - { - if (color.HasValue && Enum.IsDefined(typeof(ConsoleColor), color.Value)) - { - Console.ForegroundColor = (ConsoleColor)color; - Console.WriteLine(msj); - Console.ResetColor(); - } - else - { - Console.WriteLine($"{msj}"); - } - - FileLoggerHelper.LogInformation($"{msj}"); } } } diff --git a/BLL/Recuperacion_DGA/EnvioDGA.cs b/BLL/Recuperacion_DGA/EnvioDGA.cs index b26fc37..78471cf 100644 --- a/BLL/Recuperacion_DGA/EnvioDGA.cs +++ b/BLL/Recuperacion_DGA/EnvioDGA.cs @@ -9,12 +9,12 @@ namespace BLL.Recuperacion_DGA { public class EnvioDGA { - private readonly MedicionScadaRepository _dGAMedicionScadaRepository; + private readonly MedicionDGARepository _dGAMedicionRepository; private readonly RegistrarMedicion _registrarMedicion; - public EnvioDGA(MedicionScadaRepository dGAMedicionScadaRepository, RegistrarMedicion registrarMedicion) + public EnvioDGA(MedicionDGARepository dGAMedicionRepository, RegistrarMedicion registrarMedicion) { - _dGAMedicionScadaRepository = dGAMedicionScadaRepository; + _dGAMedicionRepository = dGAMedicionRepository; _registrarMedicion = registrarMedicion; } @@ -22,55 +22,16 @@ namespace BLL.Recuperacion_DGA { try { - await WriteLineAndLog("INICIO", "Inicio proceso de recuperación DGA", ""); - WriteLineAndLog("Obteniendo Mediciones Scada", ConsoleColor.Green); - var mediciones = await _dGAMedicionScadaRepository.ObtenerMedicionesAsync(); + ConsoleLoggerHelper.WriteLineAndLogEventoAsync("INICIO", "Inicio proceso de recuperación DGA", ""); + ConsoleLoggerHelper.WriteLineAndLogInfo("Obteniendo Mediciones Scada", ConsoleColor.Green); + + var mediciones = await _dGAMedicionRepository.ObtenerMedicionesAsync(); var listaMediciones = new List(); + foreach (var medicion in mediciones) { try { - if (!string.IsNullOrEmpty(medicion.Code)) - { - var rutEmpresa = string.Empty; - if (medicion.tipo_empresa == null) - { - continue; - } - if (medicion.tipo_empresa == "AV") - { - rutEmpresa = CredencialDGA.RutAv; - } - if (medicion.tipo_empresa == "EV") - { - rutEmpresa = CredencialDGA.RutEsval; - } - - List vacios = new List(); - if (medicion.Caudal == null || medicion.Caudal.Equals("")) - { - vacios.Add("caudal"); - } - - if (medicion.DateOrigen == null) - { - vacios.Add("fecha origen"); - } - - if (medicion.nivelFreaticoDelPozo == null || medicion.nivelFreaticoDelPozo.ToString().Equals("")) - { - vacios.Add("nivel freatico"); - } - - if (medicion.Totalizador == null || medicion.Totalizador.Equals("")) - { - vacios.Add("totalizador"); - } - - if (vacios.Count > 0) - { - await FileLoggerHelper.InsertarLogsAsync("REGISTRAR", $"Medicion {medicion.Code} no registra {string.Join(", ", vacios)}",""); - } var fechaEnvio = DateTime.UtcNow; var body = new MedicionSubterraneaRequest @@ -78,76 +39,44 @@ namespace BLL.Recuperacion_DGA Autenticacion = new Autenticacion { Password = CredencialDGA.Password, - RutEmpresa = rutEmpresa, + RutEmpresa = medicion.TIPO_EMPRESA == "EV" ? CredencialDGA.RutEsval : CredencialDGA.RutAv, RutUsuario = CredencialDGA.RutUsuario }, MedicionSubterranea = new Medicion { - Caudal = medicion.Caudal.ToString() ?? "", - FechaMedicion = medicion.DateOrigen?.ToString("yyyy-MM-dd") ?? "", - HoraMedicion = medicion.DateOrigen?.ToString("HH:mm:ss") ?? "", - NivelFreaticoDelPozo = medicion.nivelFreaticoDelPozo?.ToString() ?? "", - Totalizador = medicion.Totalizador.ToString() ?? "", + Caudal = medicion.CAUDAL ?? "", + FechaMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("yyyy-MM-dd") ?? "", + HoraMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("HH:mm:ss") ?? "", + NivelFreaticoDelPozo = medicion.NIVEL_FREATICO_DEL_POZO ?? "", + Totalizador = medicion.TOTALIZADOR_CAUDAL ?? "", } }; await _registrarMedicion.EnviarMedicionAsync(medicion, body, fechaEnvio); - listaMediciones.Add(new {Id = medicion.Id,FechaEnvio = fechaEnvio.ToString("yyyy-MM-dd HH:mm:ss"), Enviado = medicion.Enviado + 1}); - } + listaMediciones.Add(new {Id = medicion.ID,FechaEnvio = fechaEnvio.ToString("yyyy-MM-dd HH:mm:ss"), Enviado = medicion.ENVIADO + 1}); } catch (Exception ex) { FileLoggerHelper.LogError($"[Error] {ex.Message}.", ex); - WriteLineAndLog($"Error al enviar la medición con ID {medicion.Code}.", ConsoleColor.Red); + ConsoleLoggerHelper.WriteLineAndLogInfo($"Error al enviar la medición con ID {medicion.CODIGO_DGA}.", ConsoleColor.Red); } } var listaMedicionesJson = JsonSerializer.Serialize(listaMediciones); if (listaMediciones.Count > 0) { - await MedicionScadaRepository.ActualizarMedicionesAsync(listaMedicionesJson); + await MedicionDGARepository.ActualizarMedicionesAsync(listaMedicionesJson); } - await WriteLineAndLog("FIN","Fin proceso de recuperación DGA",""); + + ConsoleLoggerHelper.WriteLineAndLogEventoAsync("FIN","Fin proceso de recuperación DGA",""); } catch (Exception ex) { FileLoggerHelper.LogError($"[Error] {ex.Message}.", ex); - WriteLineAndLog($"Error al procesar las mediciones.", ConsoleColor.Red); + ConsoleLoggerHelper.WriteLineAndLogInfo($"Error al procesar las mediciones.", ConsoleColor.Red); return false; } return true; } - - static void WriteLineAndLog(string msj, ConsoleColor? color = null) - { - if (color.HasValue && Enum.IsDefined(typeof(ConsoleColor), color.Value)) - { - Console.ForegroundColor = (ConsoleColor)color; - Console.WriteLine(msj); - Console.ResetColor(); - } - else - { - Console.WriteLine($"{msj}"); - } - - FileLoggerHelper.LogInformation($"{msj}"); - } - - static async Task WriteLineAndLog(string evento, string proceso, string operacion = null, ConsoleColor? color = null) - { - if (color.HasValue && Enum.IsDefined(typeof(ConsoleColor), color.Value)) - { - Console.ForegroundColor = (ConsoleColor)color; - Console.WriteLine($"{proceso}"); - Console.ResetColor(); - } - else - { - Console.WriteLine($"{proceso}"); - } - FileLoggerHelper.LogInformation($"{proceso}"); - await FileLoggerHelper.InsertarLogsAsync(evento,proceso,operacion); - } } } diff --git a/DAL/Encriptador.cs b/DAL/Encriptador.cs deleted file mode 100644 index 96812f0..0000000 --- a/DAL/Encriptador.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Security.Cryptography; -using System.Text; - -namespace DAL -{ - public static class Encriptador - { - private static readonly byte[] key = Encoding.ASCII.GetBytes("1234567891234567"); - private static readonly byte[] iv = Encoding.ASCII.GetBytes("Devjoker7.37hAES"); - - public static string Encripta(string Cadena) - { - - using Aes aesAlg = Aes.Create(); - aesAlg.Key = key; - aesAlg.IV = iv; - - ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); - - using (MemoryStream msEncrypt = new MemoryStream()) - { - using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) - { - using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) - { - swEncrypt.Write(Cadena); - } - } - - return Convert.ToBase64String(msEncrypt.ToArray()); - } - } - - public static string Desencripta(string Cadena) - { - using Aes aesAlg = Aes.Create(); - aesAlg.Key = key; - aesAlg.IV = iv; - - ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); - - using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(Cadena))) - { - using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) - { - using (StreamReader srDecrypt = new StreamReader(csDecrypt)) - { - return srDecrypt.ReadToEnd(); - } - } - } - } - } -} diff --git a/DAL/JobsDgaSupFlujRepository.cs b/DAL/JobsDgaSupFlujRepository.cs deleted file mode 100644 index b217349..0000000 --- a/DAL/JobsDgaSupFlujRepository.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System.Data; -using Dapper; -using Microsoft.Data.SqlClient; -using Shared.DTO.Integracion_DGA; -using Shared.DTO.VariablesEntorno; - -namespace DAL -{ - public class JobsDgaSupFlujRepository - { - public async Task InsertarDgaMacroResultadoSupFluj(List dgaMacroResultadoSupFluj) - { - try - { - // Configurar la conexión a la base de datos - using (SqlConnection connection = new SqlConnection(BdConexion.StringConnection)) - { - await connection.OpenAsync(); - await connection.ExecuteAsync("TRUNCATE TABLE DGA_MACRO_RESULTADO_SUP_FLUJ"); - - await SpCalculoDgaSupFluj(); - - string sql = "INSERT INTO DGA_MACRO_RESULTADO_SUP_FLUJ (TagName, TimeStamp, Value, Quality) VALUES (@TagName, @TimeStamp, @Value, @Quality)"; - await connection.ExecuteAsync(sql, dgaMacroResultadoSupFluj); - return true; - } - } - catch (Exception ex) - { - throw new Exception($"Error: {ex.Message}"); - } - } - - public async Task SpCalculoDgaSupFluj() - { - try - { - using (var connection = new SqlConnection(BdConexion.StringConnection)) - { - await connection.OpenAsync(); - await connection.ExecuteAsync( - "SP_CALCULO_DGA_SUP_FLUJ", - commandType: CommandType.StoredProcedure - ); - } - return true; // Éxito - } - catch (Exception ex) - { - throw new Exception($"Error: {ex.Message}"); - } - } - - public async Task SpTraspasoDatosAchirdSupFluj() - { - try - { - using (var connection = new SqlConnection(BdConexion.StringConnection)) - { - await connection.OpenAsync(); - await connection.ExecuteAsync( - "SP_TRASPASO_DATOS_ACHIRD_SUP_FLUJ", - commandType: CommandType.StoredProcedure - ); - } - return true; // Éxito - } - catch (Exception ex) - { - throw new Exception($"Error: {ex.Message}"); - } - } - } -} diff --git a/DAL/LogMedicionScadaRepository.cs b/DAL/LogEnvioRepository.cs similarity index 88% rename from DAL/LogMedicionScadaRepository.cs rename to DAL/LogEnvioRepository.cs index 548f83a..62d00e2 100644 --- a/DAL/LogMedicionScadaRepository.cs +++ b/DAL/LogEnvioRepository.cs @@ -5,9 +5,9 @@ using Shared.DTO.VariablesEntorno; namespace DAL { - public class LogMedicionScadaRepository + public class LogEnvioRepository { - public async Task InsertarLogMedicionScadaAsync(LogMedicionScada logMedicionScada) + public async Task InsertarLogEnvioAsync(LogMedicionEnvio logMedicionScada) { try { diff --git a/DAL/MedicionScadaRepository.cs b/DAL/MedicionDGARepository.cs similarity index 79% rename from DAL/MedicionScadaRepository.cs rename to DAL/MedicionDGARepository.cs index 2781766..8945c4f 100644 --- a/DAL/MedicionScadaRepository.cs +++ b/DAL/MedicionDGARepository.cs @@ -6,14 +6,14 @@ using Shared.DTO.VariablesEntorno; namespace DAL { - public class MedicionScadaRepository + public class MedicionDGARepository { - public async Task> ObtenerMedicionesAsync() + public async Task> ObtenerMedicionesAsync() { await using var connection = new SqlConnection(BdConexion.StringConnection); - var result = await connection.QueryAsync( - "SP_OBTENER_MEDICION_SMARTSCADA_OPERACION", + var result = await connection.QueryAsync( + "SP_OBTENER_DGA_DATOS", commandType: CommandType.StoredProcedure); return result.ToList(); diff --git a/DAS/RegistrarMedicion.cs b/DAS/RegistrarMedicion.cs index c7058c7..93594ef 100644 --- a/DAS/RegistrarMedicion.cs +++ b/DAS/RegistrarMedicion.cs @@ -1,66 +1,61 @@ -using System.Text; -using System.Text.Json; -using DAL; +using DAL; using Shared.DTO.Envios_DGA; using Shared.DTO.VariablesEntorno; +using System.Globalization; +using System.Net; +using System.Text; +using System.Text.Json; namespace DAS { public class RegistrarMedicion { private readonly HttpClient _httpClient; - private readonly LogMedicionScadaRepository _logMedicionScadaRepository; + private readonly LogEnvioRepository _logMedicionScadaRepository; - public RegistrarMedicion(HttpClient httpClient, LogMedicionScadaRepository logMedicionScadaRepository) + public RegistrarMedicion(HttpClient httpClient, LogEnvioRepository logMedicionScadaRepository) { _httpClient = httpClient; _logMedicionScadaRepository = logMedicionScadaRepository; } - public async Task EnviarMedicionAsync(MedicionScada medicion, MedicionSubterraneaRequest request,DateTime fechaEnvio) + public async Task EnviarMedicionAsync(DatoDGA medicion, MedicionSubterraneaRequest request, DateTime fechaEnvio) { - var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000"); - + var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000", CultureInfo.InvariantCulture); var json = JsonSerializer.Serialize(request); - var content = new StringContent(json, Encoding.UTF8, "application/json"); - content.Headers.Add("codigoObra", medicion.Code); - content.Headers.Add("timeStampOrigen", timeStamp); + var req = new HttpRequestMessage(HttpMethod.Post, $"{SubterraneaApiUrl.BaseUrl}{SubterraneaApiUrl.EndPoint}SSSSS"); + req.Headers.Add("codigoObra", medicion.CODIGO_DGA); + req.Headers.Add("timeStampOrigen", timeStamp); + req.Content = new StringContent(json, Encoding.UTF8, "application/json"); - var response = await _httpClient.PostAsync($"{SubterraneaApiUrl.BaseUrl}{SubterraneaApiUrl.EndPoint}", content); - string jsonRecibido = await response.Content.ReadAsStringAsync(); - string estado = response.IsSuccessStatusCode ? "OK" : "ERROR"; - string comprobante = string.Empty; - if (response.IsSuccessStatusCode) + var log = new LogMedicionEnvio(); + + try { - try - { - using var doc = JsonDocument.Parse(jsonRecibido); - if (doc.RootElement.TryGetProperty("data", out var dataProp) && - dataProp.TryGetProperty("numeroComprobante", out var comprobanteProp)) - { - comprobante = comprobanteProp.GetString() ?? ""; - } - } - catch + using var response = await _httpClient.SendAsync(req); + string jsonRecibido = await response.Content.ReadAsStringAsync(); + + if (response == null || !response.IsSuccessStatusCode) { } + + var apiResponse = JsonSerializer.Deserialize>(jsonRecibido, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + + + + } - - var logMedicionScada = new LogMedicionScada + catch (Exception ex) { - EstadoEnvio = estado, - JsonEnviado = json, - JsonRecibido = jsonRecibido, - Comprobante = comprobante, - FechaEnvio = fechaEnvio, - IdMedicionSmartscadaOperacion = medicion.Id - }; - - await _logMedicionScadaRepository.InsertarLogMedicionScadaAsync(logMedicionScada); - return true; + + } + finally + { + await _logMedicionScadaRepository.InsertarLogEnvioAsync(log); + } } } } diff --git a/Integracion_DGA/Program.cs b/Integracion_DGA/Program.cs index 27ec017..9e2de07 100644 --- a/Integracion_DGA/Program.cs +++ b/Integracion_DGA/Program.cs @@ -46,22 +46,21 @@ namespace Integracion_DGA .ConfigureServices((context, services) => { services.AddSingleton(configuration); - services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddHttpClient(); services.AddScoped(); - services.AddScoped(); - services.AddScoped(); + services.AddScoped(); services.AddScoped(); - services.AddScoped(); + services.AddScoped(); }) .Build(); var envioDGA = host.Services.GetRequiredService(); - var bussinessLogic = host.Services.GetRequiredService(); + var bussinessLogic = host.Services.GetRequiredService(); var apiService = host.Services.GetRequiredService(); - await bussinessLogic.Run(); + await bussinessLogic.ObtenerDatosDga(); } } } diff --git a/Recuperacion_DGA/Program.cs b/Recuperacion_DGA/Program.cs index 8f68902..7601d1e 100644 --- a/Recuperacion_DGA/Program.cs +++ b/Recuperacion_DGA/Program.cs @@ -46,10 +46,10 @@ namespace Recuperacion_DGA .ConfigureServices((context, services) => { services.AddSingleton(configuration); - services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddHttpClient(); - services.AddScoped(); + services.AddScoped(); }) .Build(); diff --git a/SHARED/DTO/Envios_DGA/ApiResponse.cs b/SHARED/DTO/Envios_DGA/ApiResponse.cs new file mode 100644 index 0000000..30fa87d --- /dev/null +++ b/SHARED/DTO/Envios_DGA/ApiResponse.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTO.Envios_DGA +{ + public class ApiResponse + { + public string? Status { get; set; } + public string? Message { get; set; } + public T? Data { get; set; } + } +} diff --git a/SHARED/DTO/Envios_DGA/DatoDGA.cs b/SHARED/DTO/Envios_DGA/DatoDGA.cs new file mode 100644 index 0000000..72160a6 --- /dev/null +++ b/SHARED/DTO/Envios_DGA/DatoDGA.cs @@ -0,0 +1,27 @@ +namespace Shared.DTO.Envios_DGA +{ + public class DatoDGA + { + public int ID { get; set; } + + public string? CODIGO_DGA { get; set; } + + public string? MACRO { get; set; } + + public string? SENSOR { get; set; } + + public string? CAUDAL { get; set; } + + public string? TOTALIZADOR_CAUDAL { get; set; } + + public DateTime? FECHA_MEDICION_CAUDAL { get; set; } + + public string? NIVEL_FREATICO_DEL_POZO { get; set; } + + public DateTime? FECHA_MEDICION_NIVEL { get; set; } + + public string? TIPO_EMPRESA { get; set; } + + public int ENVIADO { get; set; } = 0; + } +} diff --git a/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs b/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs new file mode 100644 index 0000000..a368626 --- /dev/null +++ b/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs @@ -0,0 +1,12 @@ +namespace Shared.DTO.Envios_DGA +{ + public class LogMedicionEnvio + { + public string EstadoEnvio { get; set; } + public string? JsonEnviado { get; set; } + public string? JsonRecibido { get; set; } + public string? Comprobante { get; set; } + public DateTime FechaEnvio { get; set; } + public long IdDgaDato { get; set; } + } +} diff --git a/SHARED/DTO/Envios_DGA/LogMedicionScada.cs b/SHARED/DTO/Envios_DGA/LogMedicionScada.cs deleted file mode 100644 index 9a3b079..0000000 --- a/SHARED/DTO/Envios_DGA/LogMedicionScada.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Shared.DTO.Envios_DGA -{ - public class LogMedicionScada - { - public string EstadoEnvio { get; set; } - public string JsonEnviado { get; set; } - public string JsonRecibido { get; set; } - public string Comprobante { get; set; } - public DateTime FechaEnvio { get; set; } - public long IdMedicionSmartscadaOperacion { get; set; } - } -} diff --git a/SHARED/DTO/Envios_DGA/MedicionScada.cs b/SHARED/DTO/Envios_DGA/MedicionScada.cs deleted file mode 100644 index f35f57d..0000000 --- a/SHARED/DTO/Envios_DGA/MedicionScada.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace Shared.DTO.Envios_DGA -{ - public class MedicionScada - { - public long Id { get; set; } - public string? Code { get; set; } - - public DateTime? DateOrigen { get; set; } - - public DateTime? DateMedicionSup { get; set; } - - public decimal? Caudal { get; set; } - - public decimal? Altura { get; set; } - - public DateTime? DateMedicionSub { get; set; } - - public decimal? Totalizador { get; set; } - - public decimal? Caudalsub { get; set; } - - public decimal? Nivel { get; set; } - public DateTime? FechaEnvio { get; set; } - public int Enviado { get; set; } - public string? tipo_empresa { get; set; } - public string? nivelFreaticoDelPozo { get; set; } - } -} diff --git a/SHARED/DTO/Envios_DGA/MedicionSubterraneaRequest.cs b/SHARED/DTO/Envios_DGA/MedicionSubterraneaRequest.cs index 6cea0a9..001bb9e 100644 --- a/SHARED/DTO/Envios_DGA/MedicionSubterraneaRequest.cs +++ b/SHARED/DTO/Envios_DGA/MedicionSubterraneaRequest.cs @@ -2,24 +2,24 @@ { public class MedicionSubterraneaRequest { - public Autenticacion Autenticacion { get; set; } - public Medicion MedicionSubterranea { get; set; } + public Autenticacion Autenticacion { get; set; } = new(); + public Medicion MedicionSubterranea { get; set; } = new(); } public class Autenticacion { - public string Password { get; set; } - public string RutEmpresa { get; set; } - public string RutUsuario { get; set; } + public string Password { get; set; } = string.Empty; + public string RutEmpresa { get; set; } = string.Empty; + public string RutUsuario { get; set; } = string.Empty; } public class Medicion { - public string Caudal { get; set; } - public string FechaMedicion { get; set; } - public string HoraMedicion { get; set; } - public string NivelFreaticoDelPozo { get; set; } - public string Totalizador { get; set; } + public string? Caudal { get; set; } + public string? FechaMedicion { get; set; } + public string? HoraMedicion { get; set; } + public string? NivelFreaticoDelPozo { get; set; } + public string? Totalizador { get; set; } public string? TipoEmpresa { get; set; } } diff --git a/SHARED/DTO/Envios_DGA/MedicionSubterraneaResponse.cs b/SHARED/DTO/Envios_DGA/MedicionSubterraneaResponse.cs new file mode 100644 index 0000000..74edddf --- /dev/null +++ b/SHARED/DTO/Envios_DGA/MedicionSubterraneaResponse.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTO.Envios_DGA +{ + public class MedicionSubterraneaResponse + { + public string? NumeroComprobante { get; set; } + } +} diff --git a/SHARED/DTO/Integracion_DGA/DgaMacroResultado.cs b/SHARED/DTO/Integracion_DGA/DgaMacroResultado.cs deleted file mode 100644 index 07a735a..0000000 --- a/SHARED/DTO/Integracion_DGA/DgaMacroResultado.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Shared.DTO.Integracion_DGA; - -public partial class DgaMacroResultado -{ - public string TagName { get; set; } = null!; - - public DateTime TimeStamp { get; set; } - - public double? Value { get; set; } - - public string? Quality { get; set; } -} diff --git a/SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFluj.cs b/SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFluj.cs deleted file mode 100644 index 25558f6..0000000 --- a/SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFluj.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Shared.DTO.Integracion_DGA; - -public partial class DgaMacroResultadoSupFluj -{ - public string TagName { get; set; } = null!; - - public DateTime TimeStamp { get; set; } - - public double? Value { get; set; } - - public string? Quality { get; set; } -} diff --git a/SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFlujSuma.cs b/SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFlujSuma.cs deleted file mode 100644 index f1f5086..0000000 --- a/SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFlujSuma.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Shared.DTO.Integracion_DGA; - -public partial class DgaMacroResultadoSupFlujSuma -{ - public string TagName { get; set; } = null!; - - public DateTime TimeStamp { get; set; } - - public double? Value { get; set; } - - public string? Quality { get; set; } -} diff --git a/SHARED/DTO/Integracion_DGA/DgaSensorResultado.cs b/SHARED/DTO/Integracion_DGA/DgaSensorResultado.cs deleted file mode 100644 index 0f85fb4..0000000 --- a/SHARED/DTO/Integracion_DGA/DgaSensorResultado.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Shared.DTO.Integracion_DGA; - -public partial class DgaSensorResultado -{ - public string TagName { get; set; } = null!; - - public DateTime TimeStamp { get; set; } - - public double? Value { get; set; } - - public string? Quality { get; set; } -} diff --git a/SHARED/Helper/ConsoleLoggerHelper.cs b/SHARED/Helper/ConsoleLoggerHelper.cs new file mode 100644 index 0000000..3a0b4e2 --- /dev/null +++ b/SHARED/Helper/ConsoleLoggerHelper.cs @@ -0,0 +1,39 @@ +using System; + +namespace Shared.Helper +{ + public static class ConsoleLoggerHelper + { + public static void WriteLineAndLogInfo(string msj, ConsoleColor? color = null) + { + if (color.HasValue && Enum.IsDefined(typeof(ConsoleColor), color.Value)) + { + Console.ForegroundColor = color.Value; + Console.WriteLine(msj); + Console.ResetColor(); + } + else + { + Console.WriteLine(msj); + } + + FileLoggerHelper.LogInformation(msj); + } + + public static void WriteLineAndLogEventoAsync(string evento, string proceso, string operacion = "", ConsoleColor? color = null) + { + if (color.HasValue && Enum.IsDefined(typeof(ConsoleColor), color.Value)) + { + Console.ForegroundColor = color.Value; + Console.WriteLine(proceso); + Console.ResetColor(); + } + else + { + Console.WriteLine(proceso); + } + + FileLoggerHelper.LogInformation(proceso); + } + } +} diff --git a/SHARED/Helper/FileLoggerHelper.cs b/SHARED/Helper/FileLoggerHelper.cs index 767dd89..dd50d81 100644 --- a/SHARED/Helper/FileLoggerHelper.cs +++ b/SHARED/Helper/FileLoggerHelper.cs @@ -10,7 +10,7 @@ namespace Shared.Helper { public static void ConfigureLogger(IConfiguration configuration) { - var logFilePath = configuration.GetSection("Logging:LogFile:Path").Value; + var logFilePath = configuration.GetSection("Logging:LogFile:Path").Value ?? ""; var logFileFullPath = Path.Combine(Directory.GetCurrentDirectory(), logFilePath); Log.Logger = new LoggerConfiguration() @@ -28,31 +28,5 @@ namespace Shared.Helper { Log.Error(ex, message); } - - public static async Task InsertarLogsAsync(string evento, string proceso, string operacion) - { - try - { - using var connection = new SqlConnection(BdConexion.StringConnection); - await connection.OpenAsync(); - - string sql = @"INSERT INTO DGA_LOGS_REGISTROS_ENVIOS (evento, proceso, operacion) - VALUES (@evento, @proceso, @operacion)"; - - await connection.ExecuteAsync(sql, new - { - evento, - proceso, - operacion - }); - return true; - } - catch (Exception e) - { - LogError("Error al insertar logs", e); - return false; - } - } - } } From b52be74bfae2ce4b23bd69ca2d1f490a9b4d2b78 Mon Sep 17 00:00:00 2001 From: bcastrogallardo Date: Thu, 17 Jul 2025 09:22:55 -0400 Subject: [PATCH 2/9] ajustes --- BLL/Integracion_DGA/ObtencionDatosDga.cs | 15 ++++-- BLL/Recuperacion_DGA/EnvioDGA.cs | 17 ++++-- DAL/LogEnvioRepository.cs | 63 +++++++++++++++++++---- DAL/MedicionDGARepository.cs | 1 + DAS/RegistrarMedicion.cs | 43 ++++++++++------ SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs | 12 ++--- SHARED/DTO/LogProceso.cs | 14 +++++ SHARED/Helper/FileLoggerHelper.cs | 4 +- SHARED/Shared.csproj | 2 - 9 files changed, 129 insertions(+), 42 deletions(-) create mode 100644 SHARED/DTO/LogProceso.cs diff --git a/BLL/Integracion_DGA/ObtencionDatosDga.cs b/BLL/Integracion_DGA/ObtencionDatosDga.cs index 6d702b2..ce67e7d 100644 --- a/BLL/Integracion_DGA/ObtencionDatosDga.cs +++ b/BLL/Integracion_DGA/ObtencionDatosDga.cs @@ -1,9 +1,10 @@ -using System.Text.Json; -using DAL; +using DAL; using Microsoft.Extensions.Configuration; +using Shared.DTO; using Shared.DTO.Integracion_DGA; using Shared.DTO.VariablesEntorno; using Shared.Helper; +using System.Text.Json; namespace BLL.Integracion_DGA { @@ -12,17 +13,25 @@ namespace BLL.Integracion_DGA private readonly IConfiguration _configuration; private readonly ApiService _apiService; private readonly JobsDgaRepository _jobs; + private readonly LogEnvioRepository _logEnvioRepository; - public ObtencionDatosDga(IConfiguration configuration, ApiService apiService, JobsDgaRepository jobs) + public ObtencionDatosDga(IConfiguration configuration, ApiService apiService, JobsDgaRepository jobs, LogEnvioRepository logEnvioRepository) { _configuration = configuration; _apiService = apiService; _jobs = jobs; FileLoggerHelper.ConfigureLogger(_configuration); + _logEnvioRepository = logEnvioRepository; } public async Task ObtenerDatosDga() { + await _logEnvioRepository.InsertarLogProcesoAsync(new LogProceso + { + FechaEjecucion = DateTime.UtcNow, + NombreProceso = "OBTENCION DATOS DGA" + }); + DateTimeOffset dateEnd = DateTimeOffset.Now; DateTimeOffset dateStart = dateEnd.AddHours(-1); diff --git a/BLL/Recuperacion_DGA/EnvioDGA.cs b/BLL/Recuperacion_DGA/EnvioDGA.cs index 78471cf..3b88865 100644 --- a/BLL/Recuperacion_DGA/EnvioDGA.cs +++ b/BLL/Recuperacion_DGA/EnvioDGA.cs @@ -1,6 +1,7 @@ using System.Text.Json; using DAL; using DAS; +using Shared.DTO; using Shared.DTO.Envios_DGA; using Shared.DTO.VariablesEntorno; using Shared.Helper; @@ -11,17 +12,25 @@ namespace BLL.Recuperacion_DGA { private readonly MedicionDGARepository _dGAMedicionRepository; private readonly RegistrarMedicion _registrarMedicion; + private readonly LogEnvioRepository _logEnvioRepository; - public EnvioDGA(MedicionDGARepository dGAMedicionRepository, RegistrarMedicion registrarMedicion) + public EnvioDGA(MedicionDGARepository dGAMedicionRepository, RegistrarMedicion registrarMedicion, LogEnvioRepository logEnvioRepository) { _dGAMedicionRepository = dGAMedicionRepository; _registrarMedicion = registrarMedicion; + _logEnvioRepository = logEnvioRepository; } public async Task RegistrarMedicionesAsync() { try { + await _logEnvioRepository.InsertarLogProcesoAsync(new LogProceso + { + FechaEjecucion = DateTime.UtcNow, + NombreProceso = "ENVIO DATOS DGA" + }); + ConsoleLoggerHelper.WriteLineAndLogEventoAsync("INICIO", "Inicio proceso de recuperación DGA", ""); ConsoleLoggerHelper.WriteLineAndLogInfo("Obteniendo Mediciones Scada", ConsoleColor.Green); @@ -51,9 +60,10 @@ namespace BLL.Recuperacion_DGA Totalizador = medicion.TOTALIZADOR_CAUDAL ?? "", } }; - await _registrarMedicion.EnviarMedicionAsync(medicion, body, fechaEnvio); - listaMediciones.Add(new {Id = medicion.ID,FechaEnvio = fechaEnvio.ToString("yyyy-MM-dd HH:mm:ss"), Enviado = medicion.ENVIADO + 1}); + var response = await _registrarMedicion.EnviarMedicionAsync(medicion, body, fechaEnvio); + + listaMediciones.Add(new {Id = medicion.ID,FechaEnvio = fechaEnvio.ToString("yyyy-MM-dd HH:mm:ss"), Enviado = 1}); } catch (Exception ex) { @@ -76,6 +86,7 @@ namespace BLL.Recuperacion_DGA ConsoleLoggerHelper.WriteLineAndLogInfo($"Error al procesar las mediciones.", ConsoleColor.Red); return false; } + return true; } } diff --git a/DAL/LogEnvioRepository.cs b/DAL/LogEnvioRepository.cs index 62d00e2..6213939 100644 --- a/DAL/LogEnvioRepository.cs +++ b/DAL/LogEnvioRepository.cs @@ -1,5 +1,7 @@ using Dapper; using Microsoft.Data.SqlClient; +using Serilog; +using Shared.DTO; using Shared.DTO.Envios_DGA; using Shared.DTO.VariablesEntorno; @@ -11,22 +13,63 @@ namespace DAL { try { - using (var connection = new SqlConnection(BdConexion.StringConnection)) + await using (var connection = new SqlConnection(BdConexion.StringConnection)) { - await connection.OpenAsync(); - // Insertar todos los datos de la lista usando Dapper - var sql = @"INSERT INTO dbo.DGA_LOGS_OPERACION - (estado_envio, json_enviado, json_recibido, comprobante, fecha_envio, id_medicion_smartscada_operacion) - VALUES - (@EstadoEnvio, @JsonEnviado, @JsonRecibido, @Comprobante, @FechaEnvio, @IdMedicionSmartscadaOperacion)"; - await connection.ExecuteAsync(sql, logMedicionScada); + // No es necesario hacer OpenAsync: Dapper lo abre si hace falta + var sql = @" + INSERT INTO dbo.DGA_LOGS_ENVIOS + ( + [ESTADO_ENVIO], + [JSON_ENVIO], + [JSON_RESPUESTA], + [COMPROBANTE], + [FECHA_ENVIO], + [ID_DGA_DATO] + ) + VALUES + ( + @ESTADO_ENVIO, + @JSON_ENVIO, + @JSON_RESPUESTA, + @COMPROBANTE, + @FECHA_ENVIO, + @ID_DGA_DATO + );"; - return true; // Éxito + await connection.ExecuteAsync(sql, logMedicionScada); + return true; } } catch (Exception ex) { - throw new Exception($"Error: {ex.Message}"); + return false; + } + } + + public async Task InsertarLogProcesoAsync(LogProceso log) + { + try + { + await using var connection = new SqlConnection(BdConexion.StringConnection); + + var sql = @" + INSERT INTO dbo.DGA_LOGS_PROCESOS + ( + NOMBRE_PROCESO, + FECHA_EJECUCION + ) + VALUES + ( + @NombreProceso, + @FechaEjecucion + );"; + + await connection.ExecuteAsync(sql, log); + return true; + } + catch (Exception ex) + { + return false; } } diff --git a/DAL/MedicionDGARepository.cs b/DAL/MedicionDGARepository.cs index 8945c4f..f291829 100644 --- a/DAL/MedicionDGARepository.cs +++ b/DAL/MedicionDGARepository.cs @@ -21,6 +21,7 @@ namespace DAL public static async Task ActualizarMedicionesAsync(string medicionesJson) { + //TODO: ACTUALIZAR REGISTROS try { await using var connection = new SqlConnection(BdConexion.StringConnection); diff --git a/DAS/RegistrarMedicion.cs b/DAS/RegistrarMedicion.cs index 93594ef..76983a3 100644 --- a/DAS/RegistrarMedicion.cs +++ b/DAS/RegistrarMedicion.cs @@ -1,4 +1,5 @@ using DAL; +using Serilog; using Shared.DTO.Envios_DGA; using Shared.DTO.VariablesEntorno; using System.Globalization; @@ -21,41 +22,53 @@ namespace DAS public async Task EnviarMedicionAsync(DatoDGA medicion, MedicionSubterraneaRequest request, DateTime fechaEnvio) { - var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000", CultureInfo.InvariantCulture); - var json = JsonSerializer.Serialize(request); - - var req = new HttpRequestMessage(HttpMethod.Post, $"{SubterraneaApiUrl.BaseUrl}{SubterraneaApiUrl.EndPoint}SSSSS"); - req.Headers.Add("codigoObra", medicion.CODIGO_DGA); - req.Headers.Add("timeStampOrigen", timeStamp); - req.Content = new StringContent(json, Encoding.UTF8, "application/json"); - var log = new LogMedicionEnvio(); - try { + var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000", CultureInfo.InvariantCulture); + var json = JsonSerializer.Serialize(request); + + var req = new HttpRequestMessage(HttpMethod.Post, $"{SubterraneaApiUrl.BaseUrl}{SubterraneaApiUrl.EndPoint}SSSSS"); + req.Headers.Add("codigoObra", medicion.CODIGO_DGA); + req.Headers.Add("timeStampOrigen", timeStamp); + req.Content = new StringContent(json, Encoding.UTF8, "application/json"); + + log.JSON_ENVIO = json; + log.FECHA_ENVIO = DateTime.UtcNow; + log.ID_DGA_DATO = medicion.ID; + using var response = await _httpClient.SendAsync(req); string jsonRecibido = await response.Content.ReadAsStringAsync(); + log.JSON_RESPUESTA = jsonRecibido; if (response == null || !response.IsSuccessStatusCode) { - + log.COMPROBANTE = null; + log.ESTADO_ENVIO = "ERROR"; } var apiResponse = JsonSerializer.Deserialize>(jsonRecibido, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + if (apiResponse == null || string.IsNullOrEmpty(apiResponse.Status) || apiResponse.Status != "00") + { + log.COMPROBANTE = null; + log.ESTADO_ENVIO = "ERROR"; + } - - + log.COMPROBANTE = apiResponse.Data.NumeroComprobante ?? null; + log.ESTADO_ENVIO = "EXITO"; } - catch (Exception ex) + catch (Exception) { - - + log.COMPROBANTE = null; + log.ESTADO_ENVIO = "ERROR"; } finally { await _logMedicionScadaRepository.InsertarLogEnvioAsync(log); } + + return log; } } } diff --git a/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs b/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs index a368626..2ca9e05 100644 --- a/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs +++ b/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs @@ -2,11 +2,11 @@ { public class LogMedicionEnvio { - public string EstadoEnvio { get; set; } - public string? JsonEnviado { get; set; } - public string? JsonRecibido { get; set; } - public string? Comprobante { get; set; } - public DateTime FechaEnvio { get; set; } - public long IdDgaDato { get; set; } + public string ESTADO_ENVIO { get; set; } = string.Empty; + public string? JSON_ENVIO { get; set; } + public string? JSON_RESPUESTA { get; set; } + public string? COMPROBANTE { get; set; } + public DateTime FECHA_ENVIO { get; set; } + public int ID_DGA_DATO { get; set; } } } diff --git a/SHARED/DTO/LogProceso.cs b/SHARED/DTO/LogProceso.cs new file mode 100644 index 0000000..b67d483 --- /dev/null +++ b/SHARED/DTO/LogProceso.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.DTO +{ + public class LogProceso + { + public string NombreProceso { get; set; } = string.Empty; + public DateTime FechaEjecucion { get; set; } + } +} diff --git a/SHARED/Helper/FileLoggerHelper.cs b/SHARED/Helper/FileLoggerHelper.cs index dd50d81..720cbb1 100644 --- a/SHARED/Helper/FileLoggerHelper.cs +++ b/SHARED/Helper/FileLoggerHelper.cs @@ -1,6 +1,4 @@ -using Dapper; -using Microsoft.Data.SqlClient; -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; using Serilog; using Shared.DTO.VariablesEntorno; diff --git a/SHARED/Shared.csproj b/SHARED/Shared.csproj index 2b365e5..b5542cf 100644 --- a/SHARED/Shared.csproj +++ b/SHARED/Shared.csproj @@ -7,8 +7,6 @@ - - From 7bc8400980bdd4a9106f8c94af0970cca0ce88db Mon Sep 17 00:00:00 2001 From: bcastrogallardo Date: Thu, 17 Jul 2025 09:43:13 -0400 Subject: [PATCH 3/9] cambios --- BLL/Recuperacion_DGA/EnvioDGA.cs | 49 ++++++++++++++++---------------- DAL/LogEnvioRepository.cs | 37 ------------------------ DAL/MedicionDGARepository.cs | 15 ---------- DAS/RegistrarMedicion.cs | 2 +- 4 files changed, 25 insertions(+), 78 deletions(-) diff --git a/BLL/Recuperacion_DGA/EnvioDGA.cs b/BLL/Recuperacion_DGA/EnvioDGA.cs index 3b88865..d5b30c6 100644 --- a/BLL/Recuperacion_DGA/EnvioDGA.cs +++ b/BLL/Recuperacion_DGA/EnvioDGA.cs @@ -35,35 +35,37 @@ namespace BLL.Recuperacion_DGA ConsoleLoggerHelper.WriteLineAndLogInfo("Obteniendo Mediciones Scada", ConsoleColor.Green); var mediciones = await _dGAMedicionRepository.ObtenerMedicionesAsync(); - var listaMediciones = new List(); + var medicionesEnviadas = new List(); + var logs = new List(); foreach (var medicion in mediciones) { try { - var fechaEnvio = DateTime.UtcNow; + var fechaEnvio = DateTime.UtcNow; - var body = new MedicionSubterraneaRequest + var body = new MedicionSubterraneaRequest + { + Autenticacion = new Autenticacion { - Autenticacion = new Autenticacion - { - Password = CredencialDGA.Password, - RutEmpresa = medicion.TIPO_EMPRESA == "EV" ? CredencialDGA.RutEsval : CredencialDGA.RutAv, - RutUsuario = CredencialDGA.RutUsuario - }, - MedicionSubterranea = new Medicion - { - Caudal = medicion.CAUDAL ?? "", - FechaMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("yyyy-MM-dd") ?? "", - HoraMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("HH:mm:ss") ?? "", - NivelFreaticoDelPozo = medicion.NIVEL_FREATICO_DEL_POZO ?? "", - Totalizador = medicion.TOTALIZADOR_CAUDAL ?? "", - } - }; + Password = CredencialDGA.Password, + RutEmpresa = medicion.TIPO_EMPRESA == "EV" ? CredencialDGA.RutEsval : CredencialDGA.RutAv, + RutUsuario = CredencialDGA.RutUsuario + }, + MedicionSubterranea = new Medicion + { + Caudal = medicion.CAUDAL ?? "", + FechaMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("yyyy-MM-dd") ?? "", + HoraMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("HH:mm:ss") ?? "", + NivelFreaticoDelPozo = medicion.NIVEL_FREATICO_DEL_POZO ?? "", + Totalizador = medicion.TOTALIZADOR_CAUDAL ?? "", + } + }; - var response = await _registrarMedicion.EnviarMedicionAsync(medicion, body, fechaEnvio); + var response = await _registrarMedicion.EnviarMedicionAsync(medicion, body, fechaEnvio); - listaMediciones.Add(new {Id = medicion.ID,FechaEnvio = fechaEnvio.ToString("yyyy-MM-dd HH:mm:ss"), Enviado = 1}); + medicionesEnviadas.Add(new {Id = medicion.ID,FechaEnvio = fechaEnvio.ToString("yyyy-MM-dd HH:mm:ss"), Enviado = 1}); + logs.Add(response); } catch (Exception ex) { @@ -71,12 +73,9 @@ namespace BLL.Recuperacion_DGA ConsoleLoggerHelper.WriteLineAndLogInfo($"Error al enviar la medición con ID {medicion.CODIGO_DGA}.", ConsoleColor.Red); } } - var listaMedicionesJson = JsonSerializer.Serialize(listaMediciones); - if (listaMediciones.Count > 0) - { - await MedicionDGARepository.ActualizarMedicionesAsync(listaMedicionesJson); - } + //INSERTAR DATOS DE LOGS, ACTUALIZAR REGISTROS + ConsoleLoggerHelper.WriteLineAndLogEventoAsync("FIN","Fin proceso de recuperación DGA",""); } diff --git a/DAL/LogEnvioRepository.cs b/DAL/LogEnvioRepository.cs index 6213939..363a317 100644 --- a/DAL/LogEnvioRepository.cs +++ b/DAL/LogEnvioRepository.cs @@ -9,43 +9,6 @@ namespace DAL { public class LogEnvioRepository { - public async Task InsertarLogEnvioAsync(LogMedicionEnvio logMedicionScada) - { - try - { - await using (var connection = new SqlConnection(BdConexion.StringConnection)) - { - // No es necesario hacer OpenAsync: Dapper lo abre si hace falta - var sql = @" - INSERT INTO dbo.DGA_LOGS_ENVIOS - ( - [ESTADO_ENVIO], - [JSON_ENVIO], - [JSON_RESPUESTA], - [COMPROBANTE], - [FECHA_ENVIO], - [ID_DGA_DATO] - ) - VALUES - ( - @ESTADO_ENVIO, - @JSON_ENVIO, - @JSON_RESPUESTA, - @COMPROBANTE, - @FECHA_ENVIO, - @ID_DGA_DATO - );"; - - await connection.ExecuteAsync(sql, logMedicionScada); - return true; - } - } - catch (Exception ex) - { - return false; - } - } - public async Task InsertarLogProcesoAsync(LogProceso log) { try diff --git a/DAL/MedicionDGARepository.cs b/DAL/MedicionDGARepository.cs index f291829..4d4dced 100644 --- a/DAL/MedicionDGARepository.cs +++ b/DAL/MedicionDGARepository.cs @@ -18,20 +18,5 @@ namespace DAL return result.ToList(); } - - public static async Task ActualizarMedicionesAsync(string medicionesJson) - { - //TODO: ACTUALIZAR REGISTROS - try - { - await using var connection = new SqlConnection(BdConexion.StringConnection); - await connection.ExecuteAsync("SP_ACTUALIZAR_MEDICION_SMARTSCADA_OPERACION", new { JsonMediciones = medicionesJson }, commandType: CommandType.StoredProcedure); - return true; - } - catch (Exception ex) - { - throw new Exception($"Error: {ex.Message}"); - } - } } } diff --git a/DAS/RegistrarMedicion.cs b/DAS/RegistrarMedicion.cs index 76983a3..e30b35f 100644 --- a/DAS/RegistrarMedicion.cs +++ b/DAS/RegistrarMedicion.cs @@ -65,7 +65,7 @@ namespace DAS } finally { - await _logMedicionScadaRepository.InsertarLogEnvioAsync(log); + } return log; From 747391eade1b1628f383069c98e055b628e81dc0 Mon Sep 17 00:00:00 2001 From: Leonel Toro Date: Thu, 17 Jul 2025 12:40:59 -0400 Subject: [PATCH 4/9] feat: ajustes para las mediciones --- BLL/Recuperacion_DGA/EnvioDGA.cs | 88 ++++++++++++++---------- DAL/LogEnvioRepository.cs | 29 ++++++++ DAL/MedicionDGARepository.cs | 32 +++++++++ DAS/RegistrarMedicion.cs | 2 +- SHARED/DTO/Envios_DGA/DatoDGATemporal.cs | 18 +++++ 5 files changed, 133 insertions(+), 36 deletions(-) create mode 100644 SHARED/DTO/Envios_DGA/DatoDGATemporal.cs diff --git a/BLL/Recuperacion_DGA/EnvioDGA.cs b/BLL/Recuperacion_DGA/EnvioDGA.cs index d5b30c6..96a7863 100644 --- a/BLL/Recuperacion_DGA/EnvioDGA.cs +++ b/BLL/Recuperacion_DGA/EnvioDGA.cs @@ -1,4 +1,5 @@ -using System.Text.Json; +using System; +using System.Text.Json; using DAL; using DAS; using Shared.DTO; @@ -34,49 +35,66 @@ namespace BLL.Recuperacion_DGA ConsoleLoggerHelper.WriteLineAndLogEventoAsync("INICIO", "Inicio proceso de recuperación DGA", ""); ConsoleLoggerHelper.WriteLineAndLogInfo("Obteniendo Mediciones Scada", ConsoleColor.Green); - var mediciones = await _dGAMedicionRepository.ObtenerMedicionesAsync(); - var medicionesEnviadas = new List(); - var logs = new List(); + var logsEnviados = new List(); - foreach (var medicion in mediciones) + var pageNumber = 1; + + while (true) { + var mediciones = await _dGAMedicionRepository.ObtenerMedicionesPorLoteAsync(pageNumber); + + if (mediciones == null || !mediciones.Any()){ break; } + + foreach (var medicion in mediciones) + { + try + { + var fechaEnvio = DateTime.UtcNow; + + var body = new MedicionSubterraneaRequest + { + Autenticacion = new Autenticacion + { + Password = CredencialDGA.Password, + RutEmpresa = medicion.TIPO_EMPRESA == "EV" ? CredencialDGA.RutEsval : CredencialDGA.RutAv, + RutUsuario = CredencialDGA.RutUsuario + }, + MedicionSubterranea = new Medicion + { + Caudal = medicion.CAUDAL ?? "", + FechaMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("yyyy-MM-dd") ?? "", + HoraMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("HH:mm:ss") ?? "", + NivelFreaticoDelPozo = medicion.NIVEL_FREATICO_DEL_POZO ?? "", + Totalizador = medicion.TOTALIZADOR_CAUDAL ?? "", + } + }; + + var response = await _registrarMedicion.EnviarMedicionAsync(medicion, body, fechaEnvio); + + logsEnviados.Add(response); + + } + catch (Exception ex) + { + ConsoleLoggerHelper.WriteLineAndLogInfo($"[Error]: medicion[{medicion.ID}], mensaje: {ex.Message}"); + } + } try { - var fechaEnvio = DateTime.UtcNow; - - var body = new MedicionSubterraneaRequest - { - Autenticacion = new Autenticacion - { - Password = CredencialDGA.Password, - RutEmpresa = medicion.TIPO_EMPRESA == "EV" ? CredencialDGA.RutEsval : CredencialDGA.RutAv, - RutUsuario = CredencialDGA.RutUsuario - }, - MedicionSubterranea = new Medicion - { - Caudal = medicion.CAUDAL ?? "", - FechaMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("yyyy-MM-dd") ?? "", - HoraMedicion = medicion.FECHA_MEDICION_CAUDAL?.ToString("HH:mm:ss") ?? "", - NivelFreaticoDelPozo = medicion.NIVEL_FREATICO_DEL_POZO ?? "", - Totalizador = medicion.TOTALIZADOR_CAUDAL ?? "", - } - }; - - var response = await _registrarMedicion.EnviarMedicionAsync(medicion, body, fechaEnvio); - - medicionesEnviadas.Add(new {Id = medicion.ID,FechaEnvio = fechaEnvio.ToString("yyyy-MM-dd HH:mm:ss"), Enviado = 1}); - logs.Add(response); + var idMediciones = mediciones.Select(x => x.ID).ToList(); + await _dGAMedicionRepository.GuardarMedicionesEnviadasAsync(idMediciones); + await _logEnvioRepository.InsertarLogRespuesta(logsEnviados); } - catch (Exception ex) + catch (Exception e) { - FileLoggerHelper.LogError($"[Error] {ex.Message}.", ex); - ConsoleLoggerHelper.WriteLineAndLogInfo($"Error al enviar la medición con ID {medicion.CODIGO_DGA}.", ConsoleColor.Red); + ConsoleLoggerHelper.WriteLineAndLogInfo($"[Error] {e.Message}"); } + + logsEnviados.Clear(); + mediciones.Clear(); + pageNumber++; } - //INSERTAR DATOS DE LOGS, ACTUALIZAR REGISTROS - - ConsoleLoggerHelper.WriteLineAndLogEventoAsync("FIN","Fin proceso de recuperación DGA",""); } catch (Exception ex) diff --git a/DAL/LogEnvioRepository.cs b/DAL/LogEnvioRepository.cs index 363a317..a5434c4 100644 --- a/DAL/LogEnvioRepository.cs +++ b/DAL/LogEnvioRepository.cs @@ -36,5 +36,34 @@ namespace DAL } } + public async Task InsertarLogRespuesta(List logsEnviados) + { + await using var connection = new SqlConnection(BdConexion.StringConnection); + try + { + var sql = @"INSERT INTO DGA_LOGS_ENVIOS ( + ESTADO_ENVIO, + JSON_ENVIO, + JSON_RESPUESTA, + COMPROBANTE, + FECHA_ENVIO, + ID_DGA_DATO) + VALUES ( + @ESTADO_ENVIO, + @JSON_ENVIO, + @JSON_RESPUESTA, + @COMPROBANTE, + @FECHA_ENVIO, + @ID_DGA_DATO);"; + + await connection.ExecuteAsync(sql, logsEnviados); + return true; + } + catch (Exception ex) + { + throw new Exception($"Error al insertar logs de respuesta {ex.Message}"); + } + } + } } diff --git a/DAL/MedicionDGARepository.cs b/DAL/MedicionDGARepository.cs index 4d4dced..fa470f0 100644 --- a/DAL/MedicionDGARepository.cs +++ b/DAL/MedicionDGARepository.cs @@ -18,5 +18,37 @@ namespace DAL return result.ToList(); } + + public async Task> ObtenerMedicionesPorLoteAsync(int pageNumber) + { + var nroPagina = new DynamicParameters(); + nroPagina.Add("@PageNumber", pageNumber); + + await using var connection = new SqlConnection(BdConexion.StringConnection); + + var resultado = await connection.QueryAsync( + "SP_OBTENER_LOTE_DGA_DATOS", + nroPagina, + commandType: CommandType.StoredProcedure); + + return resultado.ToList(); + } + + public async Task GuardarMedicionesEnviadasAsync(List medicionesGuardadas) + { + await using var connection = new SqlConnection(BdConexion.StringConnection); + try + { + var query = @"UPDATE DGA_DATOS SET ENVIADO = 1 WHERE ID IN @Ids"; + + await connection.ExecuteAsync(query, new { Ids = medicionesGuardadas }); + return true; + } + catch(Exception ex) { + + throw new Exception($"Error {ex.Message}"); + } + + } } } diff --git a/DAS/RegistrarMedicion.cs b/DAS/RegistrarMedicion.cs index e30b35f..3b4a0ad 100644 --- a/DAS/RegistrarMedicion.cs +++ b/DAS/RegistrarMedicion.cs @@ -20,7 +20,7 @@ namespace DAS _logMedicionScadaRepository = logMedicionScadaRepository; } - public async Task EnviarMedicionAsync(DatoDGA medicion, MedicionSubterraneaRequest request, DateTime fechaEnvio) + public async Task EnviarMedicionAsync(DatoDGATemporal medicion, MedicionSubterraneaRequest request, DateTime fechaEnvio) { var log = new LogMedicionEnvio(); try diff --git a/SHARED/DTO/Envios_DGA/DatoDGATemporal.cs b/SHARED/DTO/Envios_DGA/DatoDGATemporal.cs new file mode 100644 index 0000000..d375bde --- /dev/null +++ b/SHARED/DTO/Envios_DGA/DatoDGATemporal.cs @@ -0,0 +1,18 @@ +namespace Shared.DTO.Envios_DGA +{ + public class DatoDGATemporal + { + public int ID { get; set; } + public string? CODIGO_DGA { get; set; } + + public string? CAUDAL { get; set; } + + public string? TOTALIZADOR_CAUDAL { get; set; } + + public DateTime? FECHA_MEDICION_CAUDAL { get; set; } + + public string? NIVEL_FREATICO_DEL_POZO { get; set; } + + public string? TIPO_EMPRESA { get; set; } + } +} From e5341cfcff42415731aba34930438db6d8d9b3c9 Mon Sep 17 00:00:00 2001 From: bcastrogallardo Date: Thu, 17 Jul 2025 13:42:48 -0400 Subject: [PATCH 5/9] fix --- BLL/Recuperacion_DGA/EnvioDGA.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/BLL/Recuperacion_DGA/EnvioDGA.cs b/BLL/Recuperacion_DGA/EnvioDGA.cs index 96a7863..351dc8e 100644 --- a/BLL/Recuperacion_DGA/EnvioDGA.cs +++ b/BLL/Recuperacion_DGA/EnvioDGA.cs @@ -43,7 +43,10 @@ namespace BLL.Recuperacion_DGA { var mediciones = await _dGAMedicionRepository.ObtenerMedicionesPorLoteAsync(pageNumber); - if (mediciones == null || !mediciones.Any()){ break; } + if (mediciones == null || mediciones.Count == 0) + { + break; + } foreach (var medicion in mediciones) { From d228cf71ddac55db0ff4153b37b9a9d05393a820 Mon Sep 17 00:00:00 2001 From: bcastrogallardo Date: Thu, 17 Jul 2025 14:00:21 -0400 Subject: [PATCH 6/9] cambios --- BLL/Recuperacion_DGA/EnvioDGA.cs | 3 ++- DAL/MedicionDGARepository.cs | 21 +++++-------------- .../Envios_DGA/MedicionSubterraneaRequest.cs | 2 -- 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/BLL/Recuperacion_DGA/EnvioDGA.cs b/BLL/Recuperacion_DGA/EnvioDGA.cs index 351dc8e..7b8cbdc 100644 --- a/BLL/Recuperacion_DGA/EnvioDGA.cs +++ b/BLL/Recuperacion_DGA/EnvioDGA.cs @@ -38,10 +38,11 @@ namespace BLL.Recuperacion_DGA var logsEnviados = new List(); var pageNumber = 1; + var fechaInicio = DateTime.UtcNow; while (true) { - var mediciones = await _dGAMedicionRepository.ObtenerMedicionesPorLoteAsync(pageNumber); + var mediciones = await _dGAMedicionRepository.ObtenerMedicionesPorLoteAsync(pageNumber, fechaInicio); if (mediciones == null || mediciones.Count == 0) { diff --git a/DAL/MedicionDGARepository.cs b/DAL/MedicionDGARepository.cs index fa470f0..72ddb8d 100644 --- a/DAL/MedicionDGARepository.cs +++ b/DAL/MedicionDGARepository.cs @@ -8,27 +8,16 @@ namespace DAL { public class MedicionDGARepository { - public async Task> ObtenerMedicionesAsync() + public async Task> ObtenerMedicionesPorLoteAsync(int pageNumber, DateTime fecha) { - await using var connection = new SqlConnection(BdConexion.StringConnection); - - var result = await connection.QueryAsync( - "SP_OBTENER_DGA_DATOS", - commandType: CommandType.StoredProcedure); - - return result.ToList(); - } - - public async Task> ObtenerMedicionesPorLoteAsync(int pageNumber) - { - var nroPagina = new DynamicParameters(); - nroPagina.Add("@PageNumber", pageNumber); - + var parameters = new DynamicParameters(); + parameters.Add("@PageNumber", pageNumber); + parameters.Add("@FechaInicio", fecha); await using var connection = new SqlConnection(BdConexion.StringConnection); var resultado = await connection.QueryAsync( "SP_OBTENER_LOTE_DGA_DATOS", - nroPagina, + parameters, commandType: CommandType.StoredProcedure); return resultado.ToList(); diff --git a/SHARED/DTO/Envios_DGA/MedicionSubterraneaRequest.cs b/SHARED/DTO/Envios_DGA/MedicionSubterraneaRequest.cs index 001bb9e..7f9b2f2 100644 --- a/SHARED/DTO/Envios_DGA/MedicionSubterraneaRequest.cs +++ b/SHARED/DTO/Envios_DGA/MedicionSubterraneaRequest.cs @@ -20,7 +20,5 @@ public string? HoraMedicion { get; set; } public string? NivelFreaticoDelPozo { get; set; } public string? Totalizador { get; set; } - public string? TipoEmpresa { get; set; } - } } From 4df7d90f058e10c91e6e948f28b73aa97bb558ec Mon Sep 17 00:00:00 2001 From: bcastrogallardo Date: Thu, 17 Jul 2025 14:03:47 -0400 Subject: [PATCH 7/9] quitar url prueba --- DAL/LogEnvioRepository.cs | 2 +- DAS/RegistrarMedicion.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DAL/LogEnvioRepository.cs b/DAL/LogEnvioRepository.cs index a5434c4..45bae88 100644 --- a/DAL/LogEnvioRepository.cs +++ b/DAL/LogEnvioRepository.cs @@ -30,7 +30,7 @@ namespace DAL await connection.ExecuteAsync(sql, log); return true; } - catch (Exception ex) + catch (Exception) { return false; } diff --git a/DAS/RegistrarMedicion.cs b/DAS/RegistrarMedicion.cs index 3b4a0ad..bd0725f 100644 --- a/DAS/RegistrarMedicion.cs +++ b/DAS/RegistrarMedicion.cs @@ -28,7 +28,7 @@ namespace DAS var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000", CultureInfo.InvariantCulture); var json = JsonSerializer.Serialize(request); - var req = new HttpRequestMessage(HttpMethod.Post, $"{SubterraneaApiUrl.BaseUrl}{SubterraneaApiUrl.EndPoint}SSSSS"); + var req = new HttpRequestMessage(HttpMethod.Post, $"{SubterraneaApiUrl.BaseUrl}{SubterraneaApiUrl.EndPoint}"); req.Headers.Add("codigoObra", medicion.CODIGO_DGA); req.Headers.Add("timeStampOrigen", timeStamp); req.Content = new StringContent(json, Encoding.UTF8, "application/json"); @@ -55,7 +55,7 @@ namespace DAS log.ESTADO_ENVIO = "ERROR"; } - log.COMPROBANTE = apiResponse.Data.NumeroComprobante ?? null; + log.COMPROBANTE = apiResponse!.Data!.NumeroComprobante ?? null; log.ESTADO_ENVIO = "EXITO"; } catch (Exception) From db8db99e46b61240e4b72730120be6e4aabe2061 Mon Sep 17 00:00:00 2001 From: bcastrogallardo Date: Thu, 17 Jul 2025 16:12:37 -0400 Subject: [PATCH 8/9] cambios path --- Integracion_DGA/Program.cs | 2 +- Recuperacion_DGA/Program.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Integracion_DGA/Program.cs b/Integracion_DGA/Program.cs index 9e2de07..3e0d3f7 100644 --- a/Integracion_DGA/Program.cs +++ b/Integracion_DGA/Program.cs @@ -17,7 +17,7 @@ namespace Integracion_DGA IConfiguration configuration; configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) + .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables() .Build(); diff --git a/Recuperacion_DGA/Program.cs b/Recuperacion_DGA/Program.cs index 7601d1e..5dd7d50 100644 --- a/Recuperacion_DGA/Program.cs +++ b/Recuperacion_DGA/Program.cs @@ -17,7 +17,7 @@ namespace Recuperacion_DGA IConfiguration configuration; configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) + .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables() .Build(); From 8cd2d45211abfc98539e93cb76a3b9bb7f1c7fbf Mon Sep 17 00:00:00 2001 From: bcastrogallardo Date: Thu, 17 Jul 2025 16:48:52 -0400 Subject: [PATCH 9/9] camel case --- DAS/RegistrarMedicion.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DAS/RegistrarMedicion.cs b/DAS/RegistrarMedicion.cs index bd0725f..c9d97ed 100644 --- a/DAS/RegistrarMedicion.cs +++ b/DAS/RegistrarMedicion.cs @@ -26,7 +26,10 @@ namespace DAS try { var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000", CultureInfo.InvariantCulture); - var json = JsonSerializer.Serialize(request); + var json = JsonSerializer.Serialize(request, new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }); var req = new HttpRequestMessage(HttpMethod.Post, $"{SubterraneaApiUrl.BaseUrl}{SubterraneaApiUrl.EndPoint}"); req.Headers.Add("codigoObra", medicion.CODIGO_DGA);