Compare commits

..

No commits in common. "5bd9c2a1a6978a0e116d3609e1f1e5ad8766e7e8" and "f519f3329bf24587e3d5d9ea9b4987eb58f1df28" have entirely different histories.

17 changed files with 155 additions and 263 deletions

View file

@ -3,7 +3,6 @@ using DAL;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Shared.DTO; using Shared.DTO;
using Shared.DTO.Integracion_DGA; using Shared.DTO.Integracion_DGA;
using Shared.DTO.VariablesEntorno;
using Shared.Helper; using Shared.Helper;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -45,11 +44,11 @@ namespace BLL.Integracion_DGA
WriteLineAndLog($"Inicia Proceso DGA"); WriteLineAndLog($"Inicia Proceso DGA");
try try
{ {
string apiUrlBase = NexusApiUrl.ApiUrl; string apiUrlBase = _configuration["ApiSettings:ApiUrl"];
Dictionary<string, string> headers = new Dictionary<string, string> Dictionary<string, string> headers = new Dictionary<string, string>
{ {
{ "nexustoken", NexusApiUrl.ApiKey }, { "nexustoken", _configuration["ApiSettings:ApiKey"] },
{ "nexusapiversion", NexusApiUrl.Version }, { "nexusapiversion", _configuration["ApiSettings:Version"] },
{ "accept", "application/json" } { "accept", "application/json" }
}; };
@ -74,8 +73,8 @@ namespace BLL.Integracion_DGA
} }
HistoricRequest historicRequest = new HistoricRequest(); HistoricRequest historicRequest = new HistoricRequest();
historicRequest.DataSource = NexusApiUrl.DataSource; historicRequest.DataSource = _configuration["ApiSettings:DataSource"];
historicRequest.Resolution = NexusApiUrl.Resolution; historicRequest.Resolution = _configuration["ApiSettings:Resolution"];
historicRequest.Uids = listTagsID; historicRequest.Uids = listTagsID;
historicRequest.StartTs = dateStart.ToUnixTimeSeconds(); historicRequest.StartTs = dateStart.ToUnixTimeSeconds();
historicRequest.EndTs = dateEnd.ToUnixTimeSeconds(); historicRequest.EndTs = dateEnd.ToUnixTimeSeconds();

View file

@ -17,48 +17,39 @@ namespace BLL.Recuperacion_DGA
_registrarMedicion = registrarMedicion; _registrarMedicion = registrarMedicion;
} }
public async Task<bool>RegistrarMedicionesAsync() public async Task<List<MedicionScada>> ObtenerMedicionesAsync()
{ {
var mediciones = await _dGAMedicionScadaRepository.ObtenerMedicionesAsync(); var mediciones = await _dGAMedicionScadaRepository.ObtenerMedicionesAsync();
foreach (var medicion in mediciones) foreach (var medicion in mediciones)
{ {
try if (!string.IsNullOrEmpty(medicion.Code))
{ {
if (!string.IsNullOrEmpty(medicion.Code)) var body = new MedicionSubterraneaRequest
{ {
var body = new MedicionSubterraneaRequest Autenticacion = new Autenticacion
{ {
Autenticacion = new Autenticacion Password = string.Empty,
{ RutEmpresa = string.Empty,
Password = string.Empty, RutUsuario = string.Empty
RutEmpresa = string.Empty, },
RutUsuario = string.Empty MedicionSubterranea = new Medicion
}, {
MedicionSubterranea = new Medicion Caudal = medicion.Caudal.ToString() ?? "",
{ FechaMedicion = medicion.DateOrigen?.ToString("yyyy-MM-dd") ?? "",
Caudal = medicion.Caudal.ToString() ?? "", HoraMedicion = medicion.DateOrigen?.ToString("HH:mm:ss") ?? "",
FechaMedicion = medicion.DateOrigen?.ToString("yyyy-MM-dd") ?? "", NivelFreaticoDelPozo = "",
HoraMedicion = medicion.DateOrigen?.ToString("HH:mm:ss") ?? "", Totalizador = medicion.Totalizador.ToString() ?? "",
NivelFreaticoDelPozo = "", }
Totalizador = medicion.Totalizador.ToString() ?? "", };
}
};
//TODO: Agregar log texto await _registrarMedicion.EnviarMedicionAsync(medicion.Code, body,medicion.Id);
await _registrarMedicion.EnviarMedicionAsync(medicion.Code, body,medicion.Id);
}
}
catch (Exception)
{
//TODO: Agregar log texto
throw;
} }
} }
return true;
return mediciones;
} }
} }
} }

