Dados de medição agrupados por hora antes de escolher entre Inspeção lógica e coleta diária. Após escolha realizada são feitas as estimativas com base na média dos dados consolidados.
This commit is contained in:
parent
a8d87addad
commit
654d363d12
@ -225,12 +225,7 @@ namespace Application
|
|||||||
reat_g
|
reat_g
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.GroupBy(x => new { x.Ponto, x.DiaNum, x.Minuto })
|
.ToList();
|
||||||
.Select(g =>
|
|
||||||
{
|
|
||||||
var logica = g.FirstOrDefault(x => x.Origem == "Inspeção Lógica");
|
|
||||||
return logica ?? g.First();
|
|
||||||
}).ToList();
|
|
||||||
|
|
||||||
var minutosEsperados = new[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60 };
|
var minutosEsperados = new[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60 };
|
||||||
|
|
||||||
@ -243,13 +238,26 @@ namespace Application
|
|||||||
{
|
{
|
||||||
var grupoHora = medidasPorHora.Where(h => h.Key.Hora == hora).ToList();
|
var grupoHora = medidasPorHora.Where(h => h.Key.Hora == hora).ToList();
|
||||||
var lista = grupoHora.SelectMany(g => g).OrderBy(m => m.Minuto).ToList();
|
var lista = grupoHora.SelectMany(g => g).OrderBy(m => m.Minuto).ToList();
|
||||||
var minutosPresentes = lista.Select(m => m.Minuto).ToHashSet();
|
|
||||||
|
// Separar por origem
|
||||||
|
var logicas = lista.Where(m => m.Origem == "Inspeção Lógica").ToList();
|
||||||
|
var diarias = lista.Where(m => m.Origem == "Coleta Diária").ToList();
|
||||||
|
|
||||||
|
// Regra de prioridade
|
||||||
|
List<Medicao> selecionados;
|
||||||
|
if (logicas.Count > diarias.Count)
|
||||||
|
{
|
||||||
|
selecionados = logicas;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
selecionados = diarias;
|
||||||
|
}
|
||||||
|
|
||||||
|
var minutosPresentes = selecionados.Select(m => m.Minuto).ToHashSet();
|
||||||
var minutosEsperadosAbsolutos = minutosEsperados.Select(m => m + (60 * hora)).ToList();
|
var minutosEsperadosAbsolutos = minutosEsperados.Select(m => m + (60 * hora)).ToList();
|
||||||
var faltantes = minutosEsperadosAbsolutos.Except(minutosPresentes).OrderBy(m => m).ToList();
|
var faltantes = minutosEsperadosAbsolutos.Except(minutosPresentes).OrderBy(m => m).ToList();
|
||||||
|
|
||||||
// Use apenas valores reais para interpolação
|
|
||||||
var reais = lista.ToDictionary(m => m.Minuto, m => m);
|
|
||||||
|
|
||||||
var estimadas = new List<Medicao>();
|
var estimadas = new List<Medicao>();
|
||||||
|
|
||||||
foreach (var faltante in faltantes)
|
foreach (var faltante in faltantes)
|
||||||
@ -272,15 +280,10 @@ namespace Application
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Busca anterior real
|
var ativaConsumo = selecionados.Average(m => m.AtivaConsumo);
|
||||||
var anterior = reais.Values.Where(m => m.Minuto < faltante).OrderByDescending(m => m.Minuto).FirstOrDefault();
|
var ativaGeracao = selecionados.Average(m => m.AtivaGeracao);
|
||||||
// Busca posterior real
|
var reativaConsumo = selecionados.Average(m => m.ReativaConsumo);
|
||||||
var posterior = reais.Values.Where(m => m.Minuto > faltante).OrderBy(m => m.Minuto).FirstOrDefault();
|
var reativaGeracao = selecionados.Average(m => m.ReativaGeracao);
|
||||||
|
|
||||||
var ativaConsumo = Interpolar(anterior?.Minuto, anterior?.AtivaConsumo, posterior?.Minuto, posterior?.AtivaConsumo, faltante) ?? 0;
|
|
||||||
var ativaGeracao = Interpolar(anterior?.Minuto, anterior?.AtivaGeracao, posterior?.Minuto, posterior?.AtivaGeracao, faltante) ?? 0;
|
|
||||||
var reativaConsumo = Interpolar(anterior?.Minuto, anterior?.ReativaConsumo, posterior?.Minuto, posterior?.ReativaConsumo, faltante) ?? 0;
|
|
||||||
var reativaGeracao = Interpolar(anterior?.Minuto, anterior?.ReativaGeracao, posterior?.Minuto, posterior?.ReativaGeracao, faltante) ?? 0;
|
|
||||||
|
|
||||||
var estimada = new Medicao(
|
var estimada = new Medicao(
|
||||||
grupoHora.First().Key.Ponto,
|
grupoHora.First().Key.Ponto,
|
||||||
@ -297,7 +300,7 @@ namespace Application
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Adiciona todos (originais + estimados) ao resultado final
|
// Adiciona todos (originais + estimados) ao resultado final
|
||||||
medidasComEstimativa.AddRange(lista);
|
medidasComEstimativa.AddRange(selecionados);
|
||||||
medidasComEstimativa.AddRange(estimadas);
|
medidasComEstimativa.AddRange(estimadas);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,7 @@ namespace Infrastructure
|
|||||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and (Cliente = 'RMC ALIMENTOS' OR Cliente = 'FERREIRA SUPERMERCADO' OR Cliente = 'VANGUARDA ALIMENTOS') AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and (Cliente = 'RMC ALIMENTOS' OR Cliente = 'FERREIRA SUPERMERCADO' OR Cliente = 'VANGUARDA ALIMENTOS') AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
||||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'ABEVÊ' and Unidade = 'ABV LOJA 29 - COXIM' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'ABEVÊ' and Unidade = 'ABV LOJA 29 - COXIM' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
||||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'calvi granitos' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'calvi granitos' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
||||||
|
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Codigo_SCDE = 'DFLBCEENTR101'";
|
||||||
|
|
||||||
using var command = new OleDbCommand(sql, connection);
|
using var command = new OleDbCommand(sql, connection);
|
||||||
using var reader = await command.ExecuteReaderAsync(ct);
|
using var reader = await command.ExecuteReaderAsync(ct);
|
||||||
|
|||||||
@ -7,13 +7,13 @@ class Program
|
|||||||
static async Task Main()
|
static async Task Main()
|
||||||
{
|
{
|
||||||
DateTime inicio = DateTime.Now;
|
DateTime inicio = DateTime.Now;
|
||||||
string PG_CONN_STRING_PROD = "Server = smart-energia-dev-pgsql.cykff7tj7mik.us-east-1.rds.amazonaws.com; Port = 5432; Database = smartenergiaprod; Username = postgres; Password = VfHml#Z78!%kvvNM; Timeout = 60; CommandTimeout = 60; ApplicationName = new_med_5_min; Connection Lifetime = 120; Minimum Pool Size = 2; Maximum Pool Size = 2;";
|
string PG_CONN_STRING_PROD = "Server = smart-energia-dev-pgsql.cykff7tj7mik.us-east-1.rds.amazonaws.com; Port = 5432; Database = smartenergiaprod; Username = postgres; Password = VfHml#Z78!%kvvNM; Timeout = 60; CommandTimeout = 60; ApplicationName = new_med_5_min; Connection Lifetime = 120; Minimum Pool Size = 2; Maximum Pool Size = 4;";
|
||||||
string ACCESS_CONN_STRING = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\srv-dados\documentos\Middle\Informativo Setorial\Modelo Word\BD1_dados cadastrais e faturas.accdb;Jet OLEDB:Database Password=gds21";
|
string ACCESS_CONN_STRING = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\srv-dados\documentos\Middle\Informativo Setorial\Modelo Word\BD1_dados cadastrais e faturas.accdb;Jet OLEDB:Database Password=gds21";
|
||||||
string caminhoLog = $@"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_{inicio:MM_dd_HH_mm}.csv";
|
string caminhoLog = $@"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_{inicio:MM_dd_HH_mm}.csv";
|
||||||
//DateTime dataIni = new DateTime(inicio.Year, inicio.Month, 1);
|
//DateTime dataIni = new DateTime(inicio.Year, inicio.Month, 1);
|
||||||
//DateTime dataFim = new DateTime(inicio.Year, inicio.Month, inicio.Day);
|
//DateTime dataFim = new DateTime(inicio.Year, inicio.Month, inicio.Day);
|
||||||
DateTime dataIni = new DateTime(inicio.Year, 10, 1);
|
DateTime dataIni = new DateTime(inicio.Year, 01, 01);
|
||||||
DateTime dataFim = new DateTime(inicio.Year, 10, 14);
|
DateTime dataFim = new DateTime(inicio.Year, 02, 01);
|
||||||
|
|
||||||
// Configuração de dependências (pode usar um container DI depois)
|
// Configuração de dependências (pode usar um container DI depois)
|
||||||
var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);
|
var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user