| | |
| | | using LifePayment.Application.Contracts; |
| | | using LifePayment.Domain; |
| | | using LifePayment.Domain.LifePay; |
| | | using LifePayment.Domain.Models; |
| | | using LifePayment.Domain.Shared; |
| | | using Microsoft.EntityFrameworkCore; |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | |
| | | using System.Threading.Tasks; |
| | | using Volo.Abp.Application.Services; |
| | | using Volo.Abp.Domain.Repositories; |
| | | using Microsoft.EntityFrameworkCore; |
| | | using ZeroD.Util; |
| | | using LifePayment.Domain; |
| | | using ZeroD.Util.Fadd; |
| | | using static LifePayment.Domain.Shared.LifePaymentConstant; |
| | | using Newtonsoft.Json; |
| | | |
| | | namespace LifePayment.Application.LifePay |
| | | { |
| | |
| | | var query = await _aliPayApi.QueryAlipayTradeRefund(new OrderInQuiryInput() { OutTradeNo = input.OrderNo, OutRefundNo = input.OutRefundNo }); |
| | | if (query.Code == AlipayResultCode.Success && query.RefundStatus == AlipayRefundStatus.Success) |
| | | { |
| | | data.OrderNo = input.OutRefundNo; |
| | | data.OrderNo = input.OrderNo; |
| | | data.ExtraProperties = JsonConvert.SerializeObject(query); |
| | | data.FinishTime = Convert.ToDateTime(query.GmtRefundPay); |
| | | data.Amount = Convert.ToDecimal(query.RefundAmount); |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取退款平台流水详情 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public async Task<GetRefundPlatformTradeDetailOutput> GetRefundPlatformTradeDetail(string orderNo) |
| | | { |
| | | var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在"); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(order.LifePayRefundStatus != LifePayRefundStatusEnum.待退款 && order.LifePayRefundStatus != LifePayRefundStatusEnum.退款中, "当前订单状态无法查看退款流水"); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(order.RefundOrderNo.IsNullOrEmpty(), "不存在退款流水订单"); |
| | | |
| | | var result = new GetRefundPlatformTradeDetailOutput(); |
| | | |
| | | if (order.LifePayType == LifePayTypeEnum.AliPay) |
| | | { |
| | | var query = await _aliPayApi.QueryAlipayTradeRefund(new OrderInQuiryInput() { OutTradeNo = order.OrderNo, OutRefundNo = order.RefundOrderNo }); |
| | | result.OrderNo = order.OrderNo; |
| | | result.RefundOrderNo = order.RefundOrderNo; |
| | | result.OutOrderNo = query.TradeNo; |
| | | result.LifePayType = LifePayTypeEnum.AliPay; |
| | | result.RefundTime = Convert.ToDateTime(order.RefundTime); |
| | | result.RefundSuccessTime = Convert.ToDateTime(query.GmtRefundPay); |
| | | result.RefundPlatformStatus = MapWxpayRefundStatusToPlatformEnum(query.RefundStatus); |
| | | } |
| | | else if (order.LifePayType == LifePayTypeEnum.WxPay) |
| | | { |
| | | var query = await _wxPayApi.WxPayDomesticRefundsQuery(order.RefundOrderNo); |
| | | result.OrderNo = order.OrderNo; |
| | | result.RefundOrderNo = order.RefundOrderNo; |
| | | result.OutOrderNo = query.TransactionId; |
| | | result.LifePayType = LifePayTypeEnum.WxPay; |
| | | result.RefundTime = Convert.ToDateTime(query.CreateTime); |
| | | result.RefundSuccessTime = Convert.ToDateTime(query.SuccessTime); |
| | | result.RefundPlatformStatus = MapWxpayRefundStatusToPlatformEnum(query.Status); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 支付宝退款状态映射到通用退款平台状态(Switch 版本) |
| | | /// </summary> |
| | | /// <param name="alipayStatus">支付宝退款状态</param> |
| | | /// <returns>通用退款平台状态</returns> |
| | | public static RefundPlatformStatusEnum MapAlipayRefundStatusToPlatformEnum(string alipayRefundStatus) |
| | | { |
| | | return alipayRefundStatus switch |
| | | { |
| | | AlipayRefundStatus.Success => RefundPlatformStatusEnum.SUCCESS, |
| | | _ => RefundPlatformStatusEnum.PROCESSING |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 微信退款状态映射到通用退款平台状态(Switch 版本) |
| | | /// </summary> |
| | | /// <param name="wxPayRefundStatus">微信退款状态</param> |
| | | /// <returns>通用退款平台状态</returns> |
| | | public static RefundPlatformStatusEnum MapWxpayRefundStatusToPlatformEnum(string wxPayRefundStatus) |
| | | { |
| | | return wxPayRefundStatus switch |
| | | { |
| | | WxPayRefundStatus.退款成功 => RefundPlatformStatusEnum.SUCCESS, |
| | | WxPayRefundStatus.退款关闭 => RefundPlatformStatusEnum.CLOSED, |
| | | WxPayRefundStatus.退款处理中 => RefundPlatformStatusEnum.PROCESSING, |
| | | _ => RefundPlatformStatusEnum.ABNORMAL |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 统计所有消费流水 |
| | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | } |