From 098f3b054d771e0074d535f99a0a2f36070e1ea4 Mon Sep 17 00:00:00 2001 From: Diego Freitas Date: Fri, 3 Jul 2026 09:45:27 -0300 Subject: [PATCH] ajuste no calculo do tempo aguardando --- .../Models/Operacoes/OperacaoModel.cs | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs index c9eca4c6d..62f6b5891 100644 --- a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs +++ b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs @@ -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>(CtxKey.DadosControle, "motivos", new List()); 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(CtxKey.DadosOperacao, "tempo_aguardando", 0.0); + double tempoAguardarInicio = RedisService.GetField(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(CtxKey.DadosOperacao, "motivo_nao_liberado"), OperacaoLiberacaoDebug = RedisService.GetField(CtxKey.DadosOperacao, "operacao_liberacao_debug"), StatusOperacaoAtual = (StatusOperacao)RedisService.GetField(CtxKey.DadosOperacao, "status", 0), - TempoAguardandoSeg = RedisService.GetField(CtxKey.DadosOperacao, "tempo_aguardando", 0), ModulosMandatorios = new List(op.Parametros.ModulosMandatorios ?? new List()), ParametrosMandatorios = new List(op.Parametros.ParametrosMandatorios ?? new List()),