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..2e6781b 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,12 +9,14 @@ 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() @@ -25,7 +26,6 @@ namespace BLL.Recuperacion_DGA 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 @@ -71,7 +71,6 @@ namespace BLL.Recuperacion_DGA { await FileLoggerHelper.InsertarLogsAsync("REGISTRAR", $"Medicion {medicion.Code} no registra {string.Join(", ", vacios)}",""); } - var fechaEnvio = DateTime.UtcNow; var body = new MedicionSubterraneaRequest { @@ -90,8 +89,7 @@ namespace BLL.Recuperacion_DGA 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}); + //await _registrarMedicion.EnviarMedicionAsync(medicion.Code, body, medicion.Id); } } @@ -101,13 +99,83 @@ namespace BLL.Recuperacion_DGA WriteLineAndLog($"Error al enviar la medición con ID {medicion.Code}.", ConsoleColor.Red); } } - var listaMedicionesJson = JsonSerializer.Serialize(listaMediciones); - - if (listaMediciones.Count > 0) - { - await MedicionScadaRepository.ActualizarMedicionesAsync(listaMedicionesJson); - } await WriteLineAndLog("FIN","Fin proceso de recuperación DGA",""); + + await WriteLineAndLog("INICIO", "Inicio proceso de recuperación DGA los Vilos", "VILOS"); + WriteLineAndLog("Obteniendo Mediciones Scada los Vilos", ConsoleColor.Green); + 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; + } + + List vacios = new List(); + if (medicionVilos.Caudal == null || medicionVilos.Caudal.Equals("")) + { + vacios.Add("caudal"); + } + + if (medicionVilos.DateOrigen == null) + { + vacios.Add("fecha origen"); + } + + if (medicionVilos.nivelFreaticoDelPozo == null || medicionVilos.nivelFreaticoDelPozo.ToString().Equals("")) + { + vacios.Add("nivel freatico"); + } + + if (medicionVilos.Totalizador == null || medicionVilos.Totalizador.Equals("")) + { + vacios.Add("totalizador"); + } + + if (vacios.Count > 0) + { + await FileLoggerHelper.InsertarLogsAsync("REGISTRAR", $"Medicion {medicionVilos.Code} no registra {string.Join(", ", vacios)}", "VILOS"); + } + + 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); + } + } + await WriteLineAndLog("FIN", "Fin proceso de recuperación DGA los Vilos", "VILOS"); } catch (Exception ex) { 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; } +}