StockerModifyViewModel.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. using Aitex.Core.Common;
  2. using Aitex.Core.Util;
  3. using MECF.Framework.Common.DataCenter;
  4. using MECF.Framework.Common.OperationCenter;
  5. using MECF.Framework.UI.Client.ClientBase;
  6. using OpenSEMI.ClientBase;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Collections.ObjectModel;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. using System.Windows.Controls;
  15. using FurnaceUI.Models;
  16. namespace FurnaceUI.Views.Operations
  17. {
  18. public class StockerModifyViewModel : FurnaceUIViewModelBase
  19. {
  20. public StockerModifyViewModel()
  21. {
  22. //ModuleName = module;
  23. _cassetteSlot = (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount");
  24. for (int i = _cassetteSlot; i > 0; i--)
  25. {
  26. StockerWaferInfoItems.Add(new WaferInfoItem() { SlotID = i });
  27. }
  28. }
  29. public string ModuleName { set; get; } = "Stocker1";
  30. private int? _slotFrom = 1;
  31. public int? SlotFrom
  32. {
  33. get { return _slotFrom; }
  34. set
  35. {
  36. _slotFrom = value;
  37. NotifyOfPropertyChange("SlotFrom");
  38. }
  39. }
  40. private int? _slotTo = 25;
  41. public int? SlotTo
  42. {
  43. get { return _slotTo; }
  44. set { _slotTo = value; NotifyOfPropertyChange("SlotTo"); }
  45. }
  46. private string _lotID;
  47. public string LotID
  48. {
  49. get { return _lotID; }
  50. set { _lotID = value; NotifyOfPropertyChange("LotID"); }
  51. }
  52. [Subscription("Stocker1.LotID")]
  53. public string Stocker1LotID { get; set; }
  54. [Subscription("Stocker2.LotID")]
  55. public string Stocker2LotID { get; set; }
  56. [Subscription("Stocker3.LotID")]
  57. public string Stocker3LotID { get; set; }
  58. [Subscription("Stocker4.LotID")]
  59. public string Stocker4LotID { get; set; }
  60. [Subscription("Stocker5.LotID")]
  61. public string Stocker5LotID { get; set; }
  62. [Subscription("Stocker6.LotID")]
  63. public string Stocker6LotID { get; set; }
  64. [Subscription("Stocker7.LotID")]
  65. public string Stocker7LotID { get; set; }
  66. [Subscription("Stocker8.LotID")]
  67. public string Stocker8LotID { get; set; }
  68. [Subscription("Stocker9.LotID")]
  69. public string Stocker9LotID { get; set; }
  70. [Subscription("Stocker10.LotID")]
  71. public string Stocker10LotID { get; set; }
  72. [Subscription("Stocker11.LotID")]
  73. public string Stocker11LotID { get; set; }
  74. [Subscription("Stocker12.LotID")]
  75. public string Stocker12LotID { get; set; }
  76. [Subscription("Stocker13.LotID")]
  77. public string Stocker13LotID { get; set; }
  78. [Subscription("Stocker14.LotID")]
  79. public string Stocker14LotID { get; set; }
  80. [Subscription("Stocker15.LotID")]
  81. public string Stocker15LotID { get; set; }
  82. [Subscription("Stocker16.LotID")]
  83. public string Stocker16LotID { get; set; }
  84. [Subscription("Stocker17.LotID")]
  85. public string Stocker17LotID { get; set; }
  86. [Subscription("Stocker18.LotID")]
  87. public string Stocker18LotID { get; set; }
  88. public bool SDIsChecked { get; set; }
  89. public bool EDIsChecked { get; set; }
  90. public bool PIsChecked { get; set; }
  91. public bool MIsChecked { get; set; }
  92. public bool M1IsChecked { get; set; }
  93. public bool M2IsChecked { get; set; }
  94. public Dictionary<string, string> stockerWaferTypeDict { get; set; }
  95. public bool TIsChecked { get; set; }
  96. public bool XDIsChecked { get; set; }
  97. [Subscription("Stocker1.CassettePresent")]
  98. public bool IsCassettePresent { get; set; }
  99. [Subscription("Rt.Status")]
  100. public string RtStatus { get; set; }
  101. [Subscription("PM1.Status")]
  102. public string PM1Status { get; set; }
  103. public bool FirstPIsChecked { get; set; } = true;
  104. public bool IsStockerModifyEnabled
  105. {
  106. get
  107. {
  108. return (PM1Status == "Init" || PM1Status == "Idle" || PM1Status == "Error") && (RtStatus == "Init" || RtStatus == "Idle" || RtStatus == "AutoIdle" || RtStatus == "Error");
  109. }
  110. }
  111. private int _cassetteSlot = 0;
  112. private ObservableCollection<WaferInfoItem> _stockerWaferInfoItems = new ObservableCollection<WaferInfoItem>();
  113. public ObservableCollection<WaferInfoItem> StockerWaferInfoItems
  114. {
  115. get => _stockerWaferInfoItems;
  116. set
  117. {
  118. _stockerWaferInfoItems = value;
  119. NotifyOfPropertyChange(nameof(StockerWaferInfoItems));
  120. }
  121. }
  122. private List<string> _stockerWaferType;
  123. public List<string> StockerWaferType
  124. {
  125. get => _stockerWaferType;
  126. set
  127. {
  128. _stockerWaferType = value;
  129. NotifyOfPropertyChange(nameof(StockerWaferType));
  130. }
  131. }
  132. protected override void OnActivate()
  133. {
  134. base.OnActivate();
  135. SlotTo = (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount");
  136. var type = (string)QueryDataClient.Instance.Service.GetConfig($"System.Stocker.{ModuleName}WaferType");
  137. WaferType waferType = WaferType.None;
  138. Enum.TryParse(type, out waferType);
  139. StockerWaferType = new List<string>();
  140. stockerWaferTypeDict = new Dictionary<string, string>();
  141. for (int i = 1; i <= 18; i++)
  142. {
  143. var dataType = (string)QueryDataClient.Instance.Service.GetConfig($"System.Stocker.Stocker{i}WaferType").ToString();
  144. var stockerWaferType = dataType.Replace("1", "").Replace("2", "");
  145. var item = stockerWaferType.ToString() + i;
  146. StockerWaferType.Add(item);
  147. stockerWaferTypeDict.Add(item, dataType);
  148. }
  149. switch (waferType)
  150. {
  151. case WaferType.SD:
  152. SDIsChecked = true;
  153. EDIsChecked = false;
  154. PIsChecked = false;
  155. MIsChecked = false;
  156. TIsChecked = false;
  157. XDIsChecked = false;
  158. M1IsChecked = false;
  159. M2IsChecked = false;
  160. break;
  161. case WaferType.ED:
  162. SDIsChecked = false;
  163. EDIsChecked = true;
  164. PIsChecked = false;
  165. MIsChecked = false;
  166. TIsChecked = false;
  167. XDIsChecked = false;
  168. M1IsChecked = false;
  169. M2IsChecked = false;
  170. break;
  171. case WaferType.P:
  172. SDIsChecked = false;
  173. EDIsChecked = false;
  174. PIsChecked = true;
  175. MIsChecked = false;
  176. TIsChecked = false;
  177. XDIsChecked = false;
  178. M1IsChecked = false;
  179. M2IsChecked = false;
  180. break;
  181. case WaferType.M:
  182. SDIsChecked = false;
  183. EDIsChecked = false;
  184. PIsChecked = false;
  185. MIsChecked = true;
  186. TIsChecked = false;
  187. XDIsChecked = false;
  188. M1IsChecked = false;
  189. M2IsChecked = false;
  190. break;
  191. case WaferType.M1:
  192. M1IsChecked = true;
  193. M2IsChecked = false;
  194. SDIsChecked = false;
  195. EDIsChecked = false;
  196. PIsChecked = false;
  197. MIsChecked = false;
  198. TIsChecked = false;
  199. XDIsChecked = false;
  200. break;
  201. case WaferType.M2:
  202. M1IsChecked = false;
  203. M2IsChecked = true;
  204. SDIsChecked = false;
  205. EDIsChecked = false;
  206. PIsChecked = false;
  207. MIsChecked = false;
  208. TIsChecked = false;
  209. XDIsChecked = false;
  210. break;
  211. case WaferType.T:
  212. SDIsChecked = false;
  213. EDIsChecked = false;
  214. PIsChecked = false;
  215. MIsChecked = false;
  216. TIsChecked = true;
  217. XDIsChecked = false;
  218. M1IsChecked = false;
  219. M2IsChecked = false;
  220. break;
  221. case WaferType.XD:
  222. SDIsChecked = false;
  223. EDIsChecked = false;
  224. PIsChecked = false;
  225. MIsChecked = false;
  226. TIsChecked = false;
  227. XDIsChecked = true;
  228. M1IsChecked = false;
  229. M2IsChecked = false;
  230. break;
  231. case WaferType.None:
  232. SDIsChecked = false;
  233. EDIsChecked = false;
  234. PIsChecked = true;
  235. MIsChecked = false;
  236. TIsChecked = false;
  237. XDIsChecked = false;
  238. M1IsChecked = false;
  239. M2IsChecked = false;
  240. break;
  241. }
  242. }
  243. public void StockModify(string stocker, object obj)
  244. {
  245. ModuleName = stocker;
  246. GetLotID();
  247. SetFirstPIsCheck();
  248. RadioButton radioButton = obj as RadioButton;
  249. var stockerTypeName = radioButton.Content.ToString();
  250. var stockerTypeValue = stockerWaferTypeDict[stockerTypeName].ToString();
  251. if (stockerTypeValue.StartsWith("P")) PIsChecked = true;
  252. if (stockerTypeValue.StartsWith("SD")) SDIsChecked = true;
  253. if (stockerTypeValue.StartsWith("ED")) EDIsChecked = true;
  254. if (stockerTypeValue.Equals("M1")) M1IsChecked = true;
  255. if (stockerTypeValue.Equals("M2")) M2IsChecked = true;
  256. }
  257. private void SetFirstPIsCheck()
  258. {
  259. if ("Stocker1".Equals(ModuleName)) FirstPIsChecked = true;
  260. else FirstPIsChecked = false;
  261. }
  262. public void GetLotID()
  263. {
  264. switch (ModuleName)
  265. {
  266. case "Stocker1":
  267. LotID = Stocker1LotID;
  268. break;
  269. case "Stocker2":
  270. LotID = Stocker2LotID;
  271. break;
  272. case "Stocker3":
  273. LotID = Stocker3LotID;
  274. break;
  275. case "Stocker4":
  276. LotID = Stocker4LotID;
  277. break;
  278. case "Stocker5":
  279. LotID = Stocker5LotID;
  280. break;
  281. case "Stocker6":
  282. LotID = Stocker6LotID;
  283. break;
  284. case "Stocker7":
  285. LotID = Stocker7LotID;
  286. break;
  287. case "Stocker8":
  288. LotID = Stocker8LotID;
  289. break;
  290. case "Stocker9":
  291. LotID = Stocker9LotID;
  292. break;
  293. case "Stocker10":
  294. LotID = Stocker10LotID;
  295. break;
  296. case "Stocker11":
  297. LotID = Stocker11LotID;
  298. break;
  299. case "Stocker12":
  300. LotID = Stocker12LotID;
  301. break;
  302. case "Stocker13":
  303. LotID = Stocker13LotID;
  304. break;
  305. case "Stocker14":
  306. LotID = Stocker14LotID;
  307. break;
  308. case "Stocker15":
  309. LotID = Stocker15LotID;
  310. break;
  311. case "Stocker16":
  312. LotID = Stocker16LotID;
  313. break;
  314. case "Stocker17":
  315. LotID = Stocker17LotID;
  316. break;
  317. case "Stocker18":
  318. LotID = Stocker18LotID;
  319. break;
  320. default:
  321. break;
  322. }
  323. }
  324. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  325. {
  326. RefreshCassetteDataTask();
  327. }
  328. private void RefreshCassetteDataTask()
  329. {
  330. var wafers = ModuleManager.ModuleInfos[ModuleName].WaferManager.Wafers;
  331. if (wafers != null)
  332. {
  333. for (int i = 0; i < wafers.Count; i++)
  334. {
  335. if (wafers[i].WaferStatus != 0)
  336. {
  337. StockerWaferInfoItems[i].ModuleID = wafers[i].ModuleID;
  338. StockerWaferInfoItems[i].SourceName = wafers[i].SourceName;
  339. StockerWaferInfoItems[i].WaferStatus = wafers[i].WaferStatus;
  340. StockerWaferInfoItems[i].WaferType = wafers[i].WaferType.ToString();
  341. StockerWaferInfoItems[i].UseCount = wafers[i].UseCount.ToString();
  342. StockerWaferInfoItems[i].UseTime = wafers[i].UseTime.ToString();
  343. StockerWaferInfoItems[i].UseThick = wafers[i].UseThick.ToString();
  344. }
  345. else
  346. {
  347. StockerWaferInfoItems[i].ModuleID = "";
  348. StockerWaferInfoItems[i].SourceName = "";
  349. StockerWaferInfoItems[i].WaferStatus = 0;
  350. StockerWaferInfoItems[i].WaferType = "";
  351. StockerWaferInfoItems[i].UseCount = "";
  352. StockerWaferInfoItems[i].UseTime = "";
  353. StockerWaferInfoItems[i].UseThick = "";
  354. }
  355. }
  356. }
  357. }
  358. public void CreateSlot()
  359. {
  360. WaferType waferType = WaferType.None;
  361. if (SDIsChecked)
  362. waferType = WaferType.SD;
  363. else if (EDIsChecked)
  364. waferType = WaferType.ED;
  365. else if (PIsChecked)
  366. waferType = WaferType.P;
  367. //else if (MIsChecked)
  368. // waferType = WaferType.M;
  369. else if (M1IsChecked)
  370. waferType = WaferType.M1;
  371. else if (M2IsChecked)
  372. waferType = WaferType.M2;
  373. else if (XDIsChecked)
  374. waferType = WaferType.XD;
  375. else if (TIsChecked)
  376. waferType = WaferType.T;
  377. if (SlotFrom > SlotTo || SlotTo > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount") || SlotFrom < 1)
  378. {
  379. DialogBox.ShowWarning("input error,can not delete");
  380. return;
  381. }
  382. InvokeClient.Instance.Service.DoOperation("CreateCassetteWafer", $"{ModuleName}", SlotFrom, SlotTo, waferType.ToString());
  383. }
  384. public void DeleteSlot()
  385. {
  386. if (SlotFrom > SlotTo || SlotTo > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount") || SlotFrom < 1)
  387. {
  388. DialogBox.ShowWarning("input error,can not create");
  389. return;
  390. }
  391. InvokeClient.Instance.Service.DoOperation("DeleteCassetteWafer", $"{ModuleName}", SlotFrom, SlotTo);
  392. }
  393. public void CreateAll()
  394. {
  395. WaferType waferType = WaferType.None;
  396. if (SDIsChecked)
  397. waferType = WaferType.SD;
  398. else if (EDIsChecked)
  399. waferType = WaferType.ED;
  400. else if (PIsChecked)
  401. waferType = WaferType.P;
  402. //else if (MIsChecked)
  403. // waferType = WaferType.M;
  404. else if (M1IsChecked)
  405. waferType = WaferType.M1;
  406. else if (M2IsChecked)
  407. waferType = WaferType.M2;
  408. else if (XDIsChecked)
  409. waferType = WaferType.XD;
  410. else if (TIsChecked)
  411. waferType = WaferType.T;
  412. InvokeClient.Instance.Service.DoOperation("CreateCassetteWafer", $"{ModuleName}", 1, (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"), waferType.ToString());
  413. }
  414. public void DeleteAll()
  415. {
  416. InvokeClient.Instance.Service.DoOperation("DeleteCassetteWafer", $"{ModuleName}", 1, (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"));
  417. }
  418. public void CreateCarrier()
  419. {
  420. WaferType waferType = WaferType.None;
  421. if (SDIsChecked)
  422. waferType = WaferType.SD;
  423. else if (EDIsChecked)
  424. waferType = WaferType.ED;
  425. else if (PIsChecked)
  426. waferType = WaferType.P;
  427. //else if (MIsChecked)
  428. // waferType = WaferType.M;
  429. else if (M1IsChecked)
  430. waferType = WaferType.M1;
  431. else if (M2IsChecked)
  432. waferType = WaferType.M2;
  433. else if (XDIsChecked)
  434. waferType = WaferType.XD;
  435. else if (TIsChecked)
  436. waferType = WaferType.T;
  437. InvokeClient.Instance.Service.DoOperation("System.CreateCarrier", $"{ModuleName}", 1, waferType.ToString());
  438. }
  439. public void DeleteCarrier()
  440. {
  441. InvokeClient.Instance.Service.DoOperation("System.DeleteCarrier", $"{ModuleName}", 1);
  442. }
  443. public void SetLotID(string lotID)
  444. {
  445. LotID = lotID;
  446. InvokeClient.Instance.Service.DoOperation("System.SetLotID", $"{ModuleName}", lotID);
  447. }
  448. public void CassetteClose()
  449. {
  450. ((Window)GetView()).DialogResult = false;
  451. }
  452. }
  453. }