using Aitex.Core.Common.DeviceData; using Caliburn.Micro; using Caliburn.Micro.Core; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.OperationCenter; using MECF.Framework.Common.RecipeCenter; using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig; using MECF.Framework.UI.Client.CenterViews.Dialogs; using MECF.Framework.UI.Client.CenterViews.Editors.Recipe; using MECF.Framework.UI.Core.Control; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Controls; using FurnaceUI.Models; using RecipeEditorLib.RecipeModel.Params; using MECF.Framework.Common.Utilities; namespace FurnaceUI.Views.Editors { public class RecipeMFCSettingViewModel : FurnaceUIViewModelBase { public Dictionary ExternalOutSets { get; set; } = new Dictionary(); public ObservableCollection MFCSets { get; set; } //public MFMValue MFMSets { get; set; } = new MFMValue(); public bool IsSave { get; set; } = false; private Visibility _gridMFCVisibility = Visibility.Hidden; public Visibility GridMFCVisibility { get => _gridMFCVisibility; set { _gridMFCVisibility = value; NotifyOfPropertyChange("GridMFCVisibility"); } } private string _Value; public string Value { get => _Value; set { _Value = value; NotifyOfPropertyChange("Value"); } } public Dictionary> _recipeTemplate; public Dictionary> RecipeTemplate { get => _recipeTemplate; set { _recipeTemplate = value; MFCTemplateColumn = RecipeTemplate["MFC"]; int index = 1; //foreach (var item in MFCTemplateColumn) //{ // var isInstalled = QueryDataClient.Instance.Service.GetConfig($"PM1.MFC.{item.ModuleName}.IsMFCInstalled"); // if (!(bool)isInstalled) continue; // MFCDataList.Add(new MFCData() // { // ScaleValue= SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.N2Scale"), // No = index, // ControlName = item.ModuleName, // SetValueParam =new DoubleParam() { Name = "SetValue", Value = item.Value.ToString() }, // SetUnit = MFCSets[item.ControlName].SetUnit, // Rampng = MFCSets[item.ControlName].Rampng, // RampngUnit = MFCSets[item.ControlName].RampngUnit, // AlarmValue = MFCSets[item.ControlName].AlarmValue == null ? "None" : MFCSets[item.ControlName].AlarmValue, // DisplayName = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.GasName"), // Unit = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.FlowUnit"), // MaxValue = MFCSets[item.ControlName].MaxValue, //SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.N2Scale"), // MinValue = MFCSets[item.ControlName].MinValue, //SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.PhyScale"), // IsCheck = MFCSets[item.ControlName].IsCheck, // IsEnable = IsEnable // }); ; // index++; //} NotifyOfPropertyChange("RecipeTemplate"); } } private ObservableCollection _mFCTemplateColumn; public ObservableCollection MFCTemplateColumn { get => _mFCTemplateColumn; set { _mFCTemplateColumn = value; NotifyOfPropertyChange("MFCTemplateColumn"); } } public bool IsEnable => CGlobal.RecipeProcessEditViewEnable;//是否是View模式 public string RecipeType { get; set; } public RecipeMFCSettingViewModel() { } private ObservableCollection oldMFCData = new ObservableCollection(); protected override void OnViewLoaded(object view) { base.OnViewLoaded(view); RefreshUpdate(); oldMFCData.Clear(); MFCSets.ToList().ForEach(x => oldMFCData.Add((MFCData)CloneUtil.CloneObject(x))); } private string ShowNumberKeyboard(Control control, string defaultValue) { NumberKeyboard numberKeyboard = new NumberKeyboard("", defaultValue); var point = control.PointFromScreen(new Point(0, 0)); double wx = SystemParameters.WorkArea.Width; double hy = SystemParameters.WorkArea.Height; if (-point.Y + control.ActualHeight + 5 + numberKeyboard.Height < hy) { numberKeyboard.Top = -point.Y + control.ActualHeight + 5; } else { numberKeyboard.Top = -point.Y - numberKeyboard.Height - 5; } if (-point.X + numberKeyboard.Width < wx) { numberKeyboard.Left = -point.X; } else { numberKeyboard.Left = -point.X - (numberKeyboard.Width - control.ActualWidth); } if ((bool)numberKeyboard.ShowDialog()) return numberKeyboard.ValueString; else return "Cancel"; } public void TextValueChanged(object senderName, object sender, object typeName) { var controlName = (string)senderName; var tempMFCTemplateColumn = MFCTemplateColumn.Where(x => x.ModuleName == controlName).FirstOrDefault(); if (tempMFCTemplateColumn != null) { switch (typeName.ToString()) { case "Value": string strRetValue = (sender as TextBox).Text; if (strRetValue != "Cancel") { if (MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().SetValue.Value != strRetValue) { //MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().SetValue.SetValue(strRetValue); } } break; case "Rampng": strRetValue = (sender as TextBox).Text; if (strRetValue != "Cancel") { if (MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().Rampng.Value != strRetValue) { // MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().Rampng.SetValue(strRetValue); } } break; //case "AlarmValue": // RecipeGASSettingMFCAlarmViewModel view = new RecipeGASSettingMFCAlarmViewModel(MFCDataList.Where(x => x.ControlName == controlName).FirstOrDefault().AlarmValue.ToString()); // WindowManager wm = IoC.Get() as WindowManager; // if (!(bool)wm.ShowDialogWithTitle(view, null, "Select Flow Alarm Table")) break; // MFCDataList.Where(x => x.ControlName == controlName).FirstOrDefault().AlarmValue = view.CurrentValue; // break; case "MaxValue": strRetValue = (sender as TextBox).Text; if (strRetValue != "Cancel") { int max = 0; int.TryParse(strRetValue, out max); //MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().MaxValue.SetValue(max.ToString("F3")); } return; case "MinValue": strRetValue = (sender as TextBox).Text; if (strRetValue != "Cancel") { double min = 0; double.TryParse(strRetValue, out min); // MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().MinValue.SetValue(min.ToString("F3")); } return; default: break; } var mfcData = MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault(); if (mfcData != null) { InvokeClient.Instance.Service.DoOperation($"PM1.{controlName}.SetMfcVirtualValue", $"{mfcData.SetValue.Value};{mfcData.Rampng.Value};{mfcData.AlarmValue}"); } NotifyOfPropertyChange("MFCTemplateColumn"); } } public void MFCButtonClickCmd(object senderName, object sender, object typeName) { var controlName = (string)senderName; var tempMFCTemplateColumn = MFCTemplateColumn.Where(x => x.ModuleName == controlName).FirstOrDefault(); if (tempMFCTemplateColumn != null) { MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().IsCheck.SetValue((!(MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().IsCheck.Value))); } } public void MFCShowVauleCmd(object senderName, object sender, object maxValue) { var windowManager = IoC.Get(); var controlName = (string)senderName; var control = (Button)sender; RecipeFlowSettingViewModel recipeFlowSettingViewModel = new RecipeFlowSettingViewModel(); recipeFlowSettingViewModel.RecipeType = RecipeType; recipeFlowSettingViewModel.SelectMfcFlow = controlName; recipeFlowSettingViewModel.SelectFlowValue = control.Content.ToString().Contains("Force") ? "0.0" : control.Content.ToString(); recipeFlowSettingViewModel.MaxValue = Convert.ToDouble(maxValue); if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeFlowSettingViewModel, null, "Recipe Flow Setting")) { Value = recipeFlowSettingViewModel.SelectFlow; MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().SetValue.Value = recipeFlowSettingViewModel.SelectFlow; var mfcData = MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault(); if (mfcData != null) { InvokeClient.Instance.Service.DoOperation($"PM1.{controlName}.SetMfcVirtualValue", $"{mfcData.SetValue};{mfcData.Rampng};{mfcData.AlarmValue}"); } NotifyOfPropertyChange("MFCTemplateColumn"); } } public void GASSettingSave() { IsSave = true; if (_mFCTemplateColumn != null) { } ((Window)GetView()).DialogResult = true; } public void GASSettingCancel() { foreach (var item in MFCSets) { var findMFC = oldMFCData.FirstOrDefault(x => x.ControlName == item.ControlName); if (findMFC != null) { if (item.SetValue.IsSaved != findMFC.SetValue.IsSaved || item.Rampng.IsSaved != findMFC.Rampng.IsSaved) { item.UndoChanges(); InvokeClient.Instance.Service.DoOperation($"PM1.{item.ControlName}.SetMfcVirtualValue", $"{item.SetValue.Value};{item.Rampng.Value};{item.AlarmValue}"); } } else { item.UndoChanges(); InvokeClient.Instance.Service.DoOperation($"PM1.{item.ControlName}.SetMfcVirtualValue", $"{item.SetValue.Value};{item.Rampng.Value};{item.AlarmValue}"); } } ((Window)GetView()).DialogResult = false; } public void RefreshUpdate() { //if (MFCSets != null) //{ // foreach (var item in MFCSets) // { // string getMFCName = item.Replace(".Flow", "").Trim(); // if (MFCDataList.Where(x => x.ControlName == getMFCName).FirstOrDefault() != null) // { // var mfcData = MFCDataList.Where(x => x.ControlName == getMFCName).FirstOrDefault(); // mfcData.SetValueParam = MFCSets[item].SetValueParam; // mfcData.Rampng=MFCSets[item].Rampng; // mfcData.MaxValue =MFCSets[item].MaxValue; // mfcData.MinValue = MFCSets[item].MinValue; // mfcData.IsCheck = MFCSets[item].IsCheck; // mfcData.Unit = MFCSets[item].Unit; // // MFCDataList.Where(x => x.ControlName == item).FirstOrDefault().Name = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item}.GasName"); // //MFCDataList.Where(x => x.ControlName == item).FirstOrDefault().MaxValue = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item}.N2Scale"); // } // } //} } public void UnitClick(string unit, MFCData mcfData) { var windowManager = IoC.Get(); RecipeMFCUnitButton2SelectViewModel recipeMFCUnitButton2SelectViewModel = new RecipeMFCUnitButton2SelectViewModel(); recipeMFCUnitButton2SelectViewModel.UnitStr = unit; if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeMFCUnitButton2SelectViewModel, null, "Button Select")) { mcfData.SetUnit.SetValue(recipeMFCUnitButton2SelectViewModel.SelectButtonCommand); } } public void RampngUnitClick(string RampngUnit, MFCData mcfData) { var windowManager = IoC.Get(); RecipeMFCUnitButtonSelectViewModel recipeMFCUnitButtonSelectViewModel = new RecipeMFCUnitButtonSelectViewModel(); recipeMFCUnitButtonSelectViewModel.UnitStr = RampngUnit; if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeMFCUnitButtonSelectViewModel, null, "The Button Select")) { mcfData.RampngUnit.SetValue(recipeMFCUnitButtonSelectViewModel.SelectButtonCommand); } } } }