123 lines
5.0 KiB
C#
123 lines
5.0 KiB
C#
using AutoDispathingWork.Utils;
|
||
using Microsoft.Extensions.Options;
|
||
using WorkerService1.Domains;
|
||
using WorkerService1.Dto.Configuration;
|
||
using WorkerService1.Services;
|
||
|
||
namespace WorkerService1;
|
||
|
||
public class CloseWorker : BackgroundService
|
||
{
|
||
private readonly ILogger<CloseWorker> _logger;
|
||
|
||
public CloseWorker(ILogger<CloseWorker> logger)
|
||
{
|
||
_logger = logger;
|
||
}
|
||
|
||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||
{
|
||
while (!stoppingToken.IsCancellationRequested)
|
||
{
|
||
var scope = StaticServiceProvider.Current.CreateScope();
|
||
var settingServices = scope.ServiceProvider.GetRequiredService<SettingServices>();
|
||
var options = await settingServices.GetClientOptions();
|
||
if (_logger.IsEnabled(LogLevel.Information))
|
||
{
|
||
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
||
}
|
||
|
||
try
|
||
{
|
||
if (options.CloseFileRunning)
|
||
await Handle();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
var errorMessage = $"执行控制器发生错误\n" +
|
||
$"异常类型: {e.GetType().Name}\n" +
|
||
$"异常消息: {e.Message}\n" +
|
||
$"堆栈跟踪: {e.StackTrace}\n" +
|
||
$"内部异常: {e.InnerException?.Message}\n" +
|
||
$"内部堆栈: {e.InnerException?.StackTrace}\n" +
|
||
$"源: {e.Source}\n" +
|
||
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||
errorMessage.Error();
|
||
|
||
// 同时使用结构化日志记录
|
||
_logger.LogError(e, "CloseWorker执行发生异常: {ExceptionType} - {Message}",
|
||
e.GetType().Name, e.Message);
|
||
}
|
||
finally
|
||
{
|
||
await Task.Delay(options.Delay, stoppingToken);
|
||
scope.Dispose();
|
||
}
|
||
}
|
||
}
|
||
|
||
private async Task Handle()
|
||
{
|
||
try
|
||
{
|
||
var _spiderServices = StaticServiceProvider.Current.GetRequiredService<SpiderServices>();
|
||
var listRes = await _spiderServices.GetTaskList(3);
|
||
if (listRes.IsSuccess)
|
||
{
|
||
var needDispose = listRes.Result?.records;
|
||
//轮询列表,看有没有符合状态的进行处理
|
||
if (needDispose?.Any() ?? false)
|
||
{
|
||
foreach (var item in needDispose)
|
||
{
|
||
try
|
||
{
|
||
//2.结案操作
|
||
var result = await _spiderServices.CloseFile(item.caseNumber, "",item.address);
|
||
if (result.IsSuccess)
|
||
{
|
||
var message = $"结案成功,任务编号:{item.caseNumber},任务地址:{item.address},任务类型:{item.typeCode}";
|
||
message.Info();
|
||
}
|
||
else
|
||
{
|
||
var message = $"结案失败,任务编号:{item.caseNumber},错误信息:{result.Message}";
|
||
message.Error();
|
||
}
|
||
}
|
||
catch (Exception itemEx)
|
||
{
|
||
var itemErrorMessage = $"处理单个任务时发生异常\n" +
|
||
$"任务编号: {item.caseNumber}\n" +
|
||
$"任务地址: {item.address}\n" +
|
||
$"异常类型: {itemEx.GetType().Name}\n" +
|
||
$"异常消息: {itemEx.Message}\n" +
|
||
$"堆栈跟踪: {itemEx.StackTrace}\n" +
|
||
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||
itemErrorMessage.Error();
|
||
_logger.LogError(itemEx, "处理任务 {CaseNumber} 时发生异常", item.caseNumber);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var warningMessage = $"获取任务列表失败: {listRes.Message}";
|
||
warningMessage.Error();
|
||
_logger.LogWarning("获取任务列表失败: {Message}", listRes.Message);
|
||
}
|
||
}
|
||
catch (Exception handleEx)
|
||
{
|
||
var handleErrorMessage = $"Handle方法执行发生异常\n" +
|
||
$"异常类型: {handleEx.GetType().Name}\n" +
|
||
$"异常消息: {handleEx.Message}\n" +
|
||
$"堆栈跟踪: {handleEx.StackTrace}\n" +
|
||
$"内部异常: {handleEx.InnerException?.Message}\n" +
|
||
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
||
handleErrorMessage.Error();
|
||
_logger.LogError(handleEx, "Handle方法执行发生异常");
|
||
throw; // 重新抛出异常,让外层catch处理
|
||
}
|
||
}
|
||
} |