diff --git a/BLL/Integracion_DGA/BusinessLogic.cs b/BLL/Integracion_DGA/BusinessLogic.cs index e1f42ba..3f97a85 100644 --- a/BLL/Integracion_DGA/BusinessLogic.cs +++ b/BLL/Integracion_DGA/BusinessLogic.cs @@ -12,14 +12,16 @@ namespace BLL.Integracion_DGA private readonly IConfiguration _configuration; private readonly ApiService _apiService; private readonly JobsDgaRepository _jobs; + private readonly JobsDgaVilosRepository _jobsVilos; private readonly JobsDgaSupFlujRepository _jobsSupFluj; private readonly FileLoggerHelper _fileLoggerHelper; - public BusinessLogic(IConfiguration configuration, ApiService apiService, JobsDgaRepository jobs, JobsDgaSupFlujRepository jobsSupFluj) + public BusinessLogic(IConfiguration configuration, ApiService apiService, JobsDgaRepository jobs, JobsDgaVilosRepository jobsVilos, JobsDgaSupFlujRepository jobsSupFluj) { _configuration = configuration; _apiService = apiService; _jobs = jobs; + _jobsVilos = jobsVilos; _jobsSupFluj = jobsSupFluj; FileLoggerHelper.ConfigureLogger(_configuration); } @@ -136,6 +138,38 @@ namespace BLL.Integracion_DGA WriteLineAndLog($"Fin Envio DGA", ConsoleColor.Green); /**************/ /**************/ + WriteLineAndLog($"Inicio Envio DGA Vilos", ConsoleColor.Green); + WriteLineAndLog($"\t Descargar datos historian: Insertar InsertarDgaMacroResultadoVilos"); + List listDgaMacroResultadoVilos = listDgaMacroResultados.Select(item => new DgaMacroResultadoVilos + { + TagName = item.TagName, + TimeStamp = item.TimeStamp, + Value = item.Value, + Quality = item.Quality + }).ToList(); + + var resultVilos = await _jobsVilos.InsertarDgaMacroResultadoVilos(listDgaMacroResultadoVilos); + + WriteLineAndLog($"\t Descargar datos historian: Insertar InsertarDgaSensorResultadoVilos"); + List listDgaSensorResultadoVilos = listDgaMacroResultados.Select(item => new DgaSensorResultadoVilos + { + TagName = item.TagName, + TimeStamp = item.TimeStamp, + Value = item.Value, + Quality = item.Quality + }).ToList(); + + var resultSensorVilos = await _jobsVilos.InsertarDgaSensorResultadoVilos(listDgaSensorResultadoVilos); + + WriteLineAndLog($"\t Calculo Suma"); + var resultCalculoVilos = await _jobsVilos.SpCalculoDgaVilos(); + + + WriteLineAndLog($"\t Traspaso datos achird"); + var resultAchirdVilos = await _jobsVilos.SpTraspasoDatosAchirdVilos(); + WriteLineAndLog($"Fin Envio DGA Vilos", ConsoleColor.Green); + /**************/ + /**************/ WriteLineAndLog($"Inicio Envio DGA Sup Fluj", ConsoleColor.Green); WriteLineAndLog($"\t Descargar datos historian: Insertar InsertarDgaMacroResultadoSupFluj"); List listDgaMacroResultadoSupFluj = listDgaMacroResultados.Select(item => new DgaMacroResultadoSupFluj diff --git a/BLL/Recuperacion_DGA/EnvioDGA.cs b/BLL/Recuperacion_DGA/EnvioDGA.cs index b26fc37..0aad658 100644 --- a/BLL/Recuperacion_DGA/EnvioDGA.cs +++ b/BLL/Recuperacion_DGA/EnvioDGA.cs @@ -1,5 +1,4 @@ -using System.Text.Json; -using DAL; +using DAL; using DAS; using Shared.DTO.Envios_DGA; using Shared.DTO.VariablesEntorno; @@ -10,111 +9,119 @@ namespace BLL.Recuperacion_DGA public class EnvioDGA { private readonly MedicionScadaRepository _dGAMedicionScadaRepository; + private readonly MedicionScadaVilosRepository _dgaMedicionScadaVilosRepository; private readonly RegistrarMedicion _registrarMedicion; - public EnvioDGA(MedicionScadaRepository dGAMedicionScadaRepository, RegistrarMedicion registrarMedicion) + public EnvioDGA(MedicionScadaRepository dGAMedicionScadaRepository, RegistrarMedicion registrarMedicion, MedicionScadaVilosRepository dgaMedicionScadaVilosRepository) { _dGAMedicionScadaRepository = dGAMedicionScadaRepository; _registrarMedicion = registrarMedicion; + _dgaMedicionScadaVilosRepository = dgaMedicionScadaVilosRepository; } public async Task RegistrarMedicionesAsync() { - try + WriteLineAndLog("Iniciando el proceso de recuperación DGA..."); + WriteLineAndLog("Obteniendo Mediciones Scada", ConsoleColor.Green); + var mediciones = await _dGAMedicionScadaRepository.ObtenerMedicionesAsync(); + + foreach (var medicion in mediciones) { - await WriteLineAndLog("INICIO", "Inicio proceso de recuperación DGA", ""); - WriteLineAndLog("Obteniendo Mediciones Scada", ConsoleColor.Green); - var mediciones = await _dGAMedicionScadaRepository.ObtenerMedicionesAsync(); - var listaMediciones = new List(); - foreach (var medicion in mediciones) + try { - try + if (!string.IsNullOrEmpty(medicion.Code)) { - if (!string.IsNullOrEmpty(medicion.Code)) + var rutEmpresa = string.Empty; + if (medicion.tipo_empresa == null) { - 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 - { - Autenticacion = new Autenticacion - { - Password = CredencialDGA.Password, - RutEmpresa = rutEmpresa, - 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() ?? "", - } - }; - 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}); + continue; } + if (medicion.tipo_empresa == "AV") + { + rutEmpresa = CredencialDGA.RutAv; + } + if (medicion.tipo_empresa =="EV") + { + rutEmpresa = CredencialDGA.RutEsval; + } + + + var body = new MedicionSubterraneaRequest + { + Autenticacion = new Autenticacion + { + Password = CredencialDGA.Password, + RutEmpresa = rutEmpresa, + 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() ?? "", + } + }; + await _registrarMedicion.EnviarMedicionAsync(medicion.Code, body, medicion.Id); } - catch (Exception ex) - { - FileLoggerHelper.LogError($"[Error] {ex.Message}.", ex); - WriteLineAndLog($"Error al enviar la medición con ID {medicion.Code}.", ConsoleColor.Red); - } + } - var listaMedicionesJson = JsonSerializer.Serialize(listaMediciones); - - if (listaMediciones.Count > 0) + catch (Exception ex) { - await MedicionScadaRepository.ActualizarMedicionesAsync(listaMedicionesJson); + FileLoggerHelper.LogError($"[Error] {ex.Message}.",ex); + WriteLineAndLog($"Error al enviar la medición con ID {medicion.Code}.", ConsoleColor.Red); } - await WriteLineAndLog("FIN","Fin proceso de recuperación DGA",""); - } - catch (Exception ex) - { - FileLoggerHelper.LogError($"[Error] {ex.Message}.", ex); - WriteLineAndLog($"Error al procesar las mediciones.", ConsoleColor.Red); - return false; } + + //var medicionesVilos = await _dgaMedicionScadaVilosRepository.ObtenerMedicionesVilosAsync(); + //foreach (var medicionVilos in medicionesVilos) + //{ + // try + // { + // if (!string.IsNullOrEmpty(medicionVilos.Code)) + // { + // var rutEmpresa = string.Empty; + + // if (medicionVilos.tipo_empresa.Equals("AV")) + // { + // rutEmpresa = CredencialDGA.RutAv; + // } + // else if (medicionVilos.tipo_empresa.Equals("EV")) + // { + // rutEmpresa = CredencialDGA.RutEsval; + // } + + // var body = new MedicionSubterraneaRequest + // { + // Autenticacion = new Autenticacion + // { + // Password = CredencialDGA.Password, + // RutEmpresa = rutEmpresa, + // RutUsuario = CredencialDGA.RutUsuario + // }, + // MedicionSubterranea = new Medicion + // { + // Caudal = medicionVilos.Caudal.ToString() ?? "", + // FechaMedicion = medicionVilos.DateOrigen?.ToString("yyyy-MM-dd") ?? "", + // HoraMedicion = medicionVilos.DateOrigen?.ToString("HH:mm:ss") ?? "", + // NivelFreaticoDelPozo = medicionVilos?.nivelFreaticoDelPozo.ToString() ?? "", + // Totalizador = medicionVilos.Totalizador.ToString() ?? "", + // } + // }; + + // await _registrarMedicion.EnviarMedicionAsync(medicionVilos.Code, body, medicionVilos.Id); + // } + + // } + // catch (Exception ex) + // { + // FileLoggerHelper.LogError($"[Error] {ex.Message}.", ex); + // WriteLineAndLog($"Error al enviar la medición vilos con ID {medicionVilos.Code}.", ConsoleColor.Red); + // } + //} + return true; } @@ -133,21 +140,5 @@ namespace BLL.Recuperacion_DGA 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/JobsDgaVilosRepository.cs b/DAL/JobsDgaVilosRepository.cs new file mode 100644 index 0000000..606cdf2 --- /dev/null +++ b/DAL/JobsDgaVilosRepository.cs @@ -0,0 +1,103 @@ +using System.Data; +using Dapper; +using Microsoft.Data.SqlClient; +using Shared.DTO.Integracion_DGA; +using Shared.DTO.VariablesEntorno; + +namespace DAL +{ + public class JobsDgaVilosRepository + { + + public async Task InsertarDgaMacroResultadoVilos(List dgaMacroResultadoVilos) + { + try + { + using (var connection = new SqlConnection(BdConexion.StringConnection)) + { + await connection.OpenAsync(); + + // 1. Truncar la tabla antes de insertar + await connection.ExecuteAsync("TRUNCATE TABLE DGA_MACRO_RESULTADO_VILOS"); + + // 2. Llamar al stored procedure + await connection.ExecuteAsync("SP_CALCULO_DGA_VILOS", commandType: System.Data.CommandType.StoredProcedure); + + // 3. Insertar todos los datos de la lista usando Dapper + string sql = "INSERT INTO DGA_MACRO_RESULTADO_VILOS (TagName, TimeStamp, Value, Quality) VALUES (@TagName, @TimeStamp, @Value, @Quality)"; + await connection.ExecuteAsync(sql, dgaMacroResultadoVilos); + + return true; // Éxito + } + } + catch (Exception ex) + { + throw new Exception($"Error: {ex.Message}"); + } + } + + public async Task InsertarDgaSensorResultadoVilos(List dgaSensorResultadoVilos) + { + try + { + using (var connection = new SqlConnection(BdConexion.StringConnection)) + { + await connection.OpenAsync(); + + // 1. Truncar la tabla antes de insertar + await connection.ExecuteAsync("TRUNCATE TABLE DGA_SENSOR_RESULTADO_VILOS"); + + // 2. Insertar todos los datos de la lista usando Dapper + string sql = "INSERT INTO DGA_SENSOR_RESULTADO_VILOS (TagName, TimeStamp, Value, Quality) VALUES (@TagName, @TimeStamp, @Value, @Quality)"; + await connection.ExecuteAsync(sql, dgaSensorResultadoVilos); + + return true; // Éxito + } + } + catch (Exception ex) + { + throw new Exception($"Error: {ex.Message}"); + } + } + + public async Task SpCalculoDgaVilos() + { + try + { + using (var connection = new SqlConnection(BdConexion.StringConnection)) + { + await connection.OpenAsync(); + await connection.ExecuteAsync( + "SP_CALCULO_DGA_VILOS", + commandType: CommandType.StoredProcedure + ); + } + return true; // Éxito + } + catch (Exception ex) + { + throw new Exception($"Error: {ex.Message}"); + } + } + + public async Task SpTraspasoDatosAchirdVilos() + { + try + { + using (var connection = new SqlConnection(BdConexion.StringConnection)) + { + await connection.OpenAsync(); + await connection.ExecuteAsync( + "SP_TRASPASO_DATOS_ACHIRD_VILOS", + commandType: CommandType.StoredProcedure + ); + } + return true; // Éxito + } + catch (Exception ex) + { + throw new Exception($"Error: {ex.Message}"); + } + } + } +} diff --git a/DAL/MedicionScadaRepository.cs b/DAL/MedicionScadaRepository.cs index 2781766..fd52a57 100644 --- a/DAL/MedicionScadaRepository.cs +++ b/DAL/MedicionScadaRepository.cs @@ -18,19 +18,5 @@ namespace DAL return result.ToList(); } - - public static async Task ActualizarMedicionesAsync(string medicionesJson) - { - 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/DAL/MedicionScadaVilosRepository.cs b/DAL/MedicionScadaVilosRepository.cs new file mode 100644 index 0000000..be66e4b --- /dev/null +++ b/DAL/MedicionScadaVilosRepository.cs @@ -0,0 +1,22 @@ +using System.Data; +using Dapper; +using Microsoft.Data.SqlClient; +using Shared.DTO.Envios_DGA; +using Shared.DTO.VariablesEntorno; + +namespace DAL +{ + public class MedicionScadaVilosRepository + { + public async Task> ObtenerMedicionesVilosAsync() + { + await using var connection = new SqlConnection(BdConexion.StringConnection); + + var result = await connection.QueryAsync( + "SP_OBTENER_MEDICION_SMARTSCADA_OPERACION_VILOS", + commandType: CommandType.StoredProcedure); + + return result.ToList(); + } + } +} diff --git a/DAS/RegistrarMedicion.cs b/DAS/RegistrarMedicion.cs index d380475..168998a 100644 --- a/DAS/RegistrarMedicion.cs +++ b/DAS/RegistrarMedicion.cs @@ -17,14 +17,14 @@ namespace DAS _logMedicionScadaRepository = logMedicionScadaRepository; } - public async Task EnviarMedicionAsync(MedicionScada medicion, MedicionSubterraneaRequest request,DateTime fechaEnvio) + public async Task EnviarMedicionAsync(string codigoObra, MedicionSubterraneaRequest request, long idMedicion) { var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000"); var json = JsonSerializer.Serialize(request); var content = new StringContent(json, Encoding.UTF8, "application/json"); - content.Headers.Add("codigoObra", medicion.Code); + content.Headers.Add("codigoObra", codigoObra); content.Headers.Add("timeStampOrigen", timeStamp); var response = await _httpClient.PostAsync($"{SubterraneaApiUrl.BaseUrl}{SubterraneaApiUrl.EndPoint}SSSSSSSSSSSSSSSSS", content); @@ -54,8 +54,8 @@ namespace DAS JsonEnviado = json, JsonRecibido = jsonRecibido, Comprobante = comprobante, - FechaEnvio = fechaEnvio, - IdMedicionSmartscadaOperacion = medicion.Id + FechaEnvio = DateTime.UtcNow, + IdMedicionSmartscadaOperacion = idMedicion }; await _logMedicionScadaRepository.InsertarLogMedicionScadaAsync(logMedicionScada); diff --git a/Integracion_DGA/Program.cs b/Integracion_DGA/Program.cs index a9def38..2117aa9 100644 --- a/Integracion_DGA/Program.cs +++ b/Integracion_DGA/Program.cs @@ -42,10 +42,12 @@ namespace Integracion_DGA services.AddScoped(); services.AddHttpClient(); services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); }) .Build(); diff --git a/Recuperacion_DGA/Program.cs b/Recuperacion_DGA/Program.cs index a7b8ea3..580a484 100644 --- a/Recuperacion_DGA/Program.cs +++ b/Recuperacion_DGA/Program.cs @@ -39,6 +39,7 @@ namespace Recuperacion_DGA services.AddSingleton(configuration); services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddHttpClient(); services.AddScoped(); diff --git a/SHARED/DTO/Envios_DGA/MedicionScada.cs b/SHARED/DTO/Envios_DGA/MedicionScada.cs index f35f57d..4127a3f 100644 --- a/SHARED/DTO/Envios_DGA/MedicionScada.cs +++ b/SHARED/DTO/Envios_DGA/MedicionScada.cs @@ -20,8 +20,7 @@ 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/Integracion_DGA/DgaMacroResultadoVilos.cs b/SHARED/DTO/Integracion_DGA/DgaMacroResultadoVilos.cs new file mode 100644 index 0000000..1fe4f79 --- /dev/null +++ b/SHARED/DTO/Integracion_DGA/DgaMacroResultadoVilos.cs @@ -0,0 +1,12 @@ +namespace Shared.DTO.Integracion_DGA; + +public partial class DgaMacroResultadoVilos +{ + 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/DgaSensorResultadoVilos.cs b/SHARED/DTO/Integracion_DGA/DgaSensorResultadoVilos.cs new file mode 100644 index 0000000..a7c7da8 --- /dev/null +++ b/SHARED/DTO/Integracion_DGA/DgaSensorResultadoVilos.cs @@ -0,0 +1,12 @@ +namespace Shared.DTO.Integracion_DGA; + +public partial class DgaSensorResultadoVilos +{ + 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/FileLoggerHelper.cs b/SHARED/Helper/FileLoggerHelper.cs index 767dd89..b3e0bf1 100644 --- a/SHARED/Helper/FileLoggerHelper.cs +++ b/SHARED/Helper/FileLoggerHelper.cs @@ -1,8 +1,5 @@ -using Dapper; -using Microsoft.Data.SqlClient; -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; using Serilog; -using Shared.DTO.VariablesEntorno; namespace Shared.Helper { @@ -28,31 +25,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; - } - } - } } 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 @@ - -