DebugRailAgvViewModel.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using Prism.Commands;
  2. using Prism.Events;
  3. using ProjectManagementSystem.Common.Core;
  4. using ProjectManagementSystem.Device.CommandCallback;
  5. using ProjectManagementSystem.Device.Extenions;
  6. using ProjectManagementSystemView.Infrastructure.Events;
  7. using ProjectManagementSystemView.Infrastructure.Extensions;
  8. using ProjectManagementSystemView.Infrastructure.Models;
  9. using PropertyChanged;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Collections.ObjectModel;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. using System.Windows;
  17. namespace ProjectManagementSystemView.ViewModels
  18. {
  19. [AddINotifyPropertyChangedInterface]
  20. public class DebugRailAgvViewModel
  21. {
  22. public bool IsVisible { get; set; }
  23. public int Mark { get; set; }
  24. public int Route { get; set; }
  25. public int AgvId { get; set; }
  26. public ObservableCollection<VmInfoAgv> VmDatas { get; set; } = new ObservableCollection<VmInfoAgv>();
  27. public VmInfoAgv SelectedVmData { get; set; }
  28. public DelegateCommand ReleaseAgvOnStopCommand { get; private set; }
  29. public DelegateCommand ReleaseAgvOnStandbyCommand { get; private set; }
  30. public DelegateCommand SimulateStatusStopCommand { get; private set; }
  31. public DelegateCommand SimulateStatusStandbyCommand { get; private set; }
  32. public DelegateCommand SimulateStatusRunningCommand { get; private set; }
  33. public DelegateCommand SelectionChangedCommand { get; private set; }
  34. public DebugRailAgvViewModel(IEventAggregator eventAggregator)
  35. {
  36. ReleaseAgvOnStopCommand = new DelegateCommand(() => RailAgvOpereate(DeviceControl.Instance.ReleaseAgvOnStop));
  37. ReleaseAgvOnStandbyCommand = new DelegateCommand(() => RailAgvOpereate(DeviceControl.Instance.ReleaseAgvOnStandby));
  38. SimulateStatusStopCommand = new DelegateCommand(() => RailAgvSimulate(EnumInfoAgvStatus.StopPoint));
  39. SimulateStatusStandbyCommand = new DelegateCommand(() => RailAgvSimulate(EnumInfoAgvStatus.EndPoint));
  40. SimulateStatusRunningCommand = new DelegateCommand(() => RailAgvSimulate(EnumInfoAgvStatus.Running));
  41. SelectionChangedCommand = new DelegateCommand(() =>
  42. {
  43. Mark = SelectedVmData?.Mark ?? 0;
  44. Route = SelectedVmData?.Route ?? 0;
  45. AgvId = SelectedVmData?.AgvId ?? 0;
  46. });
  47. eventAggregator.GetEvent<UpdateViewEvent>().Subscribe(UpdateView);
  48. }
  49. private void UpdateView()
  50. {
  51. if (!IsVisible) return;
  52. var dataList = DeviceControl.Instance.Communication.InfoAgvDictionary.Values;
  53. VmDatas.Update(dataList, (s, v) => s.AgvId == v.AgvId);
  54. }
  55. private void RailAgvOpereate(Action<int, int, int> action)
  56. {
  57. try
  58. {
  59. action(Mark, Route, AgvId);
  60. }
  61. catch (Exception ex)
  62. {
  63. MessageBox.Show(ex.Message);
  64. }
  65. }
  66. private void RailAgvSimulate(EnumInfoAgvStatus status)
  67. {
  68. try
  69. {
  70. bool isContainsKey = DeviceControl.Instance.Communication.InfoAgvDictionary.TryGetValue(AgvId, out var infoAgv);
  71. var info = isContainsKey ? infoAgv : new InfoAgv();
  72. info.AgvId = AgvId;
  73. info.Mark = Mark;
  74. info.Route = Route;
  75. info.Status = (int)status;
  76. info.StatusText = info.Status.GetAgvStatusText();
  77. info.LastUpdateTime = DateTime.Now;
  78. DeviceControl.Instance.Communication.InfoAgvDictionary.AddOrUpdate(info.AgvId, info, (key, values) => info);
  79. }
  80. catch (Exception ex)
  81. {
  82. MessageBox.Show(ex.Message);
  83. }
  84. }
  85. }
  86. }