using System; using System.Runtime.Serialization; using MECF.Framework.Common.CommonData; using MECF.Framework.Common.Jobs; namespace Aitex.Core.Common { [Serializable] [DataContract] public class WaferInfoRt : NotifiableItem { private string procesjobid; private string controljobid; private SubstrateTransportStatus substtransstatus; private EnumE90Status Subste90status; private SubstHistory[] substhists; private string waferID; private string _waferOrigin; private string hostlaserMark1; private string hostlaserMark2; private string laserMarker; private string t7Code; private string _laserMarkerScore; private string _t7CodeScore; private string _imageFileName; private string _imageFilePath; private WaferStatus status; private WaferTrayStatus trayState = WaferTrayStatus.Empty; private bool isChecked; private EnumWaferProcessStatus processState; private bool isSource; private bool isDestination; [DataMember] public string ProcessJobID { get => procesjobid; set { procesjobid = value; InvokePropertyChanged("ProcessJobID"); } } [DataMember] public string ControlJobID { get => controljobid; set { controljobid = value; InvokePropertyChanged("ControlJobID"); } } [DataMember] public SubstrateTransportStatus SubstTransStatus { get => substtransstatus; set { substtransstatus = value; InvokePropertyChanged("SubstTransStatus"); } } [DataMember] public EnumE90Status SubstE90Status { get => Subste90status; set { Subste90status = value; InvokePropertyChanged("SubstE90Status"); } } [DataMember] public SubstHistory[] SubstHists { get => substhists; set { substhists = value; InvokePropertyChanged("SubstHists"); } } public bool IsEmpty => Status == WaferStatus.Empty; [DataMember] public string WaferID { get => waferID; set { waferID = value; InvokePropertyChanged("WaferID"); } } [DataMember] public string WaferOrigin { get => _waferOrigin; set { _waferOrigin = value; InvokePropertyChanged("WaferOrigin"); } } [DataMember] public string HostLaserMark1 { get => hostlaserMark1; set { hostlaserMark1 = value; InvokePropertyChanged("HostLaserMark1"); } } [DataMember] public string HostLaserMark2 { get => hostlaserMark2; set { hostlaserMark2 = value; InvokePropertyChanged("HostLaserMark2"); } } [DataMember] public string LaserMarker { get => laserMarker; set { laserMarker = value; InvokePropertyChanged("LaserMarker"); } } [DataMember] public string T7Code { get => t7Code; set { t7Code = value; InvokePropertyChanged("T7Code"); } } [DataMember] public string LaserMarkerScore { get => _laserMarkerScore; set { _laserMarkerScore = value; InvokePropertyChanged("LaserMarker1Score"); } } [DataMember] public string T7CodeScore { get => _t7CodeScore; set { _t7CodeScore = value; InvokePropertyChanged("T7CodeScore"); } } [DataMember] public string ImageFileName { get => _imageFileName; set { _imageFileName = value; InvokePropertyChanged("ImageFileName"); } } [DataMember] public string ImageFilePath { get => _imageFilePath; set { _imageFilePath = value; InvokePropertyChanged("ImageFilePath"); } } [DataMember] public string LotId { get; set; } [DataMember] public string TransFlag { get; set; } [DataMember] public WaferStatus Status { get => status; set { status = value; InvokePropertyChanged("Status"); } } [DataMember] public WaferTrayStatus TrayState { get => trayState; set { trayState = value; InvokePropertyChanged("TrayState"); } } [DataMember] public string CurrentCarrierID { get; set; } [DataMember] public int Station { get; set; } [DataMember] public int Slot { get; set; } [DataMember] public int TrayUsedForWhichPM { get; set; } [DataMember] public int TrayOriginStation { get; set; } [DataMember] public int TrayOriginSlot { get; set; } [DataMember] public string TrayBelongTo { get; set; } [DataMember] public int OriginStation { get; set; } [DataMember] public int OriginSlot { get; set; } [DataMember] public string OriginCarrierID { get; set; } [DataMember] public int DestinationStation { get; set; } [DataMember] public string DestinationCarrierID { get; set; } [DataMember] public int DestinationSlot { get; set; } [DataMember] public int NextStation { get; set; } [DataMember] public int NextStationSlot { get; set; } [DataMember] public int Notch { get; set; } [DataMember] public WaferSize Size { get; set; } public bool IsChecked { get => isChecked; set { isChecked = value; InvokePropertyChanged("IsChecked"); } } [DataMember] public string PPID { get; set; } [DataMember] public EnumWaferProcessStatus ProcessState { get => processState; set { processState = value; InvokePropertyChanged("ProcessStatus"); } } [DataMember] public bool IsSource { get => isSource; set { isSource = value; InvokePropertyChanged("IsSource"); } } [DataMember] public bool IsDestination { get => isDestination; set { isDestination = value; InvokePropertyChanged("IsDestination"); } } [DataMember] public Guid InnerId { get; set; } [DataMember] public ProcessJobInfo ProcessJob { get; set; } [DataMember] public int NextSequenceStep { get; set; } [DataMember] public int TrayProcessCount { get; set; } [DataMember] public bool HasWarning { get; set; } public WaferInfoRt() { InnerId = Guid.Empty; } public WaferInfoRt(string waferID, WaferStatus status = WaferStatus.Empty) : this() { WaferID = waferID; Status = status; TrayState = WaferTrayStatus.Empty; } public void Update(WaferInfoRt source) { InnerId = source.InnerId; WaferID = source.waferID; WaferOrigin = source.WaferOrigin; LaserMarker = source.LaserMarker; LaserMarkerScore = source.LaserMarkerScore; T7Code = source.T7Code; T7CodeScore = source.T7CodeScore; Status = source.Status; ProcessState = source.ProcessState; IsSource = source.IsSource; IsDestination = source.IsDestination; Station = source.Station; Slot = source.Slot; OriginStation = source.OriginStation; OriginSlot = source.OriginSlot; if (source.OriginCarrierID != null) { OriginCarrierID = source.OriginCarrierID; } if (source.DestinationCarrierID != null) { DestinationCarrierID = source.DestinationCarrierID; } DestinationStation = source.DestinationStation; DestinationSlot = source.DestinationSlot; NextStation = source.NextStation; NextStationSlot = source.NextStationSlot; Notch = source.Notch; Size = source.Size; TransFlag = source.TransFlag; LotId = source.LotId; PPID = source.PPID; ProcessJobID = source.ProcessJobID; ProcessJob = source.ProcessJob; NextSequenceStep = source.NextSequenceStep; SubstHists = source.SubstHists; HasWarning = source.HasWarning; SubstE90Status = source.SubstE90Status; PPID = source.PPID; HostLaserMark1 = source.HostLaserMark1; HostLaserMark2 = source.HostLaserMark2; if (TrayState == WaferTrayStatus.Empty && source.TrayState != 0) { TrayState = source.TrayState; TrayUsedForWhichPM = source.TrayUsedForWhichPM; TrayOriginStation = source.TrayOriginStation; TrayOriginSlot = source.TrayOriginSlot; TrayProcessCount = source.TrayProcessCount; } } public WaferInfoRt Clone() { return new WaferInfoRt { InnerId = InnerId, WaferID = waferID, WaferOrigin = WaferOrigin, LaserMarker = LaserMarker, LaserMarkerScore = LaserMarkerScore, T7Code = T7Code, T7CodeScore = T7CodeScore, Status = Status, ProcessState = ProcessState, IsSource = IsSource, IsDestination = IsDestination, Station = Station, Slot = Slot, OriginStation = OriginStation, OriginSlot = OriginSlot, OriginCarrierID = OriginCarrierID, DestinationCarrierID = DestinationCarrierID, DestinationStation = DestinationStation, DestinationSlot = DestinationSlot, NextStation = NextStation, NextStationSlot = NextStationSlot, Notch = Notch, Size = Size, TransFlag = TransFlag, LotId = LotId, ProcessJob = ProcessJob, NextSequenceStep = NextSequenceStep, SubstHists = SubstHists, HasWarning = HasWarning, SubstE90Status = SubstE90Status, TrayUsedForWhichPM = TrayUsedForWhichPM, TrayState = TrayState, TrayOriginStation = TrayOriginSlot, TrayOriginSlot = TrayOriginSlot, TrayProcessCount = TrayProcessCount, PPID = PPID }; } public void SetEmpty() { InnerId = Guid.Empty; WaferID = string.Empty; WaferOrigin = string.Empty; LaserMarker = string.Empty; LaserMarkerScore = string.Empty; T7Code = string.Empty; T7CodeScore = string.Empty; Status = WaferStatus.Empty; ProcessState = EnumWaferProcessStatus.Idle; IsSource = false; IsDestination = false; Station = 0; Slot = 0; OriginStation = 0; OriginSlot = 0; DestinationStation = 0; DestinationSlot = 0; Notch = 0; TransFlag = string.Empty; LotId = string.Empty; ProcessJob = null; NextSequenceStep = 0; HasWarning = false; PPID = ""; TrayState = WaferTrayStatus.Empty; TrayUsedForWhichPM = 0; TrayOriginStation = 0; TrayOriginSlot = 0; TrayProcessCount = 0; } } }