using Aitex.Core.Common; using Aitex.Core.Util; using Caliburn.Micro.Core; 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 FurnaceUI.Models; namespace FurnaceUI.Views.Operations { public class WaferRobotModifyViewModel : FurnaceUIViewModelBase { public WaferRobotModifyViewModel(string module) { ModuleName = module; for (int i = 1; i <= 21; i++) { OriginModuleItems.Add($"Stocker{i}"); } for (int i = (int)QueryDataClient.Instance.Service.GetConfig("WaferRobot.SlotCount"); i > 0; i--) { WaferRobotWaferInfoItems.Add(new WaferInfoItem() { SlotID = i }); } } public string ModuleName { set; get; } public List OriginModuleItems { get; set; } = new List(); private int? _waferRobotSlot = 1; public int? WaferRobotSlot { get => _waferRobotSlot; set { _waferRobotSlot = value; NotifyOfPropertyChange(nameof(WaferRobotSlot)); } } private string _originSelectModule = "Stocker1"; public string OriginSelectModule { get => _originSelectModule; set { _originSelectModule = value; NotifyOfPropertyChange(nameof(OriginSelectModule)); } } private int? _originSlot = 1; public int? OriginSlot { get => _originSlot; set { _originSlot = value; NotifyOfPropertyChange(nameof(OriginSlot)); } } public bool SDIsChecked { get; set; } = true; public bool EDIsChecked { get; set; } public bool PIsChecked { get; set; } public bool M1IsChecked { get; set; } public bool M2IsChecked { 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 IsWaferRobotModifyEnabled { get { return (PM1Status == "Init" || PM1Status == "Idle" || PM1Status == "Error") && (RtStatus == "Init" || RtStatus == "Idle" || RtStatus == "Error"); } } private ObservableCollection _waferRobotWaferInfoItems = new ObservableCollection(); public ObservableCollection WaferRobotWaferInfoItems { get => _waferRobotWaferInfoItems; set { _waferRobotWaferInfoItems = value; NotifyOfPropertyChange(nameof(WaferRobotWaferInfoItems)); } } protected override void InvokeAfterUpdateProperty(Dictionary data) { RefreshCassetteDataTask(); } private void RefreshCassetteDataTask() { var wafers = ModuleManager.ModuleInfos[ModuleName].WaferManager.Wafers; if (wafers != null) { int iIndex = wafers.Count - 1; for (int i = 0; i < wafers.Count; i++) { if (wafers[i].WaferStatus != 0) { WaferRobotWaferInfoItems[iIndex].ModuleID = wafers[i].ModuleID; WaferRobotWaferInfoItems[iIndex].SourceName = wafers[i].SourceName; WaferRobotWaferInfoItems[iIndex].WaferStatus = wafers[i].WaferStatus; WaferRobotWaferInfoItems[iIndex].WaferType = wafers[i].WaferType.ToString(); WaferRobotWaferInfoItems[iIndex].UseCount = wafers[i].UseCount.ToString(); WaferRobotWaferInfoItems[iIndex].UseTime = wafers[i].UseTime.ToString(); WaferRobotWaferInfoItems[iIndex].UseThick = wafers[i].UseThick.ToString(); } else { WaferRobotWaferInfoItems[iIndex].ModuleID = ""; WaferRobotWaferInfoItems[iIndex].SourceName = ""; WaferRobotWaferInfoItems[iIndex].WaferStatus = 0; WaferRobotWaferInfoItems[iIndex].WaferType = ""; WaferRobotWaferInfoItems[iIndex].UseCount = ""; WaferRobotWaferInfoItems[iIndex].UseTime = ""; WaferRobotWaferInfoItems[iIndex].UseThick = ""; } iIndex--; } } } public void CreateWafer() { WaferType waferType = WaferType.None; if (SDIsChecked) waferType = WaferType.SD; else if (EDIsChecked) waferType = WaferType.ED; else if (PIsChecked) waferType = WaferType.P; 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 (WaferRobotSlot < 1 || WaferRobotSlot > (int)QueryDataClient.Instance.Service.GetConfig("WaferRobot.SlotCount")) { DialogBox.ShowWarning($"WaferRobotSlot input error,can not create,input range 1 to {(int)QueryDataClient.Instance.Service.GetConfig("WaferRobot.SlotCount")}"); return; } if (OriginSlot < 1 || OriginSlot > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount")) { DialogBox.ShowWarning($"OriginSlot input error,can not create,input range 1 to {(int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount")}"); return; } InvokeClient.Instance.Service.DoOperation("CreateWafer", $"{ModuleName}", WaferRobotSlot - 1, waferType.ToString(), OriginSelectModule, OriginSlot - 1); } public void DeleteWafer() { if (WaferRobotSlot < 1 || WaferRobotSlot > (int)QueryDataClient.Instance.Service.GetConfig("WaferRobot.SlotCount")) { DialogBox.ShowWarning($"WaferRobotSlot input error,can not delete,input range 1 to {(int)QueryDataClient.Instance.Service.GetConfig("WaferRobot.SlotCount")}"); return; } InvokeClient.Instance.Service.DoOperation("DeleteWafer", $"{ModuleName}", WaferRobotSlot - 1); } public void CassetteClose() { ((Window)GetView()).DialogResult = false; } } }