zhengyuxuan
2025-03-20 fbd573b5d2d05cac61d2184064bb5dd18d0fe61f
fix:退款订单号bug修复
5个文件已修改
181 ■■■■■ 已修改文件
LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/LifePay/LifePayService.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
@@ -202,6 +202,10 @@
    /// <returns></returns>
    Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo);
    Task<LifePayRefundOrderOutput> GetLifePayRefundOrderDetail(string orderNo);
    /// <summary>
    /// 根据订单号获取支付状态
    /// </summary>
LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
@@ -600,10 +600,120 @@
    /// 手续费
    /// </summary>
    public decimal PremiumPrice { get; set; }
    /// <summary>
    /// 平台利润
    /// </summary>
    public decimal? Profit { get; set; }
}
public class LifePayRefundOrderOutput
{
    public Guid Id { get; set; }
    /// <summary>
    /// 用户账号
    /// </summary>
    public string UserPhoneNumber { get; set; }
    public string UserName { get; set; }
    public string LifePayChannle { get; set; }
    /// <summary>
    /// 生活缴费支付类型
    /// </summary>
    public LifePayTypeEnum? LifePayType { get; set; }
    /// <summary>
    /// 订单类型
    /// </summary>
    public LifePayOrderTypeEnum LifePayOrderType { get; set; }
    /// <summary>
    /// 订单号
    /// </summary>
    public string OrderNo { get; set; }
    /// <summary>
    /// 充值金额
    /// </summary>
    public decimal RechargeAmount { get; set; }
    /// <summary>
    /// 优惠金额
    /// </summary>
    public decimal DiscountAmount { get; set; }
    /// <summary>
    /// 实付金额
    /// </summary>
    public decimal PayAmount { get; set; }
    /// <summary>
    /// 支付时间
    /// </summary>
    public DateTime? PayTime { get; set; }
    /// <summary>
    /// 支付状态
    /// </summary>
    public LifePayStatusEnum PayStatus { get; set; }
    /// <summary>
    /// 订单状态
    /// </summary>
    public LifePayOrderStatusEnum LifePayOrderStatus { get; set; }
    /// <summary>
    /// 完成时间
    /// </summary>
    public DateTime? FinishTime { get; set; }
    /// <summary>
    /// 外部订单号
    /// </summary>
    public string OutOrderNo { get; set; }
    /// <summary>
    /// 下单时间
    /// </summary>
    public DateTime? CreationTime { get; set; }
    /// <summary>
    /// 退款时间
    /// </summary>
    public DateTime? RefundTime { get; set; }
    /// <summary>
    /// 退款凭证
    /// </summary>
    public string RefundCredentialsImgUrl { get; set; }
    public string RefundApplyRemark { get; set; }
    public string RefundCheckRemark { get; set; }
    /// <summary>
    /// 渠道流水号
    /// </summary>
    public string ACOOLYOrderNo { get; set; }
    /// <summary>
    /// 平台退款状态
    /// </summary>
    public LifePayRefundStatusEnum? LifePayRefundStatus { get; set; }
    /// <summary>
    /// 实际充值金额
    /// </summary>
    public decimal? ActualRechargeAmount { get; set; }
    /// <summary>
    /// 退款金额
    /// </summary>
    public decimal? RefundPrice { get; set; }
}
public class CreateLifePayOrderOutput
{
    public string OrderNo { get; set; }
LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -317,6 +317,47 @@
        return result;
    }
    public async Task<LifePayRefundOrderOutput> GetLifePayRefundOrderDetail(string orderNo)
    {
        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
        var platformRate = await _lifePayRateRepository.FirstOrDefaultAsync(r => r.RateType == LifePayRateTypeEnum.供应商折扣价);
        var channle = await _lifePayChannlesRep.FirstOrDefaultAsync(r => r.ChannlesNum == order.ChannelId);
        var premium = await _lifePayPremiumRepository.Where(x => x.IsDeleted == false && x.PremiumType == order.LifePayType).FirstOrDefaultAsync();
        CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在");
        var user = await _lifePayUserRepository.FirstOrDefaultAsync(x => x.Id == order.UserId);
        var channlesRakePrice = (order.PayAmount - (order.PlatformDeductionAmount == null ? 0 : order.PlatformDeductionAmount)) * channle.ChannlesRakeRate / 100;
        var result = new LifePayRefundOrderOutput()
        {
            UserName = user.Name,
            UserPhoneNumber = user.PhoneNumber,
            DiscountAmount = order.DiscountAmount,
            FinishTime = order.FinishTime,
            Id = order.Id,
            OutOrderNo = order.OutOrderNo,
            LifePayChannle = channle.ChannlesName,
            LifePayOrderStatus = order.LifePayOrderStatus,
            LifePayOrderType = order.LifePayOrderType,
            LifePayType = order.LifePayType,
            OrderNo = order.OrderNo,
            PayAmount = order.PayAmount,
            RechargeAmount = order.RechargeAmount,
            PayStatus = order.PayStatus,
            PayTime = order.PayTime,
            RefundCredentialsImgUrl = order.RefundCredentialsImgUrl.GetOssPath(),
            CreationTime = order.CreationTime,
            RefundCheckRemark = order.RefundCheckRemark,
            RefundApplyRemark = order.RefundApplyRemark,
            RefundTime = order.RefundTime,
            ACOOLYOrderNo = order.ACOOLYOrderNo,
            LifePayRefundStatus = order.LifePayRefundStatus,
            ActualRechargeAmount = order.ActualRechargeAmount,
            RefundPrice = order.RefundPrice,
        };
        return result;
    }
    /// <summary>
    /// 获取我的订单分页数据
    /// </summary>
@@ -1052,6 +1093,7 @@
            order.PayStatus = LifePayStatusEnum.待退款;
        }
        await _lifePayOrderRepository.UpdateAsync(order);
    }
@@ -1076,10 +1118,12 @@
            throw new UserFriendlyException("当前订单状态无法退款");
        }
        var outRefundNo = order.ChannelId + CreateRefundOrderNo();
        order.RefundOrderNo = outRefundNo;
        switch (order.LifePayType)
        {
            case LifePayTypeEnum.WxPay:
                var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100));
                var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, outRefundNo,order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100));
                if (wxRefundResult.Status == "SUCCESS")
                {
                    order.PayStatus = LifePayStatusEnum.已退款;
@@ -1167,12 +1211,12 @@
    /// <param name="total"></param>
    /// <param name="currency"></param>
    /// <returns></returns>
    public async Task<WxPayDomesticRefundsReponse> WxPayDomesticRefunds(string outTradeNo, string reason, int refund, int total, string currency = "CNY")
    public async Task<WxPayDomesticRefundsReponse> WxPayDomesticRefunds(string outTradeNo,string outRefundNo, string reason, int refund, int total, string currency = "CNY")
    {
        WxPayDomesticRefundsRequest req = new WxPayDomesticRefundsRequest
        {
            OutTradeNo = outTradeNo,
            OutRefundNo = CreateRefundOrderNo(),
            OutRefundNo = outRefundNo,
            Reason = reason,
            Amount = new Model_WxPayDomesticRefunds_Amount
            {
LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
@@ -71,6 +71,11 @@
        public string OutOrderNo { get; set; }
        /// <summary>
        /// 退款订单号
        /// </summary>
        public string? RefundOrderNo { get; set; }
        /// <summary>
        /// 渠道流水号
        /// </summary>
        public string ACOOLYOrderNo { get; set; }
LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
@@ -202,6 +202,16 @@
            return await _lifePayService.GetLifePayOrderDetail(orderNo);
        }
        /// <summary>
        /// 获取退款订单详情
        /// </summary>
        /// <param name="orderNo"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<LifePayRefundOrderOutput> GetLifePayRefundOrderDetail(string orderNo)
        {
            return await _lifePayService.GetLifePayRefundOrderDetail(orderNo);
        }
        /// <summary>
        /// 获取我的订单分页数据