You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.4 KiB
C#

using System.Collections.Immutable;
using WorkerSynReport.Data;
namespace WorkerSynReport
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly IServiceScopeFactory _scopeFactory;
public Worker(ILogger<Worker> logger, IServiceScopeFactory scopeFactory)
{
_logger = logger;
this._scopeFactory = scopeFactory;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await SynWetMixer();
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000*30, stoppingToken);
}
}
private async Task SynWetMixer()
{
_logger.LogInformation("定时器开始");
using var scope = _scopeFactory.CreateScope();
var services = scope.ServiceProvider;
using IDbContextLocal? dbContextLocal = services.GetService<IDbContextLocal>();
using IDbContextHttp? dbContextHttp = services.GetService<IDbContextHttp>();
var reportId=await dbContextHttp!.Query<Report_WetMixer>()
.OrderByDesc(x => x.objId).Select(x => x.reportId).FirstOrDefaultAsync();
var objId=await dbContextLocal.Query<Report_WetMixer>().Where(x => x.reportId == reportId)
.Select(x => x.objId).FirstOrDefaultAsync();
if (objId>0)
{
List<Report_WetMixer> lsMain = new List<Report_WetMixer>();
List<Report_WetMixer_Detail> lsMainDetail = new List<Report_WetMixer_Detail>();
var list= await dbContextLocal.Query<Report_WetMixer>().Where(x => x.objId > objId).ToListAsync();
foreach (var eMixer in list)
{
lsMain.Add(eMixer);
lsMainDetail.AddRange(await dbContextLocal.Query<Report_WetMixer_Detail>().Where(x => x.reportId==eMixer.reportId).ToListAsync());
}
if (lsMain.Any())
{
_logger.LogInformation("插入数据:{Data}",lsMain.Count);
await dbContextHttp.InsertRangeAsync(lsMain);
await dbContextHttp.InsertRangeAsync(lsMainDetail);
}
}
}
}
}