KeyPartManagementViewModel.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using LocalhostMES.DataBase;
  2. using LocalhostMES.Enums;
  3. using LocalhostMES.Core;
  4. using LocalhostMES.Models;
  5. using LocalhostMES.ViewModels.Services;
  6. using Prism.Commands;
  7. using Prism.Mvvm;
  8. using System.Collections.ObjectModel;
  9. using System.Windows;
  10. namespace LocalhostMES.ViewModels.Tabs
  11. {
  12. public class KeyPartManagementViewModel : BindableBase
  13. {
  14. private readonly IMesWorkspace _workspace;
  15. public KeyPartManagementViewModel(IMesWorkspace workspace)
  16. {
  17. _workspace = workspace;
  18. _workspace.Initialize();
  19. MesDataChangedNotifier.Changed += OnDataChanged;
  20. }
  21. private ObservableCollection<LocalhostPartInfo> _partInfos = new ObservableCollection<LocalhostPartInfo>();
  22. public ObservableCollection<LocalhostPartInfo> PartInfos
  23. {
  24. get => _partInfos;
  25. set => SetProperty(ref _partInfos, value);
  26. }
  27. private LocalhostPartInfo _newPart = new LocalhostPartInfo();
  28. public LocalhostPartInfo NewPart
  29. {
  30. get => _newPart;
  31. set => SetProperty(ref _newPart, value);
  32. }
  33. private LocalhostPartInfo _selectPart;
  34. public LocalhostPartInfo SelectPart
  35. {
  36. get => _selectPart;
  37. set => SetProperty(ref _selectPart, value);
  38. }
  39. private string _statusMessage = string.Empty;
  40. public string StatusMessage
  41. {
  42. get => _statusMessage;
  43. set => SetProperty(ref _statusMessage, value);
  44. }
  45. private DelegateCommand _addPartInfoCommand;
  46. public DelegateCommand AddPartInfoCommand =>
  47. _addPartInfoCommand ?? (_addPartInfoCommand = new DelegateCommand(AddPartInfo));
  48. private DelegateCommand _refPartInfoCommand;
  49. public DelegateCommand RefPartInfoCommand =>
  50. _refPartInfoCommand ?? (_refPartInfoCommand = new DelegateCommand(RefPartInfo));
  51. private DelegateCommand _deletePartInfoCommand;
  52. public DelegateCommand DeletePartInfoCommand =>
  53. _deletePartInfoCommand ?? (_deletePartInfoCommand = new DelegateCommand(DeletePartInfo));
  54. private DelegateCommand<LocalhostPartInfo> _deletePartRowCommand;
  55. public DelegateCommand<LocalhostPartInfo> DeletePartRowCommand =>
  56. _deletePartRowCommand ?? (_deletePartRowCommand = new DelegateCommand<LocalhostPartInfo>(DeletePartRow, p => p != null));
  57. private void AddPartInfo()
  58. {
  59. var pn = (NewPart.PartNum ?? string.Empty).Trim();
  60. if (string.IsNullOrEmpty(pn))
  61. {
  62. _workspace.ShowStatus("请填写关键件号", true);
  63. return;
  64. }
  65. if (NewPart.PartQty < 0)
  66. {
  67. _workspace.ShowStatus("数量不能为负数", true);
  68. return;
  69. }
  70. var st = NewPart.StationType;
  71. var toSave = new LocalhostPartInfo
  72. {
  73. StationType = st,
  74. PartNum = pn,
  75. PartQty = NewPart.PartQty
  76. };
  77. if (DatabaseHelper.InsertPartInfo(toSave))
  78. {
  79. NewPart = new LocalhostPartInfo { StationType = st };
  80. _workspace.ShowStatus("关键件已保存", false);
  81. RefPartInfo();
  82. }
  83. else
  84. {
  85. _workspace.ShowStatus("保存失败(可能已存在相同工站类型+关键件号)", true);
  86. }
  87. }
  88. private void RefPartInfo()
  89. {
  90. var st = NewPart.StationType;
  91. PartInfos = new ObservableCollection<LocalhostPartInfo>(DatabaseHelper.SelectPartInfo(st));
  92. StatusMessage = $"工站 {st},共 {PartInfos.Count} 条";
  93. }
  94. private void DeletePartInfo()
  95. {
  96. if (SelectPart == null)
  97. {
  98. _workspace.ShowStatus("请先选择要删除的关键件行", true);
  99. return;
  100. }
  101. if (DatabaseHelper.DeletePartInfo(SelectPart.StationType, SelectPart.PartNum))
  102. {
  103. RefPartInfo();
  104. _workspace.ShowStatus("已删除", false);
  105. }
  106. else
  107. {
  108. _workspace.ShowStatus("删除失败", true);
  109. }
  110. }
  111. private void DeletePartRow(LocalhostPartInfo part)
  112. {
  113. if (part == null)
  114. {
  115. return;
  116. }
  117. if (DatabaseHelper.DeletePartInfo(part.StationType, part.PartNum))
  118. {
  119. PartInfos.Remove(part);
  120. _workspace.ShowStatus("已删除", false);
  121. }
  122. else
  123. {
  124. _workspace.ShowStatus("删除失败", true);
  125. }
  126. }
  127. private void OnDataChanged(object sender, MesDataChangedEventArgs e)
  128. {
  129. if (!e.Has(MesDataScope.KeyPart))
  130. {
  131. return;
  132. }
  133. Application.Current?.Dispatcher.Invoke(RefPartInfo);
  134. }
  135. }
  136. }