71 lines
2.4 KiB
C#
71 lines
2.4 KiB
C#
using Microsoft.Extensions.Options;
|
|
using WorkerService1.Dto.Configuration;
|
|
using WorkerService1.Services;
|
|
|
|
namespace WorkerService1;
|
|
|
|
public class Worker : BackgroundService
|
|
{
|
|
private readonly ILogger<Worker> _logger;
|
|
private readonly SpiderServices _spiderServices;
|
|
private readonly IServiceProvider _serviceProvider;
|
|
|
|
public Worker(ILogger<Worker> 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<IOptionsMonitor<ClientOptions>>();
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |