using Aurora.Api.Devices; using System; using System.Linq; using VisionCommon.DB.Align; namespace VisionCommon.DB { public class VisionAlignDBAgent : VisionDBAgentBase { private static DateTime _LastCalledTime; #region 자동 SeqId 할당 private static int _SeqId = -1; public static int GetSeqId() { if (_LastCalledTime.Date != DateTime.Now.Date) { _LastCalledTime = DateTime.Now; ResetSeqId(); } return _SeqId; } public static void ResetSeqId() => _SeqId = -1; public static void SetSeqId(int seqID) { _SeqId = seqID; } public static void RaiseSeqId() { if (_LastCalledTime.Date != DateTime.Now.Date) { _LastCalledTime = DateTime.Now; ResetSeqId(); } else { _SeqId++; } } #endregion public VisionAlignDBAgent(eVisionDBKey dbKey = eVisionDBKey.VisionAlign) : base(dbKey) { _LastCalledTime = DateTime.Now; } #region EventObservable internal override void OnDBActivated() { if (CheckServiceActivate()) { // dobule check _LastCalledTime = DateTime.Now; var lastItem = _Service.GetData(new QueryOption() { IsDescending = true, Limit = 1 })?.LastOrDefault(); if ((lastItem as VisionAlignDB) != null && (lastItem as VisionAlignDB).TimeStamp.Value.Date == DateTime.Now.Date) { SetSeqId((lastItem as VisionAlignDB).SeqId++); } else { ResetSeqId(); } } } #endregion #region UtilAPI public VisionAlignDB CreateDBItem(AlignInfo alignInfo, eSeqMode alignSeqMode, int seqId = -1) { return new VisionAlignDB(alignInfo, alignSeqMode, seqId == -1 ? GetSeqId() : seqId); } public void AllocCurrentSeqId(ref VisionAlignDB dbData) { if(dbData != null) { dbData.SeqId = GetSeqId(); } } public void AllocNextSeqId(VisionAlignDB dbData) { if (dbData != null) { RaiseSeqId(); dbData.SeqId = GetSeqId(); } } public void ConvertToDB(AlignResult alignResult, ref VisionAlignDB dbData) { } #endregion } }