feat: 8.0.5.7
This commit is contained in:
parent
bc0ddfe20e
commit
2ae308b71e
@ -1,6 +1,6 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<!-- All Fake packages -->
|
<!-- All Fake packages -->
|
||||||
<FakePackageVersion>8.0.2</FakePackageVersion>
|
<FakePackageVersion>8.0.5.7</FakePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -1,15 +0,0 @@
|
|||||||
using Fake.DependencyInjection;
|
|
||||||
using Fake.ExceptionHandling;
|
|
||||||
using TrackCenter.Domain.Extensions;
|
|
||||||
|
|
||||||
namespace TrackCenter.Api;
|
|
||||||
|
|
||||||
public class ExceptionNotifier: IExceptionNotifier, ITransientDependency
|
|
||||||
{
|
|
||||||
public Task NotifyAsync(ExceptionNotificationContext context)
|
|
||||||
{
|
|
||||||
LogHelper.Error(context.Exception.ToString());
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -2,6 +2,7 @@ using Serilog;
|
|||||||
using TrackCenter.Api;
|
using TrackCenter.Api;
|
||||||
|
|
||||||
var builder = WebApplication.CreateSlimBuilder(args);
|
var builder = WebApplication.CreateSlimBuilder(args);
|
||||||
|
builder.Configuration.AddConsul("idwms/common", source => source.ReloadOnChange = true);
|
||||||
builder.Configuration.AddConsul("idwms/trackapi", source => source.ReloadOnChange = true);
|
builder.Configuration.AddConsul("idwms/trackapi", source => source.ReloadOnChange = true);
|
||||||
var configuration = builder.Configuration;
|
var configuration = builder.Configuration;
|
||||||
Log.Logger = new LoggerConfiguration()
|
Log.Logger = new LoggerConfiguration()
|
||||||
|
|||||||
@ -12,7 +12,6 @@
|
|||||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.2"/>
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.2"/>
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0"/>
|
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0"/>
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0"/>
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0"/>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.21" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -20,9 +19,8 @@
|
|||||||
<ProjectReference Include="..\TrackCenter.Repository\TrackCenter.Repository.csproj" />
|
<ProjectReference Include="..\TrackCenter.Repository\TrackCenter.Repository.csproj" />
|
||||||
<PackageReference Include="Fake.Autofac" Version="$(FakePackageVersion)" />
|
<PackageReference Include="Fake.Autofac" Version="$(FakePackageVersion)" />
|
||||||
<PackageReference Include="Fake.Consul" Version="$(FakePackageVersion)" />
|
<PackageReference Include="Fake.Consul" Version="$(FakePackageVersion)" />
|
||||||
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
|
|
||||||
<PackageReference Include="Serilog.Sinks.Elasticsearch" Version="10.0.0" />
|
<PackageReference Include="Serilog.AspNetCore" Version="8.0.1" />
|
||||||
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
|||||||
@ -1,21 +1,20 @@
|
|||||||
using Fake.AspNetCore;
|
using Fake.AspNetCore;
|
||||||
using Fake.AspNetCore.Auditing;
|
using Fake.AspNetCore.Auditing;
|
||||||
using Fake.AspNetCore.Mvc;
|
using Fake.AspNetCore.Mvc;
|
||||||
using Fake.AspNetCore.Mvc.Conventions;
|
|
||||||
using Fake.Autofac;
|
using Fake.Autofac;
|
||||||
|
using Fake.FeiShu;
|
||||||
using Fake.Modularity;
|
using Fake.Modularity;
|
||||||
using Fake.Security.Claims;
|
using Fake.Security.Claims;
|
||||||
|
using Fake.Serilog;
|
||||||
using FluentValidation.AspNetCore;
|
using FluentValidation.AspNetCore;
|
||||||
using Hangfire;
|
using Hangfire;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Authorization;
|
using Microsoft.AspNetCore.Mvc.Authorization;
|
||||||
using Microsoft.OpenApi.Models;
|
|
||||||
using OpenTelemetry.Resources;
|
using OpenTelemetry.Resources;
|
||||||
using OpenTelemetry.Trace;
|
using OpenTelemetry.Trace;
|
||||||
using TrackCenter.Application;
|
using TrackCenter.Application;
|
||||||
using TrackCenter.Application.Hangfire;
|
using TrackCenter.Application.Hangfire;
|
||||||
using TrackCenter.Domain.Extensions;
|
|
||||||
using TrackCenter.Repository;
|
using TrackCenter.Repository;
|
||||||
using TrackCenter.Repository.Otel;
|
using TrackCenter.Repository.Otel;
|
||||||
using TrackCenter.Repository.Otel.Options;
|
using TrackCenter.Repository.Otel.Options;
|
||||||
@ -27,6 +26,7 @@ namespace TrackCenter.Api;
|
|||||||
[DependsOn(typeof(FakeAspNetCoreModule))]
|
[DependsOn(typeof(FakeAspNetCoreModule))]
|
||||||
[DependsOn(typeof(TrackCenterApplicationModule))]
|
[DependsOn(typeof(TrackCenterApplicationModule))]
|
||||||
[DependsOn(typeof(TrackCenterRepositoryModule))]
|
[DependsOn(typeof(TrackCenterRepositoryModule))]
|
||||||
|
[DependsOn(typeof(FakeSerilogModule))]
|
||||||
public class TrackCenterApiModule : FakeModule
|
public class TrackCenterApiModule : FakeModule
|
||||||
{
|
{
|
||||||
private const string DefaultCorsPolicyName = "default";
|
private const string DefaultCorsPolicyName = "default";
|
||||||
@ -169,11 +169,6 @@ public class TrackCenterApiModule : FakeModule
|
|||||||
Authorization = [new AnonymousHangfireAuthorizationFilter()]
|
Authorization = [new AnonymousHangfireAuthorizationFilter()]
|
||||||
});
|
});
|
||||||
|
|
||||||
LogHelper.Info("Application started", true);
|
app.Services.GetRequiredService<IFeiShuNotificationService>().Send("Application started");
|
||||||
}
|
|
||||||
|
|
||||||
public override void Shutdown(ApplicationShutdownContext context)
|
|
||||||
{
|
|
||||||
LogHelper.Info("Application stoped", true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,13 +55,13 @@ public class CapFilter : SubscribeFilter
|
|||||||
if (context.Exception is CapNoRetryException ex)
|
if (context.Exception is CapNoRetryException ex)
|
||||||
{
|
{
|
||||||
context.ExceptionHandled = true;
|
context.ExceptionHandled = true;
|
||||||
LogHelper.Warn(ex.ToString(), true);
|
Log.Warning(ex.ToString(), true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 发飞书,异常继续上抛,进入重试机制
|
// 发飞书,异常继续上抛,进入重试机制
|
||||||
// tips:重试有冷却期(默认4分钟)
|
// tips:重试有冷却期(默认4分钟)
|
||||||
LogHelper.Error($"cap-msg-id:{messageId}\n{context.Exception}");
|
Log.Error($"cap-msg-id:{messageId}\n{context.Exception}");
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|||||||
@ -6,17 +6,9 @@ using TrackCenter.Domain.Aggregates.OrderAggregate;
|
|||||||
|
|
||||||
namespace TrackCenter.Application.CAP.EventHandlers;
|
namespace TrackCenter.Application.CAP.EventHandlers;
|
||||||
|
|
||||||
public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe
|
public class TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository, IServiceProvider serviceProvider)
|
||||||
|
: ITransientDependency, ICapSubscribe
|
||||||
{
|
{
|
||||||
private readonly IOrderRepository _orderRepository;
|
|
||||||
private readonly IServiceProvider _serviceProvider;
|
|
||||||
|
|
||||||
public TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository, IServiceProvider serviceProvider)
|
|
||||||
{
|
|
||||||
_orderRepository = orderRepository;
|
|
||||||
_serviceProvider = serviceProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
[CapSubscribe(GlobalConst.TrackChangeAfterUpdateOrderSubscribe)]
|
[CapSubscribe(GlobalConst.TrackChangeAfterUpdateOrderSubscribe)]
|
||||||
public virtual async Task ConsumerAsync(TrackChangeAfterUpdateOrderEvent @event)
|
public virtual async Task ConsumerAsync(TrackChangeAfterUpdateOrderEvent @event)
|
||||||
@ -25,7 +17,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
|
|
||||||
if (orders.Count == 0)
|
if (orders.Count == 0)
|
||||||
{
|
{
|
||||||
LogHelper.Warn($"没有找到订单信息:{@event.OrderIds.JoinAsString(",")},无法更新轨迹信息");
|
Log.Warning($"没有找到订单信息:{@event.OrderIds.JoinAsString(",")},无法更新轨迹信息");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +73,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
updateOrders.Add(order);
|
updateOrders.Add(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
await _orderRepository.UpdateRangeAsync(updateOrders, x => new
|
await orderRepository.UpdateRangeAsync(updateOrders, x => new
|
||||||
{
|
{
|
||||||
x.IsCompleted,
|
x.IsCompleted,
|
||||||
x.LatestTrackStatus,
|
x.LatestTrackStatus,
|
||||||
@ -103,7 +95,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
|
|
||||||
private async Task<List<OrderEntity>> GetOrdersAsync(int[] orderIds)
|
private async Task<List<OrderEntity>> GetOrdersAsync(int[] orderIds)
|
||||||
{
|
{
|
||||||
return await _orderRepository.GetListAsync(order => orderIds.Contains(order.Id), order => new OrderEntity
|
return await orderRepository.GetListAsync(order => orderIds.Contains(order.Id), order => new OrderEntity
|
||||||
{
|
{
|
||||||
Id = order.Id,
|
Id = order.Id,
|
||||||
// 轨迹
|
// 轨迹
|
||||||
@ -123,7 +115,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
{
|
{
|
||||||
_ = Task.Run(async () =>
|
_ = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
var scope = _serviceProvider.CreateScope();
|
var scope = serviceProvider.CreateScope();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var handler = scope.ServiceProvider.GetRequiredService<IOrderWarningHandler>();
|
var handler = scope.ServiceProvider.GetRequiredService<IOrderWarningHandler>();
|
||||||
@ -131,7 +123,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogHelper.Error(ex);
|
Log.Error(ex.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|||||||
@ -78,7 +78,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
|
|
||||||
if (codeMaps.Count == 0)
|
if (codeMaps.Count == 0)
|
||||||
{
|
{
|
||||||
LogHelper.Warn($"订单跨应用,未配置内容映射,请联系管理员:{@event}", true);
|
Log.Warning($"订单跨应用,未配置内容映射,请联系管理员:{@event}", true);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
var dup = @event.Visited.Intersect(@event.OrderIds).ToArray();
|
var dup = @event.Visited.Intersect(@event.OrderIds).ToArray();
|
||||||
if (dup.Any())
|
if (dup.Any())
|
||||||
{
|
{
|
||||||
LogHelper.Warn($"删除轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
|
Log.Warning($"删除轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -122,7 +122,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
// 系统创建的轨迹不允许修改
|
// 系统创建的轨迹不允许修改
|
||||||
if (@event.Visited.IsNullOrEmpty() && @event is { OperationMan: GlobalConst.SystemUser, IsAdd: false })
|
if (@event.Visited.IsNullOrEmpty() && @event is { OperationMan: GlobalConst.SystemUser, IsAdd: false })
|
||||||
{
|
{
|
||||||
LogHelper.Warn($"系统创建的轨迹不允许被修改:{@event}", true);
|
Log.Warning($"系统创建的轨迹不允许被修改:{@event}", true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
var dup = @event.Visited.Intersect(orderIds).ToArray();
|
var dup = @event.Visited.Intersect(orderIds).ToArray();
|
||||||
if (dup.Any())
|
if (dup.Any())
|
||||||
{
|
{
|
||||||
LogHelper.Warn($"{(@event.IsAdd ? "添加" : "修改")}轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
|
Log.Warning($"{(@event.IsAdd ? "添加" : "修改")}轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
if (trackContent == null)
|
if (trackContent == null)
|
||||||
{
|
{
|
||||||
// 找不到轨迹内容,直接结束
|
// 找不到轨迹内容,直接结束
|
||||||
LogHelper.Warn($"找不到轨迹内容:{@event}", true);
|
Log.Warning($"找不到轨迹内容:{@event}", true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||||
|
|
||||||
namespace TrackCenter.Application.CAP;
|
namespace TrackCenter.Application.CAP;
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@ using DotNetCore.CAP.Messages;
|
|||||||
using DotNetCore.CAP.Persistence;
|
using DotNetCore.CAP.Persistence;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||||
|
|
||||||
namespace TrackCenter.Application.CAP;
|
namespace TrackCenter.Application.CAP;
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ global using Fake.DependencyInjection;
|
|||||||
global using TrackCenter.Domain.Consts;
|
global using TrackCenter.Domain.Consts;
|
||||||
global using Microsoft.AspNetCore.Mvc;
|
global using Microsoft.AspNetCore.Mvc;
|
||||||
global using Microsoft.Extensions.DependencyInjection;
|
global using Microsoft.Extensions.DependencyInjection;
|
||||||
|
global using Serilog;
|
||||||
global using TrackCenter.Domain;
|
global using TrackCenter.Domain;
|
||||||
global using TrackCenter.Domain.Dtos.Common;
|
global using TrackCenter.Domain.Dtos.Common;
|
||||||
global using TrackCenter.Domain.Enums;
|
global using TrackCenter.Domain.Enums;
|
||||||
|
|||||||
@ -104,7 +104,7 @@ public class WarningTaskService(
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LogHelper.Error("[CallTrackRetryPushAsync]" + e, true);
|
Log.Error("[CallTrackRetryPushAsync]" + e, true);
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
@ -62,7 +62,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogHelper.Error(e);
|
Log.Error(e.ToString());
|
||||||
_activity?.SetTag("Exception", e.Message);
|
_activity?.SetTag("Exception", e.Message);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@ -140,7 +140,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
{
|
{
|
||||||
// 被取消不需要增加重试次数
|
// 被取消不需要增加重试次数
|
||||||
//needRetryMetadata.AddRange(needHandleMessage.Select(x => TrackSignalMetadata.FormMessageOrCreate(x, false, false, error: error)));
|
//needRetryMetadata.AddRange(needHandleMessage.Select(x => TrackSignalMetadata.FormMessageOrCreate(x, false, false, error: error)));
|
||||||
LogHelper.Warn($"处理被取消,消息会重新分配到其他Host,影响消息条数[{needHandleMessage.Count}]");
|
Log.Warning($"处理被取消,消息会重新分配到其他Host,影响消息条数[{needHandleMessage.Count}]");
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
if (needRetryMetadata.Count > 0)
|
if (needRetryMetadata.Count > 0)
|
||||||
{
|
{
|
||||||
_activity?.SetTag("StartPublicRetryMessage", $"[预警计算] 开始重新投递[{needRetryMetadata.Count}]条消息");
|
_activity?.SetTag("StartPublicRetryMessage", $"[预警计算] 开始重新投递[{needRetryMetadata.Count}]条消息");
|
||||||
LogHelper.Warn($"[预警计算] 开始重新投递[{needRetryMetadata.Count}]条消息");
|
Log.Warning($"[预警计算] 开始重新投递[{needRetryMetadata.Count}]条消息");
|
||||||
|
|
||||||
var tasks = needRetryMetadata.Select(async metadata =>
|
var tasks = needRetryMetadata.Select(async metadata =>
|
||||||
{
|
{
|
||||||
@ -175,14 +175,14 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
var errorReasons = needRetryMetadata.Select(x => x.LastErrorReason).ToHashSet();
|
var errorReasons = needRetryMetadata.Select(x => x.LastErrorReason).ToHashSet();
|
||||||
var errorMessage = "------------\r\n" + string.Join("\r\n------------\r\n", errorReasons);
|
var errorMessage = "------------\r\n" + string.Join("\r\n------------\r\n", errorReasons);
|
||||||
_activity?.SetTag("EndPublicRetryMessage", $"[预警计算] 已重新投递[{needRetryMetadata.Count}]条消息\r\n{errorMessage}");
|
_activity?.SetTag("EndPublicRetryMessage", $"[预警计算] 已重新投递[{needRetryMetadata.Count}]条消息\r\n{errorMessage}");
|
||||||
LogHelper.Warn($"[预警计算] 已重新投递[{needRetryMetadata.Count}]条消息\r\n{errorMessage}", true);
|
Log.Warning($"[预警计算] 已重新投递[{needRetryMetadata.Count}]条消息\r\n{errorMessage}", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4.进入死信的消息,投入到死信队列,等待人工处理
|
// 4.进入死信的消息,投入到死信队列,等待人工处理
|
||||||
if (needEnqueueDlxMetadata.Count > 0)
|
if (needEnqueueDlxMetadata.Count > 0)
|
||||||
{
|
{
|
||||||
_activity?.SetTag("StartPublicDLXMessage", $"[预警计算] 开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
|
_activity?.SetTag("StartPublicDLXMessage", $"[预警计算] 开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
|
||||||
LogHelper.Warn($"[预警计算] 开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
|
Log.Warning($"[预警计算] 开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
|
||||||
|
|
||||||
var tasks = needEnqueueDlxMetadata.Select(async metadata =>
|
var tasks = needEnqueueDlxMetadata.Select(async metadata =>
|
||||||
{
|
{
|
||||||
@ -200,7 +200,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
var errorReasons = needRetryMetadata.Select(x => x.LastErrorReason).ToHashSet();
|
var errorReasons = needRetryMetadata.Select(x => x.LastErrorReason).ToHashSet();
|
||||||
var errorMessage = "------------\r\n" + string.Join("\r\n------------\r\n", errorReasons);
|
var errorMessage = "------------\r\n" + string.Join("\r\n------------\r\n", errorReasons);
|
||||||
_activity?.SetTag("StartPublicDLXMessage", $"[预警计算] 已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息\r\n{errorMessage}");
|
_activity?.SetTag("StartPublicDLXMessage", $"[预警计算] 已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息\r\n{errorMessage}");
|
||||||
LogHelper.Warn($"[预警计算] 已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息\r\n{errorMessage}", true);
|
Log.Warning($"[预警计算] 已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息\r\n{errorMessage}", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,7 +271,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
if (ms.Count == 0) return;
|
if (ms.Count == 0) return;
|
||||||
var reasons = string.Join(",", ms.GroupBy(x => x.LastErrorReason).Select(x => x.Key));
|
var reasons = string.Join(",", ms.GroupBy(x => x.LastErrorReason).Select(x => x.Key));
|
||||||
_activity?.SetTag("AggregateNoSupport", reasons);
|
_activity?.SetTag("AggregateNoSupport", reasons);
|
||||||
LogHelper.Error($"预警信号类型不支持:{reasons}");
|
Log.Error($"预警信号类型不支持:{reasons}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
|
|||||||
@ -72,7 +72,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogHelper.Error(e);
|
Log.Error(e.ToString());
|
||||||
_activity?.SetTag("Exception", e.Message);
|
_activity?.SetTag("Exception", e.Message);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@ -192,7 +192,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
{
|
{
|
||||||
// 被取消不需要增加重试次数
|
// 被取消不需要增加重试次数
|
||||||
//needRetryMetadata.AddRange(needHandleMessage.Select(x => TrackSignalMetadata.FormMessageOrCreate(x, false, false, error: error)));
|
//needRetryMetadata.AddRange(needHandleMessage.Select(x => TrackSignalMetadata.FormMessageOrCreate(x, false, false, error: error)));
|
||||||
LogHelper.Warn($"处理被取消,消息会重新分配到其他Host,影响消息条数[{needHandleMessage.Count}]");
|
Log.Warning($"处理被取消,消息会重新分配到其他Host,影响消息条数[{needHandleMessage.Count}]");
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
if (needRetryMetadata.Count > 0)
|
if (needRetryMetadata.Count > 0)
|
||||||
{
|
{
|
||||||
_activity?.SetTag("StartPublicRetryMessage", $"[预警计算] 开始重新投递[{needRetryMetadata.Count}]条消息");
|
_activity?.SetTag("StartPublicRetryMessage", $"[预警计算] 开始重新投递[{needRetryMetadata.Count}]条消息");
|
||||||
LogHelper.Warn($"[预警计算] 开始重新投递[{needRetryMetadata.Count}]条消息");
|
Log.Warning($"[预警计算] 开始重新投递[{needRetryMetadata.Count}]条消息");
|
||||||
|
|
||||||
var tasks = needRetryMetadata.Select(async metadata =>
|
var tasks = needRetryMetadata.Select(async metadata =>
|
||||||
{
|
{
|
||||||
@ -227,14 +227,14 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
var errorReasons = needRetryMetadata.Select(x => x.LastErrorReason).ToHashSet();
|
var errorReasons = needRetryMetadata.Select(x => x.LastErrorReason).ToHashSet();
|
||||||
var errorMessage = "------------\r\n" + string.Join("\r\n------------\r\n", errorReasons);
|
var errorMessage = "------------\r\n" + string.Join("\r\n------------\r\n", errorReasons);
|
||||||
_activity?.SetTag("EndPublicRetryMessage", $"[预警计算] 已重新投递[{needRetryMetadata.Count}]条消息\r\n{errorMessage}");
|
_activity?.SetTag("EndPublicRetryMessage", $"[预警计算] 已重新投递[{needRetryMetadata.Count}]条消息\r\n{errorMessage}");
|
||||||
LogHelper.Warn($"[预警计算] 已重新投递[{needRetryMetadata.Count}]条消息\r\n{errorMessage}", true);
|
Log.Warning($"[预警计算] 已重新投递[{needRetryMetadata.Count}]条消息\r\n{errorMessage}", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4.进入死信的消息,投入到死信队列,等待人工处理
|
// 4.进入死信的消息,投入到死信队列,等待人工处理
|
||||||
if (needEnqueueDlxMetadata.Count > 0)
|
if (needEnqueueDlxMetadata.Count > 0)
|
||||||
{
|
{
|
||||||
_activity?.SetTag("StartPublicDLXMessage", $"[预警计算] 开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
|
_activity?.SetTag("StartPublicDLXMessage", $"[预警计算] 开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
|
||||||
LogHelper.Warn($"[预警计算] 开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
|
Log.Warning($"[预警计算] 开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
|
||||||
|
|
||||||
var tasks = needEnqueueDlxMetadata.Select(async metadata =>
|
var tasks = needEnqueueDlxMetadata.Select(async metadata =>
|
||||||
{
|
{
|
||||||
@ -252,7 +252,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
var errorReasons = needRetryMetadata.Select(x => x.LastErrorReason).ToHashSet();
|
var errorReasons = needRetryMetadata.Select(x => x.LastErrorReason).ToHashSet();
|
||||||
var errorMessage = "------------\r\n" + string.Join("\r\n------------\r\n", errorReasons);
|
var errorMessage = "------------\r\n" + string.Join("\r\n------------\r\n", errorReasons);
|
||||||
_activity?.SetTag("StartPublicDLXMessage", $"[预警计算] 已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息\r\n{errorMessage}");
|
_activity?.SetTag("StartPublicDLXMessage", $"[预警计算] 已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息\r\n{errorMessage}");
|
||||||
LogHelper.Warn($"[预警计算] 已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息\r\n{errorMessage}", true);
|
Log.Warning($"[预警计算] 已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息\r\n{errorMessage}", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,7 +323,7 @@ public sealed class WarningCalcBackgroundService : BackgroundService
|
|||||||
if (ms.Count == 0) return;
|
if (ms.Count == 0) return;
|
||||||
var reasons = string.Join(",", ms.GroupBy(x => x.LastErrorReason).Select(x => x.Key));
|
var reasons = string.Join(",", ms.GroupBy(x => x.LastErrorReason).Select(x => x.Key));
|
||||||
_activity?.SetTag("AggregateNoSupport", reasons);
|
_activity?.SetTag("AggregateNoSupport", reasons);
|
||||||
LogHelper.Error($"预警信号类型不支持:{reasons}");
|
Log.Error($"预警信号类型不支持:{reasons}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
|
|||||||
@ -64,7 +64,7 @@ public static class WarningCalcServiceExtension
|
|||||||
{
|
{
|
||||||
if (error.IsFatal)
|
if (error.IsFatal)
|
||||||
{
|
{
|
||||||
LogHelper.Error($"Kafka致命错误${error}");
|
Log.Error($"Kafka致命错误${error}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,9 +72,9 @@ public static class WarningCalcServiceExtension
|
|||||||
reportFuncWrapper ??= DebounceHelper.WrapMethod(TimeSpan.FromSeconds(5), () =>
|
reportFuncWrapper ??= DebounceHelper.WrapMethod(TimeSpan.FromSeconds(5), () =>
|
||||||
{
|
{
|
||||||
if (error.Code == ErrorCode.Local_Transport)
|
if (error.Code == ErrorCode.Local_Transport)
|
||||||
LogHelper.Error($"Kafka链接错误{error}");
|
Log.Error($"Kafka链接错误{error}");
|
||||||
else if (error.Code == ErrorCode.Local_AllBrokersDown)
|
else if (error.Code == ErrorCode.Local_AllBrokersDown)
|
||||||
LogHelper.Error($"Kafka所有Broker都挂了{error}");
|
Log.Error($"Kafka所有Broker都挂了{error}");
|
||||||
});
|
});
|
||||||
reportFuncWrapper.Debounce();
|
reportFuncWrapper.Debounce();
|
||||||
});
|
});
|
||||||
@ -124,7 +124,7 @@ public static class WarningCalcServiceExtension
|
|||||||
{
|
{
|
||||||
if (error.IsFatal)
|
if (error.IsFatal)
|
||||||
{
|
{
|
||||||
LogHelper.Error($"Kafka致命错误${error}");
|
Log.Error($"Kafka致命错误${error}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,9 +132,9 @@ public static class WarningCalcServiceExtension
|
|||||||
reportFuncWrapper ??= DebounceHelper.WrapMethod(TimeSpan.FromSeconds(5), () =>
|
reportFuncWrapper ??= DebounceHelper.WrapMethod(TimeSpan.FromSeconds(5), () =>
|
||||||
{
|
{
|
||||||
if (error.Code == ErrorCode.Local_Transport)
|
if (error.Code == ErrorCode.Local_Transport)
|
||||||
LogHelper.Error($"Kafka链接错误{error}");
|
Log.Error($"Kafka链接错误{error}");
|
||||||
else if (error.Code == ErrorCode.Local_AllBrokersDown)
|
else if (error.Code == ErrorCode.Local_AllBrokersDown)
|
||||||
LogHelper.Error($"Kafka所有Broker都挂了{error}");
|
Log.Error($"Kafka所有Broker都挂了{error}");
|
||||||
});
|
});
|
||||||
reportFuncWrapper.Debounce();
|
reportFuncWrapper.Debounce();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -44,7 +44,7 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
|
|||||||
var @event = System.Text.Json.JsonSerializer.Deserialize<InterfaceRelayForwardReplayEvent>(msg);
|
var @event = System.Text.Json.JsonSerializer.Deserialize<InterfaceRelayForwardReplayEvent>(msg);
|
||||||
if (@event == null)
|
if (@event == null)
|
||||||
{
|
{
|
||||||
LogHelper.Warn(
|
Log.Warning(
|
||||||
$"rabbit on queue received msg can't convert to {nameof(InterfaceRelayForwardReplayEvent)}");
|
$"rabbit on queue received msg can't convert to {nameof(InterfaceRelayForwardReplayEvent)}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogHelper.Error($"TrackPushCompletedEventHandler出错,错误信息:{ex}\r\n-----\r\n消息:{msg}");
|
Log.Error($"TrackPushCompletedEventHandler出错,错误信息:{ex}\r\n-----\r\n消息:{msg}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ public class TrackRefreshEventHandler(
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogHelper.Error($"TrackRefreshEventHandler出错,错误信息:{ex}\r\n-----\r\n消息:{msg}");
|
Log.Error($"TrackRefreshEventHandler出错,错误信息:{ex}\r\n-----\r\n消息:{msg}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,9 +12,9 @@ public class _EsInitService(
|
|||||||
[HttpGet("EsInit")]
|
[HttpGet("EsInit")]
|
||||||
public async Task EsInit()
|
public async Task EsInit()
|
||||||
{
|
{
|
||||||
LogHelper.Warn($"ES索引初始化开始 OperationUserId:[{CurrentUser.Id}]", true);
|
Log.Warning($"ES索引初始化开始 OperationUserId:[{CurrentUser.Id}]", true);
|
||||||
await trackDetailsEsRepository.MigrateAsync();
|
await trackDetailsEsRepository.MigrateAsync();
|
||||||
await warningDetailsEsRepository.CreateAliasAsync();
|
await warningDetailsEsRepository.CreateAliasAsync();
|
||||||
LogHelper.Warn($"ES索引初始化完成 OperationUserId:[{CurrentUser.Id}]", true);
|
Log.Warning($"ES索引初始化完成 OperationUserId:[{CurrentUser.Id}]", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@ public partial class OrderService
|
|||||||
inputVo.OrderIds = orderIds.ToArray();
|
inputVo.OrderIds = orderIds.ToArray();
|
||||||
var cnt = await _orderRepository.UpdateOrderPullConfigForServiceProviderAsync(inputVo);
|
var cnt = await _orderRepository.UpdateOrderPullConfigForServiceProviderAsync(inputVo);
|
||||||
|
|
||||||
LogHelper.Warn(
|
Log.Warning(
|
||||||
$"{CurrentUser.UserName}正在修改服务商拉取信息,本次共计影响了{orderIds.Count}个订单、{cnt}段拉取,请求参数是:{input.ToJson()}",
|
$"{CurrentUser.UserName}正在修改服务商拉取信息,本次共计影响了{orderIds.Count}个订单、{cnt}段拉取,请求参数是:{input.ToJson()}",
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -273,7 +273,7 @@ public partial class OrderService : ApplicationServiceBase
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogHelper.Error(ex);
|
Log.Error(ex.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|||||||
@ -79,7 +79,7 @@ public class TrackPullService : ApplicationServiceBase
|
|||||||
|
|
||||||
if (res.Code != GlobalConst.SuccessCode)
|
if (res.Code != GlobalConst.SuccessCode)
|
||||||
{
|
{
|
||||||
LogHelper.Error($"刷新轨迹失败:{res.ToJson()}");
|
Log.Error($"刷新轨迹失败:{res.ToJson()}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -139,7 +139,7 @@ public class TrackPushService : ApplicationServiceBase
|
|||||||
await _capPublisher.PublishAsync(GlobalConst.TrackManualPushSubscribe, trackPushEvent);
|
await _capPublisher.PublishAsync(GlobalConst.TrackManualPushSubscribe, trackPushEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogHelper.Info($"即将推送轨迹代码{input.TrackCode}给{orderIdTrackDict.Count}个订单");
|
Log.Information($"即将推送轨迹代码{input.TrackCode}给{orderIdTrackDict.Count}个订单");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -56,7 +56,7 @@ public class OrderPullStatusScanTask : ApplicationServiceBase
|
|||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
await RedisHelper.Client.DelAsync(redisKey);
|
await RedisHelper.Client.DelAsync(redisKey);
|
||||||
LogHelper.Error(e.ToString());
|
Log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -48,7 +48,7 @@ public class TrackButtomUpScanTask : ApplicationServiceBase
|
|||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
await RedisHelper.Client.DelAsync(redisKey);
|
await RedisHelper.Client.DelAsync(redisKey);
|
||||||
LogHelper.Error(e.ToString());
|
Log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return "ok";
|
return "ok";
|
||||||
|
|||||||
@ -84,7 +84,7 @@ public class TrackPullTask : ApplicationServiceBase, ISingletonDependency
|
|||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
await RedisHelper.Client.DelAsync(redisKey);
|
await RedisHelper.Client.DelAsync(redisKey);
|
||||||
LogHelper.Error(e.ToString());
|
Log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -116,7 +116,7 @@ public class TrackPullTask : ApplicationServiceBase, ISingletonDependency
|
|||||||
|
|
||||||
if (res.Code != GlobalConst.SuccessCode)
|
if (res.Code != GlobalConst.SuccessCode)
|
||||||
{
|
{
|
||||||
LogHelper.Error($"刷新轨迹失败:{res.ToJson()}");
|
Log.Error($"刷新轨迹失败:{res.ToJson()}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -59,7 +59,7 @@ public class TrackPushTask : ApplicationServiceBase
|
|||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
await RedisHelper.Client.DelAsync(redisKey);
|
await RedisHelper.Client.DelAsync(redisKey);
|
||||||
LogHelper.Error(e.ToString());
|
Log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -78,6 +78,6 @@ public class TrackPushTask : ApplicationServiceBase
|
|||||||
await Task.Delay(waitTime);
|
await Task.Delay(waitTime);
|
||||||
} while (rows == pageSize);
|
} while (rows == pageSize);
|
||||||
|
|
||||||
LogHelper.Info($"本次预警扫描了:{total}个订单");
|
Log.Information($"本次预警扫描了:{total}个订单");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -333,7 +333,7 @@ public class TrackOrderService : ApplicationServiceBase
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogHelper.Error(ex);
|
Log.Error(ex.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|||||||
@ -291,7 +291,7 @@ public class TrackPushService(
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogHelper.Error(ex);
|
Log.Error(ex.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|||||||
@ -50,7 +50,7 @@ public class InterfaceForwardService : ITransientDependency
|
|||||||
content.Headers.Add(nameof(other), other);
|
content.Headers.Add(nameof(other), other);
|
||||||
content.Headers.Add(nameof(sourceData), sourceData.ToString());
|
content.Headers.Add(nameof(sourceData), sourceData.ToString());
|
||||||
|
|
||||||
using var response = await client.PostAsync($"Itfx/BatchRequest?standardCode={upStreamCode}&supplierCode={serviceProviderCode}", content);
|
using var response = await client.PostAsync($"InterfaceForward/BatchRequest?standardCode={upStreamCode}&supplierCode={serviceProviderCode}", content);
|
||||||
|
|
||||||
var res = await response.Content.ReadAsStringAsync();
|
var res = await response.Content.ReadAsStringAsync();
|
||||||
if (!response.IsSuccessStatusCode)
|
if (!response.IsSuccessStatusCode)
|
||||||
|
|||||||
@ -15,6 +15,7 @@ using Hangfire.Redis.StackExchange;
|
|||||||
using InterfaceForward.Domain.Shared.Helpers;
|
using InterfaceForward.Domain.Shared.Helpers;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
using Microsoft.IdentityModel.Logging;
|
||||||
using RabbitMQ.Client;
|
using RabbitMQ.Client;
|
||||||
using Savorboard.CAP.InMemoryMessageQueue;
|
using Savorboard.CAP.InMemoryMessageQueue;
|
||||||
using TrackCenter.Application.Kafka;
|
using TrackCenter.Application.Kafka;
|
||||||
@ -74,14 +75,14 @@ public class TrackCenterApplicationModule : FakeModule
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
LogHelper.Error($@"
|
Log.Error($@"
|
||||||
|-CAP失败回调事件:
|
|-CAP失败回调事件:
|
||||||
|-处理类型:{(faileCalback.MessageType == MessageType.Subscribe ? "消费消息达到最大重试次数,需要开发人员介入" : "生产消息推送失败")}
|
|-处理类型:{(faileCalback.MessageType == MessageType.Subscribe ? "消费消息达到最大重试次数,需要开发人员介入" : "生产消息推送失败")}
|
||||||
|-头部信息:{faileCalback.Message.Headers.ToJson()}");
|
|-头部信息:{faileCalback.Message.Headers.ToJson()}");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogHelper.Error("【严重】CAP失败回调事件发生未处理异常" + ex);
|
Log.Error("【严重】CAP失败回调事件发生未处理异常" + ex);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}).AddSubscribeFilter<CapFilter>();
|
}).AddSubscribeFilter<CapFilter>();
|
||||||
@ -95,7 +96,7 @@ public class TrackCenterApplicationModule : FakeModule
|
|||||||
capOptions.UseInMemoryMessageQueue();
|
capOptions.UseInMemoryMessageQueue();
|
||||||
capOptions.UseDashboard();
|
capOptions.UseDashboard();
|
||||||
}).AddSubscribeFilter<CapFilter>();
|
}).AddSubscribeFilter<CapFilter>();
|
||||||
LogHelper.Info("-- 当前为本地环境,用内存存储和内存队列");
|
Log.Information("-- 当前为本地环境,用内存存储和内存队列");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@ -1,121 +0,0 @@
|
|||||||
using System.Net.Http.Headers;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.Json;
|
|
||||||
using Fake.SyncEx;
|
|
||||||
using Serilog;
|
|
||||||
|
|
||||||
namespace TrackCenter.Domain.Extensions;
|
|
||||||
|
|
||||||
public static class LogHelper
|
|
||||||
{
|
|
||||||
private static FeiShuNoticeOptions _options = null!;
|
|
||||||
|
|
||||||
public static void Init(FeiShuNoticeOptions options)
|
|
||||||
{
|
|
||||||
_options = options;
|
|
||||||
}
|
|
||||||
public static void Info(string msg, bool isSend = false)
|
|
||||||
{
|
|
||||||
Log.Information(msg);
|
|
||||||
if (!isSend)
|
|
||||||
return;
|
|
||||||
SyncContext.Run(() => NoticeAsync(msg, isSend, "Info"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Warn(string msg, bool isSend = false)
|
|
||||||
{
|
|
||||||
Log.Warning(msg);
|
|
||||||
if (!isSend)
|
|
||||||
return;
|
|
||||||
SyncContext.Run(() => NoticeAsync(msg, isSend, "Warn"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Error(string msg, bool isSend = true)
|
|
||||||
{
|
|
||||||
Log.Error(msg);
|
|
||||||
SyncContext.Run(() => NoticeAsync(msg, isSend, "Error"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Error(Exception error, bool isSendNotice = true)
|
|
||||||
{
|
|
||||||
Error(error.ToString(), isSendNotice);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static async Task NoticeAsync(string content, bool isSend, string subTitle = "")
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
// 调试模式下不发送通知
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
if (!isSend)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_options.Webhook.IsNullOrWhiteSpace())
|
|
||||||
{
|
|
||||||
Log.Warning("未配置飞书webhook");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var title = subTitle.IsNullOrWhiteSpace()
|
|
||||||
? _options.TitlePrefix
|
|
||||||
: _options.TitlePrefix + "_" + subTitle;
|
|
||||||
|
|
||||||
await HandleNoticeAsync(content, title);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static async Task HandleNoticeAsync(string content, string title)
|
|
||||||
{
|
|
||||||
var message = new
|
|
||||||
{
|
|
||||||
msg_type = "post",
|
|
||||||
content = new
|
|
||||||
{
|
|
||||||
post = new
|
|
||||||
{
|
|
||||||
zh_cn = new
|
|
||||||
{
|
|
||||||
title,
|
|
||||||
content = new List<object>()
|
|
||||||
{
|
|
||||||
new List<object>()
|
|
||||||
{
|
|
||||||
new
|
|
||||||
{
|
|
||||||
tag = "text",
|
|
||||||
text = content + Environment.NewLine
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
using var httpClient = new HttpClient();
|
|
||||||
httpClient.Timeout = TimeSpan.FromSeconds(_options.Timeout);
|
|
||||||
using var httpContent = new StringContent(JsonSerializer.Serialize(message), Encoding.UTF8);
|
|
||||||
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
|
|
||||||
await httpClient.PostAsync(_options.Webhook, httpContent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class FeiShuNoticeOptions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 飞书通知webhook
|
|
||||||
/// </summary>
|
|
||||||
public string Webhook { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 消息标题前缀
|
|
||||||
/// </summary>
|
|
||||||
public string TitlePrefix { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 超时时间 秒
|
|
||||||
/// </summary>
|
|
||||||
public int Timeout { get; set; } = 20;
|
|
||||||
}
|
|
||||||
@ -12,7 +12,7 @@
|
|||||||
<PackageReference Include="Fake.SqlSugarCore" Version="$(FakePackageVersion)" />
|
<PackageReference Include="Fake.SqlSugarCore" Version="$(FakePackageVersion)" />
|
||||||
|
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="Serilog" Version="4.3.0" />
|
<PackageReference Include="Fake.Serilog" Version="$(FakePackageVersion)" />
|
||||||
<PackageReference Include="Fake.DomainDrivenDesign" Version="$(FakePackageVersion)" />
|
<PackageReference Include="Fake.DomainDrivenDesign" Version="$(FakePackageVersion)" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,5 @@ public class TrackCenterDomainModule : FakeModule
|
|||||||
{
|
{
|
||||||
public override void ConfigureServices(ServiceConfigurationContext context)
|
public override void ConfigureServices(ServiceConfigurationContext context)
|
||||||
{
|
{
|
||||||
var configuration = context.Services.GetConfiguration();
|
|
||||||
LogHelper.Init(configuration.GetSection("FeiShuNotice").Get<FeiShuNoticeOptions>()!);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,8 +5,6 @@ using Elasticsearch.Net;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Nest;
|
using Nest;
|
||||||
using Serilog;
|
|
||||||
using TrackCenter.Domain.Extensions;
|
|
||||||
|
|
||||||
namespace TrackCenter.Repository.ES;
|
namespace TrackCenter.Repository.ES;
|
||||||
|
|
||||||
@ -67,7 +65,7 @@ public class ConnectionFactory : ISingletonDependency
|
|||||||
.OnRequestCompleted(apiCallDetails =>
|
.OnRequestCompleted(apiCallDetails =>
|
||||||
{
|
{
|
||||||
var infos = GetInfosFromApiCallDetails(apiCallDetails);
|
var infos = GetInfosFromApiCallDetails(apiCallDetails);
|
||||||
LogHelper.Info($"{Environment.NewLine}{infos}{Environment.NewLine}");
|
Console.WriteLine($"{Environment.NewLine}{infos}{Environment.NewLine}");
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
|
using Fake.FeiShu;
|
||||||
using Nest;
|
using Nest;
|
||||||
using TrackCenter.Domain.Aggregates.OrderAggregate;
|
using TrackCenter.Domain.Aggregates.OrderAggregate;
|
||||||
using TrackCenter.Domain.Consts;
|
using TrackCenter.Domain.Consts;
|
||||||
using TrackCenter.Domain.Extensions;
|
|
||||||
using TrackCenter.Repository.Aggregates.OrderAggregate;
|
using TrackCenter.Repository.Aggregates.OrderAggregate;
|
||||||
using TrackCenter.Repository.ES;
|
using TrackCenter.Repository.ES;
|
||||||
|
using LogLevel = Microsoft.Extensions.Logging.LogLevel;
|
||||||
|
|
||||||
namespace TrackCenter.Repository.Repositories;
|
namespace TrackCenter.Repository.Repositories;
|
||||||
|
|
||||||
@ -11,8 +12,11 @@ public class OrderOperationRecordEsRepository : ElasticSearchContextAbstract<Ord
|
|||||||
IOrderOperationRecordEsRepository,
|
IOrderOperationRecordEsRepository,
|
||||||
ITransientDependency
|
ITransientDependency
|
||||||
{
|
{
|
||||||
public OrderOperationRecordEsRepository(ConnectionFactory connectionFactory) : base(connectionFactory)
|
private readonly IFeiShuNotificationService _feiShuNotification;
|
||||||
|
|
||||||
|
public OrderOperationRecordEsRepository(ConnectionFactory connectionFactory, IFeiShuNotificationService feiShuNotification) : base(connectionFactory)
|
||||||
{
|
{
|
||||||
|
_feiShuNotification = feiShuNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddAsync(OrderOperationRecordIndex index)
|
public async Task AddAsync(OrderOperationRecordIndex index)
|
||||||
@ -26,7 +30,7 @@ public class OrderOperationRecordEsRepository : ElasticSearchContextAbstract<Ord
|
|||||||
|
|
||||||
if (!r.IsValid)
|
if (!r.IsValid)
|
||||||
{
|
{
|
||||||
LogHelper.Error($"订单操作记录写入es失败,原因:{r.DebugInformation}。");
|
_feiShuNotification.Enqueue($"订单操作记录写入es失败,原因:{r.DebugInformation}。", LogLevel.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,15 +1,22 @@
|
|||||||
|
using Fake.FeiShu;
|
||||||
using InterfaceForward.Domain.Shared.Helpers;
|
using InterfaceForward.Domain.Shared.Helpers;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using TrackCenter.Domain;
|
using TrackCenter.Domain;
|
||||||
using TrackCenter.Domain.Aggregates.OrderAggregate;
|
using TrackCenter.Domain.Aggregates.OrderAggregate;
|
||||||
using TrackCenter.Domain.Consts;
|
using TrackCenter.Domain.Consts;
|
||||||
using TrackCenter.Domain.Dtos.Order;
|
using TrackCenter.Domain.Dtos.Order;
|
||||||
using TrackCenter.Domain.Enums;
|
using TrackCenter.Domain.Enums;
|
||||||
using TrackCenter.Domain.Extensions;
|
|
||||||
|
|
||||||
namespace TrackCenter.Repository.Repositories;
|
namespace TrackCenter.Repository.Repositories;
|
||||||
|
|
||||||
public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, ITransientDependency
|
public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, ITransientDependency
|
||||||
{
|
{
|
||||||
|
private readonly IFeiShuNotificationService _feiShuNotification;
|
||||||
|
|
||||||
|
public OrderRepository(IFeiShuNotificationService feiShuNotification)
|
||||||
|
{
|
||||||
|
_feiShuNotification = feiShuNotification;
|
||||||
|
}
|
||||||
public async Task<PagedResult<TrackOrderVO>> GetTrackOrderPagedList(GetPageTrackOrderInputVO input)
|
public async Task<PagedResult<TrackOrderVO>> GetTrackOrderPagedList(GetPageTrackOrderInputVO input)
|
||||||
{
|
{
|
||||||
//查询完去重
|
//查询完去重
|
||||||
@ -474,15 +481,13 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
|||||||
.SetColumns(x => x.PullStatus == TrackPullStatus.Pulling)
|
.SetColumns(x => x.PullStatus == TrackPullStatus.Pulling)
|
||||||
.Where(x => x.PullStatus == TrackPullStatus.SilenceBeforeStart && x.StartTime < DateTime.Now)
|
.Where(x => x.PullStatus == TrackPullStatus.SilenceBeforeStart && x.StartTime < DateTime.Now)
|
||||||
.ExecuteCommandAsync();
|
.ExecuteCommandAsync();
|
||||||
LogHelper.Info(
|
_feiShuNotification.Enqueue($"{cnt1}条订单的拉取状态由{nameof(TrackPullStatus.SilenceBeforeStart)}更新为{nameof(TrackPullStatus.Pulling)}", LogLevel.Error);
|
||||||
$"{cnt1}条订单的拉取状态由{nameof(TrackPullStatus.SilenceBeforeStart)}更新为{nameof(TrackPullStatus.Pulling)}");
|
|
||||||
|
|
||||||
var cnt2 = await Context.Updateable<OrderPullStatusEntity>()
|
var cnt2 = await Context.Updateable<OrderPullStatusEntity>()
|
||||||
.SetColumns(x => x.PullStatus == TrackPullStatus.Completed)
|
.SetColumns(x => x.PullStatus == TrackPullStatus.Completed)
|
||||||
.Where(x => x.PullStatus == TrackPullStatus.SilenceAfterEnd && x.EndTime < DateTime.Now)
|
.Where(x => x.PullStatus == TrackPullStatus.SilenceAfterEnd && x.EndTime < DateTime.Now)
|
||||||
.ExecuteCommandAsync();
|
.ExecuteCommandAsync();
|
||||||
LogHelper.Info(
|
_feiShuNotification.Enqueue($"{cnt2}条订单的拉取状态由{nameof(TrackPullStatus.SilenceAfterEnd)}更新为{nameof(TrackPullStatus.Completed)}", LogLevel.Error);
|
||||||
$"{cnt2}条订单的拉取状态由{nameof(TrackPullStatus.SilenceAfterEnd)}更新为{nameof(TrackPullStatus.Completed)}");
|
|
||||||
|
|
||||||
return cnt1 + cnt2;
|
return cnt1 + cnt2;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
|
using Fake.FeiShu;
|
||||||
using Nest;
|
using Nest;
|
||||||
using TrackCenter.Domain.Aggregates.TrackPushAggregate;
|
using TrackCenter.Domain.Aggregates.TrackPushAggregate;
|
||||||
using TrackCenter.Domain.Consts;
|
using TrackCenter.Domain.Consts;
|
||||||
using TrackCenter.Domain.Extensions;
|
|
||||||
using TrackCenter.Repository.ES;
|
using TrackCenter.Repository.ES;
|
||||||
|
using LogLevel = Microsoft.Extensions.Logging.LogLevel;
|
||||||
|
|
||||||
namespace TrackCenter.Repository.Repositories;
|
namespace TrackCenter.Repository.Repositories;
|
||||||
|
|
||||||
@ -10,8 +11,11 @@ public class TrackPushRecordEsRepository : ElasticSearchContextAbstract<TrackPus
|
|||||||
ITrackPushRecordEsRepository,
|
ITrackPushRecordEsRepository,
|
||||||
ITransientDependency
|
ITransientDependency
|
||||||
{
|
{
|
||||||
public TrackPushRecordEsRepository(ConnectionFactory connectionFactory) : base(connectionFactory)
|
private readonly IFeiShuNotificationService _feiShuNotification;
|
||||||
|
|
||||||
|
public TrackPushRecordEsRepository(ConnectionFactory connectionFactory, IFeiShuNotificationService feiShuNotification) : base(connectionFactory)
|
||||||
{
|
{
|
||||||
|
_feiShuNotification = feiShuNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddAsync(TrackPushRecordIndex index)
|
public async Task AddAsync(TrackPushRecordIndex index)
|
||||||
@ -26,7 +30,7 @@ public class TrackPushRecordEsRepository : ElasticSearchContextAbstract<TrackPus
|
|||||||
|
|
||||||
if (!r.IsValid)
|
if (!r.IsValid)
|
||||||
{
|
{
|
||||||
LogHelper.Error($"轨迹推送记录写入es失败,原因:{r.DebugInformation}。");
|
_feiShuNotification.Enqueue($"轨迹推送记录写入es失败,原因:{r.DebugInformation}。", LogLevel.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user