using System; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Volo.Abp.BackgroundWorkers; using Volo.Abp.Threading; using Volo.Abp.Uow; namespace Win_in.Sfs.Scp.WebApi.Agent { public class IncomingDataWorker : AsyncPeriodicBackgroundWorkerBase { private readonly IOptions _options; public IncomingDataWorker( AbpAsyncTimer timer, IOptions options, IServiceScopeFactory serviceScopeFactory ) : base(timer, serviceScopeFactory) { _options = options; Timer.Period = options.Value.IncomingOptions.PeriodSeconds * 1000; //default 5 minutes } [UnitOfWork] protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) { Logger.LogInformation("Starting: Handling Incoming Exchange data..."); if (!_options.Value.IncomingOptions.Active) { Logger.LogInformation("Incoming Exchange is not active!"); return; } //Resolve dependencies var incomingDataManager = workerContext .ServiceProvider .GetRequiredService(); //Do the work var incomingDataList = await incomingDataManager.GetReadyListAsync(); foreach (var incomingData in incomingDataList) { try { await UpdateWmsAsync(incomingData); } catch (Exception e) { e = e.GetBaseException(); incomingData.SetError(EnumExchangeDataErrorCode.Exception, e.Message); } //归档并删除 await incomingDataManager.FileAndDeleteAsync(incomingData); } Logger.LogInformation("Completed: Handling Incoming Exchange data..."); } private async Task UpdateWmsAsync(object incomingData) { throw new NotImplementedException(); } } }