From 78bf5ae3845bd2d7008eae76a1d4facb2d29280b Mon Sep 17 00:00:00 2001
From: zhengyuxuan <zhengyuxuan1995>
Date: 星期五, 21 三月 2025 15:11:42 +0800
Subject: [PATCH] fix:部分退款接口更新

---
 LifePayment/LifePayment.Application/LifePay/LifePayService.cs |  149 ++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 127 insertions(+), 22 deletions(-)

diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
index c9a5092..e4e9294 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -95,34 +95,62 @@
 
     public async Task<TopStatisticsOutput> GetTopStatistics()
     {
-        var today = DateTime.Now.ToString("yyyy-MM-dd");
-        var statistics = await _dallyStatisticsRepository.Where(x => x.CreationTime.ToString("yyyy-MM-dd") == today).FirstOrDefaultAsync();
+        var today = DateTime.Now.Date;
+        var statistics = await _dallyStatisticsRepository.Where(x => x.CreationTime.Date == today).FirstOrDefaultAsync();
         if (statistics == null)
         {
-            //var accumulatedReceipts = await _lifePayOrderRepository.Where(x => x.CreationTime < today).SumAsync(x => x.PayAmount);
+            var accumulatedReceipts = await _lifePayOrderRepository.Where(x => x.CreationTime < today).SumAsync(x => x.PayAmount);
+            var receiptsYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today).SumAsync(x => x.PayAmount);
+            var accumulatedOrders = await _lifePayOrderRepository.Where(x => x.CreationTime < today).CountAsync();
+            var accumulatedIncome = await _lifePayOrderRepository.Where(x => x.CreationTime < today).SumAsync(x => x.ActualRechargeAmount);
+            var ordersNumYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today).CountAsync();
+            var yesterdaySuccess = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�).CountAsync();
+            var yesterdayFail = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插け璐�).CountAsync();
+            var accumulatedUsers = await _lifePayUserRepository.CountAsync();
 
             var entity = new DallyStatistics()
             {
                 Id = GuidGenerator.Create(),
                 CreationTime = DateTime.Now,
-                Amount = "0",
-                AccumulatedReceipts = "0",
-                ReceiptsYesterda = "0",
-                AccumulatedOrders = "0",
-                OrdersNumYesterda = "0",
-                YesterdaSuccess = "0",
-                YesterdaFail = "0",
-                AccumulatedUsers = "0",
+                Amount = 0,
+                AccumulatedReceipts = accumulatedReceipts,
+                ReceiptsYesterday = receiptsYesterday,
+                AccumulatedOrders = accumulatedOrders,
+                OrdersNumYesterday = ordersNumYesterday,
+                YesterdaySuccess = yesterdaySuccess,
+                YesterdayFail = yesterdayFail,
+                AccumulatedUsers = accumulatedUsers,
             };
+            await _dallyStatisticsRepository.InsertAsync(entity);
 
-            return new TopStatisticsOutput();
+            TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput()
+            {
+                Amount = entity.Amount,
+                AccumulatedReceipts = entity.AccumulatedReceipts,
+                ReceiptsYesterday = entity.ReceiptsYesterday,
+                AccumulatedOrders = entity.AccumulatedOrders,
+                OrdersNumYesterday = entity.OrdersNumYesterday,
+                YesterdaySuccess = entity.YesterdaySuccess,
+                YesterdayFail = entity.YesterdayFail,
+                AccumulatedUsers = entity.AccumulatedUsers,
+            };
+            return topStatisticsOutput;
         }
         else
         {
-            var result = ObjectMapper.Map<DallyStatistics,TopStatisticsOutput>(statistics);
-            return result;
+            TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput()
+            {
+                Amount = statistics.Amount,
+                AccumulatedReceipts = statistics.AccumulatedReceipts,
+                ReceiptsYesterday = statistics.ReceiptsYesterday,
+                AccumulatedOrders = statistics.AccumulatedOrders,
+                OrdersNumYesterday = statistics.OrdersNumYesterday,
+                YesterdaySuccess = statistics.YesterdaySuccess,
+                YesterdayFail = statistics.YesterdayFail,
+                AccumulatedUsers = statistics.AccumulatedUsers,
+            };
+            return topStatisticsOutput;
         }
-
     }
 
     /// <summary>
@@ -274,6 +302,64 @@
                                             .WhereIf(input.EndPayTime.HasValue, x => x.PayTime <= input.EndPayTime)
                                             .WhereIf(input.LifePayOrderStatus.HasValue, x => x.LifePayOrderStatus == input.LifePayOrderStatus.Value)
                                             .WhereIf(input.PayStatus.HasValue, x => x.PayStatus == input.PayStatus.Value)
