AutoDispatching/AutoDispathingWork/Worker.cs
2023-11-19 17:06:38 +08:00

83 lines
2.9 KiB
C#

using Microsoft.Extensions.Options;
using WorkerService1.Domains;
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)
{
using var scope = _serviceProvider.CreateScope();
var settingServices = scope.ServiceProvider.GetRequiredService<SettingServices>();
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();
}
}
}
}
}
}