All checks were successful
Build and Deploy / deploy (push) Successful in 1m1s
新增获取下游文件接口;事件发布统一走事务性 UoW,避免批量预报等按钮报 Outbox 错误。 Co-authored-by: Cursor <cursoragent@cursor.com>
51 lines
1.7 KiB
C#
51 lines
1.7 KiB
C#
using Fake.DependencyInjection;
|
|
using Fake.EventBus;
|
|
using Fake.UnitOfWork;
|
|
using Oms.Application.Messaging;
|
|
using Microsoft.Extensions.Logging;
|
|
using Oms.Application.Integrations.SmallBagTrack;
|
|
|
|
namespace Oms.Application.Messaging.OrderSideEffects;
|
|
|
|
public sealed class OrderLifecycleTrackAppendEventHandler(
|
|
ISmallBagTrackOrderClient trackClient,
|
|
IUnitOfWorkManager unitOfWorkManager,
|
|
ILogger<OrderLifecycleTrackAppendEventHandler> logger)
|
|
: IEventHandler<OrderLifecycleTrackAppendIntegrationEvent>, ITransientDependency
|
|
{
|
|
public async Task HandleAsync(
|
|
OrderLifecycleTrackAppendIntegrationEvent @event,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(@event.OrderNo) || string.IsNullOrWhiteSpace(@event.TrackCode))
|
|
{
|
|
logger.LogWarning(
|
|
"Lifecycle track append skipped empty OrderNo/TrackCode OrderId={OrderId}",
|
|
@event.OrderId);
|
|
return;
|
|
}
|
|
|
|
using var unitOfWork = unitOfWorkManager.Begin(OmsOutboxUnitOfWork.Transactional());
|
|
try
|
|
{
|
|
await trackClient.AppendLifecycleTrackAsync(
|
|
@event.OrderNo,
|
|
@event.TrackCode,
|
|
@event.Authorization,
|
|
cancellationToken);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// 轨迹失败不反复打满队列;与原 Task.Run 吞异常策略一致
|
|
logger.LogWarning(
|
|
ex,
|
|
"Lifecycle track append failed OrderId={OrderId} OrderNo={OrderNo} TrackCode={TrackCode}",
|
|
@event.OrderId,
|
|
@event.OrderNo,
|
|
@event.TrackCode);
|
|
}
|
|
|
|
await unitOfWork.CompleteAsync(cancellationToken);
|
|
}
|
|
}
|