using Microsoft.Extensions.Options; using WorkerService1.Domains; 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) { using var scope = _serviceProvider.CreateScope(); var settingServices = scope.ServiceProvider.GetRequiredService(); var options = settingServices.GetClientOptions(); if (_logger.IsEnabled(LogLevel.Information)) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now.LocalDateTime); } try { if (options.DispatchingRunning) await Handle(); } catch (Exception e) { $"执行控制器发生错误,错误信息:ex{e.StackTrace}".Error(); } finally { await Task.Delay(options.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, item.address, item.typeCode); if (result.IsSuccess) { var message = $"成功派发任务,任务编号:{item.caseNumber},任务地址:{item.address},任务类型:{item.typeCode}"; message.Info(); } else { var message = $"派发任务失败,错误信息:{result.Message}"; message.Error(); } } } } } }