mirror of https://github.com/EasyAbp/EShop.git
6 changed files with 187 additions and 23 deletions
@ -1,23 +1,9 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.ObjectExtending; |
|||
|
|||
namespace EasyAbp.EShop.Payments.Refunds.Dtos |
|||
{ |
|||
[Serializable] |
|||
public class CreateEShopRefundItemInput : ExtensibleObject |
|||
public class CreateEShopRefundItemInput : CreateEShopRefundItemInfoModel |
|||
{ |
|||
public Guid OrderId { get; set; } |
|||
|
|||
[CanBeNull] |
|||
public string CustomerRemark { get; set; } |
|||
|
|||
[CanBeNull] |
|||
public string StaffRemark { get; set; } |
|||
|
|||
public List<OrderLineRefundInfoModel> OrderLines { get; set; } = new(); |
|||
|
|||
public List<OrderExtraFeeRefundInfoModel> OrderExtraFees { get; set; } = new(); |
|||
} |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.ObjectExtending; |
|||
|
|||
namespace EasyAbp.EShop.Payments.Refunds; |
|||
|
|||
[Serializable] |
|||
public class CreateEShopRefundItemInfoModel : ExtensibleObject |
|||
{ |
|||
public Guid OrderId { get; set; } |
|||
|
|||
[CanBeNull] |
|||
public string CustomerRemark { get; set; } |
|||
|
|||
[CanBeNull] |
|||
public string StaffRemark { get; set; } |
|||
|
|||
public List<OrderLineRefundInfoModel> OrderLines { get; set; } = new(); |
|||
|
|||
public List<OrderExtraFeeRefundInfoModel> OrderExtraFees { get; set; } = new(); |
|||
} |
|||
@ -0,0 +1,34 @@ |
|||
using System; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.MultiTenancy; |
|||
|
|||
namespace EasyAbp.EShop.Payments.Refunds; |
|||
|
|||
[Serializable] |
|||
public class RefundOrderEto : CreateEShopRefundItemInfoModel, IMultiTenant |
|||
{ |
|||
public Guid? TenantId { get; set; } |
|||
|
|||
public Guid StoreId { get; set; } |
|||
|
|||
public Guid PaymentId { get; set; } |
|||
|
|||
[CanBeNull] |
|||
public string DisplayReason { get; set; } |
|||
|
|||
protected RefundOrderEto() |
|||
{ |
|||
} |
|||
|
|||
public RefundOrderEto(Guid? tenantId, Guid orderId, Guid storeId, Guid paymentId, [CanBeNull] string displayReason, |
|||
[CanBeNull] string customerRemark, [CanBeNull] string staffRemark) |
|||
{ |
|||
TenantId = tenantId; |
|||
OrderId = orderId; |
|||
StoreId = storeId; |
|||
PaymentId = paymentId; |
|||
DisplayReason = displayReason; |
|||
CustomerRemark = customerRemark; |
|||
StaffRemark = staffRemark; |
|||
} |
|||
} |
|||
@ -0,0 +1,65 @@ |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using EasyAbp.EShop.Payments.Payments; |
|||
using EasyAbp.PaymentService.Payments; |
|||
using EasyAbp.PaymentService.Refunds; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.EventBus.Distributed; |
|||
using Volo.Abp.Json; |
|||
|
|||
namespace EasyAbp.EShop.Payments.Refunds; |
|||
|
|||
public class RefundOrderEventHandler : IDistributedEventHandler<RefundOrderEto>, ITransientDependency |
|||
{ |
|||
private readonly IJsonSerializer _jsonSerializer; |
|||
private readonly IPaymentRepository _paymentRepository; |
|||
private readonly IDistributedEventBus _distributedEventBus; |
|||
|
|||
public RefundOrderEventHandler( |
|||
IJsonSerializer jsonSerializer, |
|||
IPaymentRepository paymentRepository, |
|||
IDistributedEventBus distributedEventBus) |
|||
{ |
|||
_jsonSerializer = jsonSerializer; |
|||
_paymentRepository = paymentRepository; |
|||
_distributedEventBus = distributedEventBus; |
|||
} |
|||
|
|||
public virtual async Task HandleEventAsync(RefundOrderEto eventData) |
|||
{ |
|||
var refundAmount = eventData.OrderLines.Sum(x => x.TotalAmount) + |
|||
eventData.OrderExtraFees.Sum(x => x.TotalAmount); |
|||
|
|||
var payment = await _paymentRepository.GetAsync(eventData.PaymentId); |
|||
|
|||
var paymentItem = payment.PaymentItems.Single(x => x.ItemKey == eventData.OrderId.ToString()); |
|||
|
|||
var createRefundItemInput = new CreateRefundItemInput |
|||
{ |
|||
PaymentItemId = paymentItem.Id, |
|||
RefundAmount = refundAmount, |
|||
CustomerRemark = eventData.CustomerRemark, |
|||
StaffRemark = eventData.StaffRemark |
|||
}; |
|||
|
|||
createRefundItemInput.SetProperty(nameof(RefundItem.StoreId), eventData.StoreId); |
|||
createRefundItemInput.SetProperty(nameof(RefundItem.OrderId), eventData.OrderId); |
|||
createRefundItemInput.SetProperty(nameof(RefundItem.OrderLines), |
|||
_jsonSerializer.Serialize(eventData.OrderLines)); |
|||
createRefundItemInput.SetProperty(nameof(RefundItem.OrderExtraFees), |
|||
_jsonSerializer.Serialize(eventData.OrderExtraFees)); |
|||
|
|||
var eto = new RefundPaymentEto(eventData.TenantId, new CreateRefundInput |
|||
{ |
|||
PaymentId = eventData.PaymentId, |
|||
DisplayReason = eventData.DisplayReason, |
|||
CustomerRemark = eventData.CustomerRemark, |
|||
StaffRemark = eventData.StaffRemark, |
|||
RefundItems = new List<CreateRefundItemInput> { createRefundItemInput } |
|||
}); |
|||
|
|||
await _distributedEventBus.PublishAsync(eto); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue