DummyWaferUseParameterEditViewModel.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using Caliburn.Micro.Core;
  2. using FurnaceUI.DataModule;
  3. using FurnaceUI.Models;
  4. using FurnaceUI.Views.Operations;
  5. using MECF.Framework.Common.OperationCenter;
  6. using RecipeEditorLib.RecipeModel.Params;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Collections.ObjectModel;
  10. using System.Linq;
  11. using System.Reflection;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace FurnaceUI.Views.Editors
  15. {
  16. public class DummyWaferUseParameterEditViewModel : FurnaceUIViewModelBase
  17. {
  18. private ObservableCollection<WaferInfoItem> _stockerWaferInfoItems { get; set; }//传入数据源
  19. public ObservableCollection<DummywaferUseInfo> StockerWaferItems { get; set; }
  20. private string _moduleName = string.Empty;
  21. public DummywaferUseInfo CurrentSelection { get; set; }
  22. private bool _isEdit;
  23. public bool IsEdit
  24. {
  25. get { return _isEdit; }
  26. set
  27. {
  28. if (_isEdit != value)
  29. {
  30. _isEdit = value;
  31. NotifyOfPropertyChange(nameof(IsEdit));
  32. }
  33. }
  34. }
  35. private bool _isAllChecked;
  36. public bool IsAllChecked
  37. {
  38. get { return _isAllChecked; }
  39. set
  40. {
  41. if (_isAllChecked != value)
  42. {
  43. _isAllChecked = value;
  44. foreach (var item in StockerWaferItems)
  45. {
  46. if (item.IsEnable) item.IsChecked = _isAllChecked;
  47. }
  48. NotifyOfPropertyChange(nameof(IsAllChecked));
  49. }
  50. }
  51. }
  52. public DummyWaferUseParameterEditViewModel(ObservableCollection<WaferInfoItem> waferInfoItems, string moduleName)
  53. {
  54. _moduleName = moduleName;
  55. _stockerWaferInfoItems = waferInfoItems;
  56. var dummyTypes = GlobalDataManager.Instance.WaferTypes.Values.Where(r => r.IsDummy).Select(r => r.Name).ToList();
  57. StockerWaferItems = new ObservableCollection<DummywaferUseInfo>(waferInfoItems.Select(r => new DummywaferUseInfo
  58. {
  59. SlotID = r.SlotID,
  60. WaferType = r.WaferType,
  61. IsEnable = r.WaferStatus != 0 && dummyTypes.Contains(r.WaferType),
  62. UseCountCurrent = r.UseCount,
  63. UseThickCurrent = r.UseThick,
  64. UseTimeCurrent = r.UseTime
  65. }));
  66. }
  67. public void SetValueChange(DoubleParam param)
  68. {
  69. PropertyInfo[] properties = typeof(DummywaferUseInfo).GetProperties();
  70. var property = properties.FirstOrDefault(x => x.Name == param.Name);
  71. if (property == null) return;
  72. foreach (var item in StockerWaferItems)
  73. {
  74. if (item.IsChecked)
  75. {
  76. var proParam = property.GetValue(item);
  77. if (proParam is DoubleParam && proParam != param)
  78. {
  79. ((DoubleParam)proParam).SetValue(param.Value);
  80. property.SetValue(item, proParam);
  81. }
  82. }
  83. }
  84. }
  85. public void Save()
  86. {
  87. for (int i = 0; i < StockerWaferItems.Count; i++)
  88. {
  89. bool isChange = false;
  90. if (!StockerWaferItems[i].IsEnable) continue;
  91. if (StockerWaferItems[i].UseCountCurrent != StockerWaferItems[i].UseCountSet.Value)
  92. {
  93. isChange = true;
  94. }
  95. if (StockerWaferItems[i].UseTimeCurrent != StockerWaferItems[i].UseTimeSet.Value)
  96. {
  97. isChange = true;
  98. }
  99. if (StockerWaferItems[i].UseThickCurrent != StockerWaferItems[i].UseThickSet.Value)
  100. {
  101. isChange = true;
  102. }
  103. //如果有改变直接更新
  104. if (isChange)
  105. {
  106. var info = new List<string>
  107. {
  108. _moduleName,
  109. $"{StockerWaferItems[i].SlotID}",
  110. StockerWaferItems[i].WaferType,
  111. StockerWaferItems[i].UseCountSet.Value,
  112. StockerWaferItems[i].UseTimeSet.Value,
  113. StockerWaferItems[i].UseThickSet.Value,
  114. };
  115. InvokeClient.Instance.Service.DoOperation("System.UpdateWafer", info.ToArray());
  116. }
  117. }
  118. TryClose(true);
  119. }
  120. public void Close()
  121. {
  122. TryClose(false);
  123. }
  124. }
  125. public class DummywaferUseInfo : PropertyChangedBase
  126. {
  127. public int SlotID { get; set; }
  128. public bool IsEnable { get; set; }
  129. public string WaferType { get; set; }
  130. public string UseCountCurrent { get; set; }
  131. public string UseThickCurrent { get; set; }
  132. public string UseTimeCurrent { get; set; }
  133. private bool _isChecked;
  134. public bool IsChecked
  135. {
  136. get { return _isChecked; }
  137. set
  138. {
  139. if (IsChecked != value)
  140. {
  141. _isChecked = value;
  142. NotifyOfPropertyChange(() => IsChecked);
  143. }
  144. }
  145. }
  146. private DoubleParam _useCountSet = new DoubleParam { Name = nameof(UseCountSet), Value = "0" };
  147. public DoubleParam UseCountSet
  148. {
  149. get { return _useCountSet; }
  150. set
  151. {
  152. _useCountSet = value;
  153. NotifyOfPropertyChange(() => UseCountSet);
  154. }
  155. }
  156. private DoubleParam _useThickSet = new DoubleParam { Name = nameof(UseThickSet), Value = "0" };
  157. public DoubleParam UseThickSet
  158. {
  159. get { return _useThickSet; }
  160. set
  161. {
  162. _useThickSet = value;
  163. NotifyOfPropertyChange(() => UseThickSet);
  164. }
  165. }
  166. private DoubleParam _useTimeSet = new DoubleParam { Name = nameof(UseTimeSet), Value = "0" };
  167. public DoubleParam UseTimeSet
  168. {
  169. get { return _useTimeSet; }
  170. set
  171. {
  172. _useTimeSet = value;
  173. NotifyOfPropertyChange(() => UseTimeSet);
  174. }
  175. }
  176. }
  177. }