| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627 | using Aitex.Core.Common.DeviceData;using Caliburn.Micro;using Caliburn.Micro.Core;using FurnaceUI.Models;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 RecipeEditorLib.RecipeModel.Params;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Windows;using System.Windows.Controls;namespace FurnaceUI.Views.Editors{    public class RecipeGASSettingViewModel : FurnaceUIViewModelBase    {        public ObservableCollection<BoolParam> ValveSets { get; set; } = new ObservableCollection<BoolParam>();        public Dictionary<string, bool> ExternalOutSets { get; set; } = new Dictionary<string, bool>();        //public Dictionary<string, MFCData> MFCSets { get; set; } = new Dictionary<string, MFCData>();        public ObservableCollection<MFCData> MFCSets { get; set; } = new ObservableCollection<MFCData>();        public Dictionary<string, MFMValue> MFMSets { get; set; } = new Dictionary<string, MFMValue>();        //public MFMValue MFMSets { get; set; } = new MFMValue();        public bool IsSave { get; set; } = false;        private bool _eXOU1 = false;        public bool EXOU1        {            get => _eXOU1;            set            {                _eXOU1 = value;                NotifyOfPropertyChange("EXOU1");            }        }        private bool _eXOU2 = false;        public bool EXOU2        {            get => _eXOU2;            set            {                _eXOU2 = value;                NotifyOfPropertyChange("EXOU2");            }        }        private bool _eXOU3 = false;        public bool EXOU3        {            get => _eXOU3;            set            {                _eXOU3 = value;                NotifyOfPropertyChange("EXOU3");            }        }        private bool _eXOU4 = false;        public bool EXOU4        {            get => _eXOU4;            set            {                _eXOU4 = value;                NotifyOfPropertyChange("EXOU4");            }        }        private bool _eXOU5 = false;        public bool EXOU5        {            get => _eXOU5;            set            {                _eXOU5 = value;                NotifyOfPropertyChange("EXOU5");            }        }        private bool _eXOU6 = false;        public bool EXOU6        {            get => _eXOU6;            set            {                _eXOU6 = value;                NotifyOfPropertyChange("EXOU6");            }        }        private Visibility _gridMFCVisibility = Visibility.Hidden;        public Visibility GridMFCVisibility        {            get => _gridMFCVisibility;            set            {                _gridMFCVisibility = value;                NotifyOfPropertyChange("GridMFCVisibility");            }        }        private Visibility _gridMFMVisibility = Visibility.Hidden;        public Visibility GridMFMVisibility        {            get => _gridMFMVisibility;            set            {                _gridMFMVisibility = value;                NotifyOfPropertyChange("GridMFMVisibility");            }        }        private Visibility _gridValveVisibility = Visibility.Hidden;        public Visibility GridValveVisibility        {            get => _gridValveVisibility;            set            {                _gridValveVisibility = value;                NotifyOfPropertyChange("GridValveVisibility");            }        }        private string _Value;        public string Value        {            get => _Value;            set            {                _Value = value;                NotifyOfPropertyChange("Value");            }        }        public Dictionary<string, ObservableCollection<RecipeTemplateColumnBase>> _recipeTemplate;        public Dictionary<string, ObservableCollection<RecipeTemplateColumnBase>> RecipeTemplate        {            get => _recipeTemplate;            set            {                _recipeTemplate = value;                ValveTemplateColumn = RecipeTemplate["Valve"];                if (RecipeType != "Sub" && RecipeType != "Abort Sub" && RecipeType != "Abort")                {                    foreach (var valve in ValveTemplateColumn)                    {                        valve.IsEnable = IsEnable;                        int iCount = valve.Options.Count;                        for (int i = 0; i < iCount; i++)                        {                            if (valve.Options[i].ControlName.Contains("Continue"))                                valve.Options.RemoveAt(i);                        }                    }                }                MFMTemplateColumn = RecipeTemplate["MFM"];                MFMDataList.Clear();                foreach (var item in MFMTemplateColumn)                {                    MFMDataList.Add(new MFMData()                    {                        ControlName = item.ControlName,                        DisplayName = item.DisplayName,                        SetValue = new StringParam() { Name = "SetValue", Value = MFMSets[item.ControlName].Value.ToString() },                        AlarmValue = MFMSets[item.ControlName].AlarmValue,                        Name = SystemConfigProvider.Instance.GetValueByName($"PM1.MFM.{item.ModuleName}.Name"),                        Unit = SystemConfigProvider.Instance.GetValueByName($"PM1.MFM.{item.ModuleName}.FlowUnit"),                        MaxValue = new DoubleParam() { Name = "MaxValue", Value = SystemConfigProvider.Instance.GetValueByName($"PM1.MFM.{item.ModuleName}.N2Scale")},                        IsEnable = IsEnable                    });                }                MFCTemplateColumn = RecipeTemplate["MFC"];                foreach (var item in MFCTemplateColumn)                {                    var isInstalled = QueryDataClient.Instance.Service.GetConfig($"PM1.MFC.{item.ModuleName}.IsMFCInstalled");                    if (!(bool)isInstalled) continue;                    var mfc = MFCSets.FirstOrDefault(x => x.ControlName == item.ModuleName);                    if (mfc != null)                    {                        mfc.SetValue.Value = item.Value.ToString();                        mfc.DisplayName = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.GasName");                        mfc.Unit = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.FlowUnit");                        mfc.MaxValue.Value = SystemConfigProvider.Instance.GetValueByName($"PM1.MFC.{item.ModuleName}.N2Scale");                        mfc.IsEnable = IsEnable;                    }                }                NotifyOfPropertyChange("RecipeTemplate");            }        }        private ObservableCollection<RecipeTemplateColumnBase> _valveTemplateColumn;        public ObservableCollection<RecipeTemplateColumnBase> ValveTemplateColumn        {            get => _valveTemplateColumn;            set            {                _valveTemplateColumn = value;                CreateDictDefault();                NotifyOfPropertyChange("ValveTemplateColumn");            }        }        private ObservableCollection<RecipeTemplateColumnBase> _mFMTemplateColumn;        public ObservableCollection<RecipeTemplateColumnBase> MFMTemplateColumn        {            get => _mFMTemplateColumn;            set            {                _mFMTemplateColumn = value;                NotifyOfPropertyChange("MFMTemplateColumn");            }        }        private ObservableCollection<RecipeTemplateColumnBase> _mFCTemplateColumn;        public ObservableCollection<RecipeTemplateColumnBase> MFCTemplateColumn        {            get => _mFCTemplateColumn;            set            {                _mFCTemplateColumn = value;                NotifyOfPropertyChange("MFCTemplateColumn");            }        }        private ObservableCollection<MFMData> _mFMDatas = new ObservableCollection<MFMData>();        public ObservableCollection<MFMData> MFMDataList        {            get => _mFMDatas;            set            {                _mFMDatas = value;                NotifyOfPropertyChange("MFMDataList");            }        }        private void CreateDictDefault()        {            foreach (var item in _valveTemplateColumn)            {                var tempVal = ValveSets.FirstOrDefault(x => x.Name == item.ControlName);                if (tempVal==null)                {                    ValveSets.Add(new BoolParam() { Name = item.ControlName ,Value=false});                }            }        }        public bool IsEnable => CGlobal.RecipeProcessEditViewEnable;//是否是View模式        public string RecipeType { get; set; }        public RecipeGASSettingViewModel()        {            for (int i = 1; i < 7; i++)            {                ExternalOutSets.Add($"EXOU{i}", false);            }        }        protected override void OnViewLoaded(object view)        {            base.OnViewLoaded(view);            GridMFCVisibility = Visibility.Visible;            RefreshUpdate();        }        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 MFCChangedCmd(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 "Status":                    //    SwitchDialog dlg = new SwitchDialog();                    //    dlg.IsOpen = MFCDataList.Where(x => x.ControlName == controlName).FirstOrDefault().Status == "Open";                    //    dlg.WindowStartupLocation = WindowStartupLocation.CenterScreen;                    //    dlg.ShowDialog();                    //    if (dlg.IsSave)                    //    {                    //        MFCDataList.Where(x => x.ControlName == controlName).FirstOrDefault().Status = dlg.IsOpen ? "Open" : "Close";                    //    }                    //    break;                    case "Value":                        string strRetValue = ShowNumberKeyboard(sender as Button, "");                        if (strRetValue != "Cancel")                        {                            //MFCTemplateColumn.Where(x => x.ControlName == controlName).FirstOrDefault().Value = double.Parse(strRetValue);                            MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().SetValue.Value = strRetValue;                        }                        break;                    case "Rampng":                        strRetValue = ShowNumberKeyboard(sender as Button, "");                        if (strRetValue != "Cancel")                        {                            MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().Rampng.Value = strRetValue;                        }                        break;                    case "AlarmValue":                        RecipeGASSettingMFCAlarmViewModel view = new RecipeGASSettingMFCAlarmViewModel(MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().AlarmValue.ToString());                        WindowManager wm = IoC.Get<IWindowManager>() as WindowManager;                        if (!(bool)wm.ShowDialogWithTitle(view, null, "Select Flow Alarm Table")) break;                        MFCSets.Where(x => x.ControlName == controlName).FirstOrDefault().AlarmValue = view.CurrentValue;                        break;                    default:                        break;                }                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 MFMChangedCmd(object senderName, object sender, object typeName)        {            var controlName = (string)senderName;            var control = (Button)sender;            var tempMFMTemplateColumn = MFMTemplateColumn.Where(x => x.ControlName == controlName).FirstOrDefault();            if (tempMFMTemplateColumn != null)            {                switch (typeName.ToString())                {                    case "Value":                        string strRetValue = ShowNumberKeyboard(sender as Button, $"{tempMFMTemplateColumn.Value}");                        if (strRetValue != "Cancel")                        {                            MFMTemplateColumn.Where(x => x.ControlName == controlName).FirstOrDefault().Value = double.Parse(strRetValue);                            MFMDataList.Where(x => x.ControlName == controlName).FirstOrDefault().SetValue.Value = strRetValue;                            NotifyOfPropertyChange("MFMTemplateColumn");                        }                        break;                    case "AlarmValue":                        RecipeGASSettingMFCAlarmViewModel view = new RecipeGASSettingMFCAlarmViewModel(MFMDataList.Where(x => x.ControlName == controlName).FirstOrDefault().AlarmValue.ToString());                        WindowManager wm = IoC.Get<IWindowManager>() as WindowManager;                        if (!(bool)wm.ShowDialogWithTitle(view, null, "Select Flow Alarm Table")) break;                        MFMDataList.Where(x => x.ControlName == controlName).FirstOrDefault().AlarmValue = view.CurrentValue;                        break;                }            }        }        public void GASValveSelectionChanged(object sender, object e)        {            var obj = (RecipeTemplateColumnBase)((ComboBox)sender).DataContext;            bool isOpen = false;            if (obj.SelectedValueIndex == 0)            {                isOpen = false;            }            else if (obj.SelectedValueIndex == 1)            {                isOpen = true;            }            InvokeClient.Instance.Service.DoOperation($"PM1.{obj.ControlName}.{AITValveOperation.GVVirtualTurnValve}", isOpen);        }        public void MFCShowVauleCmd(object senderName, object sender, object maxValue)        {            var windowManager = IoC.Get<IWindowManager>();            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 (_valveTemplateColumn != null)            {                foreach (var item in _valveTemplateColumn)                {                    var tempVal = ValveSets?.FirstOrDefault(x => x.Name == item.ControlName);                    if (tempVal != null)                    {                        switch (item.SelectedValueIndex)                        {                            case 0:                                tempVal.Value = false;                                break;                            case 1:                                tempVal.Value = true;                                break;                            case 2:                                tempVal.Value = false;//"Continue"                                break;                        }                        //ValveSets[item.ControlName] = item.SelectedValueIndex == 0 ? "Close" : "Open";                    }                    else                    {                        BoolParam valveSet = new BoolParam() { Name = item.ControlName, Value = false };                        switch (item.SelectedValueIndex)                        {                            case 0:                                valveSet.Value = false;                                break;                            case 1:                                valveSet.Value = true;                                break;                            case 2:                                valveSet.Value = false;// "Continue";                                break;                        }                        ValveSets.Add(valveSet);                    }                }                if (_mFCTemplateColumn != null)                {                }                if (_mFMTemplateColumn != null)                {                    foreach (var item in MFMDataList)                    {                        if (MFMSets != null)                        {                            //MFMSets.Value = item.Value.ToString();                            //MFMSets.AlarmValue = item.AlarmValue.ToString();                            if (MFMSets.ContainsKey(item.ControlName))                            {                                MFMSets[item.ControlName].Value = item.SetValue.ToString();                                MFMSets[item.ControlName].AlarmValue = item.AlarmValue.ToString();                            }                            else                            {                                MFMSets.Add(item.ControlName, new MFMValue()                                {                                    Value = item.SetValue.Value,                                    AlarmValue = item.AlarmValue.ToString(),                                    Name = item.Name,                                });                            }                        }                    }                }                ExternalOutSets["EXOU1"] = EXOU1;                ExternalOutSets["EXOU2"] = EXOU2;                ExternalOutSets["EXOU3"] = EXOU3;                ExternalOutSets["EXOU4"] = EXOU4;                ExternalOutSets["EXOU5"] = EXOU5;                ExternalOutSets["EXOU6"] = EXOU6;                ((Window)GetView()).DialogResult = true;            }        }        public void GASSettingCancel()        {            ((Window)GetView()).DialogResult = false;        }        public void GASSettingSelectCmd(string cmd)        {            GridMFCVisibility = Visibility.Hidden;            GridMFMVisibility = Visibility.Hidden;            GridValveVisibility = Visibility.Hidden;            switch (cmd)            {                case "MFC":                    GridMFCVisibility = Visibility.Visible;                    break;                case "MFM":                    GridMFMVisibility = Visibility.Visible;                    break;                case "Valve":                    GridValveVisibility = Visibility.Visible;                    break;                default:                    break;            }        }        public void RefreshUpdate()        {            foreach (var item in ValveTemplateColumn)            {                var tempVal = ValveSets.FirstOrDefault(x => x.Name == item.ControlName);                if (ValveSets != null && tempVal != null)                {                    if (tempVal.Value)                    { item.SelectedValueIndex = 0; }                    else                    {                        item.SelectedValueIndex = 1;                    }                    //case "Continue":                    //    item.SelectedValueIndex = 2;                    //    break;                }                //item.SelectedValueIndex = ValveSets[item.ControlName] == "Close" ? 0 : 1;            }                //if (MFCSets != null)                //{                //    foreach (var item in MFCSets)                //    {                //        string getMFCName = item.Replace(".Flow", "").Trim();                //        if (MFCDataList.Where(x => x.ControlName== getMFCName).FirstOrDefault() != null)                //        {                //            MFCDataList.Where(x => x.ControlName == getMFCName).FirstOrDefault().SetValueParam = MFCSets[item].SetValueParam;                //        }                //    }                //}                if (ExternalOutSets != null && ExternalOutSets.Count > 0)                {                    foreach (var item in ExternalOutSets.Keys)                    {                        switch (item)                        {                            case "EXOU1":                                EXOU1 = ExternalOutSets[item];                                break;                            case "EXOU2":                                EXOU2 = ExternalOutSets[item];                                break;                            case "EXOU3":                                EXOU3 = ExternalOutSets[item];                                break;                            case "EXOU4":                                EXOU4 = ExternalOutSets[item];                                break;                            case "EXOU5":                                EXOU5 = ExternalOutSets[item];                                break;                            case "EXOU6":                                EXOU6 = ExternalOutSets[item];                                break;                            default:                                break;                        }}                }            }        }    }
 |