+                                            .WhereIf(input.ACOOLYStatus.HasValue, x => x.ACOOLYStatus == input.ACOOLYStatus.Value)
+                                            .WhereIf(input.LifePayOrderType.HasValue, x => x.LifePayOrderType == input.LifePayOrderType.Value)
+                                            .WhereIf(input.UserId.HasValue, x => x.UserId == input.UserId.Value)
+                                            .WhereIf(input.KeyWords.IsNotNullOrEmpty(), x => x.PhoneNumber.Contains(input.KeyWords) || x.OrderNo.Contains(input.KeyWords) || x.OutOrderNo.Contains(input.KeyWords) || x.ACOOLYOrderNo.Contains(input.KeyWords))
+                            join b in _lifePayChannlesRep on a.ChannelId equals b.ChannlesNum into temp
+                            from b in temp.DefaultIfEmpty()
+                            select new LifePayOrderListOutput
+                            {
+                                DiscountAmount = a.DiscountAmount,
+                                FinishTime = a.FinishTime,
+                                Id = a.Id,
+                                LifePayOrderStatus = a.LifePayOrderStatus,
+                                LifePayOrderType = a.LifePayOrderType,
+                                LifePayType = a.LifePayType,
+                                OrderNo = a.OrderNo,
+                                PayAmount = a.PayAmount,
+                                PhoneNumber = a.PhoneNumber,
+                                RechargeAmount = a.RechargeAmount,
+                                UserId = a.UserId,
+                                OutOrderNo = a.OutOrderNo,
+                                PayStatus = a.PayStatus,
+                                PayTime = a.PayTime,
+                                ACOOLYOrderNo = a.ACOOLYOrderNo,
+                                RefundCredentialsImgUrl = a.RefundCredentialsImgUrl.GetOssPath(),
+                                RefundPrice = a.RefundPrice,
+                                CreationTime = a.CreationTime,
+                                RefundCheckRemark = a.RefundCheckRemark,
+                                RefundApplyRemark = a.RefundApplyRemark,
+                                RefundTime = a.RefundTime,
+                                ChannelName = b.ChannlesName,
+                                ActualRechargeAmount = a.ActualRechargeAmount,
+                                PlatformDeductionAmount = a.PlatformDeductionAmount,
+                                ACOOLYStatus = a.ACOOLYStatus,
+                                LifePayRefundStatus = a.LifePayRefundStatus,
+                            }).GetPageResult(input.PageModel);
+
+        return result;
+    }
+
+    /// <summary>
+    /// 閫�娆捐鍗曞垎椤�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayRefundOrderPage(QueryLifePayRefundOrderListInput input)
+    {
+
+        var result = await (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository)
+        .Where(x => x.PayStatus == LifePayStatusEnum.寰呴��娆� || x.PayStatus == LifePayStatusEnum.宸查��娆� || x.PayStatus == LifePayStatusEnum.閫�娆句腑
+        || x.LifePayOrderStatus == LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳 || x.LifePayOrderStatus == LifePayOrderStatusEnum.宸查��娆� || x.LifePayOrderStatus == LifePayOrderStatusEnum.閫�娆惧け璐�
+        || x.LifePayRefundStatus > LifePayRefundStatusEnum.鏃犻渶閫�娆�)
+                                            .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime)
+                                            .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime)
+                                            .WhereIf(input.BeginRefundApplyTime.HasValue, x => x.RefundApplyTime >= input.BeginRefundApplyTime)
+                                            .WhereIf(input.LifePayType.HasValue, x => x.LifePayType == input.LifePayType)
+                                            .WhereIf(input.EndRefundApplyTime.HasValue, x => x.RefundApplyTime <= input.EndRefundApplyTime)
+                                            .WhereIf(input.LifePayOrderStatus.HasValue, x => x.LifePayOrderStatus == input.LifePayOrderStatus.Value)
+                                            .WhereIf(input.ACOOLYStatus.HasValue, x => x.ACOOLYStatus == input.ACOOLYStatus.Value)
                                             .WhereIf(input.LifePayOrderType.HasValue, x => x.LifePayOrderType == input.LifePayOrderType.Value)
                                             .WhereIf(input.UserId.HasValue, x => x.UserId == input.UserId.Value)
                                             .WhereIf(input.KeyWords.IsNotNullOrEmpty(), x => x.PhoneNumber.Contains(input.KeyWords) || x.OrderNo.Contains(input.KeyWords) || x.OutOrderNo.Contains(input.KeyWords) || x.ACOOLYOrderNo.Contains(input.KeyWords))
@@ -300,7 +386,9 @@
                                 CreationTime = a.CreationTime,
                                 RefundCheckRemark = a.RefundCheckRemark,
                                 RefundApplyRemark = a.RefundApplyRemark,
+                                RefundApplyTime = a.RefundApplyTime,
                                 RefundTime = a.RefundTime,
+                                RefundPrice = a.RefundPrice,
                                 ChannelName = b.ChannlesName,
                                 ActualRechargeAmount = a.ActualRechargeAmount,
                                 PlatformDeductionAmount = a.PlatformDeductionAmount,
@@ -350,6 +438,8 @@
             RefundPrice = order.RefundPrice,
             PlatformRate = platformRate.Rate,
             PlatformPrice = order.PlatformDeductionAmount,
+            ElecBillUrl = order.ElecBillUrl.GetOssPath(),
+            RefundElecBillUrl = order.RefundElecBillUrl.GetOssPath(),
             ChannleRate = channle.ChannlesRate,
             ChannlesRakeRate = channle.ChannlesRakeRate,
             ChannlesRakePrice = channlesRakePrice.HasValue ? 0 : Math.Round(channlesRakePrice.Value, 2),
