using Microsoft.Extensions.Options; using WorkerService1.Dto.Configuration; using WorkerService1.Services; namespace WorkerService1; public class Worker : BackgroundService { private readonly ILogger _logger; private readonly SpiderServices _spiderServices; private readonly IServiceProvider _serviceProvider; public Worker(ILogger logger,IServiceProvider serviceProvider, SpiderServices spiderServices) { _logger = logger; _serviceProvider = serviceProvider; _spiderServices = spiderServices; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { if (_logger.IsEnabled(LogLevel.Information)) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); } try { await Handle(); } catch (Exception e) { _logger.LogError("执行控制器发生错误,错误信息:ex{}", e.StackTrace); } finally { using var scope = _serviceProvider.CreateScope(); var options = scope.ServiceProvider.GetRequiredService>(); await Task.Delay(options.CurrentValue.Delay, stoppingToken); } } } private async Task Handle() { var listRes = await _spiderServices.GetTaskList(1); if (listRes.IsSuccess) { var needDispose = listRes.Result?.records.Where(x => x.disposalStatus == 1); //轮询列表,看有没有符合状态的进行处理 if (needDispose?.Any() ?? false) { //处理逻辑 //1.查询角色是 城管?的用户 var users = await _spiderServices.GetUsers(); var cityManager = users.Result?.Records; if (cityManager?.Any() ?? false) { foreach (var item in needDispose) { //2.进行派单操作 var result = await _spiderServices.DispatchTask(item.caseNumber, cityManager.First().Id, item.typeCode); } } } } } }