From a5f0843b6b8f1d12ba8d100c81461386b80d7883 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期二, 09 十二月 2025 17:43:54 +0800
Subject: [PATCH] fix: 退款

---
 LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs |   83 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 75 insertions(+), 8 deletions(-)

diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
index 4bb201c..002a208 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
@@ -1,7 +1,10 @@
 锘縰sing 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
 {
@@ -78,8 +79,8 @@
                 })
                 .GetPageResult(input.PageModel);
 
-            var totalDeductionAmount = await _lifePayConsumption.SumAsync(x => x.DeductionAmount);
-            var totalFrozenAmount = await _lifePayConsumption.SumAsync(x => x.FrozenAmount);
+            var totalDeductionAmount = await _lifePayConsumption.Where(it => it.ACOOLYStatus == ACOOLYStatusEnum.宸插畬鎴� || it.ACOOLYStatus == ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�).SumAsync(x => x.DeductionAmount);
+            var totalFrozenAmount = await _lifePayConsumption.Where(it => it.ACOOLYStatus == ACOOLYStatusEnum.鍏呭�间腑 || it.ACOOLYStatus == ACOOLYStatusEnum.鍏呭�煎け璐�).SumAsync(x => x.FrozenAmount);
             LifePayConsumptionStatistics objectData = new LifePayConsumptionStatistics();
             objectData.TotalDeductionAmount = totalDeductionAmount;
             objectData.TotalFrozenAmount = totalFrozenAmount ?? 0;
@@ -215,6 +216,7 @@
                 s.ChannlesRakePriceStr = s.ChannlesRakePrice.ToString("F2");
                 s.FinishTimeStr = s.FinishTime.HasValue ? s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss) : "";
             });
+            CheckExtensions.IfTrueThrowUserFriendlyException(result.IsNullOrEmpty(), "鏆傛棤鏁版嵁瀵煎嚭");
             return result;
         }
 
@@ -296,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);
@@ -322,7 +324,7 @@
                             var query = await _wxPayApi.WxPayDomesticRefundsQuery(input.OutRefundNo);
                             if (query.Status == WxPayRefundStatus.閫�娆炬垚鍔�)
                             {
-                                data.OrderNo = input.OutRefundNo;
+                                data.OrderNo = input.OrderNo;
                                 data.ExtraProperties = JsonConvert.SerializeObject(query);
                                 data.FinishTime = Convert.ToDateTime(query.SuccessTime);
                                 data.Amount = Convert.ToDecimal(query.Amount.Total) / 100;
@@ -335,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>
         /// 缁熻鎵�鏈夋秷璐规祦姘�
@@ -586,6 +654,5 @@
         }
 
         #endregion
-
     }
 }

--
Gitblit v1.9.1