using Ips.Library.Basic; using Ips.Library.DxpLib; using Ips.Sps.Scheduling.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ips.Sps.Scheduling.SigAds { public class AdcSctWorker : AdWorkerBase { public AdcSctWorker(RunTsk Tsk) : base(Tsk) { } private DateTime _prevAdRefTime = DateTime.MinValue; public override void Execute(CancellationToken token) { var tsk = CurrentTsk; var adc = CurrentTsk.AdCard; foreach (var tarSig in tsk.TarSigList) { var adFreq = tarSig.FreqStart; do { for (int i = 0; i < ToolConfig.GetAppSetting("ScoutAdTimes").To(3); i++) { var groupTime = DateTime.Now.ClearMillisecond(); var adGroup = new AdSigGroup(tsk.TskId, groupTime); OnAdSigGroupStart(new AdSigGroupStartEventArgs(adGroup)); try { token.ThrowIfCancellationRequested(); if ((DateTime.Now - _prevAdRefTime).Minutes > 5) { foreach (var refSig in tsk.RefSigList) { token.ThrowIfCancellationRequested(); var refAdRes = ExecuteAdc(adc, refSig, token); var refSigRes = WrapSigAdResult(tsk, adGroup, adc, refSig, refAdRes.Result); if (refSigRes != null) adGroup.GroupSigList.Add(refSigRes); } _prevAdRefTime = DateTime.Now; } var adSig = tarSig.Copy(); adSig.SigFreq = adFreq; var adcResult = ExecuteAdc(adc, adSig, token); var sigAdResult = WrapSigAdResult(tsk, adGroup, adc, adSig, adcResult.Result); if (sigAdResult != null) adGroup.GroupSigList.Add(sigAdResult); } catch (Exception ex) { ex.HandleCancelEx(m => { IpsLogger.Error($"任务【{tsk.TskName}】,执行采集异常",m); }); } finally { adGroup.GroupSigList.CompleteAdding(); } } adFreq += tarSig.FreqStep; } while (adFreq <= tarSig.FreqEnd); } } } }