This commit is contained in:
bcastrogallardo 2025-07-17 09:22:55 -04:00
parent 657fd50ac9
commit b52be74bfa
9 changed files with 129 additions and 42 deletions

View file

@ -1,9 +1,10 @@
using System.Text.Json; using DAL;
using DAL;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Shared.DTO;
using Shared.DTO.Integracion_DGA; using Shared.DTO.Integracion_DGA;
using Shared.DTO.VariablesEntorno; using Shared.DTO.VariablesEntorno;
using Shared.Helper; using Shared.Helper;
using System.Text.Json;
namespace BLL.Integracion_DGA namespace BLL.Integracion_DGA
{ {
@ -12,17 +13,25 @@ namespace BLL.Integracion_DGA
private readonly IConfiguration _configuration; private readonly IConfiguration _configuration;
private readonly ApiService _apiService; private readonly ApiService _apiService;
private readonly JobsDgaRepository _jobs; 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; _configuration = configuration;
_apiService = apiService; _apiService = apiService;
_jobs = jobs; _jobs = jobs;
FileLoggerHelper.ConfigureLogger(_configuration); FileLoggerHelper.ConfigureLogger(_configuration);
_logEnvioRepository = logEnvioRepository;
} }
public async Task ObtenerDatosDga() public async Task ObtenerDatosDga()
{ {
await _logEnvioRepository.InsertarLogProcesoAsync(new LogProceso
{
FechaEjecucion = DateTime.UtcNow,
NombreProceso = "OBTENCION DATOS DGA"
});
DateTimeOffset dateEnd = DateTimeOffset.Now; DateTimeOffset dateEnd = DateTimeOffset.Now;
DateTimeOffset dateStart = dateEnd.AddHours(-1); DateTimeOffset dateStart = dateEnd.AddHours(-1);

View file

@ -1,6 +1,7 @@
using System.Text.Json; using System.Text.Json;
using DAL; using DAL;
using DAS; using DAS;
using Shared.DTO;
using Shared.DTO.Envios_DGA; using Shared.DTO.Envios_DGA;
using Shared.DTO.VariablesEntorno; using Shared.DTO.VariablesEntorno;
using Shared.Helper; using Shared.Helper;
@ -11,17 +12,25 @@ namespace BLL.Recuperacion_DGA
{ {
private readonly MedicionDGARepository _dGAMedicionRepository; private readonly MedicionDGARepository _dGAMedicionRepository;
private readonly RegistrarMedicion _registrarMedicion; private readonly RegistrarMedicion _registrarMedicion;
private readonly LogEnvioRepository _logEnvioRepository;
public EnvioDGA(MedicionDGARepository dGAMedicionRepository, RegistrarMedicion registrarMedicion) public EnvioDGA(MedicionDGARepository dGAMedicionRepository, RegistrarMedicion registrarMedicion, LogEnvioRepository logEnvioRepository)
{ {
_dGAMedicionRepository = dGAMedicionRepository; _dGAMedicionRepository = dGAMedicionRepository;
_registrarMedicion = registrarMedicion; _registrarMedicion = registrarMedicion;
_logEnvioRepository = logEnvioRepository;
} }
public async Task<bool> RegistrarMedicionesAsync() public async Task<bool> RegistrarMedicionesAsync()
{ {
try try
{ {
await _logEnvioRepository.InsertarLogProcesoAsync(new LogProceso
{
FechaEjecucion = DateTime.UtcNow,
NombreProceso = "ENVIO DATOS DGA"
});
ConsoleLoggerHelper.WriteLineAndLogEventoAsync("INICIO", "Inicio proceso de recuperación DGA", ""); ConsoleLoggerHelper.WriteLineAndLogEventoAsync("INICIO", "Inicio proceso de recuperación DGA", "");
ConsoleLoggerHelper.WriteLineAndLogInfo("Obteniendo Mediciones Scada", ConsoleColor.Green); ConsoleLoggerHelper.WriteLineAndLogInfo("Obteniendo Mediciones Scada", ConsoleColor.Green);
@ -51,9 +60,10 @@ namespace BLL.Recuperacion_DGA
Totalizador = medicion.TOTALIZADOR_CAUDAL ?? "", 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) catch (Exception ex)
{ {
@ -76,6 +86,7 @@ namespace BLL.Recuperacion_DGA
ConsoleLoggerHelper.WriteLineAndLogInfo($"Error al procesar las mediciones.", ConsoleColor.Red); ConsoleLoggerHelper.WriteLineAndLogInfo($"Error al procesar las mediciones.", ConsoleColor.Red);
return false; return false;
} }
return true; return true;
} }
} }

View file

@ -1,5 +1,7 @@
using Dapper; using Dapper;
using Microsoft.Data.SqlClient; using Microsoft.Data.SqlClient;
using Serilog;
using Shared.DTO;
using Shared.DTO.Envios_DGA; using Shared.DTO.Envios_DGA;
using Shared.DTO.VariablesEntorno; using Shared.DTO.VariablesEntorno;
@ -11,22 +13,63 @@ namespace DAL
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) await using (var connection = new SqlConnection(BdConexion.StringConnection))
{ {
await connection.OpenAsync(); // No es necesario hacer OpenAsync: Dapper lo abre si hace falta
// Insertar todos los datos de la lista usando Dapper var sql = @"
var sql = @"INSERT INTO dbo.DGA_LOGS_OPERACION INSERT INTO dbo.DGA_LOGS_ENVIOS
(estado_envio, json_enviado, json_recibido, comprobante, fecha_envio, id_medicion_smartscada_operacion) (
[ESTADO_ENVIO],
[JSON_ENVIO],
[JSON_RESPUESTA],
[COMPROBANTE],
[FECHA_ENVIO],
[ID_DGA_DATO]
)
VALUES VALUES
(@EstadoEnvio, @JsonEnviado, @JsonRecibido, @Comprobante, @FechaEnvio, @IdMedicionSmartscadaOperacion)"; (
await connection.ExecuteAsync(sql, logMedicionScada); @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) catch (Exception ex)
{ {
throw new Exception($"Error: {ex.Message}"); return false;
}
}
public async Task<bool> 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;
} }
} }

