using Fake.DependencyInjection; using Fake.EventBus; using Fake.UnitOfWork; using Microsoft.Extensions.Logging; using Oms.Application.Dtos.Orders; using Oms.Application.Services.Orders; using Oms.Domain.OrdersAggregate.Consts; namespace Oms.Application.Messaging.ParcelCreate; /// /// 处理创单后上门揽收挂接事件。 /// public sealed class OrderParcelPickupAttachEventHandler( PickupOrderService pickupOrderService, IUnitOfWorkManager unitOfWorkManager, ILogger logger) : IEventHandler, ITransientDependency { public async Task HandleAsync( OrderParcelPickupAttachIntegrationEvent @event, CancellationToken cancellationToken) { using var unitOfWork = unitOfWorkManager.Begin(); try { await pickupOrderService.CreateForParcelInternalAsync(new PickupOrderCreateInput { CustomerId = @event.CustomerId, SenderAddressId = @event.SenderAddressId, Direction = PickupDirectionCodes.NormalizeOrDefault(@event.PickupDirection), WarehouseId = @event.WarehouseId, CarrierCode = @event.CarrierCode, CarrierService = @event.CarrierService, ExpectPickupTime = @event.ExpectPickupTime, OrderIds = [@event.OrderId], Remark = null }); } catch (Exception ex) { // 与原同步路径一致:揽收失败不回滚物流单,仅记日志(列表可补建) logger.LogWarning( ex, "Pickup attach failed OrderId={OrderId}", @event.OrderId); } await unitOfWork.CompleteAsync(cancellationToken); } }