From fbd573b5d2d05cac61d2184064bb5dd18d0fe61f Mon Sep 17 00:00:00 2001
From: zhengyuxuan <zhengyuxuan1995>
Date: 星期四, 20 三月 2025 16:48:48 +0800
Subject: [PATCH] fix:退款订单号bug修复

---
 LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs   |  112 +++++++++++++++++++++++++++
 LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs             |   10 ++
 LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs |    4 +
 LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs                   |    5 +
 LifePayment/LifePayment.Application/LifePay/LifePayService.cs            |   50 +++++++++++
 5 files changed, 177 insertions(+), 4 deletions(-)

diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
index 5fd06b6..929f209 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
+++ b/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>
diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
index 6bbd71c..ed35d68 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
+++ b/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; }
diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
index 6531979..4491695 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
+++ b/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.渚涘簲鍟嗘姌鎵d环);
+        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
             {
diff --git a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs b/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
index 11f6a11..fd522ed 100644
--- a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
+++ b/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; }
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
index 0f24eca..e3c7a06 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
+++ b/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>
         /// 鑾峰彇鎴戠殑璁㈠崟鍒嗛〉鏁版嵁

--
Gitblit v1.9.1