View file

@ -21,6 +21,7 @@ namespace DAL
public static async Task<bool> ActualizarMedicionesAsync(string medicionesJson) public static async Task<bool> ActualizarMedicionesAsync(string medicionesJson)
{ {
//TODO: ACTUALIZAR REGISTROS
try try
{ {
await using var connection = new SqlConnection(BdConexion.StringConnection); await using var connection = new SqlConnection(BdConexion.StringConnection);

View file

@ -1,4 +1,5 @@
using DAL; using DAL;
using Serilog;
using Shared.DTO.Envios_DGA; using Shared.DTO.Envios_DGA;
using Shared.DTO.VariablesEntorno; using Shared.DTO.VariablesEntorno;
using System.Globalization; using System.Globalization;
@ -20,6 +21,9 @@ namespace DAS
} }
public async Task<LogMedicionEnvio> EnviarMedicionAsync(DatoDGA medicion, MedicionSubterraneaRequest request, DateTime fechaEnvio) public async Task<LogMedicionEnvio> EnviarMedicionAsync(DatoDGA medicion, MedicionSubterraneaRequest request, DateTime fechaEnvio)
{
var log = new LogMedicionEnvio();
try
{ {
var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000", CultureInfo.InvariantCulture); 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);
@ -29,33 +33,42 @@ namespace DAS
req.Headers.Add("timeStampOrigen", timeStamp); req.Headers.Add("timeStampOrigen", timeStamp);
req.Content = new StringContent(json, Encoding.UTF8, "application/json"); req.Content = new StringContent(json, Encoding.UTF8, "application/json");
var log = new LogMedicionEnvio(); log.JSON_ENVIO = json;
log.FECHA_ENVIO = DateTime.UtcNow;
log.ID_DGA_DATO = medicion.ID;
try
{
using var response = await _httpClient.SendAsync(req); using var response = await _httpClient.SendAsync(req);
string jsonRecibido = await response.Content.ReadAsStringAsync(); string jsonRecibido = await response.Content.ReadAsStringAsync();
log.JSON_RESPUESTA = jsonRecibido;
if (response == null || !response.IsSuccessStatusCode) if (response == null || !response.IsSuccessStatusCode)
{ {
log.COMPROBANTE = null;
log.ESTADO_ENVIO = "ERROR";
} }
var apiResponse = JsonSerializer.Deserialize<ApiResponse<MedicionSubterraneaResponse>>(jsonRecibido, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); var apiResponse = JsonSerializer.Deserialize<ApiResponse<MedicionSubterraneaResponse>>(jsonRecibido, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
if (apiResponse == null || string.IsNullOrEmpty(apiResponse.Status) || apiResponse.Status != "00")
}
catch (Exception ex)
{ {
log.COMPROBANTE = null;
log.ESTADO_ENVIO = "ERROR";
}
log.COMPROBANTE = apiResponse.Data.NumeroComprobante ?? null;
log.ESTADO_ENVIO = "EXITO";
}
catch (Exception)
{
log.COMPROBANTE = null;
log.ESTADO_ENVIO = "ERROR";
} }
finally finally
{ {
await _logMedicionScadaRepository.InsertarLogEnvioAsync(log); await _logMedicionScadaRepository.InsertarLogEnvioAsync(log);
} }
return log;
} }
} }
} }

View file

@ -2,11 +2,11 @@
{ {
public class LogMedicionEnvio public class LogMedicionEnvio
{ {
public string EstadoEnvio { get; set; } public string ESTADO_ENVIO { get; set; } = string.Empty;
public string? JsonEnviado { get; set; } public string? JSON_ENVIO { get; set; }
public string? JsonRecibido { get; set; } public string? JSON_RESPUESTA { get; set; }
public string? Comprobante { get; set; } public string? COMPROBANTE { get; set; }
public DateTime FechaEnvio { get; set; } public DateTime FECHA_ENVIO { get; set; }
public long IdDgaDato { get; set; } public int ID_DGA_DATO { get; set; }
} }
} }

14
SHARED/DTO/LogProceso.cs Normal file
View file

@ -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; }
}
}

View file

@ -1,6 +1,4 @@
using Dapper; using Microsoft.Extensions.Configuration;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration;
using Serilog; using Serilog;
using Shared.DTO.VariablesEntorno; using Shared.DTO.VariablesEntorno;

View file

@ -7,8 +7,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Dapper" Version="2.1.66" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.0.2" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.6" /> <PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.6" />
<PackageReference Include="Serilog.Settings.Configuration" Version="9.0.0" /> <PackageReference Include="Serilog.Settings.Configuration" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />