using Aurora.Api.Devices; using DataHub; using Hermes.Functional; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace VisionCommon.DB.Align { public class VisionAlignDB: IMongoItemEntity { #region key properties // Key [Browsable(false)] public string _id { get; set; } public DateTime? TimeStamp { get; set; } public AlignInfo AlignInfo { get; set; } public string RecipeModelType { get; set; } public string RecipeModelName { get; set; } public MaterialInfo MaterialInfo { get; set; } public FlyingInfo FlyingInfo { get; set; } #endregion #region data properties public string SeqStartDate { get; set; } public int SeqId { get; set; } public bool IsDryRunMode { get; set; } = false; public string SeqMode { get; set; } /// Result public SeqTime SeqTime { get; set; } public Position Delta { get; set; } public string AlignAlgorithm { get; set; } = eAlignAlgorithm.AVG.ToString(); public int AlignCntIndex { get; set; } = 0; /// /// eAlignStatus /// public string AlignStatus { get; set; } // Key : FovId public List PatternResults { get; set; } public AlignRecipe AlignRecipe { get; set; } #endregion #region constructor /// /// 사용 X, Deserialize를 위한 constructor /// public VisionAlignDB() { } public VisionAlignDB(AlignInfo alignInfo, eSeqMode alignSeqMode, int seqId = 0) { var visionSetting = VisionSettingManager.VisionSetting; AlignInfo = alignInfo; RecipeModelType = visionSetting.RecipeModelType.ToString(); RecipeModelName = visionSetting.RecipeModelType == eRecipeModelType.AuroraRecipe ? VisionEnv.AuroraEnv.RecipeManager.ActivatedRecipe().Name : VisionEnv.AuroraEnv.RecipeManager.ActivatedModelName(); AlignRecipe = VisionRecipeManager.GetAlignRecipe(alignInfo).Clone(); SeqMode = alignSeqMode.ToString(); // Create Instance Data SeqTime = new SeqTime() { AlignSeqStart = DateTime.Now }; MaterialInfo = new MaterialInfo(); FlyingInfo = new FlyingInfo(); SeqStartDate = DateTime.Now.ToShortDateString(); PatternResults = new List(); SeqId = seqId; } #endregion #region alloc methods public void AllocAlignResult(AlignResult alignResult) { Delta = alignResult.Delta.ToPosition(); AlignAlgorithm = alignResult.AlignAlgorithm.ToString(); AlignCntIndex = alignResult.AlignCnt; AlignStatus = alignResult.Status.ToString(); AllocPatternResults(alignResult.PatternResults); } public void AllocPatternResults(Dictionary patternResults) { var keys = patternResults.Keys; keys.ForEach(x => PatternResults.Add(new PatternResultDB(patternResults[x]))); } #endregion #region set methods public void SetMaterialInfo(MaterialInfo materialInfo) { MaterialInfo = materialInfo; } public void SetFlyingInfo(FlyingInfo flyingInfo) { FlyingInfo = flyingInfo; } public void SetSeqEnd() { SeqTime.AlignSeqEnd = DateTime.Now; } #endregion } #region VisionAlignDB Components ( for deserialize ) /// /// Sequence Time /// public class SeqTime { public DateTime AlignSeqStart { get; set; } public DateTime AlignSeqEnd { get; set; } } /// /// Flying Info /// public class FlyingInfo { public bool UseFlying { get; set; } = false; public int FlyingSeqId { get; set; } public FlyingInfo() { UseFlying = false; FlyingSeqId = 0; } } /// /// Patter Result를 DB 화 시킨 Class /// public class PatternResultDB { private PatternResult patternResult; public PatternResultDB(PatternResult patternResult) { this.patternResult = patternResult; GrabTime = new Random().Next(1, 30); PatternInfo = new PatternInfoDB( patternResult?.PatternIndex ?? new PatternIndex(eUnitId.Unit1, eSubSysId.SubSys1, eFovId.Fov1, -1), "Description", patternResult?.PatternType.ToString() ?? "", patternResult?.PatternName ?? ""); FoundStatus = patternResult?.Status.ToString() ?? ""; TactTime = patternResult?.TactTimeInMilliSec ?? -1; ImagePath = @":c\test"; OverlayImagePath = @":c\test"; Results = patternResult?.Results.ToList() ?? null; FovId = patternResult?.FovId.ToString() ?? ""; } public PatternResultDB() { PatternInfo = new PatternInfoDB(); Results = new List(); } public double GrabTime { get; set; } public string FovId { get; set; } public PatternInfoDB PatternInfo { get; set; } public string FoundStatus { get; set; } public double TactTime { get; set; } public string ImagePath { get; set; } public string OverlayImagePath { get; set; } public List Results { get; set; } } /// /// Pattern Info를 DB 화 시킨 Class /// public class PatternInfoDB { public int PatternId { get; set; } = 0; public int PatternSubId { get; set; } = 0; public string Description { get; set; } = ""; public string PatternType { get; set; } = ""; public string PatternName { get; set; } = ""; public PatternInfoDB(PatternIndex patternIndex, string description, string patternType, string patternName) { PatternId = patternIndex.PatternId; PatternSubId = patternIndex.PatternSubId; Description = description; PatternType = patternType; PatternName = patternName; } public PatternInfoDB() { } } #endregion }