Browse Source

Order.PaymentId should be set to null when the payment is canceled.

Close #78
pull/96/head
gdlcf88 6 years ago
parent
commit
4f76ee3fc4
  1. 35
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/PaymentCanceledEventHandler.cs
  2. 10
      modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Payments/EShopPaymentCanceledEto.cs
  3. 48
      modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/PaymentSynchronizer.cs

35
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/PaymentCanceledEventHandler.cs

@ -0,0 +1,35 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Payments;
using EasyAbp.EShop.Payments.Payments;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Uow;
namespace EasyAbp.EShop.Orders.Orders
{
public class PaymentCanceledEventHandler : IDistributedEventHandler<EShopPaymentCanceledEto>, ITransientDependency
{
private readonly IOrderRepository _orderRepository;
public PaymentCanceledEventHandler(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
}
[UnitOfWork(true)]
public virtual async Task HandleEventAsync(EShopPaymentCanceledEto eventData)
{
foreach (var paymentItem in eventData.Payment.PaymentItems.Where(item =>
item.ItemType == PaymentsConsts.PaymentItemType))
{
var order = await _orderRepository.GetAsync(Guid.Parse(paymentItem.ItemKey));
order.SetPaymentId(null);
await _orderRepository.UpdateAsync(order, true);
}
}
}
}

10
modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Payments/EShopPaymentCanceledEto.cs

@ -0,0 +1,10 @@
using System;
namespace EasyAbp.EShop.Payments.Payments
{
[Serializable]
public class EShopPaymentCanceledEto
{
public EShopPaymentEto Payment { get; set; }
}
}

48
modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/PaymentSynchronizer.cs

@ -68,16 +68,37 @@ namespace EasyAbp.EShop.Payments.Payments
if (payment.CompletionTime.HasValue)
{
_unitOfWorkManager.Current.OnCompleted(async () =>
PublishPaymentCompletedEventOnUowCompleted(payment);
}
if (payment.CanceledTime.HasValue)
{
PublishPaymentCanceledEventOnUowCompleted(payment);
}
}
protected virtual void PublishPaymentCanceledEventOnUowCompleted(Payment payment)
{
_unitOfWorkManager.Current.OnCompleted(async () =>
{
await _distributedEventBus.PublishAsync(new EShopPaymentCanceledEto
{
await _distributedEventBus.PublishAsync(new EShopPaymentCompletedEto
{
Payment = _objectMapper.Map<Payment, EShopPaymentEto>(payment)
});
Payment = _objectMapper.Map<Payment, EShopPaymentEto>(payment)
});
}
});
}
protected virtual void PublishPaymentCompletedEventOnUowCompleted(Payment payment)
{
_unitOfWorkManager.Current.OnCompleted(async () =>
{
await _distributedEventBus.PublishAsync(new EShopPaymentCompletedEto
{
Payment = _objectMapper.Map<Payment, EShopPaymentEto>(payment)
});
});
}
[UnitOfWork(true)]
public virtual async Task HandleEventAsync(EntityUpdatedEto<PaymentEto> eventData)
{
@ -97,13 +118,12 @@ namespace EasyAbp.EShop.Payments.Payments
if (eventData.Entity.CompletionTime.HasValue && !payment.CompletionTime.HasValue)
{
_unitOfWorkManager.Current.OnCompleted(async () =>
{
await _distributedEventBus.PublishAsync(new EShopPaymentCompletedEto
{
Payment = _objectMapper.Map<Payment, EShopPaymentEto>(payment)
});
});
PublishPaymentCompletedEventOnUowCompleted(payment);
}
if (eventData.Entity.CanceledTime.HasValue && !payment.CanceledTime.HasValue)
{
PublishPaymentCanceledEventOnUowCompleted(payment);
}
_objectMapper.Map(eventData.Entity, payment);

Loading…
Cancel
Save