zhengyiming
4 天以前 a5f0843b6b8f1d12ba8d100c81461386b80d7883
LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
@@ -1,7 +1,10 @@
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;
@@ -9,11 +12,9 @@
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
{
@@ -297,7 +298,7 @@
                            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);
@@ -336,8 +337,74 @@
            }
        }
        /// <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>
        /// 统计所有消费流水
@@ -587,6 +654,5 @@
        }
        #endregion
    }
}