From 6f2a5181fcb923f3adbceb46dc14e8e7d754fbc5 Mon Sep 17 00:00:00 2001 From: Diego Freitas Date: Tue, 17 Mar 2026 16:45:43 -0300 Subject: [PATCH] ajustes para receber parametros do rover --- .../Controls/MapViewControl.xaml.cs | 1 + AgroBase/OperationControl/Models/Variaveis.cs | 10 ++-- .../Monitoramento/ParametrizacaoViewModel.cs | 20 ++++++++ .../Views/Operacao/OperacaoLeftViewModel.cs | 2 +- .../Views/Operacao/OperacaoRightViewModel.cs | 11 +---- .../ViewModels/Windows/DockWindowViewModel.cs | 47 +++++++++---------- .../Monitoramento/ParametrizacaoView.xaml | 4 ++ 7 files changed, 54 insertions(+), 41 deletions(-) diff --git a/AgroBase/OperationControl/Controls/MapViewControl.xaml.cs b/AgroBase/OperationControl/Controls/MapViewControl.xaml.cs index b937ca72a..2df88b2b4 100644 --- a/AgroBase/OperationControl/Controls/MapViewControl.xaml.cs +++ b/AgroBase/OperationControl/Controls/MapViewControl.xaml.cs @@ -127,6 +127,7 @@ namespace OperationControl.Controls public event EventHandler? StreetMapClicked; private bool ParametrizandoOperacao => + (VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Operacao?.Modo ?? ModoOperacao.NaoDefinido) == ModoOperacao.MapaGPS && !(VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Operacao?.Iniciada ?? false) && (VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Operacao?.Status ?? StatusOperacao.NaoIniciado) == StatusOperacao.Parametrizando && ((App)System.Windows.Application.Current).Shell.Dock?._vm?._viewOperacaoRight?._vm?.SecaoAtual == ViewModels.Views.Operacao.SecaoRightBar.Parametrizacao; diff --git a/AgroBase/OperationControl/Models/Variaveis.cs b/AgroBase/OperationControl/Models/Variaveis.cs index 60a03211b..7956883c7 100644 --- a/AgroBase/OperationControl/Models/Variaveis.cs +++ b/AgroBase/OperationControl/Models/Variaveis.cs @@ -186,11 +186,13 @@ namespace OperationControl.Models var obj = JsonConvert.DeserializeObject(json); lock (_RoversLock) { - var rover = RoversNaRede.FirstOrDefault(x => x.RoverId == device_id); - if (rover != null) + var index = RoversNaRede.FindIndex(x => x.RoverId == device_id); + if (index >= 0) { - rover = obj; - rover.UltimoContato = DateTime.Now; + var logs = RoversNaRede[index].DadosLeitura?.Logs ?? new List(); + obj.UltimoContato = DateTime.Now; + obj.DadosLeitura.Logs.AddRange(logs); + RoversNaRede[index] = obj; } } ((App)Application.Current).Shell.Main?.AtualizarDadosTela_ParametrosOperacao(obj.Controle); diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ParametrizacaoViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ParametrizacaoViewModel.cs index 1671c7868..19173ab16 100644 --- a/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ParametrizacaoViewModel.cs +++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/Monitoramento/ParametrizacaoViewModel.cs @@ -2,6 +2,7 @@ using AgroBase.Models.Operacoes; using OperationControl.Controls; using OperationControl.Helpers; +using OperationControl.Models; using System.ComponentModel; using System.Windows.Input; @@ -23,11 +24,23 @@ namespace OperationControl.ViewModels.Views.Operacao.Monitoramento } } + private bool _operacaoConcluida; + public bool OperacaoConcluida + { + get => _operacaoConcluida; + set + { + _operacaoConcluida = value; + OnPropertyChanged(nameof(OperacaoConcluida)); + } + } + public ParametrizacaoViewModel() { CarregarParametrosPadraoCommand = new RelayCommand(p => CarregarParametrosPadrao((AgroBase.Models.Enums.ModoOperacao)p)); LerParametrosCommand = new RelayCommand(_ => LerParametrosSolicitado?.Invoke()); SalvarParametrosCommand = new RelayCommand(_ => SalvarParametrosSolicitado?.Invoke(Parametros)); + ReiniciarOperacaoCommand = new RelayCommand(_ => ReiniciarOperacao()); } @@ -36,6 +49,7 @@ namespace OperationControl.ViewModels.Views.Operacao.Monitoramento public ICommand LerParametrosCommand { get; } public ICommand SalvarParametrosCommand { get; } public ICommand CarregarParametrosPadraoCommand { get; } + public ICommand ReiniciarOperacaoCommand { get; } public Array ModosOperacaoDisponiveis { get; } = Enum.GetValues(typeof(AgroBase.Models.Enums.ModoOperacao)); @@ -46,10 +60,16 @@ namespace OperationControl.ViewModels.Views.Operacao.Monitoramento Parametros = p; } + private void ReiniciarOperacao() + { + VariaveisControleOperacao.EnviarComandoIniciarOperacao(false, false); + } + public void AtualizarParametros(OperacaoParametrosModel origem) { if (origem == null) return; Parametros = origem; + OperacaoConcluida = (VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Operacao?.Status ?? AgroBase.Models.Enums.StatusOperacao.NaoIniciado) == AgroBase.Models.Enums.StatusOperacao.Concluido; } public void ProcessarStreetMapClicked(MapViewControl.StreetMapClickedEventArgs e) diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoLeftViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoLeftViewModel.cs index c66ea5846..4a939def3 100644 --- a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoLeftViewModel.cs +++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoLeftViewModel.cs @@ -291,7 +291,7 @@ namespace OperationControl.ViewModels.Views.Operacao } else { - if (!((VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Operacao?.Modo ?? AgroBase.Models.Enums.ModoOperacao.NaoDefinido) == AgroBase.Models.Enums.ModoOperacao.Manual) && !(VariaveisControleOperacao.RoverEmFoco?.RuasPercorrer?.Any() ?? false)) + if (((VariaveisControleOperacao.RoverEmFoco?.DadosLeitura?.Operacao?.Modo ?? AgroBase.Models.Enums.ModoOperacao.NaoDefinido) == AgroBase.Models.Enums.ModoOperacao.MapaGPS) && !(VariaveisControleOperacao.RoverEmFoco?.RuasPercorrer?.Any() ?? false)) { System.Windows.MessageBox.Show("Para iniciar a operação automática, é necessário carregar um mapa e selecionar as ruas onde o equipamento irá operar!", "Parametrização", MessageBoxButton.OK, MessageBoxImage.Warning); return; diff --git a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoRightViewModel.cs b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoRightViewModel.cs index 67fb4ff3a..98570bc7e 100644 --- a/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoRightViewModel.cs +++ b/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoRightViewModel.cs @@ -130,16 +130,7 @@ namespace OperationControl.ViewModels.Views.Operacao { var rover = Rovers.FirstOrDefault(x => x.NumeroSerie == roverId); RoverSelecionado = rover; - - if (RoverSelecionado != null) - { - VariaveisControleOperacao.RequisitarParametrosOperacao(); - SelecionarSecao(SecaoRightBar.Menu); - } - else - { - SelecionarSecao(SecaoRightBar.SemRoverSelecionado); - } + SelecionarSecao(RoverSelecionado != null ? SecaoRightBar.Menu : SecaoRightBar.SemRoverSelecionado); RoverSelecionadoChanged?.Invoke(rover); } diff --git a/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs b/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs index 08b583ddb..470bc38e4 100644 --- a/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs +++ b/AgroBase/OperationControl/ViewModels/Windows/DockWindowViewModel.cs @@ -943,7 +943,6 @@ namespace OperationControl.ViewModels _viewOperacaoCenter?.Monitoramento?.PararStreamCameraErvas(); VariaveisControleOperacao.EnviarComandoIniciarUDP(VariaveisControleOperacao.RoverEmFoco?.IP, false); } - VariaveisControleOperacao.RoverEmFoco?.RuasPercorrer?.Clear(); AtualizarDadosMapa(VariaveisControleOperacao.RoverEmFoco); VariaveisControleOperacao.SelectedRoverId = VariaveisControleOperacao.BaseMarkerID; _viewOperacaoCenter?.Mapa?.markers?.SetMarkerFocused(VariaveisControleOperacao.SelectedRoverId, true); @@ -959,7 +958,6 @@ namespace OperationControl.ViewModels _viewOperacaoCenter?.Mapa?.markers?.SetMarkerFocused(VariaveisControleOperacao.SelectedRoverId, true); AtualizarDadosTela(VariaveisControleOperacao.RoverEmFoco); - VariaveisControleOperacao.RequisitarParametrosOperacao(); _viewOperacaoCenter?.Monitoramento?.IniciarStreamCameraFrontal(); _viewOperacaoCenter?.Monitoramento?.IniciarStreamCameraErvas(); VariaveisControleOperacao.EnviarComandoIniciarUDP(VariaveisControleOperacao.RoverEmFoco?.IP, true); @@ -969,12 +967,14 @@ namespace OperationControl.ViewModels AtualizarDadosMapa(VariaveisControleOperacao.RoverEmFoco); AtualizarBarraSuperior(VariaveisControleOperacao.RoverEmFoco); + + VariaveisControleOperacao.RequisitarParametrosOperacao(); } } private void OnSecaoSelecionadaChanged(SecaoRightBar secao) { if (secao == SecaoRightBar.Parametrizacao) - _viewOperacaoRight?.areaParametrizacao?._vm?.AtualizarParametros(VariaveisControleOperacao.RoverEmFoco); + VariaveisControleOperacao.RequisitarParametrosOperacao(); _viewOperacaoCenter?._vm?.DefinirSecao(secao); AtualizarDadosMapa(VariaveisControleOperacao.RoverEmFoco); } @@ -991,7 +991,7 @@ namespace OperationControl.ViewModels var dadosMapa = _viewOperacaoCenter?.Mapa?.CriarDadosMapa(); var ruasPercorrer = _viewOperacaoCenter?.Mapa?.RuasMapaCarregado?.Where(x => x.Selected)?.Select(x => x.Id)?.ToList() ?? new List(); - if ((dadosMapa?.features?.Count ?? 0) == 0 || !ruasPercorrer.Any()) + if (parametros.Modo == AgroBase.Models.Enums.ModoOperacao.MapaGPS && ((dadosMapa?.features?.Count ?? 0) == 0 || !ruasPercorrer.Any())) { System.Windows.MessageBox.Show("Selecione as ruas no mapa onde o equipamento irá operar", "Ruas não selecionadas", MessageBoxButton.OK, MessageBoxImage.Warning); return; @@ -1015,33 +1015,28 @@ namespace OperationControl.ViewModels ModulosMandatorios = parametros?.ModulosMandatorios, ParametrosMandatorios = parametros?.ParametrosMandatorios, - RuasPercorrer = _viewOperacaoCenter?.Mapa?.RuasMapaCarregado?.Where(x => x.Selected)?.Select(x => x.Id)?.ToList(), - Mapa = _viewOperacaoCenter?.Mapa?.CriarDadosMapa() + RuasPercorrer = ruasPercorrer, + Mapa = dadosMapa }; VariaveisControleOperacao.EnviarParametrosOperacao(novosParametros); - VariaveisControleOperacao.RoverEmFoco.Modo = novosParametros.Modo; - VariaveisControleOperacao.RoverEmFoco.Descricao = novosParametros.Descricao; - VariaveisControleOperacao.RoverEmFoco.QtdCamerasSolo = novosParametros.QtdCamerasSolo; - VariaveisControleOperacao.RoverEmFoco.QtdBicos = novosParametros.QtdBicos; - VariaveisControleOperacao.RoverEmFoco.CapacidadeReservatorio = novosParametros.CapacidadeReservatorio; + //VariaveisControleOperacao.RoverEmFoco.Modo = novosParametros.Modo; + //VariaveisControleOperacao.RoverEmFoco.Descricao = novosParametros.Descricao; + //VariaveisControleOperacao.RoverEmFoco.QtdCamerasSolo = novosParametros.QtdCamerasSolo; + //VariaveisControleOperacao.RoverEmFoco.QtdBicos = novosParametros.QtdBicos; + //VariaveisControleOperacao.RoverEmFoco.CapacidadeReservatorio = novosParametros.CapacidadeReservatorio; + //VariaveisControleOperacao.RoverEmFoco.Controle = novosParametros.Controle; + //VariaveisControleOperacao.RoverEmFoco.ModulosMandatorios = novosParametros.ModulosMandatorios; + //VariaveisControleOperacao.RoverEmFoco.ParametrosMandatorios = novosParametros.ParametrosMandatorios; + //VariaveisControleOperacao.RoverEmFoco.RuasPercorrer = novosParametros.RuasPercorrer; + //VariaveisControleOperacao.RoverEmFoco.Mapa = novosParametros.Mapa; - VariaveisControleOperacao.RoverEmFoco.Controle = novosParametros.Controle; - - VariaveisControleOperacao.RoverEmFoco.ModulosMandatorios = novosParametros.ModulosMandatorios; - VariaveisControleOperacao.RoverEmFoco.ParametrosMandatorios = novosParametros.ParametrosMandatorios; - - VariaveisControleOperacao.RoverEmFoco.RuasPercorrer = novosParametros.RuasPercorrer; - VariaveisControleOperacao.RoverEmFoco.Mapa = novosParametros.Mapa; - - VariaveisControleOperacao.RequisitarParametrosOperacao(); - - Task.Run(async () => - { - await Task.Delay(1000); - _viewOperacaoRight?._vm?.SelecionarSecao(SecaoRightBar.Diagnostico); - }); + //Task.Run(async () => + //{ + // await Task.Delay(1000); + // _viewOperacaoRight?._vm?.SelecionarSecao(SecaoRightBar.Diagnostico); + //}); } diff --git a/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml index 6780cd970..82ec41bf7 100644 --- a/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml +++ b/AgroBase/OperationControl/Views/Operacao/Monitoramento/ParametrizacaoView.xaml @@ -5,6 +5,9 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:OperationControl.Views.Operacao" mc:Ignorable="d" > + + +