protected override void Cover(MissingDataRecord mdr) { TaskList.Add(Task.Run(() => { base.Cover(mdr); })); }
/// <summary> /// 回补数据 /// </summary> /// <param name="beginTime">开始时间</param> /// <param name="endTime">结束时间</param> /// <returns></returns> public virtual void Cover(DateTime beginTime, DateTime endTime) { try { for (DateTime time = beginTime; time <= endTime; time = time.Add(Interval)) { string[] codes = GetCodes(time); foreach (string code in codes) { if (!IsSynchronized(code, time)) { MissingDataRecord mdr = MDRRepository.FirstOrDefault(EntityName, code, time); if (mdr == null) { Sync(code, time); } else { Cover(mdr); } } } } Add(); } catch (Exception e) { Logger.Error("Cover failed.", e); } }
protected virtual void Sync(DateTime time, string conditions) { try { AddEntity(GetSyncData(time, conditions)); } catch (Exception e) { MissingDataRecord record = new MissingDataRecord(Code, conditions, time, e.Message); context.Add(record); } }
/// <summary> /// 回补数据 /// </summary> /// <param name="mdr">回补记录</param> protected virtual void Cover(MissingDataRecord mdr) { try { AddEntity(GetCoverData(mdr.Code, mdr.Time)); mdr.Status = true; } catch (Exception e) { mdr.Exception = e.Message; mdr.MissTimes += 1; } }
protected virtual void SyncOrCover(DateTime time, string conditions) { if (!IsSynchronized(time, conditions)) { MissingDataRecord mdr = GetRecord(time, conditions); if (mdr == null) { Sync(time, conditions); } else { Cover(mdr); } } }
/// <summary> /// 同步数据 /// </summary> /// <param name="code">编码</param> /// <param name="time">时间</param> protected virtual void Sync(string code, DateTime time) { try { Policy policy = Policy.Handle <Exception>().WaitAndRetry(1, retryAttempt => TimeSpan.FromMinutes(retryAttempt * 1), (exception, timeSpan) => { Logger.ErrorFormat("Polly Retry: {0}, {1}, {2}", exception, EntityName, code, time); }); policy.Execute(() => AddEntity(GetSyncData(code, time))); } catch (Exception e) { MissingDataRecord record = new MissingDataRecord() { EntityName = EntityName, Code = code, Time = time, Exception = e.Message }; AddMissingDataRecord(record); } }
/// <summary> /// 添加回补记录到Sync /// </summary> /// <param name="record">回补记录</param> protected abstract void AddMissingDataRecord(MissingDataRecord record);
protected virtual IEnumerable <TEntity> GetCoverData(MissingDataRecord mdr) { return(GetSyncData(mdr.Time, mdr.Conditions)); }
protected override void AddMissingDataRecord(MissingDataRecord record) { MDRList.Add(record); }
protected override void AddMissingDataRecord(MissingDataRecord record) { MDRQueue.Enqueue(record); }