diff --git a/BLL/Integracion_DGA/BusinessLogic.cs b/BLL/Integracion_DGA/BusinessLogic.cs new file mode 100644 index 0000000..e1f42ba --- /dev/null +++ b/BLL/Integracion_DGA/BusinessLogic.cs @@ -0,0 +1,187 @@ +using System.Text.Json; +using DAL; +using Microsoft.Extensions.Configuration; +using Shared.DTO.Integracion_DGA; +using Shared.DTO.VariablesEntorno; +using Shared.Helper; + +namespace BLL.Integracion_DGA +{ + public class BusinessLogic + { + 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) + { + _configuration = configuration; + _apiService = apiService; + _jobs = jobs; + _jobsSupFluj = jobsSupFluj; + FileLoggerHelper.ConfigureLogger(_configuration); + } + + public async Task Run() + { + + DateTimeOffset dateEnd = DateTimeOffset.Now; + DateTimeOffset dateStart = dateEnd.AddHours(-1); + + JsonSerializerOptions options = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }; + + //FileLoggerHelper.ConfigureLogger(_configuration); + WriteLineAndLog($"Inicia Proceso DGA"); + try + { + string apiUrlBase = NexusApiUrl.ApiUrl; + Dictionary headers = new Dictionary + { + { "nexustoken", NexusApiUrl.ApiKey }, + { "nexusapiversion", NexusApiUrl.Version }, + { "accept", "application/json" } + }; + + WriteLineAndLog($"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); + foreach (DocumentResponse item in documento) + { + WriteLineAndLog($"Obteniendo Tagviews"); + string apiUrlTagViews = $"{apiUrlBase}/api/Documents/tagviews/{item.uid}"; + responseData = await _apiService.GetApiResponseAsync(apiUrlTagViews, headers); + TagviewsResponse tagviews = JsonSerializer.Deserialize(responseData, options); + + List listTagsID = new List(); + foreach (Column tag in tagviews.Columns) + { + listTagsID.Add(tag.Uid); + } + + HistoricRequest historicRequest = new HistoricRequest(); + historicRequest.DataSource = NexusApiUrl.DataSource; + historicRequest.Resolution = NexusApiUrl.Resolution; + historicRequest.Uids = listTagsID; + historicRequest.StartTs = dateStart.ToUnixTimeSeconds(); + historicRequest.EndTs = dateEnd.ToUnixTimeSeconds(); + + WriteLineAndLog($"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 listDgaMacroResultados = new List(); + foreach (Column tag in tagviews.Columns) + { + IEnumerable filter = historicResponse.Where(h => h.Uid == tag.Uid); + foreach (HistoricResponse historic in filter) + { + TimeZoneInfo zonaHorariaChile = TimeZoneInfo.FindSystemTimeZoneById("Pacific SA Standard Time"); + DateTime now = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(historic.TimeStamp); + DateTime fechaHoraChile = TimeZoneInfo.ConvertTimeFromUtc(now, zonaHorariaChile); + + + DgaMacroResultado dgaMacroResultado = new DgaMacroResultado(); + dgaMacroResultado.TagName = $"SCADA001.{tag.Name}.F_CV"; + dgaMacroResultado.Value = historic.Value; + //dgaMacroResultado.TimeStamp = new DateTime(historic.TimeStamp); + dgaMacroResultado.TimeStamp = fechaHoraChile; + + listDgaMacroResultados.Add(dgaMacroResultado); + } + } + + /**************/ + WriteLineAndLog($"Inicia Envio DGA", ConsoleColor.Green); + WriteLineAndLog($"\t Descargar datos historian: Insertar DgaMacroResultado"); + var resultMacro = await _jobs.InsertarDgaMacroResultado(listDgaMacroResultados); + + WriteLineAndLog($"\t Descargar datos historian: Insertar DgaSensorResultado"); + List listDgaSensorResultado = listDgaMacroResultados.Select(item => new DgaSensorResultado + { + TagName = item.TagName, + TimeStamp = item.TimeStamp, + Value = item.Value, + Quality = item.Quality + }).ToList(); + + var resultSensor = await _jobs.InsertarDgaSensorResultado(listDgaSensorResultado); + + WriteLineAndLog($"\t Calculo DGA"); + var resultCalculo = await _jobs.SpCalculoDga(); + + WriteLineAndLog($"\t descargar datos suma reversibilidad : Insertar DgaMacroResultadoSupFlujSuma"); + List listDgaMacroResultadoSupFlujSuma = listDgaMacroResultados.Select(item => new DgaMacroResultadoSupFlujSuma + { + TagName = item.TagName, + TimeStamp = item.TimeStamp, + Value = item.Value, + Quality = item.Quality + }).ToList(); + + var resultSupFlujSuma = await _jobs.InsertarDgaMacroResultadoSupFlujSuma(listDgaMacroResultadoSupFlujSuma); + + WriteLineAndLog($"\t Calculo Suma"); + var resultCalculoDgaSup = await _jobs.SpCalculoDgaSupFlujSumaSnreversibilidad(); + + + WriteLineAndLog($"\t Traspaso datos achird"); + var result = await _jobs.SpTraspasoDatosAchird(); + WriteLineAndLog($"Fin Envio DGA", ConsoleColor.Green); + /**************/ + /**************/ + WriteLineAndLog($"Inicio Envio DGA Sup Fluj", ConsoleColor.Green); + WriteLineAndLog($"\t Descargar datos historian: Insertar InsertarDgaMacroResultadoSupFluj"); + List listDgaMacroResultadoSupFluj = listDgaMacroResultados.Select(item => new DgaMacroResultadoSupFluj + { + TagName = item.TagName, + TimeStamp = item.TimeStamp, + Value = item.Value, + Quality = item.Quality + }).ToList(); + + var resultSensorSup = await _jobsSupFluj.InsertarDgaMacroResultadoSupFluj(listDgaMacroResultadoSupFluj); + + WriteLineAndLog($"\t Calculo Suma"); + var resultCalculoSup = await _jobsSupFluj.SpCalculoDgaSupFluj(); + + + WriteLineAndLog($"\t Traspaso datos achird"); + var resultAchirdSup = await _jobsSupFluj.SpTraspasoDatosAchirdSupFluj(); + WriteLineAndLog($"Fin Envio DGA Sup Fluj", ConsoleColor.Green); + /**************/ + /**************/ + } + WriteLineAndLog($"FIN Proceso DGA"); + } + catch (Exception ex) + { + FileLoggerHelper.LogError($"{ex.Message}", ex); + WriteLineAndLog($"{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/Integracion_DGA/ObtencionDatosDga.cs b/BLL/Integracion_DGA/ObtencionDatosDga.cs deleted file mode 100644 index ce67e7d..0000000 --- a/BLL/Integracion_DGA/ObtencionDatosDga.cs +++ /dev/null @@ -1,138 +0,0 @@ -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 -{ - public class ObtencionDatosDga - { - private readonly IConfiguration _configuration; - private readonly ApiService _apiService; - private readonly JobsDgaRepository _jobs; - private readonly LogEnvioRepository _logEnvioRepository; - - 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); - - JsonSerializerOptions options = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }; - - ConsoleLoggerHelper.WriteLineAndLogInfo($"INICIO OBTENER DATOS DGA"); - try - { - string apiUrlBase = NexusApiUrl.ApiUrl; - Dictionary headers = new Dictionary - { - { "nexustoken", NexusApiUrl.ApiKey }, - { "nexusapiversion", NexusApiUrl.Version }, - { "accept", "application/json" } - }; - - 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) - { - ConsoleLoggerHelper.WriteLineAndLogInfo($"OBTENIENDO TAGVIEWS"); - string apiUrlTagViews = $"{apiUrlBase}/api/Documents/tagviews/{item.uid}"; - responseData = await _apiService.GetApiResponseAsync(apiUrlTagViews, headers); - TagviewsResponse tagviews = JsonSerializer.Deserialize(responseData, options) ?? new TagviewsResponse(); - - List listTagsID = tagviews.Columns.Select(x => x.Uid).ToList(); - - HistoricRequest historicRequest = new HistoricRequest - { - DataSource = NexusApiUrl.DataSource, - Resolution = NexusApiUrl.Resolution, - Uids = listTagsID, - StartTs = dateStart.ToUnixTimeSeconds(), - EndTs = dateEnd.ToUnixTimeSeconds() - }; - - 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) ?? 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) - .Select(h => new DGAInsert - { - TAG = tag.Name, - VALOR = h.Value?.ToString(), - FECHAMEDICION = TimeZoneInfo.ConvertTimeFromUtc( - new DateTime(1970, 1, 1).AddSeconds(h.TimeStamp).ToUniversalTime(), - zonaHorariaChile) - }) - ).ToList(); - - await _jobs.InsertarDgaCaudal(caudalData); - } - 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) - .Select(h => new DGAInsert - { - TAG = tag.Name, - VALOR = h.Value?.ToString(), - FECHAMEDICION = TimeZoneInfo.ConvertTimeFromUtc( - new DateTime(1970, 1, 1).AddSeconds(h.TimeStamp).ToUniversalTime(), - zonaHorariaChile) - }) - ).ToList(); - - await _jobs.InsertarDgaNivel(nivelData); - } - } - - ConsoleLoggerHelper.WriteLineAndLogInfo($"INICIO REGISTRO DE MEDICIONES DGA"); - await _jobs.SpRegistrarMedicionesDga(); - ConsoleLoggerHelper.WriteLineAndLogInfo($"FIN REGISTRO DE MEDICIONES DGA"); - } - catch (Exception ex) - { - FileLoggerHelper.LogError($"{ex.Message}", ex); - ConsoleLoggerHelper.WriteLineAndLogInfo($"{ex.Message}", ConsoleColor.Red); - } - } - } -} diff --git a/BLL/Recuperacion_DGA/EnvioDGA.cs b/BLL/Recuperacion_DGA/EnvioDGA.cs index 96a7863..b26fc37 100644 --- a/BLL/Recuperacion_DGA/EnvioDGA.cs +++ b/BLL/Recuperacion_DGA/EnvioDGA.cs @@ -1,8 +1,6 @@ -using System; -using System.Text.Json; +using System.Text.Json; using DAL; using DAS; -using Shared.DTO; using Shared.DTO.Envios_DGA; using Shared.DTO.VariablesEntorno; using Shared.Helper; @@ -11,44 +9,68 @@ namespace BLL.Recuperacion_DGA { public class EnvioDGA { - private readonly MedicionDGARepository _dGAMedicionRepository; + private readonly MedicionScadaRepository _dGAMedicionScadaRepository; private readonly RegistrarMedicion _registrarMedicion; - private readonly LogEnvioRepository _logEnvioRepository; - public EnvioDGA(MedicionDGARepository dGAMedicionRepository, RegistrarMedicion registrarMedicion, LogEnvioRepository logEnvioRepository) + public EnvioDGA(MedicionScadaRepository dGAMedicionScadaRepository, RegistrarMedicion registrarMedicion) { - _dGAMedicionRepository = dGAMedicionRepository; + _dGAMedicionScadaRepository = dGAMedicionScadaRepository; _registrarMedicion = registrarMedicion; - _logEnvioRepository = logEnvioRepository; } public async Task RegistrarMedicionesAsync() { try { - await _logEnvioRepository.InsertarLogProcesoAsync(new LogProceso + 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) { - FechaEjecucion = DateTime.UtcNow, - NombreProceso = "ENVIO DATOS DGA" - }); - - ConsoleLoggerHelper.WriteLineAndLogEventoAsync("INICIO", "Inicio proceso de recuperación DGA", ""); - ConsoleLoggerHelper.WriteLineAndLogInfo("Obteniendo Mediciones Scada", ConsoleColor.Green); - - var logsEnviados = new List(); - - var pageNumber = 1; - - while (true) - { - var mediciones = await _dGAMedicionRepository.ObtenerMedicionesPorLoteAsync(pageNumber); - - if (mediciones == null || !mediciones.Any()){ break; } - - foreach (var medicion in mediciones) + try { - 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 @@ -56,55 +78,76 @@ namespace BLL.Recuperacion_DGA Autenticacion = new Autenticacion { Password = CredencialDGA.Password, - RutEmpresa = medicion.TIPO_EMPRESA == "EV" ? CredencialDGA.RutEsval : CredencialDGA.RutAv, + RutEmpresa = rutEmpresa, 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 ?? "", + 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() ?? "", } }; - - var response = await _registrarMedicion.EnviarMedicionAsync(medicion, body, fechaEnvio); - - logsEnviados.Add(response); - - } - catch (Exception ex) - { - ConsoleLoggerHelper.WriteLineAndLogInfo($"[Error]: medicion[{medicion.ID}], mensaje: {ex.Message}"); + 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}); } + } - try + catch (Exception ex) { - var idMediciones = mediciones.Select(x => x.ID).ToList(); - await _dGAMedicionRepository.GuardarMedicionesEnviadasAsync(idMediciones); - await _logEnvioRepository.InsertarLogRespuesta(logsEnviados); + FileLoggerHelper.LogError($"[Error] {ex.Message}.", ex); + WriteLineAndLog($"Error al enviar la medición con ID {medicion.Code}.", ConsoleColor.Red); } - catch (Exception e) - { - ConsoleLoggerHelper.WriteLineAndLogInfo($"[Error] {e.Message}"); - } - - logsEnviados.Clear(); - mediciones.Clear(); - pageNumber++; } + var listaMedicionesJson = JsonSerializer.Serialize(listaMediciones); - ConsoleLoggerHelper.WriteLineAndLogEventoAsync("FIN","Fin proceso de recuperación DGA",""); + if (listaMediciones.Count > 0) + { + await MedicionScadaRepository.ActualizarMedicionesAsync(listaMedicionesJson); + } + await WriteLineAndLog("FIN","Fin proceso de recuperación DGA",""); } catch (Exception ex) { FileLoggerHelper.LogError($"[Error] {ex.Message}.", ex); - ConsoleLoggerHelper.WriteLineAndLogInfo($"Error al procesar las mediciones.", ConsoleColor.Red); + WriteLineAndLog($"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 new file mode 100644 index 0000000..96812f0 --- /dev/null +++ b/DAL/Encriptador.cs @@ -0,0 +1,54 @@ +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/JobsDgaRepository.cs b/DAL/JobsDgaRepository.cs index a9b8c67..c173b73 100644 --- a/DAL/JobsDgaRepository.cs +++ b/DAL/JobsDgaRepository.cs @@ -1,7 +1,6 @@ using System.Data; using Dapper; using Microsoft.Data.SqlClient; -using Microsoft.Identity.Client; using Shared.DTO.Integracion_DGA; using Shared.DTO.VariablesEntorno; @@ -9,7 +8,83 @@ namespace DAL { public class JobsDgaRepository { - public async Task SpRegistrarMedicionesDga() + public async Task InsertarDgaMacroResultado(List dgaMacroResultados) + { + try + { + using (SqlConnection connection = new SqlConnection(BdConexion.StringConnection)) + { + await connection.OpenAsync(); + // 1. Truncar la tabla antes de insertar + await connection.ExecuteAsync("TRUNCATE TABLE DGA_MACRO_RESULTADO"); + // 2. Insertar la lista de registros + string sql = "INSERT INTO DGA_MACRO_RESULTADO (TagName, TimeStamp, Value, Quality) VALUES (@TagName, @TimeStamp, @Value, @Quality)"; + // Esto inserta todos los elementos de la lista en la tabla + await connection.ExecuteAsync(sql, dgaMacroResultados); + return true; + } + } + catch (Exception ex) + { + throw new Exception($"Error: {ex.Message}"); + } + } + + public async Task InsertarDgaSensorResultado(List dgaSensorResultado) + { + try + { + using (var connection = new SqlConnection(BdConexion.StringConnection)) + { + await connection.OpenAsync(); + + // 1. Truncar la tabla DGA_SENSOR_RESULTADO + await connection.ExecuteAsync("TRUNCATE TABLE DGA_SENSOR_RESULTADO"); + + // 2. Llamar al stored procedure SP_CALCULO_DGA + await connection.ExecuteAsync("SP_CALCULO_DGA", commandType: System.Data.CommandType.StoredProcedure); + + // 3. Insertar todos los registros de la lista con Dapper + string sql = "INSERT INTO DGA_SENSOR_RESULTADO (TagName, TimeStamp, Value, Quality) VALUES (@TagName, @TimeStamp, @Value, @Quality)"; + await connection.ExecuteAsync(sql, dgaSensorResultado); + + return true; + } + } + catch (Exception ex) + { + throw new Exception($"Error: {ex.Message}"); + } + } + + public async Task InsertarDgaMacroResultadoSupFlujSuma(List dgaMacroResultadoSupFlujSuma) + { + try + { + // Configurar la conexión a la base de datos + using (SqlConnection connection = new SqlConnection(BdConexion.StringConnection)) + { + await connection.OpenAsync(); + // Truncar la tabla antes de insertar + await connection.ExecuteAsync("TRUNCATE TABLE DGA_MACRO_RESULTADO_SUP_FLUJ_SUMA"); + + // Crear un adaptador de datos + SqlDataAdapter adapter = new SqlDataAdapter(); + + // Configurar el comando de inserción + string sql = "INSERT INTO DGA_MACRO_RESULTADO_SUP_FLUJ_SUMA (TagName, TimeStamp, Value, Quality) VALUES (@TagName, @TimeStamp, @Value, @Quality)"; + await connection.ExecuteAsync(sql, dgaMacroResultadoSupFlujSuma); + + return true; // Éxito + } + } + catch (Exception ex) + { + throw new Exception($"Error: {ex.Message}"); + } + } + + public async Task SpCalculoDga() { try { @@ -17,7 +92,7 @@ namespace DAL { await connection.OpenAsync(); // Ejecuta el stored procedure sin parámetros - await connection.ExecuteAsync("SP_REGISTRAR_DATOS_DGA", commandType: CommandType.StoredProcedure); + await connection.ExecuteAsync("SP_CALCULO_DGA", commandType: CommandType.StoredProcedure); } return true; // Éxito } @@ -27,21 +102,19 @@ namespace DAL } } - public async Task InsertarDgaCaudal(List dgaMacroResultados) + public async Task SpCalculoDgaSupFlujSumaSnreversibilidad() { try { - using (SqlConnection connection = new SqlConnection(BdConexion.StringConnection)) + using (var connection = new SqlConnection(BdConexion.StringConnection)) { await connection.OpenAsync(); - // 1. Truncar la tabla antes de insertar - await connection.ExecuteAsync("TRUNCATE TABLE DGA_CAUDAL"); - // 2. Insertar la lista de registros - string sql = "INSERT INTO DGA_CAUDAL (TAG, CAUDAL, FECHAMEDICION) VALUES (@TAG, @VALOR, @FECHAMEDICION)"; - // Esto inserta todos los elementos de la lista en la tabla - await connection.ExecuteAsync(sql, dgaMacroResultados); - return true; + await connection.ExecuteAsync( + "SP_CALCULO_DGA_SUP_FLUJ_SUMA_SNREVERSIBILIDAD", + commandType: CommandType.StoredProcedure + ); } + return true; // Éxito } catch (Exception ex) { @@ -49,21 +122,19 @@ namespace DAL } } - public async Task InsertarDgaNivel(List dgaMacroResultados) + public async Task SpTraspasoDatosAchird() { try { - using (SqlConnection connection = new SqlConnection(BdConexion.StringConnection)) + using (var connection = new SqlConnection(BdConexion.StringConnection)) { await connection.OpenAsync(); - // 1. Truncar la tabla antes de insertar - await connection.ExecuteAsync("TRUNCATE TABLE DGA_NIVEL"); - // 2. Insertar la lista de registros - string sql = "INSERT INTO DGA_NIVEL (TAG, NIVEL_FREATICO, FECHAMEDICION) VALUES (@TAG, @VALOR, @FECHAMEDICION)"; - // Esto inserta todos los elementos de la lista en la tabla - await connection.ExecuteAsync(sql, dgaMacroResultados); - return true; + await connection.ExecuteAsync( + "SP_TRASPASO_DATOS_ACHIRD", + commandType: CommandType.StoredProcedure + ); } + return true; // Éxito } catch (Exception ex) { diff --git a/DAL/JobsDgaSupFlujRepository.cs b/DAL/JobsDgaSupFlujRepository.cs new file mode 100644 index 0000000..b217349 --- /dev/null +++ b/DAL/JobsDgaSupFlujRepository.cs @@ -0,0 +1,74 @@ +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/LogEnvioRepository.cs b/DAL/LogEnvioRepository.cs deleted file mode 100644 index a5434c4..0000000 --- a/DAL/LogEnvioRepository.cs +++ /dev/null @@ -1,69 +0,0 @@ -using Dapper; -using Microsoft.Data.SqlClient; -using Serilog; -using Shared.DTO; -using Shared.DTO.Envios_DGA; -using Shared.DTO.VariablesEntorno; - -namespace DAL -{ - public class LogEnvioRepository - { - 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; - } - } - - 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/LogMedicionScadaRepository.cs b/DAL/LogMedicionScadaRepository.cs new file mode 100644 index 0000000..548f83a --- /dev/null +++ b/DAL/LogMedicionScadaRepository.cs @@ -0,0 +1,34 @@ +using Dapper; +using Microsoft.Data.SqlClient; +using Shared.DTO.Envios_DGA; +using Shared.DTO.VariablesEntorno; + +namespace DAL +{ + public class LogMedicionScadaRepository + { + public async Task InsertarLogMedicionScadaAsync(LogMedicionScada logMedicionScada) + { + try + { + 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); + + return true; // Éxito + } + } + catch (Exception ex) + { + throw new Exception($"Error: {ex.Message}"); + } + } + + } +} diff --git a/DAL/MedicionDGARepository.cs b/DAL/MedicionDGARepository.cs deleted file mode 100644 index fa470f0..0000000 --- a/DAL/MedicionDGARepository.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Data; -using Dapper; -using Microsoft.Data.SqlClient; -using Shared.DTO.Envios_DGA; -using Shared.DTO.VariablesEntorno; - -namespace DAL -{ - public class MedicionDGARepository - { - public async Task> ObtenerMedicionesAsync() - { - 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); - - 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/DAL/MedicionScadaRepository.cs b/DAL/MedicionScadaRepository.cs new file mode 100644 index 0000000..2781766 --- /dev/null +++ b/DAL/MedicionScadaRepository.cs @@ -0,0 +1,36 @@ +using System.Data; +using Dapper; +using Microsoft.Data.SqlClient; +using Shared.DTO.Envios_DGA; +using Shared.DTO.VariablesEntorno; + +namespace DAL +{ + public class MedicionScadaRepository + { + public async Task> ObtenerMedicionesAsync() + { + await using var connection = new SqlConnection(BdConexion.StringConnection); + + var result = await connection.QueryAsync( + "SP_OBTENER_MEDICION_SMARTSCADA_OPERACION", + commandType: CommandType.StoredProcedure); + + 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/DAS/RegistrarMedicion.cs b/DAS/RegistrarMedicion.cs index 3b4a0ad..c7058c7 100644 --- a/DAS/RegistrarMedicion.cs +++ b/DAS/RegistrarMedicion.cs @@ -1,74 +1,66 @@ -using DAL; -using Serilog; +using System.Text; +using System.Text.Json; +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 LogEnvioRepository _logMedicionScadaRepository; + private readonly LogMedicionScadaRepository _logMedicionScadaRepository; - public RegistrarMedicion(HttpClient httpClient, LogEnvioRepository logMedicionScadaRepository) + public RegistrarMedicion(HttpClient httpClient, LogMedicionScadaRepository logMedicionScadaRepository) { _httpClient = httpClient; _logMedicionScadaRepository = logMedicionScadaRepository; } - public async Task EnviarMedicionAsync(DatoDGATemporal medicion, MedicionSubterraneaRequest request, DateTime fechaEnvio) + public async Task EnviarMedicionAsync(MedicionScada medicion, MedicionSubterraneaRequest request,DateTime fechaEnvio) { - var log = new LogMedicionEnvio(); - try + 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("timeStampOrigen", timeStamp); + + 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 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) + try { - log.COMPROBANTE = null; - log.ESTADO_ENVIO = "ERROR"; + using var doc = JsonDocument.Parse(jsonRecibido); + if (doc.RootElement.TryGetProperty("data", out var dataProp) && + dataProp.TryGetProperty("numeroComprobante", out var comprobanteProp)) + { + comprobante = comprobanteProp.GetString() ?? ""; + } } - - var apiResponse = JsonSerializer.Deserialize>(jsonRecibido, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); - - if (apiResponse == null || string.IsNullOrEmpty(apiResponse.Status) || apiResponse.Status != "00") + catch { - 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 + + var logMedicionScada = new LogMedicionScada { + EstadoEnvio = estado, + JsonEnviado = json, + JsonRecibido = jsonRecibido, + Comprobante = comprobante, + FechaEnvio = fechaEnvio, + IdMedicionSmartscadaOperacion = medicion.Id + }; + + await _logMedicionScadaRepository.InsertarLogMedicionScadaAsync(logMedicionScada); - } - - return log; + return true; } } } diff --git a/Integracion_DGA/Program.cs b/Integracion_DGA/Program.cs index 9e2de07..27ec017 100644 --- a/Integracion_DGA/Program.cs +++ b/Integracion_DGA/Program.cs @@ -46,21 +46,22 @@ 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.ObtenerDatosDga(); + await bussinessLogic.Run(); } } } diff --git a/Recuperacion_DGA/Program.cs b/Recuperacion_DGA/Program.cs index 7601d1e..8f68902 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 deleted file mode 100644 index 30fa87d..0000000 --- a/SHARED/DTO/Envios_DGA/ApiResponse.cs +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index 72160a6..0000000 --- a/SHARED/DTO/Envios_DGA/DatoDGA.cs +++ /dev/null @@ -1,27 +0,0 @@ -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/DatoDGATemporal.cs b/SHARED/DTO/Envios_DGA/DatoDGATemporal.cs deleted file mode 100644 index d375bde..0000000 --- a/SHARED/DTO/Envios_DGA/DatoDGATemporal.cs +++ /dev/null @@ -1,18 +0,0 @@ -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; } - } -} diff --git a/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs b/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs deleted file mode 100644 index 2ca9e05..0000000 --- a/SHARED/DTO/Envios_DGA/LogMedicionEnvio.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Shared.DTO.Envios_DGA -{ - public class LogMedicionEnvio - { - 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/Envios_DGA/LogMedicionScada.cs b/SHARED/DTO/Envios_DGA/LogMedicionScada.cs new file mode 100644 index 0000000..9a3b079 --- /dev/null +++ b/SHARED/DTO/Envios_DGA/LogMedicionScada.cs @@ -0,0 +1,12 @@ +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 new file mode 100644 index 0000000..f35f57d --- /dev/null +++ b/SHARED/DTO/Envios_DGA/MedicionScada.cs @@ -0,0 +1,28 @@ +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 001bb9e..6cea0a9 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; } = new(); - public Medicion MedicionSubterranea { get; set; } = new(); + public Autenticacion Autenticacion { get; set; } + public Medicion MedicionSubterranea { get; set; } } public class Autenticacion { - public string Password { get; set; } = string.Empty; - public string RutEmpresa { get; set; } = string.Empty; - public string RutUsuario { get; set; } = string.Empty; + public string Password { get; set; } + public string RutEmpresa { get; set; } + public string RutUsuario { get; set; } } 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 deleted file mode 100644 index 74edddf..0000000 --- a/SHARED/DTO/Envios_DGA/MedicionSubterraneaResponse.cs +++ /dev/null @@ -1,13 +0,0 @@ -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/DGAInsert.cs b/SHARED/DTO/Integracion_DGA/DGAInsert.cs deleted file mode 100644 index e1e0ce5..0000000 --- a/SHARED/DTO/Integracion_DGA/DGAInsert.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Shared.DTO.Integracion_DGA -{ - public partial class DGAInsert - { - public string TAG { get; set; } = string.Empty; - public string? VALOR { get; set; } - public DateTime FECHAMEDICION { get; set; } - } -} diff --git a/SHARED/DTO/Integracion_DGA/DgaMacroResultado.cs b/SHARED/DTO/Integracion_DGA/DgaMacroResultado.cs new file mode 100644 index 0000000..07a735a --- /dev/null +++ b/SHARED/DTO/Integracion_DGA/DgaMacroResultado.cs @@ -0,0 +1,12 @@ +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 new file mode 100644 index 0000000..25558f6 --- /dev/null +++ b/SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFluj.cs @@ -0,0 +1,12 @@ +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 new file mode 100644 index 0000000..f1f5086 --- /dev/null +++ b/SHARED/DTO/Integracion_DGA/DgaMacroResultadoSupFlujSuma.cs @@ -0,0 +1,12 @@ +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 new file mode 100644 index 0000000..0f85fb4 --- /dev/null +++ b/SHARED/DTO/Integracion_DGA/DgaSensorResultado.cs @@ -0,0 +1,12 @@ +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/DTO/LogProceso.cs b/SHARED/DTO/LogProceso.cs deleted file mode 100644 index b67d483..0000000 --- a/SHARED/DTO/LogProceso.cs +++ /dev/null @@ -1,14 +0,0 @@ -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/ConsoleLoggerHelper.cs b/SHARED/Helper/ConsoleLoggerHelper.cs deleted file mode 100644 index 3a0b4e2..0000000 --- a/SHARED/Helper/ConsoleLoggerHelper.cs +++ /dev/null @@ -1,39 +0,0 @@ -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 720cbb1..767dd89 100644 --- a/SHARED/Helper/FileLoggerHelper.cs +++ b/SHARED/Helper/FileLoggerHelper.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.Configuration; +using Dapper; +using Microsoft.Data.SqlClient; +using Microsoft.Extensions.Configuration; using Serilog; using Shared.DTO.VariablesEntorno; @@ -8,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() @@ -26,5 +28,31 @@ 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 b5542cf..2b365e5 100644 --- a/SHARED/Shared.csproj +++ b/SHARED/Shared.csproj @@ -7,6 +7,8 @@ + +