123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- using Avalonia.Collections;
- using Avalonia.Controls;
- using Shaker.Models;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ShakerApp.ViewModels
- {
- public class OilSourceStatusViewModel : DisplayViewModelBase<OilSourceStatusModel>
- {
- public override double Width => 1300;
- public override double Height => 800;
- public override bool CanResize => false;
- private OilSourceStatusViewModel()
- {
- ButtonVisibily = false;
- Content = typeof(Views.OilControlView);
- Circulate?.UpDateModel(Model.Circulate);
- for (int i = 0; i < Model.OilSourceAnalogs.Count; i++)
- {
- OilSourceAnalogs.Add(new OilSourceAnalogViewModel(Model.OilSourceAnalogs[i]));
- }
- for (int i = 0; i < Model.Circuit.Count; i++)
- {
- Circuit.Add(new IndexValueItemViewModel<CircuitViewModel>(i + 1, new CircuitViewModel(Model.Circuit[i])));
- }
- for (int i = 0; i < Model.OilErrors.Count; i++)
- {
- OilErrors.Add(new OilErrorInfoViewModel(Model.OilErrors[i]));
- }
- Forerunner.UpDateModel(Model.Forerunner);
- Assistant?.UpDateModel(Model.Assistant);
- GetEvent<AllConfig>().Subscrip((sender, args) =>
- {
- UpDateModel(args.Data.OilSource);
- CommunicationViewModel.Instance.LocalCommunication?.GetEvent<OilSourceStatusModel>()?.Subscrip((sender, args) =>
- {
- UpDateModel(args.Data);
- CommunicationViewModel.Instance.ServiceCommunication?.GetEvent<OilSourceStatusModel>()?.Publish(this, args.Data);
- });
- CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.OilStatusChanged)?.Subscrip((sender, args) =>
- {
- if(args.Data.Length>=1 && args.Data[0] is bool state)
- {
- string msg = App.Current?.FindResource(state ? "OilConnect" : "OilDisConnect") + "";
- if(state)
- {
- MainViewModel.Default.ShowToast(msg, Avalonia.Controls.Notifications.NotificationType.Information);
- }
- else
- {
- MainViewModel.Default.ShowToast(msg, Avalonia.Controls.Notifications.NotificationType.Error);
- }
- LogViewModel.Instance.AddLog(msg,state ? LogType.Info : LogType.Error);
- CommunicationViewModel.Instance.ServiceCommunication?.GetEvent(Topic.OilStatusChanged)?.Publish(this,null, state);
- }
- });
- });
- }
- static OilSourceStatusViewModel()
- {
- }
- public void EmergencyStop()
- {
- CommunicationViewModel.Instance.LocalCommunication.GetEvent(Topic.OilEmergencyStop)?.Publish(this, null, false);
- }
- public override bool CanCancel => false;
- public static OilSourceStatusViewModel Instance { get; } = new OilSourceStatusViewModel();
- public CircuitViewModel Circulate { get; } = new CircuitViewModel()
- {
- PressureAction = (pressure) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.CirculatePressure)?.Publish(OilSourceStatusViewModel.Instance.Forerunner, null, pressure),
- StartAction = (state) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.CirculateStart)?.Publish(OilSourceStatusViewModel.Instance.Forerunner, null, state),
- LoadAction = (state) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.CirculateLoad)?.Publish(OilSourceStatusViewModel.Instance.Forerunner, null, state)
- };
- [PropertyAssociation(nameof(OilSourceStatusModel.IsRemote))]
- public bool IsRemote
- {
- get => Model.IsRemote;
- set => SetProperty(ref Model.IsRemote, value);
- }
- [PropertyAssociation(nameof(OilSourceStatusModel.IsEnabled))]
- public bool IsEnabled
- {
- get => Model.IsEnabled;
- set => SetProperty(ref Model.IsEnabled, value);
- }
- [PropertyAssociation(nameof(OilSourceStatusModel.IsConnect))]
- public bool IsConnect { get => Model.IsConnect; set => SetProperty(ref Model.IsConnect, value); }
- /// <summary>
- /// 先导油路
- /// </summary>
- public CircuitViewModel Forerunner { get; } = new CircuitViewModel()
- {
- PressureAction = (pressure)=> CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.ForerunnerPressure)?.Publish(OilSourceStatusViewModel.Instance.Forerunner, null, pressure),
- StartAction = (state) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.ForerunnerStart)?.Publish(OilSourceStatusViewModel.Instance.Forerunner, null, state),
- LoadAction = (state) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.ForerunnerLoad)?.Publish(OilSourceStatusViewModel.Instance.Forerunner, null, state)
- };
- /// <summary>
- /// 主油路
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<CircuitViewModel>> Circuit { get; } = new AvaloniaList<IndexValueItemViewModel<CircuitViewModel>>();
- public AvaloniaList<OilSourceAnalogViewModel> OilSourceAnalogs { get; } = new AvaloniaList<OilSourceAnalogViewModel>();
- public CircuitViewModel Assistant { get; } = new CircuitViewModel()
- {
- PressureAction = (pressure) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.AssistantPressure)?.Publish(OilSourceStatusViewModel.Instance.Forerunner, null, pressure),
- StartAction = (state) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.AssistantStart)?.Publish(OilSourceStatusViewModel.Instance.Forerunner, null, state),
- LoadAction = (state) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.AssistantLoad)?.Publish(OilSourceStatusViewModel.Instance.Forerunner, null, state)
- };
- public AvaloniaList<OilErrorInfoViewModel> OilErrors { get; } = new AvaloniaList<OilErrorInfoViewModel>();
- public bool IsError => (OilErrors.Count > 0 ? OilErrors.Any(x => x.Status) : false) | (OilSourceAnalogs.Count > 0 ? OilSourceAnalogs.Any(x => x.IsError) : false);
- protected override void Cancel()
- {
- }
- public override void UpDateModel(OilSourceStatusModel model)
- {
- bool lasterror = IsError;
- base.UpDateModel(model);
- Forerunner?.UpDateModel(model.Forerunner);
- Circulate?.UpDateModel(model.Circulate);
- int count = Circuit.Count;
- if (count < model.Circuit.Count)
- {
- for (int i = 0; i < model.Circuit.Count-count; i++)
- {
- Circuit.Add(new IndexValueItemViewModel<CircuitViewModel>(Circuit.Count + 1, new CircuitViewModel()));
- }
- }
- else if (count > model.Circuit.Count)
- {
- Circuit.RemoveRange(model.Circuit.Count, count - model.Circuit.Count);
- }
- if (model.Circuit.Count > 0)
- {
- for (int i = 0; i < model.Circuit.Count; i++)
- {
- Circuit[i].Value?.UpDateModel(model.Circuit[i]);
- Circuit[i].Value.StartAction = (state) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.CircuitStart)?.Publish(this, null,i, state);
- Circuit[i].Value.LoadAction = (state) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.CircuitLoad)?.Publish(this, null,i, state);
- Circuit[i].Value.PressureAction = (pressure) => CommunicationViewModel.Instance.LocalCommunication?.GetEvent(Topic.CircuitPressure)?.Publish(this, null,i, pressure);
- }
- }
- Assistant?.UpDateModel(model.Assistant);
- count = OilSourceAnalogs.Count;
- if (count < model.OilSourceAnalogs.Count)
- {
- for (int i = 0; i < model.OilSourceAnalogs.Count-count; i++)
- {
- OilSourceAnalogs.Add(new OilSourceAnalogViewModel());
- }
- }
- else if (count > model.OilSourceAnalogs.Count)
- {
- OilSourceAnalogs.RemoveRange(model.OilSourceAnalogs.Count, count - model.OilSourceAnalogs.Count);
- }
- if (model.OilSourceAnalogs.Count > 0)
- {
- for (int i = 0; i < model.OilSourceAnalogs.Count; i++)
- {
- OilSourceAnalogs[i].UpDateModel(model.OilSourceAnalogs[i]);
- }
- }
- count = OilErrors.Count;
- if (count < model.OilErrors.Count)
- {
- for (int i = 0; i < model.OilErrors.Count-count; i++)
- {
- OilErrors.Add(new OilErrorInfoViewModel());
- }
- }
- else if (count > model.OilErrors.Count)
- {
- OilErrors.RemoveRange(model.OilErrors.Count, count - model.OilErrors.Count);
- }
- if (model.OilErrors.Count > 0)
- {
- for (int i = 0; i < model.OilErrors.Count; i++)
- {
- OilErrors[i].UpDateModel(model.OilErrors[i]);
- }
- }
- OnPropertyChanged(nameof(IsError));
- if(IsError!=lasterror)OnPropertyChanged(nameof(OilStatus));
- }
- public string OilStatus => App.Current?.FindResource(IsError ? "OilError" : "OilSuccess") + "";
- }
- }
|