View file

@ -9,17 +9,25 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Dapper; using Dapper;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Shared.DTO.VariablesEntorno;
namespace DAL namespace DAL
{ {
public class JobsDgaRepository public class JobsDgaRepository
{ {
private static string connectionString = string.Empty;
private readonly IConfiguration _configuration;
public JobsDgaRepository(IConfiguration configuration)
{
_configuration = configuration;
connectionString = _configuration.GetConnectionString("DefaultConnection") ?? "";
}
public async Task<bool> InsertarDgaMacroResultado(List<DgaMacroResultado> dgaMacroResultados) public async Task<bool> InsertarDgaMacroResultado(List<DgaMacroResultado> dgaMacroResultados)
{ {
try try
{ {
using (SqlConnection connection = new SqlConnection(BdConexion.StringConnection)) using (SqlConnection connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
// 1. Truncar la tabla antes de insertar // 1. Truncar la tabla antes de insertar
@ -41,7 +49,7 @@ namespace DAL
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
@ -69,7 +77,7 @@ namespace DAL
try try
{ {
// Configurar la conexión a la base de datos // Configurar la conexión a la base de datos
using (SqlConnection connection = new SqlConnection(BdConexion.StringConnection)) using (SqlConnection connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
// Truncar la tabla antes de insertar // Truncar la tabla antes de insertar
@ -94,7 +102,7 @@ namespace DAL
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
// Ejecuta el stored procedure sin parámetros // Ejecuta el stored procedure sin parámetros
@ -112,7 +120,7 @@ namespace DAL
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
await connection.ExecuteAsync( await connection.ExecuteAsync(
@ -132,7 +140,7 @@ namespace DAL
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
await connection.ExecuteAsync( await connection.ExecuteAsync(

View file

@ -2,7 +2,6 @@
using Microsoft.Data.SqlClient; using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Shared.DTO.Integracion_DGA; using Shared.DTO.Integracion_DGA;
using Shared.DTO.VariablesEntorno;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
@ -14,12 +13,21 @@ namespace DAL
{ {
public class JobsDgaSupFlujRepository public class JobsDgaSupFlujRepository
{ {
private static string connectionString = string.Empty;
private readonly IConfiguration _configuration;
public JobsDgaSupFlujRepository(IConfiguration configuration)
{
_configuration = configuration;
connectionString = _configuration.GetConnectionString("DefaultConnection") ?? "";
}
public async Task<bool> InsertarDgaMacroResultadoSupFluj(List<DgaMacroResultadoSupFluj> dgaMacroResultadoSupFluj) public async Task<bool> InsertarDgaMacroResultadoSupFluj(List<DgaMacroResultadoSupFluj> dgaMacroResultadoSupFluj)
{ {
try try
{ {
// Configurar la conexión a la base de datos // Configurar la conexión a la base de datos
using (SqlConnection connection = new SqlConnection(BdConexion.StringConnection)) using (SqlConnection connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
await connection.ExecuteAsync("TRUNCATE TABLE DGA_MACRO_RESULTADO_SUP_FLUJ"); await connection.ExecuteAsync("TRUNCATE TABLE DGA_MACRO_RESULTADO_SUP_FLUJ");
@ -41,7 +49,7 @@ namespace DAL
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
await connection.ExecuteAsync( await connection.ExecuteAsync(
@ -61,7 +69,7 @@ namespace DAL
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
await connection.ExecuteAsync( await connection.ExecuteAsync(

View file

@ -2,7 +2,6 @@
using Microsoft.Data.SqlClient; using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Shared.DTO.Integracion_DGA; using Shared.DTO.Integracion_DGA;
using Shared.DTO.VariablesEntorno;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
@ -14,39 +13,47 @@ namespace DAL
{ {
public class JobsDgaVilosRepository public class JobsDgaVilosRepository
{ {
private IConfiguration _configuration;
private static string connectionString = string.Empty;
public async Task<bool> InsertarDgaMacroResultadoVilos(List<DgaMacroResultadoVilos> dgaMacroResultadoVilos) public JobsDgaVilosRepository(IConfiguration configuration)
{
_configuration = configuration;
connectionString = _configuration.GetConnectionString("DefaultConnection") ?? "";
}
public async Task<bool> InsertarDgaMacroResultadoVilos(List<DgaMacroResultadoVilos> dgaMacroResultadoVilos)
{
try
{ {
try using (var connection = new SqlConnection(connectionString))
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) await connection.OpenAsync();
{
await connection.OpenAsync();
// 1. Truncar la tabla antes de insertar // 1. Truncar la tabla antes de insertar
await connection.ExecuteAsync("TRUNCATE TABLE DGA_MACRO_RESULTADO_VILOS"); await connection.ExecuteAsync("TRUNCATE TABLE DGA_MACRO_RESULTADO_VILOS");
// 2. Llamar al stored procedure // 2. Llamar al stored procedure
await connection.ExecuteAsync("SP_CALCULO_DGA_VILOS", commandType: System.Data.CommandType.StoredProcedure); await connection.ExecuteAsync("SP_CALCULO_DGA_VILOS", commandType: System.Data.CommandType.StoredProcedure);
// 3. Insertar todos los datos de la lista usando Dapper // 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)"; string sql = "INSERT INTO DGA_MACRO_RESULTADO_VILOS (TagName, TimeStamp, Value, Quality) VALUES (@TagName, @TimeStamp, @Value, @Quality)";
await connection.ExecuteAsync(sql, dgaMacroResultadoVilos); await connection.ExecuteAsync(sql, dgaMacroResultadoVilos);
return true; // Éxito return true; // Éxito
}
}
catch (Exception ex)
{
throw new Exception($"Error: {ex.Message}");
} }
} }
catch (Exception ex)
{
throw new Exception($"Error: {ex.Message}");
}
}
public async Task<bool> InsertarDgaSensorResultadoVilos(List<DgaSensorResultadoVilos> dgaSensorResultadoVilos) public async Task<bool> InsertarDgaSensorResultadoVilos(List<DgaSensorResultadoVilos> dgaSensorResultadoVilos)
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
@ -70,7 +77,7 @@ namespace DAL
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
await connection.ExecuteAsync( await connection.ExecuteAsync(
@ -90,7 +97,7 @@ namespace DAL
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();
await connection.ExecuteAsync( await connection.ExecuteAsync(

View file

@ -7,17 +7,24 @@ using Dapper;
using Microsoft.Data.SqlClient; using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Shared.DTO.Envios_DGA; using Shared.DTO.Envios_DGA;
using Shared.DTO.VariablesEntorno;
namespace DAL namespace DAL
{ {
public class LogMedicionScadaRepository public class LogMedicionScadaRepository
{ {
private IConfiguration _configuration;
private static string connectionString = string.Empty;
public LogMedicionScadaRepository(IConfiguration configuration)
{
_configuration = configuration;
connectionString = _configuration.GetConnectionString("DefaultConnection") ?? "";
}
public async Task<bool> InsertarLogMedicionScadaAsync(LogMedicionScada logMedicionScada) public async Task<bool> InsertarLogMedicionScadaAsync(LogMedicionScada logMedicionScada)
{ {
try try
{ {
using (var connection = new SqlConnection(BdConexion.StringConnection)) using (var connection = new SqlConnection(connectionString))
{ {
await connection.OpenAsync(); await connection.OpenAsync();

View file

@ -2,16 +2,23 @@
using Microsoft.Data.SqlClient; using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Shared.DTO.Envios_DGA; using Shared.DTO.Envios_DGA;
using Shared.DTO.VariablesEntorno;
using System.Data; using System.Data;
namespace DAL namespace DAL
{ {
public class MedicionScadaRepository public class MedicionScadaRepository
{ {
private readonly IConfiguration _configuration;
public MedicionScadaRepository(IConfiguration configuration)
{
_configuration = configuration;
}
public async Task<List<MedicionScada>> ObtenerMedicionesAsync() public async Task<List<MedicionScada>> ObtenerMedicionesAsync()
{ {
await using var connection = new SqlConnection(BdConexion.StringConnection); var connectionString = _configuration.GetConnectionString("DefaultConnection");
await using var connection = new SqlConnection(connectionString);
var result = await connection.QueryAsync<MedicionScada>( var result = await connection.QueryAsync<MedicionScada>(
"SP_OBTENER_MEDICION_SMARTSCADA_OPERACION", "SP_OBTENER_MEDICION_SMARTSCADA_OPERACION",

View file

@ -1,7 +1,6 @@
using DAL; using DAL;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Shared.DTO.Envios_DGA; using Shared.DTO.Envios_DGA;
using Shared.DTO.VariablesEntorno;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
@ -10,19 +9,32 @@ namespace DAS
public class RegistrarMedicion public class RegistrarMedicion
{ {
private readonly HttpClient _httpClient; private readonly HttpClient _httpClient;
private readonly IConfiguration _configuration;
private static string? password;
private static string? rutEmpresa;
private static string? rutUsuario;
private readonly LogMedicionScadaRepository _logMedicionScadaRepository; private readonly LogMedicionScadaRepository _logMedicionScadaRepository;
public RegistrarMedicion(HttpClient httpClient, LogMedicionScadaRepository logMedicionScadaRepository) public RegistrarMedicion(HttpClient httpClient, IConfiguration configuration,LogMedicionScadaRepository logMedicionScadaRepository)
{ {
_httpClient = httpClient; _httpClient = httpClient;
_configuration = configuration;
rutUsuario = _configuration["Credenciales:rutEmpresa"] ?? "";
rutEmpresa = _configuration["Credenciales:rutUsuario"] ?? "" ?? "";
password = _configuration["Credenciales:password"] ?? "";
_logMedicionScadaRepository = logMedicionScadaRepository; _logMedicionScadaRepository = logMedicionScadaRepository;
} }
public async Task<bool> EnviarMedicionAsync(string codigoObra, MedicionSubterraneaRequest request, long idMedicion) public async Task<bool> EnviarMedicionAsync(string codigoObra, MedicionSubterraneaRequest request, long idMedicion)
{ {
request.Autenticacion.Password = CredencialDGA.Password;
request.Autenticacion.RutEmpresa = CredencialDGA.RutEmpresa; //TODO: condicionar rut empresa request.Autenticacion.Password = password;
request.Autenticacion.RutUsuario = CredencialDGA.RutUsuario; request.Autenticacion.RutEmpresa = rutEmpresa;
request.Autenticacion.RutUsuario = rutUsuario;
var baseUrl = _configuration["ApiSubterranea:BaseUrl"];
var endpoint = _configuration["ApiSubterranea:Endpoint"];
var url = $"{baseUrl}{endpoint}";
var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000"); var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000");
@ -32,7 +44,7 @@ namespace DAS
content.Headers.Add("codigoObra", codigoObra); content.Headers.Add("codigoObra", codigoObra);
content.Headers.Add("timeStampOrigen", timeStamp); content.Headers.Add("timeStampOrigen", timeStamp);
var response = await _httpClient.PostAsync($"{SubterraneaApiUrl.BaseUrl}{SubterraneaApiUrl.EndPoint}", content); var response = await _httpClient.PostAsync(url, content);
string jsonRecibido = await response.Content.ReadAsStringAsync(); string jsonRecibido = await response.Content.ReadAsStringAsync();
string estado = response.IsSuccessStatusCode ? "OK" : "ERROR"; string estado = response.IsSuccessStatusCode ? "OK" : "ERROR";
string comprobante = string.Empty; string comprobante = string.Empty;
@ -44,7 +56,7 @@ namespace DAS
if (doc.RootElement.TryGetProperty("data", out var dataProp) && if (doc.RootElement.TryGetProperty("data", out var dataProp) &&
dataProp.TryGetProperty("numeroComprobante", out var comprobanteProp)) dataProp.TryGetProperty("numeroComprobante", out var comprobanteProp))
{ {
comprobante = comprobanteProp.GetString() ?? ""; comprobante = comprobanteProp.GetString();
} }
} }
catch catch
@ -53,15 +65,13 @@ namespace DAS
} }
} }
var logMedicionScada = new LogMedicionScada var logMedicionScada = new LogMedicionScada();
{ logMedicionScada.EstadoEnvio = estado;
EstadoEnvio = estado, logMedicionScada.JsonEnviado = json;
JsonEnviado = json, logMedicionScada.JsonRecibido = jsonRecibido;
JsonRecibido = jsonRecibido, logMedicionScada.Comprobante = comprobante;
Comprobante = comprobante, logMedicionScada.FechaEnvio = DateTime.UtcNow;
FechaEnvio = DateTime.UtcNow, logMedicionScada.IdMedicionSmartscadaOperacion = idMedicion;
IdMedicionSmartscadaOperacion = idMedicion
};
await _logMedicionScadaRepository.InsertarLogMedicionScadaAsync(logMedicionScada); await _logMedicionScadaRepository.InsertarLogMedicionScadaAsync(logMedicionScada);

View file

@ -5,7 +5,6 @@ using DAL;
using DAS; using DAS;
using BLL.Recuperacion_DGA; using BLL.Recuperacion_DGA;
using BLL.Integracion_DGA; using BLL.Integracion_DGA;
using Shared.Utils;
namespace Integracion_DGA namespace Integracion_DGA
{ {
@ -13,11 +12,6 @@ namespace Integracion_DGA
{ {
static async Task Main(string[] args) static async Task Main(string[] args)
{ {
ObtenerVariablesEntorno.AmbientarApiUrlNexus("NEXUS_API_URL");
ObtenerVariablesEntorno.AmbientarUrlApiSubterranea("SUBTERRANEAS_API_URL");
ObtenerVariablesEntorno.AmbientarConexionBd("CONEXION_BD_ENVIO_DGA");
ObtenerVariablesEntorno.AmbientarCredencialesDGA("DGA_CREDENCIALES");
using IHost host = Host.CreateDefaultBuilder(args) using IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((context, services) => .ConfigureServices((context, services) =>
{ {
@ -37,13 +31,11 @@ namespace Integracion_DGA
}) })
.Build(); .Build();
//TODO: Controlar si las variables de ambiente existen
var envioDGA = host.Services.GetRequiredService<EnvioDGA>(); var envioDGA = host.Services.GetRequiredService<EnvioDGA>();
var bussinessLogic = host.Services.GetRequiredService<BusinessLogic>(); var bussinessLogic = host.Services.GetRequiredService<BusinessLogic>();
var apiService = host.Services.GetRequiredService<ApiService>(); var apiService = host.Services.GetRequiredService<ApiService>();
var integracion_dga = bussinessLogic.Run();
await bussinessLogic.Run(); var mediciones = await envioDGA.ObtenerMedicionesAsync();
} }
} }
} }

View file

@ -1,4 +1,23 @@
{ {
"ConnectionStrings": {
"DefaultConnection": "Server=10.224.7.53,1433;Initial Catalog=ENVIO_DGA;Persist Security Info=False;User ID=usrdga;Password=AfX8zE8F740;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=true;Connection Timeout=30;"
},
"ApiSettings": {
"ApiUrl": "http://smartscada.esval.cl:56000",
"ApiKey": "3c5fa5dd-1b19-422a-b668-10b1b6c566e2",
"Version": "v3.0",
"DataSource": "RAW",
"Resolution": "RES_15_MIN"
},
"ApiSubterranea": {
"BaseUrl": "https://apimee.mop.gob.cl",
"Endpoint": "/api/v1/mediciones/subterraneas"
},
"Credenciales": {
"rutEmpresa": "9A4PUqd1t4",
"rutUsuario": "77555666-7",
"password": "20999888-7"
},
"Logging": { "Logging": {
"LogFile": { "LogFile": {
"Path": "logs/log.txt" "Path": "logs/log.txt"

View file

@ -1,11 +1,10 @@
using BLL.Integracion_DGA; using Microsoft.Extensions.DependencyInjection;
using BLL.Recuperacion_DGA; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
using DAL; using DAL;
using DAS; using DAS;
using Microsoft.Extensions.Configuration; using BLL.Recuperacion_DGA;
using Microsoft.Extensions.DependencyInjection; using BLL.Integracion_DGA;
using Microsoft.Extensions.Hosting;
using Shared.Utils;
namespace Recuperacion_DGA namespace Recuperacion_DGA
{ {
@ -13,11 +12,6 @@ namespace Recuperacion_DGA
{ {
static async Task Main(string[] args) static async Task Main(string[] args)
{ {
ObtenerVariablesEntorno.AmbientarApiUrlNexus("NEXUS_API_URL");
ObtenerVariablesEntorno.AmbientarUrlApiSubterranea("SUBTERRANEAS_API_URL");
ObtenerVariablesEntorno.AmbientarConexionBd("CONEXION_BD_ENVIO_DGA");
ObtenerVariablesEntorno.AmbientarCredencialesDGA("DGA_CREDENCIALES");
using IHost host = Host.CreateDefaultBuilder(args) using IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((context, services) => .ConfigureServices((context, services) =>
{ {
@ -31,19 +25,15 @@ namespace Recuperacion_DGA
services.AddScoped<JobsDgaRepository>(); services.AddScoped<JobsDgaRepository>();
services.AddScoped<JobsDgaVilosRepository>(); services.AddScoped<JobsDgaVilosRepository>();
services.AddScoped<JobsDgaSupFlujRepository>(); services.AddScoped<JobsDgaSupFlujRepository>();
services.AddScoped<LogMedicionScadaRepository>();
services.AddScoped<ApiService>(); services.AddScoped<ApiService>();
services.AddScoped<BusinessLogic>(); services.AddScoped<BusinessLogic>();
}) })
.Build(); .Build();
//TODO: Controlar si las variables de ambiente existen
//TODO: Log de texto
var envioDGA = host.Services.GetRequiredService<EnvioDGA>(); var envioDGA = host.Services.GetRequiredService<EnvioDGA>();
await envioDGA.RegistrarMedicionesAsync(); var mediciones = await envioDGA.ObtenerMedicionesAsync();
//TODO: Log de texto Console.WriteLine($"Se obtuvieron {mediciones.Count} registros.");
} }
} }
} }

View file

@ -26,7 +26,5 @@ namespace Shared.DTO.Envios_DGA
public decimal? Caudalsub { get; set; } public decimal? Caudalsub { get; set; }
public decimal? Nivel { get; set; } public decimal? Nivel { get; set; }
public string? TipoEmpresa { get; set; }
} }
} }

View file

@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Shared.DTO.VariablesEntorno
{
public static class BdConexion
{
public static string StringConnection { get; set; } = string.Empty;
}
}

View file

@ -1,15 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Shared.DTO.VariablesEntorno
{
public static class CredencialDGA
{
public static string RutEmpresa { get; set; } = string.Empty;
public static string RutUsuario { get; set; } = string.Empty;
public static string Password { get; set; } = string.Empty;
}
}

View file

@ -1,18 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Shared.DTO.VariablesEntorno
{
public static class NexusApiUrl
{
public static string ApiUrl { get; set; } = string.Empty;
public static string ApiKey { get; set; } = string.Empty;
public static string Version { get; set; } = string.Empty;
public static string DataSource { get; set; } = string.Empty;
public static string Resolution { get; set; } = string.Empty;
}
}

View file

@ -1,15 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Shared.DTO.VariablesEntorno
{
public static class SubterraneaApiUrl
{
public static string BaseUrl { get; set; } = string.Empty;
public static string EndPoint { get; set; } = string.Empty;
}
}

View file

@ -1,83 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Shared.DTO.VariablesEntorno;
namespace Shared.Utils
{
public static class ObtenerVariablesEntorno
{
public static Dictionary<string, string> GetVarEnviromentDict(string key)
{
string? variableEnv = Environment.GetEnvironmentVariable(key);
if (string.IsNullOrWhiteSpace(variableEnv))
throw new ArgumentException($"La variable de entorno '{key}' no está definida.");
var dictionary = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
foreach (var data in variableEnv.Split(';', StringSplitOptions.RemoveEmptyEntries))
{
int div = data.IndexOf('=');
if (div <= 0 || div >= data.Length - 1) continue; // Evita keys o values vacíos o sin '='
var keyValue = data[..div].Trim().ToUpperInvariant();
var value = data[(div + 1)..].Trim();
if (!string.IsNullOrEmpty(keyValue) && !string.IsNullOrEmpty(value))
dictionary[keyValue] = value;
}
return dictionary;
}
public static void AmbientarCredencialesDGA(string env)
{
var dictEnv = GetVarEnviromentDict(env);
dictEnv.TryGetValue("RUTEMPRESA", out string? rutEmpresa);
CredencialDGA.RutEmpresa = rutEmpresa ?? string.Empty;
dictEnv.TryGetValue("RUTUSUARIO", out string? rutUsuario);
CredencialDGA.RutUsuario = rutUsuario ?? string.Empty;
dictEnv.TryGetValue("PASSWORD", out string? password);
CredencialDGA.Password = password ?? string.Empty;
}
public static void AmbientarConexionBd(string env)
{
BdConexion.StringConnection = Environment.GetEnvironmentVariable(env) ?? string.Empty;
}
public static void AmbientarApiUrlNexus(string env)
{
var dictEnv = GetVarEnviromentDict(env);
dictEnv.TryGetValue("URL", out string? url);
NexusApiUrl.ApiUrl = url ?? string.Empty;
dictEnv.TryGetValue("APIKEY", out string? apiKey);
NexusApiUrl.ApiKey = apiKey ?? string.Empty;
dictEnv.TryGetValue("VERSION", out string? version);
NexusApiUrl.Version = version ?? string.Empty;
dictEnv.TryGetValue("DATASOURCE", out string? dataSource);
NexusApiUrl.DataSource = dataSource ?? string.Empty;
dictEnv.TryGetValue("RESOLUTION", out string? resolution);
NexusApiUrl.Resolution = resolution ?? string.Empty;
}
public static void AmbientarUrlApiSubterranea(string env)
{
var dictEnv = GetVarEnviromentDict(env);
dictEnv.TryGetValue("URL", out string? url);
SubterraneaApiUrl.BaseUrl = url ?? string.Empty;
dictEnv.TryGetValue("ENDPOINT", out string? endpoint);
SubterraneaApiUrl.EndPoint = endpoint ?? string.Empty;
}
}
}