diff --git a/AutoDispathingWork/CloseWorker.cs b/AutoDispathingWork/CloseWorker.cs index 7b60c5e..fa3fd4d 100644 --- a/AutoDispathingWork/CloseWorker.cs +++ b/AutoDispathingWork/CloseWorker.cs @@ -34,7 +34,19 @@ public class CloseWorker : BackgroundService } catch (Exception e) { - $"执行控制器发生错误,错误信息:ex{e.StackTrace}".Error(); + 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 { @@ -46,30 +58,66 @@ public class CloseWorker : BackgroundService private async Task Handle() { - var _spiderServices = StaticServiceProvider.Current.GetRequiredService(); - var listRes = await _spiderServices.GetTaskList(3); - if (listRes.IsSuccess) + try { - var needDispose = listRes.Result?.records; - //轮询列表,看有没有符合状态的进行处理 - if (needDispose?.Any() ?? false) + var _spiderServices = StaticServiceProvider.Current.GetRequiredService(); + var listRes = await _spiderServices.GetTaskList(3); + if (listRes.IsSuccess) { - foreach (var item in needDispose) + var needDispose = listRes.Result?.records; + //轮询列表,看有没有符合状态的进行处理 + if (needDispose?.Any() ?? false) { - //2.结案操作 - var result = await _spiderServices.CloseFile(item.caseNumber, "",item.address); - if (result.IsSuccess) + foreach (var item in needDispose) { - var message = $"结案成功,任务编号:{item.caseNumber},任务地址:{item.address},任务类型:{item.typeCode}"; - message.Info(); - } - else - { - var message = $"结案失败,错误信息:{result.Message}"; - message.Error(); + 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处理 } } } \ No newline at end of file diff --git a/AutoDispathingWork/Program.cs b/AutoDispathingWork/Program.cs index 9ec2eb1..b24936a 100644 --- a/AutoDispathingWork/Program.cs +++ b/AutoDispathingWork/Program.cs @@ -46,7 +46,7 @@ builder.Services.AddSwaggerGen(); builder.Services.AddSingleton(config); builder.Services.Configure(config.GetSection("ClientOptions")); builder.Services.AddSingleton(); -builder.Services.AddHttpClient("Default") +builder.Services.AddHttpClient("Default", client => { client.Timeout = TimeSpan.FromSeconds(30); }) .AddHttpMessageHandler(); builder.Services.AddMemoryCache(); builder.Services.AddLogging(); diff --git a/AutoDispathingWork/Services/SpiderServices.cs b/AutoDispathingWork/Services/SpiderServices.cs index f978af4..1277088 100644 --- a/AutoDispathingWork/Services/SpiderServices.cs +++ b/AutoDispathingWork/Services/SpiderServices.cs @@ -42,43 +42,71 @@ public class SpiderServices public async Task> Login() { - using var scope = _serviceProvider.CreateScope(); - using var client = _httpClientFactory.CreateClient("Default"); - var getClientOptions = await scope.ServiceProvider.GetService()? - .GetClientOptions(); - var loginApi = getClientOptions.LoginUrl; - var json = $@" + try + { + using var scope = _serviceProvider.CreateScope(); + using var client = _httpClientFactory.CreateClient("Default"); + var getClientOptions = await scope.ServiceProvider.GetService()? + .GetClientOptions(); + var loginApi = getClientOptions.LoginUrl; + var json = $@" {{""userName"":""{getClientOptions.UserName}"",""userPwd"":""{getClientOptions.Password}"",""type"":""account"",""clientAppId"":""megcity-web""}} "; - client.DefaultRequestHeaders.Add("Module-Alias", "pending-forward"); - client.DefaultRequestHeaders.Add("Module-Source", "megcity-web"); - client.DefaultRequestHeaders.Add("Origin", _optionsMonitor.CurrentValue.ApiGateway); - var response = await client.PostAsync(loginApi, new StringContent(json, Encoding.UTF8, "application/json")); - var respJsonStr = await response.Content.ReadAsStringAsync(); - _logger.LogInformation("登录返回: {tokenRes}", respJsonStr); - var tokenRes = JsonSerializer.Deserialize(respJsonStr); - if (response.IsSuccessStatusCode) - { - if (tokenRes?.Code == 0) + client.DefaultRequestHeaders.Add("Module-Alias", "pending-forward"); + client.DefaultRequestHeaders.Add("Module-Source", "megcity-web"); + client.DefaultRequestHeaders.Add("Origin", _optionsMonitor.CurrentValue.ApiGateway); + var response = await client.PostAsync(loginApi, new StringContent(json, Encoding.UTF8, "application/json")); + var respJsonStr = await response.Content.ReadAsStringAsync(); + _logger.LogInformation("登录返回: {tokenRes}", respJsonStr); + var tokenRes = JsonSerializer.Deserialize(respJsonStr); + if (response.IsSuccessStatusCode) { - _logger.LogInformation("成功登录, token: {token}", tokenRes?.Data?.Token); - return new SpiderResponse() + if (tokenRes?.Code == 0) { - IsSuccess = true, - Result = tokenRes.Data, - Code = SpiderResponseCode.Success, - Message = "成功登录" - }; + _logger.LogInformation("成功登录, token: {token}", tokenRes?.Data?.Token); + return new SpiderResponse() + { + IsSuccess = true, + Result = tokenRes.Data, + Code = SpiderResponseCode.Success, + Message = "成功登录" + }; + } } - } - return new SpiderResponse() + var errorMessage = $"登录失败\n" + + $"响应状态码: {response.StatusCode}\n" + + $"响应内容: {respJsonStr}\n" + + $"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}"; + _logger.LogWarning(errorMessage); + + return new SpiderResponse() + { + IsSuccess = false, + Result = null, + Code = SpiderResponseCode.Fail, + Message = $"登录失败: {tokenRes?.Code.ToString() ?? "未知错误"}" + }; + } + catch (Exception ex) { - IsSuccess = false, - Result = null, - Code = SpiderResponseCode.Fail, - Message = "登录失败" - }; + var errorMessage = $"登录过程发生异常\n" + + $"异常类型: {ex.GetType().Name}\n" + + $"异常消息: {ex.Message}\n" + + $"堆栈跟踪: {ex.StackTrace}\n" + + $"内部异常: {ex.InnerException?.Message}\n" + + $"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}"; + _logger.LogError(ex, "Login方法异常"); + errorMessage.Error(); + + return new SpiderResponse() + { + IsSuccess = false, + Result = null, + Code = SpiderResponseCode.Fail, + Message = $"登录过程发生异常: {ex.Message}" + }; + } } public async Task GetToken() @@ -102,89 +130,130 @@ public class SpiderServices public async Task> GetTaskList(int state) { - // "headers": { - // "accept": "application/json, text/plain, */*", - // "accept-language": "zh-CN,zh;q=0.9", - // "authorization": "WVPCDLzQeRWYySPkQMuLAislgqfQJuubaHmDnfgyRkSxNCpbwzTgOrvtjSeg", - // "client-app-id": "megcity-web", - // "content-type": "application/json;charset=UTF-8", - // "module-alias": "pending-forward", - // "module-source": "megcity-web" - // }, - // "referrer": "http://33.10.72.100/megcity/", - // "referrerPolicy": "strict-origin-when-cross-origin", - var token = await GetToken(); - using var client = _httpClientFactory.CreateClient("Default"); - client.DefaultRequestHeaders.Add("authorization", $"{token}"); - client.DefaultRequestHeaders.Add("accept-language", "zh-CN,zh;q=0.9"); - client.DefaultRequestHeaders.Add("client-app-id", "megcity-web"); - client.DefaultRequestHeaders.Add("module-alias", "pending-forward"); - client.DefaultRequestHeaders.Add("module-source", "megcity-web"); - // var beginTime = DateTime.Now.AddMonths(-1); - var startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); - var beginTs = (long)(DateTime.Now.AddMonths(-1) - startTime).TotalMilliseconds; - var endTs = (long)(DateTime.Now - startTime).TotalMilliseconds; - var body = new QueryReq + try { - State = [state], - PageNo = 1, - PageSize = 50, - }; - switch (state) - { - case 1: - body.SortType = [20, 10]; - body.CreateStartTime = beginTs; - body.CreateEndTime = endTs; - break; - case 3: - body.SortType = [20, 10]; - body.HandleStartTime = beginTs; - body.HandleEndTime = endTs; - break; - } - - // {"state":[3],"pageNo":1,"pageSize":50,"sortType":[40,10],"handleStartTime":1762099200000,"handleEndTime":1762340979629} - // {"state":[3],"pageNo":1,"pageSize":50,"sortType":[40,10],"handleStartTime":1697293650750,"handleEndTime":1699885650750} - // {"state":[1],"pageNo":1,"pageSize":50,"sortType":[20,10],"createStartTime":1697290618034,"createEndTime":1699882618034} - // {\"state\":[1],\"pageNo\":1,\"pageSize\":50,\"sortType\":[20,10],\"createStartTime\":1697204639551,\"createEndTime\":1697204639551} - using var scope = _serviceProvider.CreateScope(); - var getClientOptions = await scope.ServiceProvider.GetService()? - .GetClientOptions(); - var taskPath = getClientOptions.GetTaskUrl; - - var response = await client.PostAsync(taskPath, - new StringContent(JsonSerializer.Serialize(body, new JsonSerializerOptions() + // "headers": { + // "accept": "application/json, text/plain, */*", + // "accept-language": "zh-CN,zh;q=0.9", + // "authorization": "WVPCDLzQeRWYySPkQMuLAislgqfQJuubaHmDnfgyRkSxNCpbwzTgOrvtjSeg", + // "client-app-id": "megcity-web", + // "content-type": "application/json;charset=UTF-8", + // "module-alias": "pending-forward", + // "module-source": "megcity-web" + // }, + // "referrer": "http://33.10.72.100/megcity/", + // "referrerPolicy": "strict-origin-when-cross-origin", + var token = await GetToken(); + if (string.IsNullOrWhiteSpace(token)) { - DefaultIgnoreCondition - = JsonIgnoreCondition.WhenWritingNull - }), Encoding.UTF8, "application/json")); - var respJsonStr = await response.Content.ReadAsStringAsync(); - _logger.LogInformation("获得列表返回json: {respJsonStr}", respJsonStr); - var spiderRes = JsonSerializer.Deserialize(respJsonStr); - if (response.IsSuccessStatusCode) - { - if (spiderRes?.code == 0) - { - _logger.LogInformation("成功获取监控结果"); - return new SpiderResponse() { - IsSuccess = true, - Result = spiderRes.data, - Code = SpiderResponseCode.Success, - Message = "成功获取监控结果" + IsSuccess = false, + Result = null, + Code = SpiderResponseCode.Fail, + Message = "无法获取访问令牌" }; } - } - return new SpiderResponse() + using var client = _httpClientFactory.CreateClient("Default"); + client.DefaultRequestHeaders.Add("authorization", $"{token}"); + client.DefaultRequestHeaders.Add("accept-language", "zh-CN,zh;q=0.9"); + client.DefaultRequestHeaders.Add("client-app-id", "megcity-web"); + client.DefaultRequestHeaders.Add("module-alias", "pending-forward"); + client.DefaultRequestHeaders.Add("module-source", "megcity-web"); + // var beginTime = DateTime.Now.AddMonths(-1); + var startTime = DateTime.UnixEpoch; + var beginTs = (long)(DateTime.Now.AddMonths(-1) - startTime).TotalMilliseconds; + var endTs = (long)(DateTime.Now - startTime).TotalMilliseconds; + var body = new QueryReq + { + State = [state], + PageNo = 1, + PageSize = 50, + }; + switch (state) + { + case 1: + body.SortType = [20, 10]; + body.CreateStartTime = beginTs; + body.CreateEndTime = endTs; + break; + case 3: + body.SortType = [20, 10]; + body.HandleStartTime = beginTs; + body.HandleEndTime = endTs; + break; + } + + // {"state":[3],"pageNo":1,"pageSize":50,"sortType":[40,10],"handleStartTime":1762099200000,"handleEndTime":1762340979629} + // {"state":[3],"pageNo":1,"pageSize":50,"sortType":[40,10],"handleStartTime":1697293650750,"handleEndTime":1699885650750} + // {"state":[1],"pageNo":1,"pageSize":50,"sortType":[20,10],"createStartTime":1697290618034,"createEndTime":1699882618034} + // {\"state\":[1],\"pageNo\":1,\"pageSize\":50,\"sortType\":[20,10],\"createStartTime\":1697204639551,\"createEndTime\":1697204639551} + using var scope = _serviceProvider.CreateScope(); + var getClientOptions = await scope.ServiceProvider.GetService()? + .GetClientOptions(); + var taskPath = getClientOptions.GetTaskUrl; + + var response = await client.PostAsync(taskPath, + new StringContent(JsonSerializer.Serialize(body, new JsonSerializerOptions() + { + DefaultIgnoreCondition + = JsonIgnoreCondition.WhenWritingNull + }), Encoding.UTF8, "application/json")); + var respJsonStr = await response.Content.ReadAsStringAsync(); + _logger.LogInformation("获得列表返回json: {respJsonStr}", respJsonStr); + var spiderRes = JsonSerializer.Deserialize(respJsonStr); + if (response.IsSuccessStatusCode) + { + if (spiderRes?.code == 0) + { + _logger.LogInformation("成功获取监控结果"); + + return new SpiderResponse() + { + IsSuccess = true, + Result = spiderRes.data, + Code = SpiderResponseCode.Success, + Message = "成功获取监控结果" + }; + } + } + + var errorMessage = $"获取监控结果失败\n" + + $"响应状态码: {response.StatusCode}\n" + + $"响应内容: {respJsonStr}\n" + + $"解析结果: {spiderRes?.code}\n" + + $"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}"; + _logger.LogWarning(errorMessage); + + return new SpiderResponse() + { + IsSuccess = false, + Result = null, + Code = SpiderResponseCode.Fail, + Message = $"获取监控结果失败: {spiderRes?.msg ?? "未知错误"}" + }; + } + catch (Exception ex) { - IsSuccess = false, - Result = null, - Code = SpiderResponseCode.Fail, - Message = "获取监控结果失败" - }; + var errorMessage = $"GetTaskList过程发生异常\n" + + $"参数state: {state}\n" + + $"异常类型: {ex.GetType().Name}\n" + + $"异常消息: {ex.Message}\n" + + $"堆栈跟踪: {ex.StackTrace}\n" + + $"内部异常: {ex.InnerException?.Message}\n" + + $"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}"; + _logger.LogError(ex, "GetTaskList方法异常, state: {State}", state); + errorMessage.Error(); + + return new SpiderResponse() + { + IsSuccess = false, + Result = null, + Code = SpiderResponseCode.Fail, + Message = $"GetTaskList过程发生异常: {ex.Message}" + }; + } }