ajuste no calculo do tempo aguardando

This commit is contained in:
Diego Freitas 2026-07-03 09:45:27 -03:00
parent 2f37aa1c9c
commit 098f3b054d
1 changed files with 22 additions and 8 deletions

View File

@ -3477,7 +3477,9 @@ namespace AgroBase.Models
else if (statusAtual == StatusOperacao.Aguardando)
{
double segundosAguardados = op.Sensoriamento?.Operacao?.TempoAguardandoSeg ?? 0;
double segundosRestantes = Math.Max(0, op.TempoIniciarOperacao - segundosAguardados);
double tempoTotalEspera = Math.Max(0, op.TempoIniciarOperacao);
double segundosRestantes = Math.Max(0, tempoTotalEspera - segundosAguardados);
int segundosTela = (int)Math.Ceiling(segundosRestantes);
string plural = segundosTela == 1 ? "" : "s";
@ -3765,17 +3767,29 @@ namespace AgroBase.Models
op.Controle.Motivos = RedisService.GetField<List<string>>(CtxKey.DadosControle, "motivos", new List<string>());
double tempoDecorridoSeg = 0;
if (Operacao.DataInicio != DateTime.MinValue)
{
DateTime fim =
Operacao.DataFim != DateTime.MinValue
? Operacao.DataFim
: agora;
DateTime fim = Operacao.DataFim != DateTime.MinValue ? Operacao.DataFim : agora;
tempoDecorridoSeg = Math.Max(0, (fim - Operacao.DataInicio).TotalSeconds);
}
double tempoAguardandoRaw = RedisService.GetField<double>(CtxKey.DadosOperacao, "tempo_aguardando", 0.0);
double tempoAguardarInicio = RedisService.GetField<double>(CtxKey.DadosOperacao, "tempo_aguardar_inicio_operacao", op.TempoIniciarOperacao);
double agoraUnix = DateTimeOffset.Now.ToUnixTimeMilliseconds() / 1000.0;
double tempoAguardandoSeg;
if (tempoAguardandoRaw > 1_000_000_000)
{
// Redis está mandando timestamp Unix de início da espera.
tempoAguardandoSeg = Math.Max(0.0, agoraUnix - tempoAguardandoRaw);
}
else
{
// Compatibilidade: caso algum fluxo antigo mande duração em segundos.
tempoAguardandoSeg = Math.Max(0.0, tempoAguardandoRaw);
}
op.TempoIniciarOperacao = Math.Max(0, Convert.ToInt32(Math.Round(tempoAguardarInicio)));
var operacaoAtualizada = new OperacaoSensoriamentoLogModel()
{
Momento = agora,
@ -3791,6 +3805,7 @@ namespace AgroBase.Models
DataInicio = Operacao.DataInicio,
DataFim = Operacao.DataFim,
TempoDecorridoSeg = tempoDecorridoSeg,
TempoAguardandoSeg = tempoAguardandoSeg,
TipoCanAtivo = CanManager.TipoServico,
OperacaoLiberada = RedisService.GetField(CtxKey.DadosOperacao, "liberado", false),
@ -3798,7 +3813,6 @@ namespace AgroBase.Models
ErroOperacaoLiberada = RedisService.GetField<string>(CtxKey.DadosOperacao, "motivo_nao_liberado"),
OperacaoLiberacaoDebug = RedisService.GetField<JObject>(CtxKey.DadosOperacao, "operacao_liberacao_debug"),
StatusOperacaoAtual = (StatusOperacao)RedisService.GetField<int>(CtxKey.DadosOperacao, "status", 0),
TempoAguardandoSeg = RedisService.GetField<long>(CtxKey.DadosOperacao, "tempo_aguardando", 0),
ModulosMandatorios = new List<OperacaoModulosMandatoriosModel>(op.Parametros.ModulosMandatorios ?? new List<OperacaoModulosMandatoriosModel>()),
ParametrosMandatorios = new List<OperacaoParametrosMandatoriosModel>(op.Parametros.ParametrosMandatorios ?? new List<OperacaoParametrosMandatoriosModel>()),