新增 ,定时器自定义异常类
This commit is contained in:
@@ -0,0 +1,44 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace Tnb.WarehouseMgr.Entities.Exceptions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 定时任务自定义异常
|
||||||
|
/// </summary>
|
||||||
|
public class TimedTaskException : Exception
|
||||||
|
{
|
||||||
|
public string Method { get; set; }
|
||||||
|
public string UserId { get; set; }
|
||||||
|
public string UserName { get; set; }
|
||||||
|
public string RequestURL { get; set; }
|
||||||
|
public string RequestMethod { get; set; }
|
||||||
|
public ConnectionConfigOptions options { get; set; }
|
||||||
|
|
||||||
|
public TimedTaskException(string message,
|
||||||
|
string method,
|
||||||
|
string userId,
|
||||||
|
string userName,
|
||||||
|
string requestUrl,
|
||||||
|
string requestMethod,
|
||||||
|
ConnectionConfigOptions options,
|
||||||
|
Exception innerException) : base(message, innerException)
|
||||||
|
{
|
||||||
|
this.Method = method;
|
||||||
|
this.UserId = userId;
|
||||||
|
this.UserName = userName;
|
||||||
|
this.RequestURL = requestUrl;
|
||||||
|
this.RequestMethod = requestMethod;
|
||||||
|
this.options = options;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class TimedTaskExceptionExtensions
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,17 +3,24 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Aop.Api.Domain;
|
||||||
using JNPF;
|
using JNPF;
|
||||||
using JNPF.Common.Core.Manager;
|
using JNPF.Common.Core.Manager;
|
||||||
using JNPF.Common.Dtos.Message;
|
using JNPF.Common.Dtos.Message;
|
||||||
using JNPF.Common.Extension;
|
using JNPF.Common.Extension;
|
||||||
|
using JNPF.Common.Security;
|
||||||
|
using JNPF.EventBus;
|
||||||
|
using JNPF.EventHandler;
|
||||||
using JNPF.FriendlyException;
|
using JNPF.FriendlyException;
|
||||||
using JNPF.Logging;
|
using JNPF.Logging;
|
||||||
using JNPF.Message.Interfaces.Message;
|
using JNPF.Message.Interfaces.Message;
|
||||||
|
using JNPF.Systems.Entitys.System;
|
||||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
using Tnb.Common.Extension;
|
using Tnb.Common.Extension;
|
||||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||||
|
using Tnb.WarehouseMgr.Entities.Exceptions;
|
||||||
using Tnb.WarehouseMgr.Interfaces;
|
using Tnb.WarehouseMgr.Interfaces;
|
||||||
|
|
||||||
namespace Tnb.WarehouseMgr
|
namespace Tnb.WarehouseMgr
|
||||||
@@ -24,11 +31,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class TimedTaskBackgroundService : BackgroundService
|
public class TimedTaskBackgroundService : BackgroundService
|
||||||
{
|
{
|
||||||
private ISendMessageService? _sendService;
|
private IEventPublisher _eventPublisher;
|
||||||
|
|
||||||
protected override Task ExecuteAsync(CancellationToken stoppingToken) => Task.Run(() =>
|
protected override Task ExecuteAsync(CancellationToken stoppingToken) => Task.Run(() =>
|
||||||
{
|
{
|
||||||
//_sendService = App.GetRequiredService<ISendMessageService>();
|
//_eventPublisher = App.GetRequiredService<IEventPublisher>();
|
||||||
List<string> toUserIds = new List<string>() { "25398501929509" };
|
List<string> toUserIds = new List<string>() { "25398501929509" };
|
||||||
//生成任务执行
|
//生成任务执行
|
||||||
CancellationTokenSource genTaskCTS = new();
|
CancellationTokenSource genTaskCTS = new();
|
||||||
@@ -55,9 +62,22 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
while (!token.IsCancellationRequested)
|
while (!token.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
await action(cts).Catch(ex =>
|
await action(cts).Catch(async ex =>
|
||||||
{
|
{
|
||||||
//notify operator
|
if (ex is TimedTaskException timedTaskEx)
|
||||||
|
{
|
||||||
|
await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", options, new SysLogEntity
|
||||||
|
{
|
||||||
|
Id = SnowflakeIdHelper.NextId(),
|
||||||
|
Category = 4,
|
||||||
|
IPAddress = NetHelper.Ip,
|
||||||
|
RequestURL = httpRequest.Path,
|
||||||
|
RequestMethod = httpRequest.Method,
|
||||||
|
Json = timedTaskEx + "\n" + context.Exception.StackTrace + "\n" + context.Exception.TargetSite.GetParameters().ToString(),
|
||||||
|
PlatForm = string.Format("{0}-{1}", userAgent.OS.ToString(), userAgent.RawValue),
|
||||||
|
CreatorTime = DateTime.Now
|
||||||
|
}));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ using Tnb.WarehouseMgr.Entities.Dto;
|
|||||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||||
using Tnb.WarehouseMgr.Entities.Entity;
|
using Tnb.WarehouseMgr.Entities.Entity;
|
||||||
using Tnb.WarehouseMgr.Entities.Enums;
|
using Tnb.WarehouseMgr.Entities.Enums;
|
||||||
|
using Tnb.WarehouseMgr.Entities.Exceptions;
|
||||||
using Tnb.WarehouseMgr.Interfaces;
|
using Tnb.WarehouseMgr.Interfaces;
|
||||||
|
|
||||||
namespace Tnb.WarehouseMgr
|
namespace Tnb.WarehouseMgr
|
||||||
@@ -219,6 +220,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
public async Task GenTaskExecute(CancellationTokenSource? cts = default)
|
public async Task GenTaskExecute(CancellationTokenSource? cts = default)
|
||||||
{
|
{
|
||||||
Stopwatch sw = Stopwatch.StartNew();
|
Stopwatch sw = Stopwatch.StartNew();
|
||||||
|
CancellationTokenSource agvCts = new();
|
||||||
var db = _db.CopyNew();
|
var db = _db.CopyNew();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -352,11 +354,15 @@ namespace Tnb.WarehouseMgr
|
|||||||
reqBody.taskChainPriority = 0;
|
reqBody.taskChainPriority = 0;
|
||||||
reqBody.taskList = v;
|
reqBody.taskList = v;
|
||||||
Log.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}");
|
Log.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}");
|
||||||
var respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, CancellationToken.None);
|
var respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, agvCts.Token);
|
||||||
Log.Information($"调用Agv接口响应结果:{respBody}");
|
Log.Information($"调用Agv接口响应结果:{respBody}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Exception ex) when (ex is HttpRequestException hReqEx)
|
||||||
|
{
|
||||||
|
agvCts.Cancel();
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log.Error("生成预任务执行时出现错误", ex);
|
Log.Error("生成预任务执行时出现错误", ex);
|
||||||
@@ -366,6 +372,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
agvCts.Dispose();
|
||||||
cts?.Dispose();
|
cts?.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace Tnb.Common.Extension
|
|||||||
return tcs.Task;
|
return tcs.Task;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task Catch(this Task task, Action<Exception> exceptionHandler)
|
public static async Task Catch(this Task task, Func<Exception,Task> exceptionHandler)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -33,7 +33,7 @@ namespace Tnb.Common.Extension
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
exceptionHandler(ex);
|
await exceptionHandler(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user