From b52be74bfae2ce4b23bd69ca2d1f490a9b4d2b78 Mon Sep 17 00:00:00 2001 From: bcastrogallardo Date: Thu, 17 Jul 2025 09:22:55 -0400 Subject: [PATCH] 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 @@ - -