RecipeLayoutBoatMapViewModel.cs 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908
  1. using Caliburn.Micro;
  2. using MECF.Framework.Common.CommonData;
  3. using MECF.Framework.Common.DataCenter;
  4. using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
  5. using MECF.Framework.UI.Client.ClientBase;
  6. using OpenSEMI.ClientBase;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Windows;
  10. using System.Windows.Media;
  11. using FurnaceUI.Models;
  12. using FurnaceUI.Views.Editors;
  13. using System.Linq;
  14. using System.Windows.Controls;
  15. using System.Collections.ObjectModel;
  16. namespace FurnaceUI.Views.Recipes
  17. {
  18. public class RecipeLayoutBoatMapViewModel : FurnaceUIViewModelBase
  19. {
  20. #region properties
  21. private int waferNumberP;
  22. public int WaferNumberP { get { return waferNumberP; } set { waferNumberP = value; NotifyOfPropertyChange(nameof(WaferNumberP)); } }
  23. private int waferNumberSD;
  24. public int WaferNumberSD { get { return waferNumberSD; } set { waferNumberSD = value; NotifyOfPropertyChange(nameof(WaferNumberSD)); } }
  25. private int waferNumberED;
  26. public int WaferNumberED { get { return waferNumberED; } set { waferNumberED = value; NotifyOfPropertyChange(nameof(WaferNumberED)); } }
  27. private int waferNumberM;
  28. public int WaferNumberM { get { return waferNumberM; } set { waferNumberM = value; NotifyOfPropertyChange(nameof(WaferNumberM)); } }
  29. private int waferNumberAll;
  30. public int WaferNumberAll { get { return waferNumberAll; } set { waferNumberAll = value; NotifyOfPropertyChange(nameof(WaferNumberAll)); } }
  31. private int currentItemIndex;
  32. private bool productPositionAuto;
  33. public bool ProductPositionAuto { get { return productPositionAuto; } set { productPositionAuto = value; NotifyOfPropertyChange(nameof(ProductPositionAuto)); } }
  34. private bool productPositionSlot;
  35. public bool ProductPositionSlot { get { return productPositionSlot; } set { productPositionSlot = value; NotifyOfPropertyChange(nameof(ProductPositionSlot)); } }
  36. private bool monitorPositionAuto;
  37. public bool MonitorPositionAuto { get { return monitorPositionAuto; } set { monitorPositionAuto = value; NotifyOfPropertyChange(nameof(MonitorPositionAuto)); } }
  38. private bool monitorPositionSlot;
  39. public bool MonitorPositionSlot { get { return monitorPositionSlot; } set { monitorPositionSlot = value; NotifyOfPropertyChange(nameof(MonitorPositionSlot)); } }
  40. private bool spaceSlotEnabled;
  41. public bool SpaceSlotEnabled { get { return spaceSlotEnabled; } set { spaceSlotEnabled = value; NotifyOfPropertyChange(nameof(SpaceSlotEnabled)); } }
  42. public int CurrentItemIndex
  43. {
  44. get { return currentItemIndex; }
  45. set { currentItemIndex = value; SelecteSlot(); this.NotifyOfPropertyChange(nameof(CurrentItemIndex)); }
  46. }
  47. private RecipeProvider _recipeProvider = new RecipeProvider();
  48. private SolidColorBrush _SDBk = new SolidColorBrush(Color.FromArgb(255, 251, 147, 85));
  49. private SolidColorBrush _FDBk = new SolidColorBrush(Color.FromArgb(255, 170, 147, 255));
  50. private SolidColorBrush _PBk = new SolidColorBrush(Color.FromArgb(255, 2, 255, 255));
  51. private SolidColorBrush _M1Bk = new SolidColorBrush(Color.FromArgb(255, 3, 149, 255));
  52. private SolidColorBrush _M2Bk = new SolidColorBrush(Color.FromArgb(255, 255, 111, 171));
  53. private SolidColorBrush _DefaultdBk = new SolidColorBrush(Colors.White);
  54. #endregion
  55. public RecipeDataLayout CurrentRecipe { get; set; } = new RecipeDataLayout();
  56. public RecipeLayoutEntityNormal NormalEntity { get { return CurrentRecipe.NormalSteps[0]; } set { CurrentRecipe.NormalSteps[0] = value; this.NotifyOfPropertyChange(nameof(NormalEntity)); } }
  57. private List<BoatWaferItem> _boatWafers = new List<BoatWaferItem>();
  58. public List<BoatWaferItem> BoatWafers
  59. {
  60. get
  61. {
  62. _boatWafers.Clear();
  63. foreach (var item in CurrentRecipe.ExpertSteps[0].Items)
  64. {
  65. _boatWafers.Add(item);
  66. }
  67. _boatWafers.Reverse();
  68. return _boatWafers;
  69. }
  70. set
  71. {
  72. CurrentRecipe.ExpertSteps[0].Items = value;
  73. }
  74. }
  75. public bool IsEnable => CGlobal.RecipeLayoutEditViewEnable;//是否是View模式
  76. public SlotType SelectSlotType { get; set; } = SlotType.Space;
  77. private int _cassetteSlotCount;
  78. private int _productSlotCount = 0;
  79. public int ProductSlotCount
  80. {
  81. get => _productSlotCount;
  82. set
  83. {
  84. _productSlotCount = value;
  85. NotifyOfPropertyChange(nameof(ProductSlotCount));
  86. }
  87. }
  88. private int _monitor1SlotCount = 0;
  89. public int Monitor1SlotCount
  90. {
  91. get => _monitor1SlotCount;
  92. set
  93. {
  94. _monitor1SlotCount = value;
  95. NotifyOfPropertyChange(nameof(Monitor1SlotCount));
  96. }
  97. }
  98. private int _monitor2SlotCount = 0;
  99. public int Monitor2SlotCount
  100. {
  101. get => _monitor2SlotCount;
  102. set
  103. {
  104. _monitor2SlotCount = value;
  105. NotifyOfPropertyChange(nameof(Monitor2SlotCount));
  106. }
  107. }
  108. private int _sDDummySlotCount = 0;
  109. public int SDDummySlotCount
  110. {
  111. get => _sDDummySlotCount;
  112. set
  113. {
  114. _sDDummySlotCount = value;
  115. NotifyOfPropertyChange(nameof(SDDummySlotCount));
  116. }
  117. }
  118. private int _fDDummySlotCount = 0;
  119. public int FDDummySlotCount
  120. {
  121. get => _fDDummySlotCount;
  122. set
  123. {
  124. _fDDummySlotCount = value;
  125. NotifyOfPropertyChange(nameof(FDDummySlotCount));
  126. }
  127. }
  128. private int _noneSlotCount = 0;
  129. public int NoneSlotCount
  130. {
  131. get => _noneSlotCount;
  132. set
  133. {
  134. _noneSlotCount = value;
  135. NotifyOfPropertyChange(nameof(NoneSlotCount));
  136. }
  137. }
  138. private bool _isSelectOnePiece=true;
  139. public bool IsSelectOnePiece
  140. {
  141. get => _isSelectOnePiece;
  142. set
  143. {
  144. _isSelectOnePiece = value;
  145. NotifyOfPropertyChange(nameof(IsSelectOnePiece));
  146. }
  147. }
  148. public void SlotSelectTypeChecked(string cmd)
  149. {
  150. switch (cmd)
  151. {
  152. case "Zone":
  153. IsSelectOnePiece = false;
  154. break;
  155. case "1Piece":
  156. IsSelectOnePiece = true;
  157. break;
  158. default:
  159. break;
  160. }
  161. }
  162. public ObservableCollection<string> listBoatWafers { get; set; } = new ObservableCollection<string>();
  163. public RecipeFormatBuilder ColumnBuilder { get; set; }
  164. public RecipeLayoutBoatMapViewModel(string strPrefixPath, string strName, RecipeFormatBuilder columnBuilder, string permission = "")
  165. {
  166. WaferNumberAll = (int)QueryDataClient.Instance.Service.GetConfig("Boat.SlotCount");
  167. _cassetteSlotCount = (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount");
  168. ColumnBuilder = columnBuilder;
  169. LoadData(strPrefixPath, strName, permission);
  170. ProductPositionAuto = NormalEntity.ProductPosition == "Auto";
  171. ProductPositionSlot = NormalEntity.ProductPosition == "Slot";
  172. MonitorPositionAuto = NormalEntity.MonitorPosition == "Auto";
  173. MonitorPositionSlot = NormalEntity.MonitorPosition == "Slot";
  174. NormalEntity.ProductPosition = "Slot";
  175. NormalEntity.MonitorPosition = "Slot";
  176. NormalEntity.DummyLowerSlot = "0";
  177. NormalEntity.DummyUpperSlot = "0";
  178. NormalEntity.CenteringSlotPosition = "0";
  179. SpaceSlotEnabled = ProductPositionSlot || MonitorPositionSlot;
  180. }
  181. private void LoadData(string strPrefixPath, string strName, string permission)
  182. {
  183. CurrentRecipe.Clear();
  184. CurrentRecipe.PrefixPath = strPrefixPath;
  185. CurrentRecipe.Name = strName;
  186. CurrentRecipe.RecipePermission = permission;
  187. var recipeContent = _recipeProvider.LoadRecipe(strPrefixPath, strName);
  188. if (string.IsNullOrEmpty(recipeContent))
  189. {
  190. System.Windows.MessageBox.Show($"{CurrentRecipe.PrefixPath}\\{CurrentRecipe.Name} is empty, please confirm the file is valid.");
  191. return;
  192. }
  193. CurrentRecipe.RecipeChamberType = "OriginChamber";
  194. CurrentRecipe.InitData(CurrentRecipe.PrefixPath, CurrentRecipe.Name, recipeContent, ColumnBuilder.Configs, "PM1");
  195. if (CurrentRecipe.ExpertSteps.Count == 0 || CurrentRecipe.ExpertSteps[0].Items.Count != WaferNumberAll)
  196. {
  197. CurrentRecipe.ExpertSteps.Clear();
  198. RecipeLayoutEntityExpert expert = new RecipeLayoutEntityExpert();
  199. CurrentRecipe.ExpertSteps.Add(expert);
  200. for (int i = 0; i < WaferNumberAll; i++)
  201. {
  202. BoatWaferItem item = new BoatWaferItem() { Slot = i + 1, Description = $"" };
  203. CurrentRecipe.ExpertSteps[0].Items.Add(item);
  204. }
  205. }
  206. if (CurrentRecipe.NormalSteps.Count == 0 || CurrentRecipe.ExpertSteps[0].Items.Count <= 0)
  207. {
  208. RecipeLayoutEntityNormal normal = new RecipeLayoutEntityNormal();
  209. CurrentRecipe.NormalSteps.Add(normal);
  210. }
  211. }
  212. protected override void OnActivate()
  213. {
  214. base.OnActivate();
  215. RefreshBoatWafers();
  216. }
  217. private int oldCurrentItemIndex;
  218. private bool firstSelectCurrentItem = false;
  219. private SlotType oldSlotType = SlotType.Space;
  220. public void SelecteSlot()
  221. {
  222. if (IsSelectOnePiece)
  223. {
  224. SelecteOneSlot();
  225. }
  226. else
  227. {
  228. SelecteMoreSlot();
  229. }
  230. }
  231. private void SelecteOneSlot()
  232. {
  233. switch (SelectSlotType)
  234. {
  235. case SlotType.P:
  236. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Add", NormalEntity.ProductSlotNo, currentItemIndex);
  237. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  238. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  239. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  240. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  241. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex-1].BkColor = _PBk;
  242. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "PD";
  243. break;
  244. case SlotType.M1:
  245. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor1SlotNo, currentItemIndex);
  246. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  247. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  248. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  249. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  250. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _M1Bk;
  251. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "M1";
  252. break;
  253. case SlotType.M2:
  254. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor2SlotNo, currentItemIndex);
  255. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  256. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  257. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  258. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  259. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _M2Bk;
  260. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "M2";
  261. break;
  262. case SlotType.SD:
  263. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.SDDummySlotNo, currentItemIndex);
  264. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  265. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  266. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  267. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  268. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  269. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _SDBk;
  270. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "SD";
  271. break;
  272. case SlotType.FD:
  273. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.FDDummySlotNo, currentItemIndex);
  274. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  275. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  276. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  277. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  278. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _FDBk;
  279. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "FD";
  280. break;
  281. case SlotType.Space:
  282. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  283. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  284. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  285. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  286. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  287. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _DefaultdBk;
  288. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "----";
  289. break;
  290. }
  291. oldSlotType = SelectSlotType;
  292. oldCurrentItemIndex = currentItemIndex;
  293. this.RefreshBoatWafers();
  294. }
  295. private void SelecteMoreSlot()
  296. {
  297. List<string> listWafers = QueryDataClient.Instance.Service.GetLayoutRecipeContent(CurrentRecipe.GetXmlString(), WaferNumberAll.ToString(), _cassetteSlotCount.ToString());
  298. int fristValue = currentItemIndex < oldCurrentItemIndex ? currentItemIndex : oldCurrentItemIndex;
  299. int endValue = currentItemIndex < oldCurrentItemIndex ? oldCurrentItemIndex : currentItemIndex;
  300. List<string> tempWafers = new List<string>();
  301. if (currentItemIndex > oldCurrentItemIndex)
  302. {
  303. tempWafers = listWafers.TakeWhile((n, index) => index < endValue).SkipWhile((n, index) => index < fristValue).ToList();
  304. }
  305. else
  306. {
  307. tempWafers = listWafers.TakeWhile((n, index) => index < endValue - 1).SkipWhile((n, index) => index < fristValue - 1).ToList();
  308. }
  309. if (firstSelectCurrentItem == true && tempWafers.Count>1)//tempWafers.Where(x => !string.IsNullOrEmpty(x)).Count() == 0 && firstSelectCurrentItem == true
  310. {
  311. for (int i = fristValue; i < endValue; i++)
  312. {
  313. switch (SelectSlotType)
  314. {
  315. case SlotType.P:
  316. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Add", NormalEntity.ProductSlotNo, i);
  317. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  318. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  319. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  320. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  321. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _PBk;
  322. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "PD";
  323. break;
  324. case SlotType.M1:
  325. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor1SlotNo, i);
  326. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  327. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  328. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  329. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  330. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _M1Bk;
  331. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "M1";
  332. break;
  333. case SlotType.M2:
  334. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor2SlotNo, i);
  335. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  336. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  337. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  338. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  339. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _M2Bk;
  340. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "M2";
  341. break;
  342. case SlotType.SD:
  343. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.SDDummySlotNo, i);
  344. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  345. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  346. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  347. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  348. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _SDBk;
  349. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "SD";
  350. break;
  351. case SlotType.FD:
  352. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.FDDummySlotNo, i);
  353. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  354. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  355. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  356. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  357. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _FDBk;
  358. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "FD";
  359. break;
  360. case SlotType.Space:
  361. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  362. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  363. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  364. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  365. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  366. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _DefaultdBk;
  367. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "----";
  368. break;
  369. }
  370. }
  371. firstSelectCurrentItem = false;
  372. }
  373. else
  374. {
  375. switch (SelectSlotType)
  376. {
  377. case SlotType.P:
  378. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Add", NormalEntity.ProductSlotNo, currentItemIndex);
  379. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  380. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  381. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  382. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  383. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _PBk;
  384. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "PD";
  385. break;
  386. case SlotType.M1:
  387. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor1SlotNo, currentItemIndex);
  388. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  389. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  390. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  391. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  392. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _M1Bk;
  393. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "M1";
  394. break;
  395. case SlotType.M2:
  396. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  397. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor2SlotNo, currentItemIndex);
  398. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  399. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  400. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  401. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _M2Bk;
  402. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "M2";
  403. break;
  404. case SlotType.SD:
  405. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.SDDummySlotNo, currentItemIndex);
  406. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  407. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  408. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  409. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  410. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _SDBk;
  411. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "SD";
  412. break;
  413. case SlotType.FD:
  414. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.FDDummySlotNo, currentItemIndex);
  415. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  416. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  417. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  418. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  419. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _FDBk;
  420. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "FD";
  421. break;
  422. case SlotType.Space:
  423. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, currentItemIndex);
  424. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, currentItemIndex);
  425. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, currentItemIndex);
  426. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, currentItemIndex);
  427. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, currentItemIndex);
  428. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].BkColor = _DefaultdBk;
  429. CurrentRecipe.ExpertSteps[0].Items[currentItemIndex - 1].Description = "----";
  430. break;
  431. }
  432. firstSelectCurrentItem = true;
  433. }
  434. oldCurrentItemIndex = currentItemIndex;
  435. this.RefreshBoatWafers();
  436. }
  437. public void SetCommand(object obj)
  438. {
  439. WindowManager wm = new WindowManager();
  440. switch (obj.ToString())
  441. {
  442. case "AllClear":
  443. int index = 0;
  444. foreach (var item in BoatWafers)
  445. {
  446. CurrentRecipe.ExpertSteps[0].Items[index].BkColor = _DefaultdBk;
  447. CurrentRecipe.ExpertSteps[0].Items[index].Description = "----";
  448. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, index + 1);
  449. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, index + 1);
  450. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, index + 1);
  451. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, index + 1);
  452. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, index + 1);
  453. index++;
  454. }
  455. oldSlotType = SlotType.Space;
  456. break;
  457. case "Wafer Charge Rule":
  458. RecipeWaferChargeRuleViewModel viewWaferChargeRule = new RecipeWaferChargeRuleViewModel();
  459. viewWaferChargeRule.NormalEntity = NormalEntity;
  460. wm.ShowDialogWithTitle(viewWaferChargeRule, null, obj.ToString());
  461. break;
  462. case "SetAll":
  463. for (int i = 0; i < BoatWafers.Count; i++)
  464. {
  465. switch (SelectSlotType)
  466. {
  467. case SlotType.P:
  468. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Add", NormalEntity.ProductSlotNo, i + 1);
  469. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i + 1);
  470. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i + 1);
  471. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i + 1);
  472. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i + 1);
  473. CurrentRecipe.ExpertSteps[0].Items[i].Description = "PD";
  474. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _PBk;
  475. break;
  476. case SlotType.M1:
  477. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor1SlotNo, i + 1);
  478. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i + 1);
  479. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i + 1);
  480. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i + 1);
  481. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i + 1);
  482. CurrentRecipe.ExpertSteps[0].Items[i].Description = "M1";
  483. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _M1Bk;
  484. break;
  485. case SlotType.M2:
  486. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i + 1);
  487. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor2SlotNo, i + 1);
  488. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i + 1);
  489. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i + 1);
  490. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i + 1);
  491. CurrentRecipe.ExpertSteps[0].Items[i].Description = "M2";
  492. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _M2Bk;
  493. break;
  494. case SlotType.SD:
  495. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.SDDummySlotNo, i + 1);
  496. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i + 1);
  497. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i + 1);
  498. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i + 1);
  499. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i + 1);
  500. CurrentRecipe.ExpertSteps[0].Items[i].Description = "SD";
  501. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _SDBk;
  502. break;
  503. case SlotType.FD:
  504. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.FDDummySlotNo, i + 1);
  505. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i + 1);
  506. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i + 1);
  507. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i + 1);
  508. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i + 1);
  509. CurrentRecipe.ExpertSteps[0].Items[i].Description = "FD";
  510. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _FDBk;
  511. break;
  512. case SlotType.Space:
  513. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i + 1);
  514. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i + 1);
  515. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i + 1);
  516. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i + 1);
  517. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i + 1);
  518. CurrentRecipe.ExpertSteps[0].Items[i].Description = "----";
  519. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _DefaultdBk;
  520. break;
  521. default:
  522. break;
  523. }
  524. }
  525. break;
  526. case "Set":
  527. if (fromIndex != 0 && toIndex != 0 && fromIndex <= toIndex)
  528. {
  529. for (int i = fromIndex - 1; i < toIndex; i++)
  530. {
  531. // BoatWafers[i].Description = SelectSlotType.ToString();
  532. switch (SelectSlotType)
  533. {
  534. case SlotType.P:
  535. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Add", NormalEntity.ProductSlotNo, i);
  536. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  537. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  538. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  539. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  540. CurrentRecipe.ExpertSteps[0].Items[i].Description = "PD";
  541. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _PBk;
  542. break;
  543. case SlotType.M1:
  544. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor1SlotNo, i);
  545. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  546. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  547. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  548. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  549. CurrentRecipe.ExpertSteps[0].Items[i].Description = "M1";
  550. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _M1Bk;
  551. break;
  552. case SlotType.M2:
  553. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  554. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Add", NormalEntity.Monitor2SlotNo, i);
  555. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  556. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  557. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  558. CurrentRecipe.ExpertSteps[0].Items[i].Description = "M2";
  559. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _M2Bk;
  560. break;
  561. case SlotType.SD:
  562. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.SDDummySlotNo, i);
  563. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  564. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  565. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  566. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  567. CurrentRecipe.ExpertSteps[0].Items[i].Description = "SD";
  568. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _SDBk;
  569. break;
  570. case SlotType.FD:
  571. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Add", NormalEntity.FDDummySlotNo, i);
  572. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  573. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  574. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  575. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  576. CurrentRecipe.ExpertSteps[0].Items[i].Description = "FD";
  577. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _FDBk;
  578. break;
  579. case SlotType.Space:
  580. NormalEntity.ProductSlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.ProductSlotNo, i);
  581. NormalEntity.Monitor1SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor1SlotNo, i);
  582. NormalEntity.Monitor2SlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.Monitor2SlotNo, i);
  583. NormalEntity.SDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.SDDummySlotNo, i);
  584. NormalEntity.FDDummySlotNo = ProccessSlotNoPositionString("Delete", NormalEntity.FDDummySlotNo, i);
  585. CurrentRecipe.ExpertSteps[0].Items[i].Description = "----";
  586. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _DefaultdBk;
  587. break;
  588. default:
  589. break;
  590. }
  591. }
  592. }
  593. break;
  594. }
  595. this.RefreshBoatWafers();
  596. }
  597. private int fromIndex = 0;
  598. private int toIndex = 0;
  599. public void BoatWafersTextChanged(object sender)
  600. {
  601. //if (sender is TextBox)
  602. //{
  603. // var boatWaferTxt = sender as TextBox;
  604. // switch (boatWaferTxt.Name)
  605. // {
  606. // case "TxtFrom":
  607. // fromIndex = int.Parse(boatWaferTxt.Text);
  608. // break;
  609. // case "TxtTo":
  610. // toIndex = int.Parse(boatWaferTxt.Text);
  611. // break;
  612. // default:
  613. // break;
  614. // }
  615. //}
  616. }
  617. private string ProccessSlotNoPositionString(string strType, string str, int iCurrentItemIndex)
  618. {
  619. if (iCurrentItemIndex <= 0) return str;
  620. if (string.IsNullOrEmpty(str))
  621. {
  622. if (strType == "Add")
  623. { return iCurrentItemIndex.ToString(); }
  624. else if (strType == "Delete")
  625. {
  626. return str;
  627. }
  628. }
  629. List<string> selectIndexNoStr = new List<string>(str.Split(','));
  630. List<int> selectIndex = new List<int>();
  631. selectIndexNoStr.ForEach(x =>
  632. {
  633. if (selectIndex.Where(value => value == int.Parse(x)).Count() == 0)
  634. {
  635. selectIndex.Add(int.Parse(x));
  636. }
  637. }
  638. );
  639. if (strType == "Add")
  640. {
  641. if (selectIndex.Where(value => value == iCurrentItemIndex).Count() == 0)
  642. {
  643. selectIndex.Add(iCurrentItemIndex);
  644. }
  645. }
  646. else
  647. {
  648. if (selectIndex.Where(value => value == iCurrentItemIndex).Count() != 0)
  649. {
  650. selectIndex.Remove(iCurrentItemIndex);
  651. }
  652. }
  653. selectIndex.Sort();
  654. return string.Join(",", selectIndex);
  655. }
  656. public void RefreshBoatWafers()
  657. {
  658. List<string> listWafers = QueryDataClient.Instance.Service.GetLayoutRecipeContent(CurrentRecipe.GetXmlString(), WaferNumberAll.ToString(), _cassetteSlotCount.ToString());
  659. WaferNumberP = WaferNumberM = WaferNumberSD = WaferNumberED = 0;
  660. if (listWafers.Count <= 0 || (CurrentRecipe.ExpertSteps.Count <= 0 && CurrentRecipe.NormalSteps.Count <= 0)) return;
  661. CurrentRecipe.NormalSteps[0].ProductSlotNo = string.Empty;
  662. CurrentRecipe.NormalSteps[0].Monitor1SlotNo = string.Empty;
  663. for (int i = 0; i < listWafers.Count; i++)
  664. {
  665. CurrentRecipe.ExpertSteps[0].Items[i].Slot = i + 1;
  666. CurrentRecipe.ExpertSteps[0].Items[i].Description = listWafers[i].ToString() == "" ? "----" : listWafers[i].ToString();
  667. switch (listWafers[i].ToString())
  668. {
  669. case "PD":
  670. CurrentRecipe.NormalSteps[0].ProductSlotNo = ProccessSlotNoPositionString("Add", CurrentRecipe.NormalSteps[0].ProductSlotNo, i + 1);
  671. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _PBk;
  672. WaferNumberP++;
  673. break;
  674. case "M1":
  675. CurrentRecipe.NormalSteps[0].Monitor1SlotNo = ProccessSlotNoPositionString("Add", CurrentRecipe.NormalSteps[0].Monitor1SlotNo, i + 1);
  676. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _M1Bk;
  677. WaferNumberM++;
  678. break;
  679. case "M2":
  680. CurrentRecipe.NormalSteps[0].Monitor2SlotNo = ProccessSlotNoPositionString("Add", CurrentRecipe.NormalSteps[0].Monitor2SlotNo, i + 1);
  681. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _M2Bk;
  682. WaferNumberM++;
  683. break;
  684. case "SD":
  685. CurrentRecipe.NormalSteps[0].SDDummySlotNo = ProccessSlotNoPositionString("Add", CurrentRecipe.NormalSteps[0].SDDummySlotNo, i + 1);
  686. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _SDBk;
  687. WaferNumberSD++;
  688. break;
  689. case "FD":
  690. CurrentRecipe.NormalSteps[0].FDDummySlotNo = ProccessSlotNoPositionString("Add", CurrentRecipe.NormalSteps[0].FDDummySlotNo, i + 1);
  691. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _FDBk;
  692. WaferNumberED++;
  693. break;
  694. default:
  695. CurrentRecipe.ExpertSteps[0].Items[i].BkColor = _DefaultdBk;
  696. break;
  697. }
  698. }
  699. SDDummySlotCount = listWafers.Where(x => x == "SD").Count();
  700. FDDummySlotCount = listWafers.Where(x => x == "FD").Count();
  701. ProductSlotCount = listWafers.Where(x => x == "PD").Count();
  702. Monitor1SlotCount = listWafers.Where(x => x == "M1").Count();
  703. Monitor2SlotCount = listWafers.Where(x => x == "M2").Count();
  704. NoneSlotCount = listWafers.Where(x => x == "----" || string.IsNullOrEmpty(x)).Count();
  705. listBoatWafers.Clear();
  706. listWafers.ForEach(x => listBoatWafers.Add(x)); ;
  707. }
  708. public void EndEdit()
  709. {
  710. //if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].DummyLowerSlot))
  711. //{
  712. // DialogBox.ShowWarning("DummyLowerSlot is empty,can not save!");
  713. // return;
  714. //}
  715. //if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].DummyUpperSlot))
  716. //{
  717. // DialogBox.ShowWarning("DummyUpperSlot is empty,can not save!");
  718. // return;
  719. //}
  720. //if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].CenteringSlotPosition))
  721. //{
  722. // DialogBox.ShowWarning("CenteringSlotPosition is empty,can not save!");
  723. // return;
  724. //}
  725. //if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].ProductPosition))
  726. //{
  727. // DialogBox.ShowWarning("ProductPosition is empty,can not save!");
  728. // return;
  729. //}
  730. //if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].MonitorPosition))
  731. //{
  732. // DialogBox.ShowWarning("MonitorPosition is empty,can not save!");
  733. // return;
  734. //}
  735. if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].WhenCassetteInBatchAreShort))
  736. {
  737. DialogBox.ShowWarning("WhenCassetteInBatchAreShort is empty,can not save!");
  738. return;
  739. }
  740. if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].WhenPWaferShort))
  741. {
  742. DialogBox.ShowWarning("WhenPWaferShort is empty,can not save!");
  743. return;
  744. }
  745. if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].WhenWaferInCassetteAreShort))
  746. {
  747. DialogBox.ShowWarning("WhenWaferInCassetteAreShort is empty,can not save!");
  748. return;
  749. }
  750. if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].WhenEDAreShort))
  751. {
  752. DialogBox.ShowWarning("WhenEDAreShort is empty,can not save!");
  753. return;
  754. }
  755. if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].SDRule))
  756. {
  757. DialogBox.ShowWarning("SDRule is empty,can not save!");
  758. return;
  759. }
  760. if (string.IsNullOrEmpty(CurrentRecipe.NormalSteps[0].RuleOfSpaceInBoat))
  761. {
  762. DialogBox.ShowWarning("RuleOfSpaceInBoat is empty,can not save!");
  763. return;
  764. }
  765. RecipePermissionSelectViewModel dialog = new RecipePermissionSelectViewModel("Save recipe and permission", CurrentRecipe.RecipePermission);
  766. WindowManager wm = new WindowManager();
  767. bool? dialogReturn = wm.ShowDialog(dialog);
  768. if (!dialogReturn.HasValue || !dialogReturn.Value)
  769. return;
  770. CurrentRecipe.IsSavedDesc = false;
  771. this.CurrentRecipe.Revisor = BaseApp.Instance.UserContext.LoginName;
  772. this.CurrentRecipe.ReviseTime = DateTime.Now;
  773. //this.CurrentRecipe.RecipeLevel = this.LevelDisplay;
  774. this.CurrentRecipe.RecipePermission = dialog.RecipePermission;
  775. this._recipeProvider.SaveRecipe(CurrentRecipe.PrefixPath, CurrentRecipe.Name, CurrentRecipe.GetXmlString());
  776. ((Window)GetView()).DialogResult = true;
  777. }
  778. public void CancelClick()
  779. {
  780. if (DialogBox.ShowDialog(DialogButton.Yes | DialogButton.No, DialogType.CONFIRM, " You confirm that you want to unsave the recipe and exit the interface?") == DialogButton.No)
  781. return;
  782. ((Window)GetView()).Close();
  783. }
  784. public void SaveClick()
  785. {
  786. EndEdit();
  787. }
  788. public void RdoChecked(string cmd)
  789. {
  790. SlotType slotType = SlotType.Space;
  791. Enum.TryParse(cmd, out slotType);
  792. SelectSlotType = slotType;
  793. }
  794. }
  795. public enum SlotType
  796. {
  797. SD,
  798. FD,
  799. P,
  800. M1,
  801. M2,
  802. Space
  803. }
  804. public class BoatWaferItem : NotifiableItem
  805. {
  806. private int _slot;
  807. public int Slot
  808. {
  809. get => _slot;
  810. set
  811. {
  812. _slot = value;
  813. InvokePropertyChanged("Slot");
  814. }
  815. }
  816. private string _description;
  817. public string Description
  818. {
  819. get => _description;
  820. set
  821. {
  822. _description = value;
  823. InvokePropertyChanged("Description");
  824. }
  825. }
  826. private bool _hasWafer;
  827. public bool HasWafer
  828. {
  829. get => _hasWafer;
  830. set
  831. {
  832. _hasWafer = value;
  833. InvokePropertyChanged("HasWafer");
  834. }
  835. }
  836. private bool _noWafer;
  837. public bool NoWafer
  838. {
  839. get => _noWafer;
  840. set
  841. {
  842. _noWafer = value;
  843. InvokePropertyChanged("NoWafer");
  844. }
  845. }
  846. private SolidColorBrush _bkColor;
  847. public SolidColorBrush BkColor
  848. {
  849. get => _bkColor;
  850. set
  851. {
  852. _bkColor = value;
  853. InvokePropertyChanged("BkColor");
  854. }
  855. }
  856. }
  857. }