PMCleanViewModel.cs 12 KB

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