using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using Aitex.Core.Common; using Aitex.Core.Util; using MECF.Framework.Common.CommonData; using MECF.Framework.Common.Equipment; namespace MECF.Framework.Common.SubstrateTrackings { public enum ProcessJobStateEnum { pjCREATED = -1, pjQUEUED = 0, pjSETTING_UP = 1, pjWAITING_FOR_START = 2, pjPROCESSING = 3, pjPROCESS_COMPLETED = 4, pjRESERVED5 = 5, pjPAUSING = 6, pjPAUSED = 7, pjSTOPPING = 8, pjABORTING = 9, pjSTOPPED = 10, pjABORTED = 11, pjPROCESSJOB_COMPLETED = 12, } public enum CarrierStatus { Empty = 0, Normal = 1, } public enum CarrierType { None, P,//Production wafer M,//Monitor wafer M1,//Monitor wafer M2,//Monitor wafer SD,//Side dummy wafer ED,//Extra dummy wafer XD,//Expert dummy wafer T,//Test wafer } [Serializable] [DataContract] public class CarrierInfo : NotifiableItem { public bool IsEmpty { get { return Status == CarrierStatus.Empty; } } private CarrierStatus status; [DataMember] public CarrierStatus Status { get { return status; } set { status = value; InvokePropertyChanged(nameof(Status)); } } [DataMember] public Guid InnerId { get; set; } [DataMember] public string Name { get; set; } public object ProcessJob; [DataMember] public string CarrierId { get; set; } [DataMember] public int StockerIndex { get; set; } [DataMember] public string Rfid { get; set; } [DataMember] public string LotId { get; set; } [DataMember] public string ProductCategory { get; set; } [DataMember] public WaferInfo[] Wafers { get; set; } [DataMember] public SerializableDictionary ProcessStatus { get; set; } [DataMember] public SerializableDictionary Attributes { get; set; } [DataMember] public bool IsStart { get; set; } [DataMember] public DateTime LoadTime { get; set; } [DataMember] public string JobSelectedRecipeName { get; set; } [DataMember] public int Priority { get; set; } [DataMember] public ModuleName InternalModuleName { get; set; } //For Internal carrier only [DataMember] public WaferSize CarrierWaferSize { get; set; } [DataMember] public bool IsProcessCompleted { get; set; } [DataMember] public bool IsVertical { get; set; } [DataMember] public bool HasWaferIn { get; set; } [DataMember] public int NextSequenceStep { get; set; } [DataMember] public CarrierType CarrierType { get; set; } [DataMember] public bool IsMapped { get; set; } [DataMember] public bool IsMapOK { get; set; } public int WaferCount { get { return Wafers.Where(x => x != null && !x.IsEmpty).ToArray().Length; } } public object Job { get; set; } public T GetProcessJob() { return (T)ProcessJob; } public bool IsProcessed(string module) { return ProcessStatus.ContainsKey(module) && ProcessStatus[module]; } public void Clear() { this.Status = CarrierStatus.Empty; this.InnerId = Guid.Empty; this.ProcessJob = null; this.Name = ""; this.IsStart = false; this.CarrierId = ""; this.Rfid = ""; this.JobSelectedRecipeName = ""; this.LotId = ""; this.ProductCategory = ""; this.ProcessStatus = new SerializableDictionary(); this.Attributes = new SerializableDictionary(); this.Priority = 0; this.HasWaferIn = false; this.IsProcessCompleted = false; this.IsVertical = false; this.NextSequenceStep = -1; this.Job = null; this.CarrierType = CarrierType.None; this.IsMapped = false; this.IsMapOK = false; } public CarrierInfo(int capacity) { List waferList = new List(); for (int i = 0; i < capacity; i++) { waferList.Add(new WaferInfo((i+1).ToString())); } Wafers = waferList.ToArray(); InnerId = Guid.Empty; Status = CarrierStatus.Empty; ProcessStatus = new SerializableDictionary(); Attributes = new SerializableDictionary(); } public void CopyInfo(CarrierInfo source) { this.CarrierId = source.CarrierId; this.InnerId = source.InnerId; this.Attributes = source.Attributes; this.CarrierId = source.CarrierId; this.Rfid = source.Rfid; this.IsStart = source.IsStart; this.JobSelectedRecipeName = source.JobSelectedRecipeName; this.LoadTime = source.LoadTime; this.LotId = source.LotId; this.Name = source.Name; this.ProcessStatus = source.ProcessStatus; this.Status = source.status; this.ProductCategory = source.ProductCategory; this.Wafers = source.Wafers; this.ProcessJob = source.ProcessJob; this.Priority = source.Priority; this.CarrierWaferSize = source.CarrierWaferSize; this.InternalModuleName = source.InternalModuleName; this.HasWaferIn = source.HasWaferIn; this.IsProcessCompleted = source.IsProcessCompleted; this.IsVertical = source.IsVertical; this.NextSequenceStep = source.NextSequenceStep; this.Job = source.Job; this.CarrierType = source.CarrierType; this.IsMapped = source.IsMapped; this.IsMapOK = source.IsMapOK; } } }