RecipeMFCSettingViewModel.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. using Aitex.Core.Common.DeviceData;
  2. using Caliburn.Micro;
  3. using Caliburn.Micro.Core;
  4. using MECF.Framework.Common.DataCenter;
  5. using MECF.Framework.Common.OperationCenter;
  6. using MECF.Framework.Common.RecipeCenter;
  7. using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
  8. using MECF.Framework.UI.Client.CenterViews.Dialogs;
  9. using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
  10. using MECF.Framework.UI.Core.Control;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Collections.ObjectModel;
  14. using System.Linq;
  15. using System.Windows;
  16. using System.Windows.Controls;
  17. using FurnaceUI.Models;
  18. using RecipeEditorLib.RecipeModel.Params;
  19. using MECF.Framework.Common.Utilities;
  20. namespace FurnaceUI.Views.Editors
  21. {
  22. public class RecipeMFCSettingViewModel : FurnaceUIViewModelBase
  23. {
  24. public Dictionary<string, bool> ExternalOutSets { get; set; } = new Dictionary<string, bool>();
  25. public ObservableCollection<MFCData> MFCSets { get; set; }
  26. //public MFMValue MFMSets { get; set; } = new MFMValue();
  27. public bool IsSave { get; set; } = false;
  28. private Visibility _gridMFCVisibility = Visibility.Hidden;
  29. public Visibility GridMFCVisibility
  30. {
  31. get => _gridMFCVisibility;
  32. set
  33. {
  34. _gridMFCVisibility = value;
  35. NotifyOfPropertyChange("GridMFCVisibility");
  36. }
  37. }
  38. private string _Value;
  39. public string Value
  40. {
  41. get => _Value;
  42. set
  43. {
  44. _Value = value;
  45. NotifyOfPropertyChange("Value");
  46. }
  47. }
  48. public Dictionary<string, ObservableCollection<RecipeTemplateColumnBase>> _recipeTemplate;
  49. public Dictionary<string, ObservableCollection<RecipeTemplateColumnBase>> RecipeTemplate
  50. {
  51. get => _recipeTemplate;
  52. set
  53. {
  54. _recipeTemplate = value;
  55. MFCTemplateColumn = RecipeTemplate["MFC"];
  56. int index = 1;
  57. //foreach (var item in MFCTemplateColumn)
  58. //{
  59. // var isInstalled = QueryDataClient.Instance.Service.GetConfig($"PM1.MFC.{item.ModuleName}.IsMFCInstalled");
  60. // if (!(bool)isInstalled) continue;
  61. // MFCDataList.Add(new MFCData()
  62. // {
  63. // ScaleValue= SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.N2Scale"),
  64. // No = index,
  65. // ControlName = item.ModuleName,
  66. // SetValueParam =new DoubleParam() { Name = "SetValue", Value = item.Value.ToString() },
  67. // SetUnit = MFCSets[item.ControlName].SetUnit,
  68. // Rampng = MFCSets[item.ControlName].Rampng,
  69. // RampngUnit = MFCSets[item.ControlName].RampngUnit,
  70. // AlarmValue = MFCSets[item.ControlName].AlarmValue == null ? "None" : MFCSets[item.ControlName].AlarmValue,
  71. // DisplayName = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.GasName"),
  72. // Unit = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.FlowUnit"),
  73. // MaxValue = MFCSets[item.ControlName].MaxValue, //SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.N2Scale"),
  74. // MinValue = MFCSets[item.ControlName].MinValue, //SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.PhyScale"),
  75. // IsCheck = MFCSets[item.ControlName].IsCheck,
  76. // IsEnable = IsEnable
  77. // }); ;
  78. // index++;
  79. //}
  80. NotifyOfPropertyChange("RecipeTemplate");
  81. }
  82. }
  83. private ObservableCollection<RecipeTemplateColumnBase> _mFCTemplateColumn;
  84. public ObservableCollection<RecipeTemplateColumnBase> MFCTemplateColumn
  85. {
  86. get => _mFCTemplateColumn;
  87. set
  88. {
  89. _mFCTemplateColumn = value;
  90. NotifyOfPropertyChange("MFCTemplateColumn");
  91. }
  92. }
  93. public bool IsEnable => CGlobal.RecipeProcessEditViewEnable;//是否是View模式
  94. public string RecipeType { get; set; }
  95. public RecipeMFCSettingViewModel()
  96. {
  97. }
  98. private ObservableCollection<MFCData> oldMFCData = new ObservableCollection<MFCData>();
  99. protected override void OnViewLoaded(object view)
  100. {
  101. base.OnViewLoaded(view);
  102. RefreshUpdate();
  103. oldMFCData.Clear();
  104. MFCSets.ToList().ForEach(x => oldMFCData.Add((MFCData)CloneUtil.CloneObject(x)));
  105. }
  106. private string ShowNumberKeyboard(Control control, string defaultValue)
  107. {
  108. NumberKeyboard numberKeyboard = new NumberKeyboard("", defaultValue);
  109. var point = control.PointFromScreen(new Point(0, 0));
  110. double wx = SystemParameters.WorkArea.Width;
  111. double hy = SystemParameters.WorkArea.Height;
  112. if (-point.Y + control.ActualHeight + 5 + numberKeyboard.Height < hy)
  113. {
  114. numberKeyboard.Top = -point.Y + control.ActualHeight + 5;
  115. }
  116. else
  117. {
  118. numberKeyboard.Top = -point.Y - numberKeyboard.Height - 5;
  119. }
  120. if (-point.X + numberKeyboard.Width < wx)
  121. {
  122. numberKeyboard.Left = -point.X;
  123. }
  124. else
  125. {
  126. numberKeyboard.Left = -point.X - (numberKeyboard.Width - control.ActualWidth);
  127. }
  128. if ((bool)numberKeyboard.ShowDialog())
  129. return numberKeyboard.ValueString;
  130. else
  131. return "Cancel";
  132. }
  133. public void TextValueChanged(object senderName, object sender, object typeName)
  134. {
  135. var controlName = (string)senderName;
  136. var tempMFCTemplateColumn = MFCTemplateColumn.Where(x => x.ModuleName == controlName).FirstOrDefault();
  137. if (tempMFCTemplateColumn != null)
  138. {
  139. switch (typeName.ToString())
  140. {
  141. case "Value":
  142. string strRetValue = (sender as TextBox).Text;
  143. if (strRetValue != "Cancel")
  144. {
  145. if (MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().SetValue.Value != strRetValue)
  146. {
  147. //MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().SetValue.SetValue(strRetValue);
  148. }
  149. }
  150. break;
  151. case "Rampng":
  152. strRetValue = (sender as TextBox).Text;
  153. if (strRetValue != "Cancel")
  154. {
  155. if (MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().Rampng.Value != strRetValue)
  156. {
  157. // MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().Rampng.SetValue(strRetValue);
  158. }
  159. }
  160. break;
  161. //case "AlarmValue":
  162. // RecipeGASSettingMFCAlarmViewModel view = new RecipeGASSettingMFCAlarmViewModel(MFCDataList.Where(x => x.ControlName == controlName).FirstOrDefault().AlarmValue.ToString());
  163. // WindowManager wm = IoC.Get<IWindowManager>() as WindowManager;
  164. // if (!(bool)wm.ShowDialogWithTitle(view, null, "Select Flow Alarm Table")) break;
  165. // MFCDataList.Where(x => x.ControlName == controlName).FirstOrDefault().AlarmValue = view.CurrentValue;
  166. // break;
  167. case "MaxValue":
  168. strRetValue = (sender as TextBox).Text;
  169. if (strRetValue != "Cancel")
  170. {
  171. int max = 0;
  172. int.TryParse(strRetValue, out max);
  173. //MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().MaxValue.SetValue(max.ToString("F3"));
  174. }
  175. return;
  176. case "MinValue":
  177. strRetValue = (sender as TextBox).Text;
  178. if (strRetValue != "Cancel")
  179. {
  180. double min = 0;
  181. double.TryParse(strRetValue, out min);
  182. // MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().MinValue.SetValue(min.ToString("F3"));
  183. }
  184. return;
  185. default:
  186. break;
  187. }
  188. var mfcData = MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault();
  189. if (mfcData != null)
  190. {
  191. InvokeClient.Instance.Service.DoOperation($"PM1.{controlName}.SetMfcVirtualValue", $"{mfcData.SetValue.Value};{mfcData.Rampng.Value};{mfcData.AlarmValue}");
  192. }
  193. NotifyOfPropertyChange("MFCTemplateColumn");
  194. }
  195. }
  196. public void MFCButtonClickCmd(object senderName, object sender, object typeName)
  197. {
  198. var controlName = (string)senderName;
  199. var tempMFCTemplateColumn = MFCTemplateColumn.Where(x => x.ModuleName == controlName).FirstOrDefault();
  200. if (tempMFCTemplateColumn != null)
  201. {
  202. MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().IsCheck.SetValue((!(MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().IsCheck.Value)));
  203. }
  204. }
  205. public void MFCShowVauleCmd(object senderName, object sender, object maxValue)
  206. {
  207. var windowManager = IoC.Get<IWindowManager>();
  208. var controlName = (string)senderName;
  209. var control = (Button)sender;
  210. RecipeFlowSettingViewModel recipeFlowSettingViewModel = new RecipeFlowSettingViewModel();
  211. recipeFlowSettingViewModel.RecipeType = RecipeType;
  212. recipeFlowSettingViewModel.SelectMfcFlow = controlName;
  213. recipeFlowSettingViewModel.SelectFlowValue = control.Content.ToString().Contains("Force") ? "0.0" : control.Content.ToString();
  214. recipeFlowSettingViewModel.MaxValue = Convert.ToDouble(maxValue);
  215. if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeFlowSettingViewModel, null, "Recipe Flow Setting"))
  216. {
  217. Value = recipeFlowSettingViewModel.SelectFlow;
  218. MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().SetValue.Value = recipeFlowSettingViewModel.SelectFlow;
  219. var mfcData = MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault();
  220. if (mfcData != null)
  221. {
  222. InvokeClient.Instance.Service.DoOperation($"PM1.{controlName}.SetMfcVirtualValue", $"{mfcData.SetValue};{mfcData.Rampng};{mfcData.AlarmValue}");
  223. }
  224. NotifyOfPropertyChange("MFCTemplateColumn");
  225. }
  226. }
  227. public void GASSettingSave()
  228. {
  229. IsSave = true;
  230. if (_mFCTemplateColumn != null)
  231. {
  232. }
  233. ((Window)GetView()).DialogResult = true;
  234. }
  235. public void GASSettingCancel()
  236. {
  237. foreach (var item in MFCSets)
  238. {
  239. var findMFC = oldMFCData.FirstOrDefault(x => x.ControlName == item.ControlName);
  240. if (findMFC != null)
  241. {
  242. if (item.SetValue.IsSaved != findMFC.SetValue.IsSaved || item.Rampng.IsSaved != findMFC.Rampng.IsSaved)
  243. {
  244. item.UndoChanges();
  245. InvokeClient.Instance.Service.DoOperation($"PM1.{item.ControlName}.SetMfcVirtualValue", $"{item.SetValue.Value};{item.Rampng.Value};{item.AlarmValue}");
  246. }
  247. }
  248. else
  249. {
  250. item.UndoChanges();
  251. InvokeClient.Instance.Service.DoOperation($"PM1.{item.ControlName}.SetMfcVirtualValue", $"{item.SetValue.Value};{item.Rampng.Value};{item.AlarmValue}");
  252. }
  253. }
  254. ((Window)GetView()).DialogResult = false;
  255. }
  256. public void RefreshUpdate()
  257. {
  258. //if (MFCSets != null)
  259. //{
  260. // foreach (var item in MFCSets)
  261. // {
  262. // string getMFCName = item.Replace(".Flow", "").Trim();
  263. // if (MFCDataList.Where(x => x.ControlName == getMFCName).FirstOrDefault() != null)
  264. // {
  265. // var mfcData = MFCDataList.Where(x => x.ControlName == getMFCName).FirstOrDefault();
  266. // mfcData.SetValueParam = MFCSets[item].SetValueParam;
  267. // mfcData.Rampng=MFCSets[item].Rampng;
  268. // mfcData.MaxValue =MFCSets[item].MaxValue;
  269. // mfcData.MinValue = MFCSets[item].MinValue;
  270. // mfcData.IsCheck = MFCSets[item].IsCheck;
  271. // mfcData.Unit = MFCSets[item].Unit;
  272. // // MFCDataList.Where(x => x.ControlName == item).FirstOrDefault().Name = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item}.GasName");
  273. // //MFCDataList.Where(x => x.ControlName == item).FirstOrDefault().MaxValue = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item}.N2Scale");
  274. // }
  275. // }
  276. //}
  277. }
  278. public void UnitClick(string unit, MFCData mcfData)
  279. {
  280. var windowManager = IoC.Get<IWindowManager>();
  281. RecipeMFCUnitButton2SelectViewModel recipeMFCUnitButton2SelectViewModel = new RecipeMFCUnitButton2SelectViewModel();
  282. recipeMFCUnitButton2SelectViewModel.UnitStr = unit;
  283. if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeMFCUnitButton2SelectViewModel, null, "Button Select"))
  284. {
  285. mcfData.SetUnit.SetValue(recipeMFCUnitButton2SelectViewModel.SelectButtonCommand);
  286. }
  287. }
  288. public void RampngUnitClick(string RampngUnit, MFCData mcfData)
  289. {
  290. var windowManager = IoC.Get<IWindowManager>();
  291. RecipeMFCUnitButtonSelectViewModel recipeMFCUnitButtonSelectViewModel = new RecipeMFCUnitButtonSelectViewModel();
  292. recipeMFCUnitButtonSelectViewModel.UnitStr = RampngUnit;
  293. if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeMFCUnitButtonSelectViewModel, null, "The Button Select"))
  294. {
  295. mcfData.RampngUnit.SetValue(recipeMFCUnitButtonSelectViewModel.SelectButtonCommand);
  296. }
  297. }
  298. }
  299. }