AutoDispatching/AutoDispathingWork/CloseWorker.cs

123 lines
5.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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处理
}
}
}