using Aitex.Core.Common; using Aitex.Core.Util; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.OperationCenter; using MECF.Framework.UI.Client.ClientBase; using OpenSEMI.ClientBase; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using FurnaceUI.Models; using FurnaceUI.DataModule; using Caliburn.Micro; using Caliburn.Micro.Core; using FurnaceUI.Views.Editors; using Newtonsoft.Json; namespace FurnaceUI.Views.Operations { public class StockerModifyViewModel : FurnaceUIViewModelBase { public StockerModifyViewModel() { //ModuleName = module; _cassetteSlot = (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"); for (int i = _cassetteSlot; i > 0; i--) { StockerWaferInfoItems.Add(new WaferInfoItem() { SlotID = i }); } } public string ModuleName { set; get; } = "Stocker1"; private int? _slotFrom = 1; public int? SlotFrom { get { return _slotFrom; } set { _slotFrom = value; NotifyOfPropertyChange("SlotFrom"); } } private int? _slotTo = 25; public int? SlotTo { get { return _slotTo; } set { _slotTo = value; NotifyOfPropertyChange("SlotTo"); } } private string _lotID; public string LotID { get { return _lotID; } set { _lotID = value; NotifyOfPropertyChange("LotID"); } } [Subscription("Stocker1.LotID")] public string Stocker1LotID { get; set; } [Subscription("Stocker2.LotID")] public string Stocker2LotID { get; set; } [Subscription("Stocker3.LotID")] public string Stocker3LotID { get; set; } [Subscription("Stocker4.LotID")] public string Stocker4LotID { get; set; } [Subscription("Stocker5.LotID")] public string Stocker5LotID { get; set; } [Subscription("Stocker6.LotID")] public string Stocker6LotID { get; set; } [Subscription("Stocker7.LotID")] public string Stocker7LotID { get; set; } [Subscription("Stocker8.LotID")] public string Stocker8LotID { get; set; } [Subscription("Stocker9.LotID")] public string Stocker9LotID { get; set; } [Subscription("Stocker10.LotID")] public string Stocker10LotID { get; set; } [Subscription("Stocker11.LotID")] public string Stocker11LotID { get; set; } [Subscription("Stocker12.LotID")] public string Stocker12LotID { get; set; } [Subscription("Stocker13.LotID")] public string Stocker13LotID { get; set; } [Subscription("Stocker14.LotID")] public string Stocker14LotID { get; set; } [Subscription("Stocker15.LotID")] public string Stocker15LotID { get; set; } [Subscription("Stocker16.LotID")] public string Stocker16LotID { get; set; } [Subscription("Stocker17.LotID")] public string Stocker17LotID { get; set; } [Subscription("Stocker18.LotID")] public string Stocker18LotID { get; set; } public bool SDIsChecked { get; set; } public bool EDIsChecked { get; set; } public bool PIsChecked { get; set; } public bool MIsChecked { get; set; } public bool M1IsChecked { get; set; } public bool M2IsChecked { get; set; } public Dictionary stockerWaferTypeDict { get; set; } public bool TIsChecked { get; set; } public bool XDIsChecked { get; set; } [Subscription("Stocker1.CassettePresent")] public bool IsCassettePresent { get; set; } [Subscription("Rt.Status")] public string RtStatus { get; set; } [Subscription("PM1.Status")] public string PM1Status { get; set; } public bool FirstPIsChecked { get; set; } = true; public bool IsStockerModifyEnabled { get { return (PM1Status == "Init" || PM1Status == "Idle" || PM1Status == "Error") && (RtStatus == "Init" || RtStatus == "Idle" || RtStatus == "AutoIdle" || RtStatus == "Error"); } } private int _cassetteSlot = 0; private ObservableCollection _stockerWaferInfoItems = new ObservableCollection(); public ObservableCollection StockerWaferInfoItems { get => _stockerWaferInfoItems; set { _stockerWaferInfoItems = value; NotifyOfPropertyChange(nameof(StockerWaferInfoItems)); } } private List _stockerWaferType; public List StockerWaferType { get => _stockerWaferType; set { _stockerWaferType = value; NotifyOfPropertyChange(nameof(StockerWaferType)); } } protected override void OnActivate() { base.OnActivate(); SlotTo = (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"); var type = (string)QueryDataClient.Instance.Service.GetConfig($"System.Stocker.{ModuleName}WaferType"); WaferType waferType = WaferType.None; Enum.TryParse(type, out waferType); StockerWaferType = new List(); stockerWaferTypeDict = new Dictionary(); for (int i = 1; i <= 18; i++) { var dataType = (string)QueryDataClient.Instance.Service.GetConfig($"System.Stocker.Stocker{i}WaferType").ToString(); var stockerWaferType = dataType.Replace("1", "").Replace("2", ""); var item = stockerWaferType.ToString() + i; StockerWaferType.Add(item); stockerWaferTypeDict.Add(item, dataType); } switch (waferType) { case WaferType.SD: SDIsChecked = true; EDIsChecked = false; PIsChecked = false; MIsChecked = false; TIsChecked = false; XDIsChecked = false; M1IsChecked = false; M2IsChecked = false; break; case WaferType.ED: SDIsChecked = false; EDIsChecked = true; PIsChecked = false; MIsChecked = false; TIsChecked = false; XDIsChecked = false; M1IsChecked = false; M2IsChecked = false; break; case WaferType.P: SDIsChecked = false; EDIsChecked = false; PIsChecked = true; MIsChecked = false; TIsChecked = false; XDIsChecked = false; M1IsChecked = false; M2IsChecked = false; break; case WaferType.M: SDIsChecked = false; EDIsChecked = false; PIsChecked = false; MIsChecked = true; TIsChecked = false; XDIsChecked = false; M1IsChecked = false; M2IsChecked = false; break; case WaferType.M1: M1IsChecked = true; M2IsChecked = false; SDIsChecked = false; EDIsChecked = false; PIsChecked = false; MIsChecked = false; TIsChecked = false; XDIsChecked = false; break; case WaferType.M2: M1IsChecked = false; M2IsChecked = true; SDIsChecked = false; EDIsChecked = false; PIsChecked = false; MIsChecked = false; TIsChecked = false; XDIsChecked = false; break; case WaferType.T: SDIsChecked = false; EDIsChecked = false; PIsChecked = false; MIsChecked = false; TIsChecked = true; XDIsChecked = false; M1IsChecked = false; M2IsChecked = false; break; case WaferType.XD: SDIsChecked = false; EDIsChecked = false; PIsChecked = false; MIsChecked = false; TIsChecked = false; XDIsChecked = true; M1IsChecked = false; M2IsChecked = false; break; case WaferType.None: SDIsChecked = false; EDIsChecked = false; PIsChecked = true; MIsChecked = false; TIsChecked = false; XDIsChecked = false; M1IsChecked = false; M2IsChecked = false; break; } } public void StockModify(string stocker, object obj) { ModuleName = stocker; GetLotID(); SetFirstPIsCheck(); RadioButton radioButton = obj as RadioButton; var stockerTypeName = radioButton.Content.ToString(); var stockerTypeValue = stockerWaferTypeDict[stockerTypeName].ToString(); if (stockerTypeValue.StartsWith("P")) PIsChecked = true; if (stockerTypeValue.StartsWith("SD")) SDIsChecked = true; if (stockerTypeValue.StartsWith("ED")) EDIsChecked = true; if (stockerTypeValue.Equals("M1")) M1IsChecked = true; if (stockerTypeValue.Equals("M2")) M2IsChecked = true; } private void SetFirstPIsCheck() { if ("Stocker1".Equals(ModuleName)) FirstPIsChecked = true; else FirstPIsChecked = false; } public void GetLotID() { switch (ModuleName) { case "Stocker1": LotID = Stocker1LotID; break; case "Stocker2": LotID = Stocker2LotID; break; case "Stocker3": LotID = Stocker3LotID; break; case "Stocker4": LotID = Stocker4LotID; break; case "Stocker5": LotID = Stocker5LotID; break; case "Stocker6": LotID = Stocker6LotID; break; case "Stocker7": LotID = Stocker7LotID; break; case "Stocker8": LotID = Stocker8LotID; break; case "Stocker9": LotID = Stocker9LotID; break; case "Stocker10": LotID = Stocker10LotID; break; case "Stocker11": LotID = Stocker11LotID; break; case "Stocker12": LotID = Stocker12LotID; break; case "Stocker13": LotID = Stocker13LotID; break; case "Stocker14": LotID = Stocker14LotID; break; case "Stocker15": LotID = Stocker15LotID; break; case "Stocker16": LotID = Stocker16LotID; break; case "Stocker17": LotID = Stocker17LotID; break; case "Stocker18": LotID = Stocker18LotID; break; default: break; } } protected override void InvokeAfterUpdateProperty(Dictionary data) { RefreshCassetteDataTask(); } private void RefreshCassetteDataTask() { var wafers = ModuleManager.ModuleInfos[ModuleName].WaferManager.Wafers; if (wafers != null) { for (int i = 0; i < wafers.Count; i++) { if (wafers[i].WaferStatus != 0) { StockerWaferInfoItems[i].ModuleID = wafers[i].ModuleID; StockerWaferInfoItems[i].SourceName = wafers[i].SourceName; StockerWaferInfoItems[i].WaferStatus = wafers[i].WaferStatus; StockerWaferInfoItems[i].WaferType = wafers[i].WaferType.ToString(); StockerWaferInfoItems[i].UseCount = wafers[i].UseCount.ToString(); StockerWaferInfoItems[i].UseTime = wafers[i].UseTime.ToString(); StockerWaferInfoItems[i].UseThick = wafers[i].UseThick.ToString(); } else { StockerWaferInfoItems[i].ModuleID = ""; StockerWaferInfoItems[i].SourceName = ""; StockerWaferInfoItems[i].WaferStatus = 0; StockerWaferInfoItems[i].WaferType = ""; StockerWaferInfoItems[i].UseCount = ""; StockerWaferInfoItems[i].UseTime = ""; StockerWaferInfoItems[i].UseThick = ""; } } } } public void CreateSlot() { WaferType waferType = WaferType.None; if (SDIsChecked) waferType = WaferType.SD; else if (EDIsChecked) waferType = WaferType.ED; else if (PIsChecked) waferType = WaferType.P; //else if (MIsChecked) // waferType = WaferType.M; else if (M1IsChecked) waferType = WaferType.M1; else if (M2IsChecked) waferType = WaferType.M2; else if (XDIsChecked) waferType = WaferType.XD; else if (TIsChecked) waferType = WaferType.T; if (SlotFrom > SlotTo || SlotTo > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount") || SlotFrom < 1) { DialogBox.ShowWarning("input error,can not delete"); return; } InvokeClient.Instance.Service.DoOperation("CreateCassetteWafer", $"{ModuleName}", SlotFrom, SlotTo, waferType.ToString()); } public void DeleteSlot() { if (SlotFrom > SlotTo || SlotTo > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount") || SlotFrom < 1) { DialogBox.ShowWarning("input error,can not create"); return; } InvokeClient.Instance.Service.DoOperation("DeleteCassetteWafer", $"{ModuleName}", SlotFrom, SlotTo); } public void CreateAll() { WaferType waferType = WaferType.None; if (SDIsChecked) waferType = WaferType.SD; else if (EDIsChecked) waferType = WaferType.ED; else if (PIsChecked) waferType = WaferType.P; //else if (MIsChecked) // waferType = WaferType.M; else if (M1IsChecked) waferType = WaferType.M1; else if (M2IsChecked) waferType = WaferType.M2; else if (XDIsChecked) waferType = WaferType.XD; else if (TIsChecked) waferType = WaferType.T; InvokeClient.Instance.Service.DoOperation("CreateCassetteWafer", $"{ModuleName}", 1, (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"), waferType.ToString()); } public void DeleteAll() { InvokeClient.Instance.Service.DoOperation("DeleteCassetteWafer", $"{ModuleName}", 1, (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount")); } public void CreateCarrier() { WaferType waferType = WaferType.None; if (SDIsChecked) waferType = WaferType.SD; else if (EDIsChecked) waferType = WaferType.ED; else if (PIsChecked) waferType = WaferType.P; //else if (MIsChecked) // waferType = WaferType.M; else if (M1IsChecked) waferType = WaferType.M1; else if (M2IsChecked) waferType = WaferType.M2; else if (XDIsChecked) waferType = WaferType.XD; else if (TIsChecked) waferType = WaferType.T; InvokeClient.Instance.Service.DoOperation("System.CreateCarrier", $"{ModuleName}", 1, waferType.ToString()); } public void DeleteCarrier() { InvokeClient.Instance.Service.DoOperation("System.DeleteCarrier", $"{ModuleName}", 1); } public void SetLotID(string lotID) { LotID = lotID; InvokeClient.Instance.Service.DoOperation("System.SetLotID", $"{ModuleName}", lotID); } public void CassetteClose() { ((Window)GetView()).DialogResult = false; } public void DummyWaferEdit() { var dummyTypes = GlobalDataManager.Instance.WaferTypes.Values.Where(r => r.IsDummy).Select(r => r.Name).ToList(); if (StockerWaferInfoItems.Any(r => dummyTypes.Contains(r.WaferType))) { var windowManager = IoC.Get(); DummyWaferUseParameterEditViewModel waferEditView = new DummyWaferUseParameterEditViewModel(StockerWaferInfoItems, ModuleName); (windowManager as WindowManager)?.ShowDialogWithTitle(waferEditView, null, "Dummywafer Edit"); } } } }