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; |
||||
using System.Collections.Generic; |
|
||||
using JetBrains.Annotations; |
|
||||
using Volo.Abp.ObjectExtending; |
|
||||
|
|
||||
namespace EasyAbp.EShop.Payments.Refunds.Dtos |
namespace EasyAbp.EShop.Payments.Refunds.Dtos |
||||
{ |
{ |
||||
[Serializable] |
[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