using System; using System.Collections.Generic; using System.Runtime.Serialization; namespace MECF.Framework.Common.CommonData { [DataContract] [Serializable] public class HistoryCarrierData { [DataMember] public string Guid { get; set; } [DataMember] public string Rfid { get; set; } [DataMember] public string Station { get; set; } [DataMember] public string LoadTime { get; set; } [DataMember] public string UnloadTime { get; set; } [DataMember] public string LotId { get; set; } [DataMember] public string ProductCategory { get; set; } } [DataContract] [Serializable] public class HistoryProcessData { [DataMember] public string Guid { get; set; } [DataMember] public string StartTime { get; set; } [DataMember] public string EndTime { get; set; } [DataMember] public string RecipeName { get; set; } [DataMember] public string Result { get; set; } } [DataContract] [Serializable] public class HistoryWaferData { [DataMember] public string Guid { get; set; } [DataMember] public string CreateTime { get; set; } [DataMember] public string DeleteTime { get; set; } [DataMember] public string Station { get; set; } [DataMember] public string Slot { get; set; } [DataMember] public string LaserMarker { get; set; } [DataMember] public string T7Code { get; set; } [DataMember] public string CarrierGuid { get; set; } [DataMember] public string WaferId { get; set; } } [DataContract] [Serializable] public class HistoryMoveData { [DataMember] public string WaferGuid { get; set; } [DataMember] public string ArriveTime { get; set; } [DataMember] public string Station { get; set; } [DataMember] public string Slot { get; set; } [DataMember] public string Result { get; set; } } [DataContract] [Serializable] public class HistoryJobMoveData { [DataMember] public string JobGuid { get; set; } [DataMember] public string Station { get; set; } [DataMember] public string ArriveTime { get; set; } [DataMember] public string LeaveTime { get; set; } } [DataContract] [Serializable] public class HistoryBatData { [DataMember] public string Guid { get; set; } [DataMember] public string StartTime { get; set; } [DataMember] public string EndTime { get; set; } [DataMember] public string RecipeName { get; set; } [DataMember] public string Result { get; set; } } [DataContract] [Serializable] public class HistoryFfuDiffPressureData { [DataMember] public string Time { get; set; } [DataMember] public string FFU1Speed { get; set; } [DataMember] public string FFU2Speed { get; set; } [DataMember] public string DiffPressure1 { get; set; } [DataMember] public string DiffPressure2 { get; set; } } public interface ITreeItem where T : ITreeItem, new() { string ID { set; get; } } [DataContract] [Serializable] public enum WaferHistoryItemType { [EnumMember] None, [EnumMember] Lot, [EnumMember] Wafer, [EnumMember] Recipe } [DataContract] [Serializable] public class WaferHistoryMovement { [DataMember] public string Source { get; set; } [DataMember] public string Destination { get; set; } [DataMember] public string InTime { get; set; } } [DataContract] [Serializable] public class WaferHistoryWafer : WaferHistoryItem { [DataMember] public string ProcessJob { get; set; } [DataMember] public string Sequence { get; set; } [DataMember] public string Status { get; set; } public DateTime? ProcessStartTime { get; set; } [DataMember] public DateTime? ProcessEndTime { get; set; } //[DataMember] //public string LotID { get; set; } [DataMember] public string SlotID { get; set; } public string ProcessDuration { get { if (!ProcessStartTime.HasValue || !ProcessEndTime.HasValue) return string.Empty; return ProcessEndTime.Value.Subtract(ProcessStartTime.Value).ToString(@"hh\:mm\:ss"); } } } [DataContract] [Serializable] public class RecipeStep { [DataMember] public int No { get; set; } [DataMember] public string Name { get; set; } [DataMember] public DateTime StartTime { get; set; } [DataMember] public DateTime EndTime { get; set; } [DataMember] public string ActualTime { get; set; } [DataMember] public string SettingTime { get; set; } } [DataContract] [Serializable] public class RecipeStepFdcData { [DataMember] public int StepNumber { get; set; } [DataMember] public string Name { get; set; } [DataMember] public float SetPoint { get; set; } [DataMember] public int SampleCount { get; set; } [DataMember] public float MinValue { get; set; } [DataMember] public float MaxValue { get; set; } [DataMember] public float StdValue { get; set; } [DataMember] public float MeanValue { get; set; } } [DataContract] [Serializable] public class WaferHistoryRecipe : WaferHistoryItem { [DataMember] public string Chamber { get; set; } [DataMember] public string Recipe { get; set; } [DataMember] public string SettingTime { get; set; } [DataMember] public string ActualTime { get; set; } [DataMember] public List Steps { get; set; } [DataMember] public List Fdcs { get; set; } } public class WaferHistoryRecipe2 : WaferHistoryItem { [DataMember] public string Chamber { get; set; } [DataMember] public string Recipe { get; set; } [DataMember] public string SettingTime { get; set; } [DataMember] public string ActualTime { get; set; } [DataMember] public List Steps { get; set; } public object SelectedLot { get; set; } public object SelectedWafer { get; set; } public object SelectedProcess { get; set; } public bool IsToCompare { get; set; } = false; public object Cache { get; set; }// 临时的 } [DataContract] [Serializable] public class WaferHistoryLot : WaferHistoryItem { [DataMember] public string CarrierID { get; set; } [DataMember] public string Rfid { get; set; } [DataMember] public string InputPort { get; set; } [DataMember] public int WaferCount { get; set; } [DataMember] public int FaultWaferCount { get; set; } } [DataContract] [Serializable] public class WaferHistorySecquence : WaferHistoryItem { [DataMember] public string SecquenceName { get; set; } [DataMember] public string Recipe { get; set; } [DataMember] public string SecQuenceStartTime { get; set; } [DataMember] public string SecQuenceEndTime { get; set; } [DataMember] public string ActualTime { get; set; } } [DataContract] [Serializable] public class WaferHistoryItem : ITreeItem { [DataMember] public WaferHistoryItemType Type { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string ID { get; set; } [DataMember] public DateTime StartTime { get; set; } [DataMember] public DateTime EndTime { get; set; } public string Duration => EndTime.CompareTo(StartTime) < 0 ? "" : EndTime.Subtract(StartTime).ToString(@"hh\:mm\:ss"); public string ItemInfo => string.IsNullOrEmpty(Name) ? "" : Name; [DataMember] public ITreeItem SubItems { get; set; } [DataMember] public string RfID { get; set; } [DataMember] public string LotID { get; set; } } [DataContract] [Serializable] public class WaferHistoryMetrology { [DataMember] public string dataname { get; set; } [DataMember] public string datavalue { get; set; } [DataMember] public string processtime { get; set; } [DataMember] public string stationname { get; set; } } [DataContract] [Serializable] public class FdcDataItem { [DataMember] public string Name { get; set; } [DataMember] public float MaxValue { get; set; } [DataMember] public float MinValue { get; set; } [DataMember] public float MeanValue { get { if (SampleCount == 0) return 0f; return Total / SampleCount; } } [DataMember] public float StdValue { get { if (SampleCount <= 1) return 0f; return (float)Math.Sqrt(Math.Abs((SqrtTotal - 2 * (Total / SampleCount) * Total + SampleCount * (Total / SampleCount) * (Total / SampleCount)) / (SampleCount - 1))); } } [DataMember] public float SetPoint { get; set; } [DataMember] public float Total { get; set; } [DataMember] public float SqrtTotal { get; set; } [DataMember] public int SampleCount { get; set; } public void Clear() { MaxValue = float.MinValue; MinValue = float.MaxValue; SetPoint = 0f; Total = 0f; SampleCount = 0; SqrtTotal = 0f; } public void Update(float value) { if (value < MinValue) MinValue = value; if (value > MaxValue) MaxValue = value; Total += value; SqrtTotal += value * value; SampleCount++; } public FdcDataItem Clone() { var data = new FdcDataItem(); data.SetPoint = SetPoint; data.MaxValue = MaxValue; data.MinValue = MinValue; data.SampleCount = SampleCount; data.SqrtTotal = SqrtTotal; data.Total = Total; data.Name = Name; return data; } } }