PMCleanViewModel.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using Aitex.Core.Util;
  6. using Caliburn.Micro;
  7. using MECF.Framework.Common.CommonData;
  8. using MECF.Framework.Common.DataCenter;
  9. using MECF.Framework.Common.Equipment;
  10. using MECF.Framework.Common.OperationCenter;
  11. using MECF.Framework.Common.RecipeCenter;
  12. using OpenSEMI.ClientBase;
  13. using RecipeEditorLib.RecipeModel.Params;
  14. using VirgoUI.Client.Models.Sys;
  15. namespace VirgoUI.Client.Models.Recipe.Clean
  16. {
  17. public class CleanItem : NotifiableItem
  18. {
  19. public string ChamberModule { get; set; }
  20. public string ModuleName { get; set; }
  21. public bool IdlePurgeIsEnable { get; set; }
  22. public string IdlePurgeRecipe { get; set; }
  23. public int IdlePurgeIdleTimeSetPoint { get; set; }
  24. public int IdlePurgeNextRunTime { get; set; }
  25. public bool IdlePurgeIsSaved { get; set; }
  26. public bool IdleCleanIsEnable { get; set; }
  27. public string IdleCleanRecipe { get; set; }
  28. public int IdleCleanIdleTimeSetPoint { get; set; }
  29. public int IdleCleanNextRunTime { get; set; }
  30. public bool IdleCleanIsSaved { get; set; }
  31. public bool JobCleanIsEnable { get; set; }
  32. public string PreJobRecipe { get; set; }
  33. public string CompleteJobRecipe { get; set; }
  34. public bool PreJobIsEnable { get; set; }
  35. public bool CompleteJobIsEnable { get; set; }
  36. public bool PreJobIdleTimeIsSaved { get; set; }
  37. public int PreJobIdleTimeSetPoint { get; set; }
  38. }
  39. public class PMCleanViewModel : ModuleUiViewModelBase, ISupportMultipleSystem
  40. {
  41. private int MenuPermission;
  42. public bool IsReadOnly
  43. {
  44. get => this.Permission == 2 ? true : false;
  45. }
  46. public bool IsEnableEdit
  47. {
  48. get => !IsReadOnly;
  49. }
  50. [Subscription("IdlePurgeNextRunTime")]
  51. public int IdlePurgeNextRunTimePM { get; set; }
  52. [Subscription("IdleCleanNextRunTime")]
  53. public int IdleCleanNextRunTimePM { get; set; }
  54. public CleanItem CleanDataPM { get; set; }
  55. public PMCleanViewModel()
  56. {
  57. this.DisplayName = " CleanViewModel";
  58. CleanDataPM = new CleanItem() { ChamberModule = $"{SystemName}", ModuleName = "", IdlePurgeIsSaved = true, IdleCleanIsSaved = true };
  59. }
  60. protected override void OnInitialize()
  61. {
  62. base.OnInitialize();
  63. }
  64. protected override void InvokeBeforeUpdateProperty(Dictionary<string, object> data)
  65. {
  66. base.InvokeBeforeUpdateProperty(data);
  67. }
  68. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  69. {
  70. MenuPermission = ClientApp.Instance.GetPermission($"Clean{SystemName}");
  71. base.InvokeAfterUpdateProperty(data);
  72. CleanDataPM.IdleCleanNextRunTime = IdleCleanNextRunTimePM;
  73. CleanDataPM.IdlePurgeNextRunTime = IdlePurgeNextRunTimePM;
  74. CleanDataPM.InvokePropertyChanged("IdleCleanNextRunTime");
  75. CleanDataPM.InvokePropertyChanged("IdlePurgeNextRunTime");
  76. }
  77. #region Idle Purge
  78. public void IdlePurgeIsEnableChanged(string ModuleName, bool isEnabled)
  79. {
  80. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"System.IdlePurge.IsEnabled", isEnabled.ToString());
  81. }
  82. public void IdlePurgeSetTime(string module, string value)
  83. {
  84. if (string.IsNullOrEmpty(value) || !int.TryParse(value, out _))
  85. {
  86. DialogBox.ShowWarning("Time not valid");
  87. return;
  88. }
  89. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"System.IdlePurge.IdlePurgeTime", value);
  90. CleanDataPM.IdlePurgeIsSaved = true;
  91. CleanDataPM.InvokePropertyChanged("IdlePurgeIsSaved");
  92. }
  93. public void IdlePurgeResetTime(string module)
  94. {
  95. InvokeClient.Instance.Service.DoOperation($"System.ResetIdlePurgeTime", module);
  96. }
  97. public void IdlePurgeSelectRecipe(string module)
  98. {
  99. //RecipeSequenceSelectDialogViewModel dialog = new RecipeSequenceSelectDialogViewModel();
  100. //dialog.DisplayName = "Select Recipe";
  101. //List<string> lstFiles = RecipeClient.Instance.Service.GetRecipesByPath($"ALD\\Process\\", false).ToList();
  102. //dialog.Files = new ObservableCollection<FileNode>(RecipeSequenceTreeBuilder.GetFiles("prefixPath", lstFiles));
  103. //WindowManager wm = new WindowManager();
  104. //bool? ret = wm.ShowDialog(dialog);
  105. //if ((bool)ret)
  106. //{
  107. // CleanDataPM.IdlePurgeRecipe = dialog.DialogResult;
  108. // CleanDataPM.InvokePropertyChanged("IdlePurgeRecipe");
  109. // InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{module}.IdlePurge.IdlePurgeRecipe", dialog.DialogResult);
  110. //}
  111. }
  112. public void SelectRecipe(string path)
  113. {
  114. RecipeSequenceSelectDialogViewModel dialog = new RecipeSequenceSelectDialogViewModel();
  115. dialog.DisplayName = "Select Recipe";
  116. string module = ModuleName.System.ToString();
  117. List<string> lstFiles;
  118. lstFiles = RecipeClient.Instance.Service.GetRecipesByPath($"{module}", false).ToList();
  119. dialog.Files = new ObservableCollection<FileNode>(RecipeSequenceTreeBuilder.GetFiles(lstFiles));
  120. WindowManager wm = new WindowManager();
  121. bool? bret = wm.ShowDialog(dialog);
  122. if ((bool)bret)
  123. {
  124. //param.Value = dialog.DialogResult;
  125. //param.IsSaved = false;
  126. }
  127. }
  128. #endregion
  129. #region IdleClean
  130. public void IdleCleanIsEnableChanged(string ModuleName, bool isEnabled)
  131. {
  132. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{SystemName}.IdleClean.IsEnabled", isEnabled.ToString());
  133. }
  134. public void IdleCleanSetTime(string module, string value)
  135. {
  136. if (MenuPermission != 3) return;
  137. if (string.IsNullOrEmpty(value) || !int.TryParse(value, out _))
  138. {
  139. DialogBox.ShowWarning("Time not valid");
  140. return;
  141. }
  142. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{SystemName}.IdleClean.IdleCleanTime", value);
  143. CleanDataPM.IdleCleanIsSaved = true;
  144. CleanDataPM.InvokePropertyChanged("IdleCleanIsSaved");
  145. }
  146. public void PreJobSetIdleTime(string module, string value)
  147. {
  148. if (MenuPermission != 3) return;
  149. if (string.IsNullOrEmpty(value) || !int.TryParse(value, out _))
  150. {
  151. DialogBox.ShowWarning("Time not valid");
  152. return;
  153. }
  154. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{SystemName}.JobClean.IdleCleanTime", value);
  155. CleanDataPM.PreJobIdleTimeIsSaved = true;
  156. CleanDataPM.InvokePropertyChanged("PreJobIdleTimeIsSaved");
  157. }
  158. public void IdleCleanResetTime(string module)
  159. {
  160. if (MenuPermission != 3) return;
  161. InvokeClient.Instance.Service.DoOperation($"System.ResetIdleCleanTime", $"{SystemName}");
  162. }
  163. public void IdleCleanSelectRecipe(string module)
  164. {
  165. if (MenuPermission != 3) return;
  166. RecipeSequenceSelectDialogViewModel dialog = new RecipeSequenceSelectDialogViewModel();
  167. dialog.DisplayName = "Select Recipe";
  168. List<string> lstFiles = new List<string>();
  169. module = SystemName;
  170. lstFiles.Add("");
  171. lstFiles.AddRange(RecipeClient.Instance.Service.GetRecipesByPath($"{module}", false).ToList());
  172. dialog.Files = new ObservableCollection<FileNode>(RecipeSequenceTreeBuilder.GetFiles(lstFiles));
  173. WindowManager wm = new WindowManager();
  174. bool? ret = wm.ShowDialog(dialog);
  175. if ((bool)ret)
  176. {
  177. CleanDataPM.IdleCleanRecipe = dialog.DialogResult;
  178. CleanDataPM.InvokePropertyChanged("IdleCleanRecipe");
  179. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{SystemName}.IdleClean.IdleCleanRecipe", dialog.DialogResult);
  180. }
  181. }
  182. #endregion
  183. #region JobClean
  184. public void JobCleanIsEnableChanged(string module, bool isEnabled)
  185. {
  186. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{SystemName}.JobClean.IsEnabled", isEnabled.ToString());
  187. }
  188. public void PreJobIsEnableChanged(string module, bool isEnabled)
  189. {
  190. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{SystemName}.JobClean.EnablePreJobClean", isEnabled.ToString());
  191. }
  192. public void CompleteJobIsEnableChanged(string module, bool isEnabled)
  193. {
  194. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{SystemName}.JobClean.EnableCompleteJobClean", isEnabled.ToString());
  195. }
  196. public void PreJobSelectRecipe(string module)
  197. {
  198. if (MenuPermission != 3) return;
  199. RecipeSequenceSelectDialogViewModel dialog = new RecipeSequenceSelectDialogViewModel();
  200. dialog.DisplayName = "Select Recipe";
  201. List<string> lstFiles = new List<string>();
  202. module = SystemName;
  203. lstFiles.Add("");
  204. lstFiles.AddRange(RecipeClient.Instance.Service.GetRecipesByPath($"{module}", false).ToList());
  205. dialog.Files = new ObservableCollection<FileNode>(RecipeSequenceTreeBuilder.GetFiles(lstFiles));
  206. WindowManager wm = new WindowManager();
  207. bool? ret = wm.ShowDialog(dialog);
  208. if ((bool)ret)
  209. {
  210. CleanDataPM.PreJobRecipe = dialog.DialogResult;
  211. CleanDataPM.InvokePropertyChanged("PreJobRecipe");
  212. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{SystemName}.JobClean.PreJobCleanRecipe", dialog.DialogResult);
  213. }
  214. }
  215. public void CompleteJobSelectRecipe(string module)
  216. {
  217. if (MenuPermission != 3) return;
  218. RecipeSequenceSelectDialogViewModel dialog = new RecipeSequenceSelectDialogViewModel();
  219. dialog.DisplayName = "Select Recipe";
  220. module = SystemName;
  221. List<string> lstFiles = new List<string>();
  222. lstFiles.Add("");
  223. lstFiles.AddRange(RecipeClient.Instance.Service.GetRecipesByPath($"{module}", false).ToList());
  224. dialog.Files = new ObservableCollection<FileNode>(RecipeSequenceTreeBuilder.GetFiles( lstFiles));
  225. WindowManager wm = new WindowManager();
  226. bool? ret = wm.ShowDialog(dialog);
  227. if ((bool)ret)
  228. {
  229. CleanDataPM.CompleteJobRecipe = dialog.DialogResult;
  230. CleanDataPM.InvokePropertyChanged("CompleteJobRecipe");
  231. InvokeClient.Instance.Service.DoOperation($"System.SetConfig", $"{SystemName}.JobClean.CompleteJobCleanRecipe", dialog.DialogResult);
  232. }
  233. }
  234. #endregion
  235. protected override void OnActivate()
  236. {
  237. base.OnActivate();
  238. List<string> _lsConfigName = new List<string>()
  239. {
  240. $"{SystemName}.IdleClean.IsEnabled",
  241. $"{SystemName}.IdleClean.IdleCleanRecipe",
  242. $"{SystemName}.IdleClean.IdleCleanTime",
  243. $"{SystemName}.JobClean.IsEnabled",
  244. $"{SystemName}.JobClean.PreJobCleanRecipe",
  245. $"{SystemName}.JobClean.CompleteJobCleanRecipe",
  246. $"{SystemName}.JobClean.EnablePreJobClean",
  247. $"{SystemName}.JobClean.EnableCompleteJobClean",
  248. $"{SystemName}.JobClean.IdleCleanTime",
  249. };
  250. var configs = QueryDataClient.Instance.Service.PollConfig(_lsConfigName);
  251. CleanDataPM.ChamberModule = SystemName;
  252. CleanDataPM.IdleCleanIdleTimeSetPoint = (int)configs[$"{SystemName}.IdleClean.IdleCleanTime"];
  253. CleanDataPM.IdleCleanIsEnable = (bool)configs[$"{SystemName}.IdleClean.IsEnabled"];
  254. CleanDataPM.IdleCleanRecipe = (string)configs[$"{SystemName}.IdleClean.IdleCleanRecipe"];
  255. CleanDataPM.JobCleanIsEnable = (bool)configs[$"{SystemName}.JobClean.IsEnabled"];
  256. CleanDataPM.PreJobRecipe = (string)configs[$"{SystemName}.JobClean.PreJobCleanRecipe"];
  257. CleanDataPM.PreJobIsEnable = (bool)configs[$"{SystemName}.JobClean.EnablePreJobClean"];
  258. CleanDataPM.CompleteJobRecipe = (string)configs[$"{SystemName}.JobClean.CompleteJobCleanRecipe"];
  259. CleanDataPM.CompleteJobIsEnable = (bool)configs[$"{SystemName}.JobClean.EnableCompleteJobClean"];
  260. CleanDataPM.PreJobIdleTimeSetPoint = (int)configs[$"{SystemName}.JobClean.IdleCleanTime"];
  261. }
  262. protected override void OnDeactivate(bool close)
  263. {
  264. base.OnDeactivate(close);
  265. }
  266. }
  267. }