| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 | using System;using System.Collections.Generic;using System.ComponentModel;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;using MECF.Framework.Common.Utilities;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,        [Description("NOFOUP")]        NOFOUP = 5,        [Description("READY")]        READY = 10,        [Description("W.CHARG")]        WCHARG = 20,        [Description("ON.BOAT")]        ONBOAT = 30,        [Description("W.DCHRG")]        WDCHRG = 40,        [Description("PRC.END")]        PRCEND = 50,        [Description("SERRE_1")]        SERRE1 = 60,        [Description("SERRE_2")]        SERRE2 = 70,        [Description("SERRE_3")]        SERRE3 = 80,        [Description("MOVECST")]        MOVECST = 90,        [Description("TRAKCST")]        TRAKCST = 100,        [Description("MAPPING")]        MAPPING = 110,    }    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<string, bool> ProcessStatus { get; set; }        [DataMember]        public SerializableDictionary<string, string> 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; }        [DataMember]        public int PortID { get; set; }        public int WaferCount        {            get { return Wafers.Where(x => x != null && !x.IsEmpty).ToArray().Length; }        }        public object Job { get; set; }        [DataMember]        public string UICarrierType { get; set; } = "P1";        [DataMember]        public bool UICarrierTypeVisibility { get; set; } = true;        [DataMember]        public string UICarrierWaferCount { get; set; } = "(0)";        [DataMember]        public bool UICarrierWaferCountVisibility { get; set; } = true;        [DataMember]        public string UICarrierStatus { get { return UICarrierStatusEnum.ToDescription(); } set { } }        [DataMember]        public CarrierStatus UICarrierStatusEnum { get; set; }        [DataMember]        public bool UICarrierStatusVisibility { get; set; } = true;        [DataMember]        public string UICarrierColor { get; set; } = "#ccc";        [DataMember]        public bool UICarrierColorVisibility { get; set; } = true;        [DataMember]        public bool UIStockerExitFoup { get; set; } = false;        [DataMember]        public bool UIExitFoup { get; set; } = false;        public T GetProcessJob<T>()        {            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<string, bool>();            this.Attributes = new SerializableDictionary<string, string>();            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;            this.UICarrierColor = "#ccc";            this.UICarrierColorVisibility = true;            this.UICarrierStatus = CarrierStatus.READY.ToDescription();            this.UICarrierStatusEnum = CarrierStatus.READY;            this.UICarrierStatusVisibility = true;            this.UICarrierType = "P1";            this.UICarrierTypeVisibility = true;            this.UICarrierWaferCount = "(0)";            this.UICarrierWaferCountVisibility = true;            this.UIStockerExitFoup = false;            this.UIExitFoup = false;            this.PortID = 0;        }        public CarrierInfo(int capacity)        {            List<WaferInfo> waferList = new List<WaferInfo>();            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<string, bool>();            Attributes = new SerializableDictionary<string, string>();        }        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;            this.UICarrierColor = source.UICarrierColor;            this.UICarrierColorVisibility = source.UICarrierColorVisibility;            this.UICarrierStatus = source.UICarrierStatus;            this.UICarrierStatusVisibility = source.UICarrierStatusVisibility;            this.UICarrierType = source.UICarrierType;            this.UICarrierTypeVisibility = source.UICarrierTypeVisibility;            this.UICarrierWaferCount = source.UICarrierWaferCount;            this.UICarrierWaferCountVisibility = source.UICarrierWaferCountVisibility;            this.UIStockerExitFoup = source.UIStockerExitFoup;            this.UICarrierStatusEnum = source.UICarrierStatusEnum;            this.UIExitFoup = source.UIExitFoup;            this.PortID = source.PortID;        }    }}
 |