RecipeLayoutSetMonitorTransferViewModel.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. using Aitex.Core.RT.SCCore;
  2. using Caliburn.Micro;
  3. using Caliburn.Micro.Core;
  4. using MECF.Framework.Common.DataCenter;
  5. using MECF.Framework.Common.RecipeCenter;
  6. using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
  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 FurnaceUI.Models;
  15. using FurnaceUI.Views.Parameter;
  16. using FurnaceUI.Views.Recipes;
  17. using System.Windows.Controls;
  18. using FurnaceUI.Views.DataLog;
  19. using FurnaceUI.Client.Dialog;
  20. namespace FurnaceUI.Views.Editors
  21. {
  22. public class RecipeLayoutSetMonitorTransferViewModel : FurnaceUIViewModelBase
  23. {
  24. private Visibility _autoLayoutVisibility = Visibility.Visible;
  25. public Visibility AutoLayoutVisibility
  26. {
  27. get => _autoLayoutVisibility;
  28. set
  29. {
  30. _autoLayoutVisibility = value;
  31. NotifyOfPropertyChange(nameof(AutoLayoutVisibility));
  32. }
  33. }
  34. private Visibility _boatSlotVisibility = Visibility.Hidden;
  35. public Visibility BoatSlotVisibility
  36. {
  37. get => _boatSlotVisibility;
  38. set
  39. {
  40. _boatSlotVisibility = value;
  41. NotifyOfPropertyChange(nameof(BoatSlotVisibility));
  42. }
  43. }
  44. private Visibility _directCarrierVisibility = Visibility.Hidden;
  45. public Visibility DirectCarrierVisibility
  46. {
  47. get => _directCarrierVisibility;
  48. set
  49. {
  50. _directCarrierVisibility = value;
  51. NotifyOfPropertyChange(nameof(DirectCarrierVisibility));
  52. }
  53. }
  54. private Visibility _upperProductVisibility = Visibility.Hidden;
  55. public Visibility UpperProductVisibility
  56. {
  57. get => _upperProductVisibility;
  58. set
  59. {
  60. _upperProductVisibility = value;
  61. NotifyOfPropertyChange(nameof(UpperProductVisibility));
  62. }
  63. }
  64. private Visibility _autoCarrierVisibility = Visibility.Hidden;
  65. public Visibility AutoCarrierVisibility
  66. {
  67. get => _autoCarrierVisibility;
  68. set
  69. {
  70. _autoCarrierVisibility = value;
  71. NotifyOfPropertyChange(nameof(AutoCarrierVisibility));
  72. }
  73. }
  74. private Dictionary<string, string> MonitorTransferDict = new Dictionary<string, string>();
  75. private string _title = "";
  76. public string Title
  77. {
  78. get => _title;
  79. set
  80. {
  81. _title = value;
  82. NotifyOfPropertyChange(nameof(Title));
  83. }
  84. }
  85. private MonitorTransferType _dialogResultMonitorTransferType = MonitorTransferType.AutoLayout;
  86. public MonitorTransferType DialogResultMonitorTransferType
  87. {
  88. get => _dialogResultMonitorTransferType;
  89. set
  90. {
  91. _dialogResultMonitorTransferType = value;
  92. NotifyOfPropertyChange(nameof(DialogResultMonitorTransferType));
  93. }
  94. }
  95. public bool IsSave { get; set; }
  96. private MonitorTransferType _waferChargeMonitor = MonitorTransferType.AutoLayout;
  97. public MonitorTransferType WaferChargeMonitor
  98. {
  99. get => _waferChargeMonitor;
  100. set
  101. {
  102. _waferChargeMonitor = value;
  103. NotifyOfPropertyChange(nameof(WaferChargeMonitor));
  104. }
  105. }
  106. private string _waferChargeMonitorValue = "";
  107. public string WaferChargeMonitorValue
  108. {
  109. get => _waferChargeMonitorValue;
  110. set
  111. {
  112. _waferChargeMonitorValue = value;
  113. NotifyOfPropertyChange(nameof(WaferChargeMonitorValue));
  114. }
  115. }
  116. private string _transferCarrier1 = "None";
  117. public string TransferCarrier1
  118. {
  119. get => _transferCarrier1;
  120. set
  121. {
  122. _transferCarrier1 = value;
  123. NotifyOfPropertyChange(nameof(TransferCarrier1));
  124. }
  125. }
  126. private string _transferCarrier2 = "None";
  127. public string TransferCarrier2
  128. {
  129. get => _transferCarrier2;
  130. set
  131. {
  132. _transferCarrier2 = value;
  133. NotifyOfPropertyChange(nameof(TransferCarrier2));
  134. }
  135. }
  136. private string _transferCarrier3 = "None";
  137. public string TransferCarrier3
  138. {
  139. get => _transferCarrier3;
  140. set
  141. {
  142. _transferCarrier3 = value;
  143. NotifyOfPropertyChange(nameof(TransferCarrier3));
  144. }
  145. }
  146. private string _transferCarrier4 = "None";
  147. public string TransferCarrier4
  148. {
  149. get => _transferCarrier4;
  150. set
  151. {
  152. _transferCarrier4 = value;
  153. NotifyOfPropertyChange(nameof(TransferCarrier4));
  154. }
  155. }
  156. private string _transferCarrier5 = "None";
  157. public string TransferCarrier5
  158. {
  159. get => _transferCarrier5;
  160. set
  161. {
  162. _transferCarrier5 = value;
  163. NotifyOfPropertyChange(nameof(TransferCarrier5));
  164. }
  165. }
  166. private string _transferCarrier6 = "None";
  167. public string TransferCarrier6
  168. {
  169. get => _transferCarrier6;
  170. set
  171. {
  172. _transferCarrier6 = value;
  173. NotifyOfPropertyChange(nameof(TransferCarrier6));
  174. }
  175. }
  176. private string _transferCarrier7 = "None";
  177. public string TransferCarrier7
  178. {
  179. get => _transferCarrier7;
  180. set
  181. {
  182. _transferCarrier7 = value;
  183. NotifyOfPropertyChange(nameof(TransferCarrier7));
  184. }
  185. }
  186. private string _autoCarrier = "None";
  187. public string AutoCarrier
  188. {
  189. get => _autoCarrier;
  190. set
  191. {
  192. _autoCarrier = value;
  193. NotifyOfPropertyChange(nameof(AutoCarrier));
  194. }
  195. }
  196. private string _returnString = "";
  197. public string ReturnString
  198. {
  199. get => _returnString;
  200. set
  201. {
  202. _returnString = value;
  203. NotifyOfPropertyChange(nameof(ReturnString));
  204. }
  205. }
  206. public RecipeLayoutSetMonitorTransferViewModel()
  207. {
  208. }
  209. public bool IsEnable => CGlobal.RecipeProcessEditViewEnable;//是否是View模式
  210. public void MonitorTransferSelectClick(string cmd)
  211. {
  212. if (MonitorTransferDict.ContainsKey(cmd))
  213. {
  214. Title = MonitorTransferDict[cmd];
  215. }
  216. switch (cmd)
  217. {
  218. case "AutoLayout":
  219. SetSelectAutoLayout();
  220. break;
  221. case "BoatSlot":
  222. SetSelectBoatSlot();
  223. break;
  224. case "DirectCarrier":
  225. SetSelectDirectCarrier();
  226. break;
  227. case "AutoCarrier":
  228. SetSelectAutoCarrier();
  229. break;
  230. default:
  231. break;
  232. }
  233. }
  234. private void SetSelectAutoLayout()
  235. {
  236. AutoLayoutVisibility = Visibility.Visible;
  237. BoatSlotVisibility = Visibility.Hidden;
  238. DirectCarrierVisibility = Visibility.Hidden;
  239. UpperProductVisibility = Visibility.Hidden;
  240. AutoCarrierVisibility = Visibility.Hidden;
  241. DialogResultMonitorTransferType = MonitorTransferType.AutoLayout;
  242. }
  243. private void SetSelectBoatSlot()
  244. {
  245. AutoLayoutVisibility = Visibility.Hidden;
  246. BoatSlotVisibility = Visibility.Visible;
  247. DirectCarrierVisibility = Visibility.Hidden;
  248. UpperProductVisibility = Visibility.Hidden;
  249. AutoCarrierVisibility = Visibility.Hidden;
  250. DialogResultMonitorTransferType = MonitorTransferType.BoatSlot;
  251. }
  252. private void SetSelectDirectCarrier()
  253. {
  254. AutoLayoutVisibility = Visibility.Hidden;
  255. BoatSlotVisibility = Visibility.Hidden;
  256. DirectCarrierVisibility = Visibility.Visible;
  257. UpperProductVisibility = Visibility.Hidden;
  258. AutoCarrierVisibility = Visibility.Hidden;
  259. DialogResultMonitorTransferType = MonitorTransferType.DirectCarrier;
  260. }
  261. private void SetSelectAutoCarrier()
  262. {
  263. AutoLayoutVisibility = Visibility.Hidden;
  264. BoatSlotVisibility = Visibility.Hidden;
  265. DirectCarrierVisibility = Visibility.Hidden;
  266. UpperProductVisibility = Visibility.Hidden;
  267. AutoCarrierVisibility = Visibility.Visible;
  268. DialogResultMonitorTransferType = MonitorTransferType.AutoCarrier;
  269. }
  270. public string RecipeType { get; set; }
  271. protected override void OnViewLoaded(object view)
  272. {
  273. base.OnViewLoaded(view);
  274. LoadData();
  275. LoadSetDefaultOption(view);
  276. }
  277. private void LoadData()
  278. {
  279. MonitorTransferDict.Clear();
  280. MonitorTransferDict.Add("AutoLayout", "Set Monitor Wafer number to transfer the boat. The wafersare arranged for the locations divided the Product areaby the numbers .");
  281. MonitorTransferDict.Add("BoatSlot", "Set the boat slot numbers to transfer Monitor Wafers.");
  282. MonitorTransferDict.Add("DirectCarrier", "Set the arrangement of Monitor Wafers between the Product carrier unit on boat.");
  283. MonitorTransferDict.Add("AutoCarrier", "Set the arrangement of Monitor wafer just under UpperSide-Dummy area.In Product area it is arrangedautomatically.");
  284. Title = MonitorTransferDict["AutoLayout"];
  285. ListBoltSlot.Clear();
  286. for (int i = 0; i < 30; i++)
  287. {
  288. ListBoltSlot.Add(new BoltSlot()
  289. { No = i + 1, SlotValue = 0 });
  290. }
  291. SplitCharacter(WaferChargeMonitorValue);
  292. }
  293. private void SplitCharacter(string value)
  294. {
  295. if (string.IsNullOrEmpty(value) || !value.Contains("|")) return;
  296. string[] Strlist = value.Split('|');
  297. if (Strlist.Length != 5) return;
  298. var subListStr = Strlist[0].Split(';');
  299. WaferExist = subListStr[0];
  300. FillReplace = subListStr[1];
  301. int _wfNum = 0;
  302. int.TryParse(Strlist[1], out _wfNum);
  303. WaferNum = _wfNum;
  304. var subBoltSlotStrList = Strlist[2].Split(';');
  305. for (int i = 0; i < subBoltSlotStrList.Length; i++)
  306. {
  307. var getBoltSlot = ListBoltSlot.Where(x => x.No == i + 1).FirstOrDefault();
  308. if (getBoltSlot != null)
  309. {
  310. int.TryParse(subBoltSlotStrList[i], out int _boltSlotValue);
  311. getBoltSlot.SlotValue = _boltSlotValue;
  312. }
  313. }
  314. var transferCarrierStrList = Strlist[3].Split(';');
  315. if (transferCarrierStrList.Length == 7)
  316. {
  317. TransferCarrier1 = transferCarrierStrList[0];
  318. TransferCarrier2 = transferCarrierStrList[1];
  319. TransferCarrier3 = transferCarrierStrList[2];
  320. TransferCarrier4 = transferCarrierStrList[3];
  321. TransferCarrier5 = transferCarrierStrList[4];
  322. TransferCarrier6 = transferCarrierStrList[5];
  323. TransferCarrier7 = transferCarrierStrList[6];
  324. }
  325. AutoCarrier = Strlist[4];
  326. }
  327. private void LoadSetDefaultOption(object view)
  328. {
  329. var monitorTransferView = (RecipeLayoutSetMonitorTransferView)view;
  330. switch (_waferChargeMonitor)
  331. {
  332. case MonitorTransferType.AutoLayout:
  333. monitorTransferView.RdoAutoLayout.IsChecked = true;
  334. break;
  335. case MonitorTransferType.BoatSlot:
  336. monitorTransferView.RdoBoatSlot.IsChecked = true;
  337. break;
  338. case MonitorTransferType.DirectCarrier:
  339. monitorTransferView.RdoDirectCarrier.IsChecked = true;
  340. break;
  341. case MonitorTransferType.AutoCarrier:
  342. monitorTransferView.RdoAutoCarrier.IsChecked = true;
  343. break;
  344. case MonitorTransferType.None:
  345. //monitorTransferView.RdoAutoLayout.IsChecked = true;
  346. break;
  347. default:
  348. break;
  349. }
  350. }
  351. public void TempSetSave()
  352. {
  353. IsSave = true;
  354. GetWaferChargeMonitorValue();
  355. ((Window)GetView()).DialogResult = true;
  356. }
  357. private void GetWaferChargeMonitorValue()
  358. {
  359. string[] strReturnList = new string[5];
  360. strReturnList[0] = $"{WaferExist};{FillReplace}";
  361. strReturnList[1] = WaferNum.ToString();
  362. strReturnList[2] = string.Join(";", ListBoltSlot.Select(x => x.SlotValue.ToString()).ToArray());
  363. strReturnList[3] = $"{TransferCarrier1};{TransferCarrier2};{TransferCarrier3};{TransferCarrier4};{TransferCarrier5};{TransferCarrier6};{TransferCarrier7}";
  364. strReturnList[4] = AutoCarrier;
  365. ReturnString = string.Join("|", strReturnList);
  366. }
  367. private string _waferExist = "None";
  368. public string WaferExist
  369. {
  370. get => _waferExist;
  371. set
  372. {
  373. _waferExist = value;
  374. NotifyOfPropertyChange(nameof(WaferExist));
  375. }
  376. }
  377. private string _fillReplace = "None";
  378. public string FillReplace
  379. {
  380. get => _fillReplace;
  381. set
  382. {
  383. _fillReplace = value;
  384. NotifyOfPropertyChange(nameof(FillReplace));
  385. }
  386. }
  387. private int _waferNum = 0;
  388. public int WaferNum
  389. {
  390. get => _waferNum;
  391. set
  392. {
  393. _waferNum = value;
  394. NotifyOfPropertyChange(nameof(WaferNum));
  395. }
  396. }
  397. public ObservableCollection<BoltSlot> ListBoltSlot { get; set; } = new ObservableCollection<BoltSlot>();
  398. public void TextSelectCmdMouseDown(string cmd, object sender)
  399. {
  400. var colsender = (TextBox)sender;
  401. WindowManager wm = new WindowManager();
  402. bool? dialogReturn = false;
  403. switch (cmd)
  404. {
  405. case "WaferExist":
  406. SelectExistViewModel selectExistViewModel1 = new SelectExistViewModel();
  407. selectExistViewModel1.ProductZeroStr = WaferExist;
  408. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel1, null, "Select");
  409. if ((bool)dialogReturn)
  410. {
  411. WaferExist = selectExistViewModel1.DialogResultString;
  412. }
  413. break;
  414. case "FillReplace":
  415. SelectExistViewModel selectExistViewModel2 = new SelectExistViewModel();
  416. selectExistViewModel2.ProductZeroStr = WaferExist;
  417. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel2, null, "Select");
  418. if ((bool)dialogReturn)
  419. {
  420. FillReplace = selectExistViewModel2.DialogResultString;
  421. }
  422. break;
  423. default:
  424. break;
  425. }
  426. }
  427. public void TransferCmdMouseDown(string cmd, object sender)
  428. {
  429. var colsender = (TextBox)sender;
  430. WindowManager wm = new WindowManager();
  431. bool? dialogReturn = false;
  432. SelectExistViewModel selectExistViewModel = new SelectExistViewModel();
  433. switch (cmd)
  434. {
  435. case "1":
  436. selectExistViewModel.ProductZeroStr = TransferCarrier1;
  437. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select");
  438. if ((bool)dialogReturn)
  439. {
  440. TransferCarrier1 = selectExistViewModel.DialogResultString;
  441. }
  442. break;
  443. case "2":
  444. selectExistViewModel.ProductZeroStr = TransferCarrier2;
  445. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select");
  446. if ((bool)dialogReturn)
  447. {
  448. TransferCarrier2 = selectExistViewModel.DialogResultString;
  449. }
  450. break;
  451. case "3":
  452. selectExistViewModel.ProductZeroStr = TransferCarrier3;
  453. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select");
  454. if ((bool)dialogReturn)
  455. {
  456. TransferCarrier3 = selectExistViewModel.DialogResultString;
  457. }
  458. break;
  459. case "4":
  460. selectExistViewModel.ProductZeroStr = TransferCarrier4;
  461. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select");
  462. if ((bool)dialogReturn)
  463. {
  464. TransferCarrier4 = selectExistViewModel.DialogResultString;
  465. }
  466. break;
  467. case "5":
  468. selectExistViewModel.ProductZeroStr = TransferCarrier5;
  469. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select");
  470. if ((bool)dialogReturn)
  471. {
  472. TransferCarrier5 = selectExistViewModel.DialogResultString;
  473. }
  474. break;
  475. case "6":
  476. selectExistViewModel.ProductZeroStr = TransferCarrier6;
  477. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select");
  478. if ((bool)dialogReturn)
  479. {
  480. TransferCarrier6 = selectExistViewModel.DialogResultString;
  481. }
  482. break;
  483. case "7":
  484. selectExistViewModel.ProductZeroStr = TransferCarrier7;
  485. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select");
  486. if ((bool)dialogReturn)
  487. {
  488. TransferCarrier7 = selectExistViewModel.DialogResultString;
  489. }
  490. break;
  491. default:
  492. break;
  493. }
  494. }
  495. public void AutoCarrierCmdMouseDown(string cmd, object sender)
  496. {
  497. var colsender = (TextBox)sender;
  498. WindowManager wm = new WindowManager();
  499. bool? dialogReturn = false;
  500. SelectExistViewModel selectExistViewModel = new SelectExistViewModel();
  501. switch (cmd)
  502. {
  503. case "Transfer":
  504. selectExistViewModel.ProductZeroStr = AutoCarrier;
  505. dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select");
  506. if ((bool)dialogReturn)
  507. {
  508. AutoCarrier = selectExistViewModel.DialogResultString;
  509. }
  510. break;
  511. default:
  512. break;
  513. }
  514. }
  515. public void TempSetCancel()
  516. {
  517. IsSave = false;
  518. ((Window)GetView()).DialogResult = false;
  519. }
  520. }
  521. public enum MonitorTransferType
  522. {
  523. AutoLayout,
  524. BoatSlot,
  525. DirectCarrier,
  526. AutoCarrier,
  527. None
  528. }
  529. public class BoltSlot : PropertyChangedBase
  530. {
  531. private int _no;
  532. public int No
  533. {
  534. get => _no;
  535. set
  536. {
  537. _no = value;
  538. NotifyOfPropertyChange("No");
  539. }
  540. }
  541. private int _slotValue;
  542. public int SlotValue
  543. {
  544. get => _slotValue;
  545. set
  546. {
  547. _slotValue = value;
  548. NotifyOfPropertyChange("SlotValue");
  549. }
  550. }
  551. }
  552. }