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 _logger; public CloseWorker(ILogger logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var scope = StaticServiceProvider.Current.CreateScope(); var settingServices = scope.ServiceProvider.GetRequiredService(); 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(); 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处理 } } }