2026-01-26 18:56:53 +09:00

74 lines
2.4 KiB
C#

using Aurora.Api.Devices;
using System;
using System.Linq;
using VisionCommon.DB.Align;
namespace VisionCommon.DB {
public class VisionAlignDBAgent : VisionDBAgentBase<VisionAlignDB> {
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
}
}