using Aitex.Core.RT.SCCore; using Caliburn.Micro; using Caliburn.Micro.Core; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.RecipeCenter; using MECF.Framework.UI.Client.CenterViews.Editors.Recipe; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using FurnaceUI.Models; using FurnaceUI.Views.Parameter; using FurnaceUI.Views.Recipes; using System.Windows.Controls; using FurnaceUI.Views.DataLog; using FurnaceUI.Client.Dialog; namespace FurnaceUI.Views.Editors { public class RecipeLayoutSetMonitorTransferViewModel : FurnaceUIViewModelBase { private Visibility _autoLayoutVisibility = Visibility.Visible; public Visibility AutoLayoutVisibility { get => _autoLayoutVisibility; set { _autoLayoutVisibility = value; NotifyOfPropertyChange(nameof(AutoLayoutVisibility)); } } private Visibility _boatSlotVisibility = Visibility.Hidden; public Visibility BoatSlotVisibility { get => _boatSlotVisibility; set { _boatSlotVisibility = value; NotifyOfPropertyChange(nameof(BoatSlotVisibility)); } } private Visibility _directCarrierVisibility = Visibility.Hidden; public Visibility DirectCarrierVisibility { get => _directCarrierVisibility; set { _directCarrierVisibility = value; NotifyOfPropertyChange(nameof(DirectCarrierVisibility)); } } private Visibility _upperProductVisibility = Visibility.Hidden; public Visibility UpperProductVisibility { get => _upperProductVisibility; set { _upperProductVisibility = value; NotifyOfPropertyChange(nameof(UpperProductVisibility)); } } private Visibility _autoCarrierVisibility = Visibility.Hidden; public Visibility AutoCarrierVisibility { get => _autoCarrierVisibility; set { _autoCarrierVisibility = value; NotifyOfPropertyChange(nameof(AutoCarrierVisibility)); } } private Dictionary MonitorTransferDict = new Dictionary(); private string _title = ""; public string Title { get => _title; set { _title = value; NotifyOfPropertyChange(nameof(Title)); } } private MonitorTransferType _dialogResultMonitorTransferType = MonitorTransferType.AutoLayout; public MonitorTransferType DialogResultMonitorTransferType { get => _dialogResultMonitorTransferType; set { _dialogResultMonitorTransferType = value; NotifyOfPropertyChange(nameof(DialogResultMonitorTransferType)); } } public bool IsSave { get; set; } private MonitorTransferType _waferChargeMonitor = MonitorTransferType.AutoLayout; public MonitorTransferType WaferChargeMonitor { get => _waferChargeMonitor; set { _waferChargeMonitor = value; NotifyOfPropertyChange(nameof(WaferChargeMonitor)); } } private string _waferChargeMonitorValue = ""; public string WaferChargeMonitorValue { get => _waferChargeMonitorValue; set { _waferChargeMonitorValue = value; NotifyOfPropertyChange(nameof(WaferChargeMonitorValue)); } } private string _transferCarrier1 = "None"; public string TransferCarrier1 { get => _transferCarrier1; set { _transferCarrier1 = value; NotifyOfPropertyChange(nameof(TransferCarrier1)); } } private string _transferCarrier2 = "None"; public string TransferCarrier2 { get => _transferCarrier2; set { _transferCarrier2 = value; NotifyOfPropertyChange(nameof(TransferCarrier2)); } } private string _transferCarrier3 = "None"; public string TransferCarrier3 { get => _transferCarrier3; set { _transferCarrier3 = value; NotifyOfPropertyChange(nameof(TransferCarrier3)); } } private string _transferCarrier4 = "None"; public string TransferCarrier4 { get => _transferCarrier4; set { _transferCarrier4 = value; NotifyOfPropertyChange(nameof(TransferCarrier4)); } } private string _transferCarrier5 = "None"; public string TransferCarrier5 { get => _transferCarrier5; set { _transferCarrier5 = value; NotifyOfPropertyChange(nameof(TransferCarrier5)); } } private string _transferCarrier6 = "None"; public string TransferCarrier6 { get => _transferCarrier6; set { _transferCarrier6 = value; NotifyOfPropertyChange(nameof(TransferCarrier6)); } } private string _transferCarrier7 = "None"; public string TransferCarrier7 { get => _transferCarrier7; set { _transferCarrier7 = value; NotifyOfPropertyChange(nameof(TransferCarrier7)); } } private string _autoCarrier = "None"; public string AutoCarrier { get => _autoCarrier; set { _autoCarrier = value; NotifyOfPropertyChange(nameof(AutoCarrier)); } } private string _returnString = ""; public string ReturnString { get => _returnString; set { _returnString = value; NotifyOfPropertyChange(nameof(ReturnString)); } } public RecipeLayoutSetMonitorTransferViewModel() { } public bool IsEnable => CGlobal.RecipeProcessEditViewEnable;//是否是View模式 public void MonitorTransferSelectClick(string cmd) { if (MonitorTransferDict.ContainsKey(cmd)) { Title = MonitorTransferDict[cmd]; } switch (cmd) { case "AutoLayout": SetSelectAutoLayout(); break; case "BoatSlot": SetSelectBoatSlot(); break; case "DirectCarrier": SetSelectDirectCarrier(); break; case "AutoCarrier": SetSelectAutoCarrier(); break; default: break; } } private void SetSelectAutoLayout() { AutoLayoutVisibility = Visibility.Visible; BoatSlotVisibility = Visibility.Hidden; DirectCarrierVisibility = Visibility.Hidden; UpperProductVisibility = Visibility.Hidden; AutoCarrierVisibility = Visibility.Hidden; DialogResultMonitorTransferType = MonitorTransferType.AutoLayout; } private void SetSelectBoatSlot() { AutoLayoutVisibility = Visibility.Hidden; BoatSlotVisibility = Visibility.Visible; DirectCarrierVisibility = Visibility.Hidden; UpperProductVisibility = Visibility.Hidden; AutoCarrierVisibility = Visibility.Hidden; DialogResultMonitorTransferType = MonitorTransferType.BoatSlot; } private void SetSelectDirectCarrier() { AutoLayoutVisibility = Visibility.Hidden; BoatSlotVisibility = Visibility.Hidden; DirectCarrierVisibility = Visibility.Visible; UpperProductVisibility = Visibility.Hidden; AutoCarrierVisibility = Visibility.Hidden; DialogResultMonitorTransferType = MonitorTransferType.DirectCarrier; } private void SetSelectAutoCarrier() { AutoLayoutVisibility = Visibility.Hidden; BoatSlotVisibility = Visibility.Hidden; DirectCarrierVisibility = Visibility.Hidden; UpperProductVisibility = Visibility.Hidden; AutoCarrierVisibility = Visibility.Visible; DialogResultMonitorTransferType = MonitorTransferType.AutoCarrier; } public string RecipeType { get; set; } protected override void OnViewLoaded(object view) { base.OnViewLoaded(view); LoadData(); LoadSetDefaultOption(view); } private void LoadData() { MonitorTransferDict.Clear(); MonitorTransferDict.Add("AutoLayout", "Set Monitor Wafer number to transfer the boat. The wafersare arranged for the locations divided the Product areaby the numbers ."); MonitorTransferDict.Add("BoatSlot", "Set the boat slot numbers to transfer Monitor Wafers."); MonitorTransferDict.Add("DirectCarrier", "Set the arrangement of Monitor Wafers between the Product carrier unit on boat."); MonitorTransferDict.Add("AutoCarrier", "Set the arrangement of Monitor wafer just under UpperSide-Dummy area.In Product area it is arrangedautomatically."); Title = MonitorTransferDict["AutoLayout"]; ListBoltSlot.Clear(); for (int i = 0; i < 30; i++) { ListBoltSlot.Add(new BoltSlot() { No = i + 1, SlotValue = 0 }); } SplitCharacter(WaferChargeMonitorValue); } private void SplitCharacter(string value) { if (string.IsNullOrEmpty(value) || !value.Contains("|")) return; string[] Strlist = value.Split('|'); if (Strlist.Length != 5) return; var subListStr = Strlist[0].Split(';'); WaferExist = subListStr[0]; FillReplace = subListStr[1]; int _wfNum = 0; int.TryParse(Strlist[1], out _wfNum); WaferNum = _wfNum; var subBoltSlotStrList = Strlist[2].Split(';'); for (int i = 0; i < subBoltSlotStrList.Length; i++) { var getBoltSlot = ListBoltSlot.Where(x => x.No == i + 1).FirstOrDefault(); if (getBoltSlot != null) { int.TryParse(subBoltSlotStrList[i], out int _boltSlotValue); getBoltSlot.SlotValue = _boltSlotValue; } } var transferCarrierStrList = Strlist[3].Split(';'); if (transferCarrierStrList.Length == 7) { TransferCarrier1 = transferCarrierStrList[0]; TransferCarrier2 = transferCarrierStrList[1]; TransferCarrier3 = transferCarrierStrList[2]; TransferCarrier4 = transferCarrierStrList[3]; TransferCarrier5 = transferCarrierStrList[4]; TransferCarrier6 = transferCarrierStrList[5]; TransferCarrier7 = transferCarrierStrList[6]; } AutoCarrier = Strlist[4]; } private void LoadSetDefaultOption(object view) { var monitorTransferView = (RecipeLayoutSetMonitorTransferView)view; switch (_waferChargeMonitor) { case MonitorTransferType.AutoLayout: monitorTransferView.RdoAutoLayout.IsChecked = true; break; case MonitorTransferType.BoatSlot: monitorTransferView.RdoBoatSlot.IsChecked = true; break; case MonitorTransferType.DirectCarrier: monitorTransferView.RdoDirectCarrier.IsChecked = true; break; case MonitorTransferType.AutoCarrier: monitorTransferView.RdoAutoCarrier.IsChecked = true; break; case MonitorTransferType.None: //monitorTransferView.RdoAutoLayout.IsChecked = true; break; default: break; } } public void TempSetSave() { IsSave = true; GetWaferChargeMonitorValue(); ((Window)GetView()).DialogResult = true; } private void GetWaferChargeMonitorValue() { string[] strReturnList = new string[5]; strReturnList[0] = $"{WaferExist};{FillReplace}"; strReturnList[1] = WaferNum.ToString(); strReturnList[2] = string.Join(";", ListBoltSlot.Select(x => x.SlotValue.ToString()).ToArray()); strReturnList[3] = $"{TransferCarrier1};{TransferCarrier2};{TransferCarrier3};{TransferCarrier4};{TransferCarrier5};{TransferCarrier6};{TransferCarrier7}"; strReturnList[4] = AutoCarrier; ReturnString = string.Join("|", strReturnList); } private string _waferExist = "None"; public string WaferExist { get => _waferExist; set { _waferExist = value; NotifyOfPropertyChange(nameof(WaferExist)); } } private string _fillReplace = "None"; public string FillReplace { get => _fillReplace; set { _fillReplace = value; NotifyOfPropertyChange(nameof(FillReplace)); } } private int _waferNum = 0; public int WaferNum { get => _waferNum; set { _waferNum = value; NotifyOfPropertyChange(nameof(WaferNum)); } } public ObservableCollection ListBoltSlot { get; set; } = new ObservableCollection(); public void TextSelectCmdMouseDown(string cmd, object sender) { var colsender = (TextBox)sender; WindowManager wm = new WindowManager(); bool? dialogReturn = false; switch (cmd) { case "WaferExist": SelectExistViewModel selectExistViewModel1 = new SelectExistViewModel(); selectExistViewModel1.ProductZeroStr = WaferExist; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel1, null, "Select"); if ((bool)dialogReturn) { WaferExist = selectExistViewModel1.DialogResultString; } break; case "FillReplace": SelectExistViewModel selectExistViewModel2 = new SelectExistViewModel(); selectExistViewModel2.ProductZeroStr = WaferExist; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel2, null, "Select"); if ((bool)dialogReturn) { FillReplace = selectExistViewModel2.DialogResultString; } break; default: break; } } public void TransferCmdMouseDown(string cmd, object sender) { var colsender = (TextBox)sender; WindowManager wm = new WindowManager(); bool? dialogReturn = false; SelectExistViewModel selectExistViewModel = new SelectExistViewModel(); switch (cmd) { case "1": selectExistViewModel.ProductZeroStr = TransferCarrier1; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select"); if ((bool)dialogReturn) { TransferCarrier1 = selectExistViewModel.DialogResultString; } break; case "2": selectExistViewModel.ProductZeroStr = TransferCarrier2; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select"); if ((bool)dialogReturn) { TransferCarrier2 = selectExistViewModel.DialogResultString; } break; case "3": selectExistViewModel.ProductZeroStr = TransferCarrier3; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select"); if ((bool)dialogReturn) { TransferCarrier3 = selectExistViewModel.DialogResultString; } break; case "4": selectExistViewModel.ProductZeroStr = TransferCarrier4; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select"); if ((bool)dialogReturn) { TransferCarrier4 = selectExistViewModel.DialogResultString; } break; case "5": selectExistViewModel.ProductZeroStr = TransferCarrier5; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select"); if ((bool)dialogReturn) { TransferCarrier5 = selectExistViewModel.DialogResultString; } break; case "6": selectExistViewModel.ProductZeroStr = TransferCarrier6; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select"); if ((bool)dialogReturn) { TransferCarrier6 = selectExistViewModel.DialogResultString; } break; case "7": selectExistViewModel.ProductZeroStr = TransferCarrier7; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select"); if ((bool)dialogReturn) { TransferCarrier7 = selectExistViewModel.DialogResultString; } break; default: break; } } public void AutoCarrierCmdMouseDown(string cmd, object sender) { var colsender = (TextBox)sender; WindowManager wm = new WindowManager(); bool? dialogReturn = false; SelectExistViewModel selectExistViewModel = new SelectExistViewModel(); switch (cmd) { case "Transfer": selectExistViewModel.ProductZeroStr = AutoCarrier; dialogReturn = wm.ShowDialogWithTitle(selectExistViewModel, null, "Select"); if ((bool)dialogReturn) { AutoCarrier = selectExistViewModel.DialogResultString; } break; default: break; } } public void TempSetCancel() { IsSave = false; ((Window)GetView()).DialogResult = false; } } public enum MonitorTransferType { AutoLayout, BoatSlot, DirectCarrier, AutoCarrier, None } public class BoltSlot : PropertyChangedBase { private int _no; public int No { get => _no; set { _no = value; NotifyOfPropertyChange("No"); } } private int _slotValue; public int SlotValue { get => _slotValue; set { _slotValue = value; NotifyOfPropertyChange("SlotValue"); } } } }