BoatWaferViewModel.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. using Aitex.Core.Util;
  2. using MECF.Framework.Common.OperationCenter;
  3. using MECF.Framework.UI.Client.ClientBase;
  4. using MECF.Framework.Common.DataCenter;
  5. using System.Collections.Generic;
  6. using System.Collections.ObjectModel;
  7. using System.Linq;
  8. using FurnaceUI.Models;
  9. using FurnaceUI.Views.Recipes;
  10. using System.Windows;
  11. using System.Windows.Media;
  12. using MECF.Framework.Common.CommonData;
  13. namespace FurnaceUI.Views.Operations
  14. {
  15. public class BoatWaferViewModel : UiViewModelBase
  16. {
  17. public string ModuleName { get; set; }
  18. public ObservableCollection<ObservableCollection<BoatWaferItem>> ListBoatWafers { get; set; }
  19. private ObservableCollection<BoatWaferItem> _boatWafers;
  20. public ObservableCollection<BoatWaferItem> BoatWafers
  21. {
  22. get { return _boatWafers; }
  23. set
  24. {
  25. _boatWafers = value;
  26. NotifyOfPropertyChange("BoatWafers");
  27. }
  28. }
  29. private SolidColorBrush _DefaultdBk = new SolidColorBrush(Colors.White);
  30. private SolidColorBrush _PBk = new SolidColorBrush(Colors.LightGreen);
  31. private SolidColorBrush _SDBk = new SolidColorBrush(Colors.SkyBlue);
  32. private SolidColorBrush _EDBk = new SolidColorBrush(Colors.LightSeaGreen);
  33. //private SolidColorBrush _MBk = new SolidColorBrush(Colors.LightSeaGreen);
  34. private SolidColorBrush _MBk = new SolidColorBrush(Colors.Orange);
  35. private int _boatSlotCount;
  36. private int _cassetteSlotCount = 25;
  37. private int _boatPWaferCount;
  38. public int BoatPWaferCount
  39. {
  40. get => _boatPWaferCount;
  41. set
  42. {
  43. _boatPWaferCount = value;
  44. NotifyOfPropertyChange(nameof(BoatPWaferCount));
  45. }
  46. }
  47. private int _boatMWaferCount;
  48. public int BoatMWaferCount
  49. {
  50. get => _boatMWaferCount;
  51. set
  52. {
  53. _boatMWaferCount = value;
  54. NotifyOfPropertyChange(nameof(BoatMWaferCount));
  55. }
  56. }
  57. private int _boatSDWaferCount;
  58. public int BoatSDWaferCount
  59. {
  60. get => _boatSDWaferCount;
  61. set
  62. {
  63. _boatSDWaferCount = value;
  64. NotifyOfPropertyChange(nameof(BoatSDWaferCount));
  65. }
  66. }
  67. private int _boatEDWaferCount;
  68. public int BoatEDWaferCount
  69. {
  70. get => _boatEDWaferCount;
  71. set
  72. {
  73. _boatEDWaferCount = value;
  74. NotifyOfPropertyChange(nameof(BoatEDWaferCount));
  75. }
  76. }
  77. private int _boatEmptyWaferCount;
  78. public int BoatEmptyWaferCount
  79. {
  80. get => _boatEmptyWaferCount;
  81. set
  82. {
  83. _boatEmptyWaferCount = value;
  84. NotifyOfPropertyChange(nameof(BoatEmptyWaferCount));
  85. }
  86. }
  87. private string _boatAllWaferCount;
  88. public string BoatAllWaferCount
  89. {
  90. get => _boatAllWaferCount;
  91. set
  92. {
  93. _boatAllWaferCount = value;
  94. NotifyOfPropertyChange(nameof(BoatAllWaferCount));
  95. }
  96. }
  97. [Subscription("Stocker1.LotID")]
  98. public string Stocker1LotID { get; set; }
  99. public BoatWaferViewModel()
  100. {
  101. ModuleName = "PM1";
  102. _boatSlotCount = (int)QueryDataClient.Instance.Service.GetConfig("Boat.SlotCount");
  103. //_cassetteSlotCount = (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount");
  104. BoatWafers = new ObservableCollection<BoatWaferItem>();
  105. for (int i = 0; i < _boatSlotCount; i++)
  106. {
  107. BoatWaferItem item = new BoatWaferItem() { Slot = i + 1, Description = "" };
  108. BoatWafers.Add(item);
  109. }
  110. for (int i = 0; i < _boatSlotCount; i++)
  111. {
  112. string waferType = BoatWafers[i].Description;
  113. switch (waferType)
  114. {
  115. case "P":
  116. BoatWafers[i].BkColor = _PBk;
  117. break;
  118. case "M":
  119. BoatWafers[i].BkColor = _MBk;
  120. break;
  121. case "SD":
  122. BoatWafers[i].BkColor = _SDBk;
  123. break;
  124. case "ED":
  125. BoatWafers[i].BkColor = _EDBk;
  126. break;
  127. default:
  128. BoatWafers[i].BkColor = _DefaultdBk;
  129. break;
  130. }
  131. }
  132. ListBoatWafers = SplitBoatWafersByLength(_cassetteSlotCount);
  133. }
  134. private ObservableCollection<ObservableCollection<BoatWaferItem>> SplitBoatWafersByLength(int iLength)
  135. {
  136. ObservableCollection<ObservableCollection<BoatWaferItem>> obsRet = new ObservableCollection<ObservableCollection<BoatWaferItem>>();
  137. int iCount = BoatWafers.Count / iLength;
  138. int iRemain = BoatWafers.Count % iLength;
  139. for (int i = 0; i < iCount; i++)
  140. {
  141. obsRet.Add(new ObservableCollection<BoatWaferItem>(BoatWafers.ToList().GetRange(i * iLength, iLength)));
  142. }
  143. if (iRemain > 0) obsRet.Add(new ObservableCollection<BoatWaferItem>(BoatWafers.ToList().GetRange(iCount * iLength, iRemain)));
  144. return obsRet;
  145. }
  146. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  147. {
  148. base.InvokeAfterUpdateProperty(data);
  149. RefreshBoatDataTask();
  150. RefreshBoatWafers();
  151. }
  152. private void RefreshBoatDataTask()
  153. {
  154. var wafers = ModuleManager.ModuleInfos[ModuleName].WaferManager.Wafers;
  155. if (wafers != null)
  156. {
  157. int iIndex = wafers.Count - 1;
  158. for (int i = 0; i < wafers.Count; i++)
  159. {
  160. if (wafers[i].WaferStatus != 0)
  161. {
  162. BoatWafers[iIndex].Description = $"{wafers[i].WaferType}-{wafers[i].SourceName}";
  163. switch (wafers[i].WaferType.ToString())
  164. {
  165. case "P":
  166. BoatWafers[iIndex].BkColor = _PBk;
  167. break;
  168. case "M":
  169. BoatWafers[iIndex].BkColor = _MBk;
  170. break;
  171. case "SD":
  172. BoatWafers[iIndex].BkColor = _SDBk;
  173. break;
  174. case "ED":
  175. BoatWafers[iIndex].BkColor = _EDBk;
  176. break;
  177. default:
  178. BoatWafers[iIndex].BkColor = _DefaultdBk;
  179. break;
  180. }
  181. }
  182. else
  183. {
  184. BoatWafers[iIndex].Description = "";
  185. BoatWafers[iIndex].BkColor = _DefaultdBk;
  186. }
  187. iIndex--;
  188. }
  189. }
  190. ListBoatWafers = SplitBoatWafersByLength(_cassetteSlotCount);
  191. }
  192. private void RefreshBoatWafers()
  193. {
  194. var wafers = ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers.Reverse().ToList();
  195. int NumberP = 0, NumberM = 0, NumberSD = 0, NumberED = 0, NumberT = 0, NumberXD = 0;
  196. for (int i = 0; i < wafers.Count; i++)
  197. {
  198. if (ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers.Count > i)
  199. {
  200. var wafer = wafers[i];
  201. if (wafer.WaferStatus != 0)//empty
  202. {
  203. switch (wafer.WaferType.ToString())
  204. {
  205. case "P":
  206. NumberP++;
  207. break;
  208. case "M":
  209. NumberM++;
  210. break;
  211. case "SD":
  212. NumberSD++;
  213. break;
  214. case "ED":
  215. NumberED++;
  216. break;
  217. }
  218. }
  219. }
  220. }
  221. BoatPWaferCount = NumberP;
  222. BoatMWaferCount = NumberM;
  223. BoatSDWaferCount = NumberSD;
  224. BoatEDWaferCount = NumberED;
  225. BoatEmptyWaferCount = _boatSlotCount - BoatPWaferCount - BoatMWaferCount - BoatSDWaferCount - BoatEDWaferCount;
  226. BoatAllWaferCount = $"{BoatPWaferCount + BoatMWaferCount + BoatSDWaferCount + BoatEDWaferCount}/{_boatSlotCount}";
  227. }
  228. }
  229. public class BoatWaferItem : NotifiableItem
  230. {
  231. private int _slot;
  232. public int Slot
  233. {
  234. get => _slot;
  235. set
  236. {
  237. _slot = value;
  238. InvokePropertyChanged("Slot");
  239. }
  240. }
  241. private string _description;
  242. public string Description
  243. {
  244. get => _description;
  245. set
  246. {
  247. _description = value;
  248. InvokePropertyChanged("Description");
  249. }
  250. }
  251. private bool _hasWafer;
  252. public bool HasWafer
  253. {
  254. get => _hasWafer;
  255. set
  256. {
  257. _hasWafer = value;
  258. InvokePropertyChanged("HasWafer");
  259. }
  260. }
  261. private bool _noWafer;
  262. public bool NoWafer
  263. {
  264. get => _noWafer;
  265. set
  266. {
  267. _noWafer = value;
  268. InvokePropertyChanged("NoWafer");
  269. }
  270. }
  271. private SolidColorBrush _bkColor;
  272. public SolidColorBrush BkColor
  273. {
  274. get => _bkColor;
  275. set
  276. {
  277. _bkColor = value;
  278. InvokePropertyChanged("BkColor");
  279. }
  280. }
  281. }
  282. }