@@ -398,7 +488,10 @@
             ACOOLYOrderNo = order.ACOOLYOrderNo,
             LifePayRefundStatus = order.LifePayRefundStatus,
             ActualRechargeAmount = order.ActualRechargeAmount,
+            ActualReceivedAmount = order.ActualReceivedAmount,
             RefundPrice = order.RefundPrice,
+            ElecBillUrl = order.ElecBillUrl.GetOssPath(),
+            RefundElecBillUrl = order.RefundElecBillUrl.GetOssPath(),
         };
 
         return result;
@@ -679,7 +772,7 @@
                 var elecInfoInput = new DataBillErceiptApplyInput
                 {
                     Type = "FUND_DETAIL",
-                    Key = orderNo
+                    Key = order.OutOrderNo
                 };
 
                 var elecInfoOutput = await _alipayInterfaceManager.DataBillErceiptApply(elecInfoInput);
@@ -877,6 +970,9 @@
                 break;
             case LifePayOrderTypeEnum.鐢佃垂璁㈠崟:
                 desc += "鐢佃垂";
+                break;
+            case LifePayOrderTypeEnum.鐕冩皵璁㈠崟:
+                desc += "鐕冩皵";
                 break;
             default:
                 break;
@@ -1139,6 +1235,7 @@
                     break;
             }
 
+            order.LifePayRefundStatus = LifePayRefundStatusEnum.鏃犻渶閫�娆�;
             order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�;
             //SetOrderStatus(order, result.Code);
             order.OutRequestNo = result.RequestNo.IsNullOrEmpty() ? null : result.RequestNo;
@@ -1148,7 +1245,7 @@
         {
             _logger.LogError(ex, "澶勭悊鐢熸椿缂磋垂鏀粯鎴愬姛鍥炶皟鏃跺紓甯�");
             order.LifePayOrderStatus = LifePayOrderStatusEnum.宸插け璐�;
-            order.PayStatus = LifePayStatusEnum.寰呴��娆�;
+            order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�;
         }
         _logger.LogError("鐢熸椿缂磋垂璁㈠崟鐘舵�侊細" + order.LifePayOrderStatus.ToString());
         await _lifePayOrderRepository.UpdateAsync(order);
@@ -1170,8 +1267,6 @@
             return;
         }
 
-        order.LifePayOrderStatus = status;
-        order.ACOOLYStatus = acoolyStatus;
         order.PlatformDeductionAmount = payAmount;
         if (acoolyOrderNo.IsNotNullOrEmpty())
         {
@@ -1188,6 +1283,8 @@
             order.PayStatus = LifePayStatusEnum.寰呴��娆�;
         }
 
+        order.LifePayOrderStatus = status;
+        order.ACOOLYStatus = acoolyStatus;
 
         await _lifePayOrderRepository.UpdateAsync(order);
     }
@@ -1207,6 +1304,14 @@
         {
             return;
         }
+        if (input.RefundPrice > order.PayAmount)
+        {
+            throw new UserFriendlyException("閫�娆剧殑閲戦涓嶈兘澶т簬瀹炰粯閲戦");
+        }
+        if (input.LifePayRefundType == LifePayRefundTypeEnum.鍏ㄩ閫�娆� && input.RefundPrice != order.PayAmount)
+        {
+            throw new UserFriendlyException("鍏ㄩ閫�娆剧殑閲戦涓庡疄浠橀噾棰濅笉涓�鑷�");
+        }
 
         if (order.LifePayOrderStatus != LifePayOrderStatusEnum.宸插け璐� && order.PayStatus != LifePayStatusEnum.寰呴��娆� && order.LifePayOrderStatus != LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳)
         {
@@ -1218,7 +1323,7 @@
         switch (order.LifePayType)
         {
             case LifePayTypeEnum.WxPay:
-                var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, outRefundNo,order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100));
+                var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, outRefundNo,order.RefundApplyRemark, Convert.ToInt32(input.RefundPrice * 100), Convert.ToInt32(order.PayAmount * 100));
                 if (wxRefundResult.Status == "SUCCESS")
                 {
                     order.PayStatus = LifePayStatusEnum.宸查��娆�;
@@ -1240,7 +1345,7 @@
 
                 break;
             case LifePayTypeEnum.AliPay:
-                var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = order.PayAmount.ToString() });
+                var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = Convert.ToInt32(input.RefundPrice * 100).ToString() });
                 if (aliRefundResult.Code != AlipayResultCode.Success)
                 {
                     throw new UserFriendlyException("閫�娆惧け璐�");
@@ -1256,7 +1361,7 @@
         order.RefundCheckRemark = input.RefundCheckRemark;
         order.RefundTime = DateTime.Now;
         order.RefundCheckUserId = CurrentUser.Id;
-        order.RefundPrice = order.PayAmount;
+        order.RefundPrice = input.RefundPrice;
 
         await _lifePayOrderRepository.UpdateAsync(order);
 

--
Gitblit v1.9.1