From 384ce2060d3422341f96c2f897e807b52d15cb0c Mon Sep 17 00:00:00 2001
From: lingling <kety1122@163.com>
Date: 星期一, 24 三月 2025 15:06:31 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/LifePaymentApi

---
 LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml                   |   80 +++++++
 LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs                            |   30 +-
 LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs                                 |   29 ++
 LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs                        |    4 
 LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs                                       |    4 
 LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs                         |    1 
 LifePayment/LifePayment.Application/LifePay/StatisticsService.cs                             |    6 
 LifePayment/LifePayment.Application/LifePaymentServicesApplicationModuleAutoMapperProfile.cs |    2 
 LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs                           |   17 +
 LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs                       |  118 +++++++++++
 LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs              |    9 
 LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs                     |   14 +
 LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs                            |   34 +++
 LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml                                  |   13 +
 LifePayment/LifePayment.Application/LifePay/LifePayService.cs                                |  192 +++++++++++++++----
 15 files changed, 480 insertions(+), 73 deletions(-)

diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
index 8fd6eb2..dd567e3 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
+++ b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
@@ -50,7 +50,7 @@
     Task LifePaySuccessHandler(string orderNo, string outOrderNo);
 
     /// <summary>
-    /// 鏀粯鎴愬姛鍥炶皟澶勭悊
+    /// 渚涘簲鍟嗗洖璋冨鐞�
     /// </summary>
     /// <param name="orderNo"></param>
     /// <param name="acoolyOrderNo"></param>
@@ -58,7 +58,7 @@
     /// <param name="acoolyStatus"></param>
     /// <param name="payAmount"></param>
     /// <returns></returns>
-    Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount);
+    Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount, string refundApplyRemark);
 
     /// <summary>
     /// 鍒涘缓鐢熸椿缂磋垂璇濊垂璁㈠崟
@@ -142,6 +142,13 @@
     /// </summary>
     /// <returns></returns>
     Task<List<LifePayRateListOutput>> GetRate();
+
+
+    /// <summary>
+    /// 鑾峰彇娓犻亾鎶樻墸
+    /// </summary>
+    /// <returns></returns>
+    Task<ChannelRateOutput> GetChannelRate(ChannelsBaseInput input);
 
     /// <summary>
     /// 鑾峰彇鎵嬬画璐硅垂鐜�
@@ -250,6 +257,9 @@
 
     Task<List<LifePayOrderListTemplate>> GetLifePayOrderPageExport(QueryLifePayOrderListInput input);
 
+
+    Task<List<LifePayRefundOrderListTemplate>> GetLifePayRefudOrderPageExport(QueryLifePayRefundOrderListInput input);
+
     Task<string> GetBillErceiptExport(string orderNo);
 
     /// <summary>
diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
index f54f710..16a691b 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
+++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
@@ -357,6 +357,10 @@
     /// 璁㈠崟鐘舵��
     /// </summary>
     public LifePayOrderStatusEnum? LifePayOrderStatus { get; set; }
+    /// <summary>
+    /// 璁㈠崟鐘舵��
+    /// </summary>
+    public LifePayRefundStatusEnum? LifePayRefundStatus { get; set; }
 
     /// <summary>
     /// 鐢ㄦ埛Id
diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
index 88dfae2..da36ea5 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
+++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
@@ -176,6 +176,11 @@
     public string OrderNo { get; set; }
 
     /// <summary>
+    /// 閫�娆捐鍗曞彿
+    /// </summary>
+    public string RefundOrderNo { get; set; }
+
+    /// <summary>
     /// 鍏呭�奸噾棰�
     /// </summary>
     public decimal RechargeAmount { get; set; }
@@ -379,6 +384,103 @@
 
 }
 
+
+public class LifePayRefundOrderListTemplate
+{
+
+    [Name("搴忓彿")]
+    public int SerialNumber { get; set; }
+
+    [Name("鎵嬫満鍙�")]
+    public string PhoneNumber { get; set; }
+
+    public LifePayTypeEnum? LifePayType { get; set; }
+
+    public LifePayOrderTypeEnum LifePayOrderType { get; set; }
+
+    [Name("鍏呭�肩被鍨�")]
+    public string LifePayOrderTypeStr { get; set; }
+
+    [Name("鍏呭�兼笭閬�")]
+    public string ChannelName { get; set; }
+
+    /// <summary>
+    /// 閫�娆剧敵璇锋椂闂�
+    /// </summary>
+    [Name("鐢宠閫�娆炬椂闂�")]
+    public string RefundApplyTimeStr { get; set; }
+
+    /// <summary>
+    /// 涓嬪崟鏃堕棿
+    /// </summary>
+    public DateTime CreationTime { get; set; }
+
+    [Name("涓嬪崟鏃堕棿")]
+    public string CreationTimeStr { get; set; }
+
+    [Name("閫�娆捐鍗曞彿")]
+    public string RefundOrderNo { get; set; }
+
+
+    [Name("鍏呭�奸噾棰�")]
+    public string RechargeAmountStr { get; set; }
+
+
+    /// <summary>
+    /// 鍏呭�奸噾棰�
+    /// </summary>
+    public decimal RechargeAmount { get; set; }
+
+    /// <summary>
+    /// 瀹為檯鍒拌处閲戦
+    /// </summary>
+    [Name("瀹為檯鍒拌处閲戦")]
+    public string ActualReceivedAmount { get; set; }
+
+    /// <summary>
+    /// 瀹炰粯閲戦
+    /// </summary>
+    public decimal PayAmount { get; set; }
+
+    [Name("瀹炰粯閲戦")]
+    public string PayAmountStr { get; set; }
+
+    [Name("閫�娆炬笭閬�")]
+    public string LifePayTypeStr { get; set; }
+
+    /// <summary>
+    /// 閫�娆鹃噾棰�
+    /// </summary>
+    [Name("閫�娆鹃噾棰�")]
+    public decimal? RefundPrice { get; set; }
+
+
+    public ACOOLYStatusEnum ACOOLYStatus { get; set; }
+
+    /// <summary>
+    /// 渚涘簲鍟嗚鍗曠姸鎬�
+    /// </summary>
+    [Name("渚涘簲鍟嗚鍗曠姸鎬�")]
+    public string ACOOLYStatusStr { get; set; }
+
+
+    /// <summary>
+    /// 瀹屾垚鏃堕棿
+    /// </summary>
+    public DateTime? FinishTime { get; set; }
+
+
+    /// <summary>
+    /// 骞冲彴閫�娆剧姸鎬�
+    /// </summary>
+    [Name("骞冲彴閫�娆剧姸鎬�")]
+    public string LifePayRefundStatus { get; set; }
+
+    [Name("瀹屾垚鏃堕棿")]
+    public string FinishTimeStr { get; set; }
+
+
+}
 public class UserLifePayOrderOutput
 {
     public Guid Id { get; set; }
@@ -457,10 +559,21 @@
     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 ACOOLYStatusEnum? ACOOLYStatus { get; set; }
 }
 
 public class LifePayOrderOutput
@@ -924,4 +1037,9 @@
     /// </summary>
     public int YesterdayActiveUsers { get; set; }
 
+}
+
+public class ChannelRateOutput
+{
+    public decimal ChannlesRate { get; set; }
 }
\ No newline at end of file
diff --git a/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs b/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs
index 2dbdc47..76e561d 100644
--- a/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs
+++ b/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs
@@ -1,5 +1,7 @@
-锘縰sing System;
+锘縰sing LifePayment.Domain.Shared;
+using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
 using ZeroD.Util;
 
 namespace LifePayment.Application.Contracts
@@ -15,11 +17,16 @@
         /// 鎵嬫満鍙�
         /// </summary>
         public string PhoneNumber { get; set; }
+
+        /// <summary>
+        /// 瀵嗙爜
+        /// </summary>
         public string Password { get; set; }
 
         /// <summary>
         /// 璐︽埛
         /// </summary>
+        [RegularExpression(LifePaymentConstant.RegularExpression.UserNameEx, ErrorMessage = "璐﹀彿鏍煎紡涓嶆纭�")]
         public string UserName { get; set; }
 
         public string Remark { get; set; }
diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
index 65a57b4..0db8bd2 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -152,6 +152,16 @@
     }
 
     /// <summary>
+    /// 鑾峰彇娓犻亾鎶樻墸
+    /// </summary>
+    /// <returns></returns>
+    public async Task<ChannelRateOutput> GetChannelRate(ChannelsBaseInput input)
+    {
+        return  _lifePayChannlesRep.Where(x => x.IsDeleted == false && x.ChannlesNum == input.CheckChannelId).Select(x => new ChannelRateOutput() { ChannlesRate = x.ChannlesRate })
+                                           .FirstOrDefault();
+    }
+
+    /// <summary>
     /// 鑾峰彇鎵嬬画璐硅垂鐜�
     /// </summary>
     /// <returns></returns>
@@ -234,6 +244,7 @@
     /// <returns></returns>
     public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input)
     {
+        var channles = await _lifePayChannlesRep.Where(x => x.ChannlesName.Contains(input.KeyWords)).Select(x => x.ChannlesNum).ToListAsync();
         var result = await (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository)
                       .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime)
                                             .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime)
@@ -245,7 +256,7 @@
                                             .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))
+                                            .WhereIf(input.KeyWords.IsNotNullOrEmpty(), x => x.OrderNo.Contains(input.KeyWords) || x.OutOrderNo.Contains(input.KeyWords) || x.ACOOLYOrderNo.Contains(input.KeyWords) || channles.Contains(x.ChannelId))
                             join b in _lifePayChannlesRep on a.ChannelId equals b.ChannlesNum into temp
                             from b in temp.DefaultIfEmpty()
                             select new LifePayOrderListOutput
@@ -290,15 +301,14 @@
     {
 
         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.閫�娆惧け璐�
+        .Where(x => 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.LifePayRefundStatus.HasValue, x => x.LifePayRefundStatus == input.LifePayRefundStatus.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)
@@ -338,6 +348,44 @@
 
         return result;
     }
+
+    /// <summary>
+    /// 閫�娆捐鍗曞垎椤�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<List<LifePayRefundOrderListTemplate>> GetLifePayRefudOrderPageExport(QueryLifePayRefundOrderListInput input)
+    {
+
+     
+        var result = await (await GetLifePayRefundOrderListFilter(input)).Select(x => new LifePayRefundOrderListTemplate
+        {
+            FinishTime = x.FinishTime,
+            RefundPrice = x.RefundPrice,
+            LifePayOrderType = x.LifePayOrderType,
+            LifePayType = x.LifePayType,
+            PayAmount = x.PayAmount,
+            PhoneNumber = x.PhoneNumber,
+            RefundOrderNo = x.RefundOrderNo,
+            ChannelName = x.ChannelName
+        }).OrderByDescending(r => r.CreationTime).ToListAsync();
+        var i = 0;
+        result.ForEach(s =>
+        {
+            s.SerialNumber = ++i;
+            s.ACOOLYStatusStr = s.ACOOLYStatus.GetDescription();
+            s.LifePayOrderTypeStr = s.LifePayOrderType.GetDescription();
+            s.CreationTimeStr = s.CreationTime.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm);
+            s.RechargeAmountStr = s.RechargeAmount.ToString("F2");
+            s.ActualReceivedAmount = s.ActualReceivedAmount;
+            s.LifePayRefundStatus = s.LifePayRefundStatus.GetDescription();
+            s.PayAmountStr = s.PayAmount.ToString("F2");
+            s.LifePayTypeStr = s.LifePayType.GetDescription();
+            s.FinishTimeStr = !s.FinishTime.HasValue ? string.Empty : s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm);
+        });
+        return result;
+    }
+
 
     public async Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo)
     {
@@ -477,6 +525,8 @@
                                                         RefundApplyRemark = x.RefundApplyRemark,
                                                         RefundTime = x.RefundTime,
                                                         ACOOLYOrderNo = x.ACOOLYOrderNo,
+                                                        LifePayRefundStatus = x.LifePayRefundStatus,
+                                                        ACOOLYStatus = x.ACOOLYStatus,
                                                     })
                                             .GetPageResult(input.PageModel);
     }
@@ -777,7 +827,7 @@
         var orderInput = new CreateLifePayOrderInput
         {
             OrderNo = channle.ChannlesNum + CreateOrderNo(),
-            LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�,
+            LifePayOrderStatus = LifePayOrderStatusEnum.鍏呭�间腑,
             LifePayOrderType = LifePayOrderTypeEnum.璇濊垂璁㈠崟,
             //LifePayType = input.LifePayType,
             OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData),
@@ -826,7 +876,7 @@
         var orderInput = new CreateLifePayOrderInput
         {
             OrderNo = channle.ChannlesNum + CreateOrderNo(),
-            LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�,
+            LifePayOrderStatus = LifePayOrderStatusEnum.鍏呭�间腑,
             LifePayOrderType = LifePayOrderTypeEnum.鐢佃垂璁㈠崟,
             // LifePayType = input.LifePayType,
             OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData),
@@ -875,7 +925,7 @@
         var orderInput = new CreateLifePayOrderInput
         {
             OrderNo = channle.ChannlesNum + CreateOrderNo(),
-            LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�,
+            LifePayOrderStatus = LifePayOrderStatusEnum.鍏呭�间腑,
             LifePayOrderType = LifePayOrderTypeEnum.鐕冩皵璁㈠崟,
             // LifePayType = input.LifePayType,
             OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData),
@@ -1188,7 +1238,7 @@
             }
 
             order.LifePayRefundStatus = LifePayRefundStatusEnum.鏃犻渶閫�娆�;
-            order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�;
+            order.LifePayOrderStatus = LifePayOrderStatusEnum.鍏呭�间腑;
             //SetOrderStatus(order, result.Code);
             order.OutRequestNo = result.RequestNo.IsNullOrEmpty() ? null : result.RequestNo;
             order.ACOOLYOrderNo = result.ACOOLYOrderNo.IsNullOrEmpty() ? null : result.ACOOLYOrderNo;
@@ -1196,7 +1246,7 @@
         catch (Exception ex)
         {
             _logger.LogError(ex, "澶勭悊鐢熸椿缂磋垂鏀粯鎴愬姛鍥炶皟鏃跺紓甯�");
-            order.LifePayOrderStatus = LifePayOrderStatusEnum.宸插け璐�;
+            order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呴��娆�;
             order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�;
         }
         _logger.LogError("鐢熸椿缂磋垂璁㈠崟鐘舵�侊細" + order.LifePayOrderStatus.ToString());
@@ -1209,30 +1259,24 @@
     /// <param name="orderNo"></param>
     /// <param name="outOrderNo"></param>
     /// <returns></returns>
-    public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount)
+    public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount,string refundApplyRemark)
     {
         var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
         CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
 
-        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
-        {
-            return;
-        }
+        //if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
+        //{
+        //    return;
+        //}
 
         order.PlatformDeductionAmount = payAmount;
         if (acoolyOrderNo.IsNotNullOrEmpty())
         {
             order.ACOOLYOrderNo = acoolyOrderNo;
         }
-
-        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
+        if (refundApplyRemark.IsNotNullOrEmpty())
         {
-            order.FinishTime = DateTime.Now;
-        }
-
-        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插け璐� && order.LifePayRefundStatus != LifePayRefundStatusEnum.宸查��娆�)
-        {
-            order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�;
+            order.RefundApplyRemark = refundApplyRemark;
         }
 
         order.LifePayOrderStatus = status;
@@ -1267,7 +1311,7 @@
             input.RefundPrice = order.PayAmount;
         }
 
-        if (order.LifePayOrderStatus != LifePayOrderStatusEnum.宸插け璐� && order.PayStatus != LifePayStatusEnum.寰呴��娆� && order.LifePayOrderStatus != LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳)
+        if (order.LifePayOrderStatus != LifePayOrderStatusEnum.寰呴��娆� || order.PayStatus != LifePayStatusEnum.宸叉敮浠� || order.LifePayRefundStatus != LifePayRefundStatusEnum.寰呴��娆�)
         {
             throw new UserFriendlyException("褰撳墠璁㈠崟鐘舵�佹棤娉曢��娆�");
         }
@@ -1288,12 +1332,16 @@
                     order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑;
                     order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑;
                 }
+                else if (wxRefundResult.Message == "璁㈠崟宸插叏棰濋��娆�")
+                {
+                    order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
+                    order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�;
+                }
                 else
                 {
-                    order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧け璐�;
+                    order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呴��娆�;
                     order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�;
                 }
-
                 break;
             case LifePayTypeEnum.AliPay:
                 var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = Convert.ToInt32(input.RefundPrice * 100).ToString() });
@@ -1312,7 +1360,7 @@
         order.RefundCheckUserId = CurrentUser.Id;
         order.RefundPrice = input.RefundPrice;
 
-        await _lifePayOrderRepository.UpdateAsync(order);
+        //await _lifePayOrderRepository.UpdateAsync(order);
 
         #region 璁板綍鏃ュ織
 
@@ -1342,17 +1390,25 @@
             return;
         }
 
-        if (order.LifePayOrderStatus != LifePayOrderStatusEnum.寰呯‘璁� && order.LifePayOrderStatus != LifePayOrderStatusEnum.宸插け璐�
-            && order.PayStatus != LifePayStatusEnum.宸叉敮浠�)
+        if (order.PayStatus == LifePayStatusEnum.宸叉敮浠� && order.LifePayOrderStatus != LifePayOrderStatusEnum.宸插畬鎴�
+            && order.LifePayOrderStatus != LifePayOrderStatusEnum.寰呴��娆� && order.LifePayOrderStatus != LifePayOrderStatusEnum.宸查��娆�)
+        {
+            order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呴��娆�;
+            order.RefundApplyRemark = input.RefundApplyRemark;
+            order.RefundApplyTime = DateTime.Now;
+
+            await _lifePayOrderRepository.UpdateAsync(order);
+        }
+        else if (order.LifePayOrderStatus == LifePayOrderStatusEnum.寰呴��娆� || order.LifePayRefundStatus == LifePayRefundStatusEnum.寰呴��娆� ||
+            order.LifePayOrderStatus == LifePayOrderStatusEnum.閫�娆句腑 || order.LifePayRefundStatus == LifePayRefundStatusEnum.閫�娆句腑 ||
+            order.LifePayOrderStatus == LifePayOrderStatusEnum.宸查��娆� || order.LifePayRefundStatus == LifePayRefundStatusEnum.宸查��娆�)
+        {
+            throw new UserFriendlyException("褰撳墠璁㈠崟鏃犳硶閲嶅鐢宠閫�娆�");
+        }
+        else
         {
             throw new UserFriendlyException("褰撳墠璁㈠崟鐘舵�佹棤娉曠敵璇烽��娆�");
         }
-
-        order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳;
-        order.RefundApplyRemark = input.RefundApplyRemark;
-        order.RefundApplyTime = DateTime.Now;
-
-        await _lifePayOrderRepository.UpdateAsync(order);
     }
 
     /// <summary>
@@ -1370,7 +1426,7 @@
         {
             OutTradeNo = outTradeNo,
             OutRefundNo = outRefundNo,
-            Reason = reason,
+            //Reason = reason,
             Amount = new Model_WxPayDomesticRefunds_Amount
             {
                 Refund = refund,
@@ -1434,7 +1490,7 @@
         if (input.LifePayType == LifePayOrderTypeEnum.璇濊垂璁㈠崟)
         {
             var extraProperties = JsonConvert.DeserializeObject<Model_UserAccountExtraProperties>(input.ExtraProperties);
-            if (!string.IsNullOrEmpty(extraProperties.Name))
+            if (!string.IsNullOrEmpty(extraProperties.Name) && extraProperties.Phone == user.PhoneNumber)
             {
                 user.Name = extraProperties.Name;
             }
@@ -1476,10 +1532,17 @@
             return;
         }
 
-        if ((order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插け璐� && order.PayStatus == LifePayStatusEnum.寰呴��娆�) ||
-            order.LifePayOrderStatus == LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳 || order.LifePayOrderStatus == LifePayOrderStatusEnum.寰呯‘璁�)
+        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.寰呴��娆�)
         {
-            order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧け璐�;
+            if (order.ACOOLYStatus == ACOOLYStatusEnum.宸插畬鎴� || order.ACOOLYStatus == ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�)
+            {
+                order.LifePayOrderStatus = LifePayOrderStatusEnum.宸插畬鎴�;
+            }
+            else if (order.ACOOLYStatus == ACOOLYStatusEnum.鍏呭�煎け璐�)
+            {
+                order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧け璐�;
+            }
+
             order.RefundCheckRemark = input.RefundCheckRemark;
             order.RefundCheckUserId = CurrentUser.Id;
 
@@ -1678,7 +1741,7 @@
                 order.FinishTime = DateTime.Now;
                 break;
             case ACOOLYConstant.Code.PROCESSING:
-                order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�;
+                order.LifePayOrderStatus = LifePayOrderStatusEnum.鍏呭�间腑;
                 break;
             default:
                 break;
@@ -1906,6 +1969,55 @@
         return result;
     }
 
+    private async Task<IQueryable<LifePayOrderListOutput>> GetLifePayRefundOrderListFilter(QueryLifePayRefundOrderListInput input)
+    {
+        var result = (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository)
+     .Where(x => 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))
+                            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(),
+                                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,
+                                ACOOLYStatus = a.ACOOLYStatus,
+                                LifePayRefundStatus = a.LifePayRefundStatus,
+                            });
+        return result;
+    }
     private IQueryable<CreateEditPayChannelsInput> GetLifePayChannlesListFilter()
     {
         return _lifePayChannlesRep.Select(x =>
diff --git a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
index d6b7fad..5bcd101 100644
--- a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
@@ -47,9 +47,9 @@
                 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 yesterdayFail = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.閫�娆惧け璐�).CountAsync();
                 var accumulatedUsers = await _lifePayUserRepository.CountAsync();
-
+                var yesterdayActiveUsers = await _lifePayUserRepository.Where(x => x.LastLoginTime >= today.AddDays(-1)).CountAsync();
                 var entity = new DallyStatistics()
                 {
                     Id = GuidGenerator.Create(),
@@ -62,6 +62,7 @@
                     YesterdaySuccess = yesterdaySuccess,
                     YesterdayFail = yesterdayFail,
                     AccumulatedUsers = accumulatedUsers,
+                    YesterdayActiveUsers = yesterdayActiveUsers
                 };
                 await _dallyStatisticsRepository.InsertAsync(entity);
 
@@ -75,6 +76,7 @@
                     YesterdaySuccess = entity.YesterdaySuccess,
                     YesterdayFail = entity.YesterdayFail,
                     AccumulatedUsers = entity.AccumulatedUsers,
+                    YesterdayActiveUsers = yesterdayActiveUsers
                 };
                 return topStatisticsOutput;
             }
diff --git a/LifePayment/LifePayment.Application/LifePaymentServicesApplicationModuleAutoMapperProfile.cs b/LifePayment/LifePayment.Application/LifePaymentServicesApplicationModuleAutoMapperProfile.cs
index 68e9053..abedd35 100644
--- a/LifePayment/LifePayment.Application/LifePaymentServicesApplicationModuleAutoMapperProfile.cs
+++ b/LifePayment/LifePayment.Application/LifePaymentServicesApplicationModuleAutoMapperProfile.cs
@@ -14,6 +14,8 @@
             CreateMap<CreateLifePayOrderInput, LifePayOrder>(MemberList.None);
 
             CreateMap<CreateEditPayChannelsInput, LifePayChannles>(MemberList.None);
+
+            CreateMap<CreateBackClientUserInput, CreateAccountInput>(MemberList.None);
             #endregion
         }
     }
diff --git a/LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs b/LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs
index b64e9cf..b1185f6 100644
--- a/LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs
+++ b/LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs
@@ -48,7 +48,6 @@
                 case OperateHistoryTypeEnum.AccountManage:
                     query = query.Where(x => x.UserId == input.TypeId
                                           && LifePaymentConstant.LogsSpecies.AccountManageOperateNameList.Contains(x.OperateName));
-
                     break;
                 case OperateHistoryTypeEnum.LifePayChannles:
                     query = query.Where(x => x.RelationId == input.TypeId);
diff --git a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
index 3ab14a3..3acbb10 100644
--- a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
+++ b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
@@ -41,10 +41,35 @@
     閫�娆句腑 = 50,
 }
 
+//public enum LifePayOrderStatusEnum
+//{
+//    [Description("鍏呭�间腑")]
+//    寰呯‘璁� = 10,
+
+//    [Description("宸插け璐�")]
+//    宸插け璐� = 20,
+
+//    [Description("宸插畬鎴�")]
+//    宸插畬鎴� = 30,
+
+//    [Description("閫�娆惧緟瀹℃牳")]
+//    閫�娆惧緟瀹℃牳 = 40,
+
+//    [Description("宸查��娆�")]
+//    宸查��娆� = 50,
+
+//    [Description("閫�娆惧け璐�")]
+//    閫�娆惧け璐� = 60,
+
+
+//    [Description("閫�娆句腑")]
+//    閫�娆句腑 = 70,
+//}
+
 public enum LifePayOrderStatusEnum
 {
-    [Description("寰呯‘璁�")]
-    寰呯‘璁� = 10,
+    [Description("鍏呭�间腑")]
+    鍏呭�间腑 = 10,
 
     [Description("宸插け璐�")]
     宸插け璐� = 20,
@@ -52,8 +77,8 @@
     [Description("宸插畬鎴�")]
     宸插畬鎴� = 30,
 
-    [Description("閫�娆惧緟瀹℃牳")]
-    閫�娆惧緟瀹℃牳 = 40,
+    [Description("寰呴��娆�")]
+    寰呴��娆� = 40,
 
     [Description("宸查��娆�")]
     宸查��娆� = 50,
@@ -64,6 +89,7 @@
 
     [Description("閫�娆句腑")]
     閫�娆句腑 = 70,
+
 }
 
 public enum ACOOLYStatusEnum
diff --git a/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs b/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs
index 4c235b5..c94907b 100644
--- a/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs
+++ b/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs
@@ -613,11 +613,11 @@
         [JsonProperty("out_refund_no")]
         public string OutRefundNo { get; set; }
 
-        /// <summary>
-        ///  閫�娆惧師鍥�
-        /// </summary>
-        [JsonProperty("reason")]
-        public string Reason { get; set; }
+        ///// <summary>
+        /////  閫�娆惧師鍥�
+        ///// </summary>
+        //[JsonProperty("reason")]
+        //public string Reason { get; set; }
 
         /// <summary>
         /// 閫�娆剧粨鏋滃洖璋僽rl
@@ -721,6 +721,13 @@
         [JsonProperty("amount")]
         public Model_WxPayRetuenDomesticRefunds_Amount Amount { get; set; }
 
+
+        /// <summary>
+        /// 杩斿洖淇℃伅
+        /// </summary>
+        [JsonProperty("message")]
+        public string Message { get; set; }
+
     }
 
     public class Model_WxPayRetuenDomesticRefunds_Amount: Model_WxPayDomesticRefunds_Amount
diff --git a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs b/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
index 01146f6..f6c1394 100644
--- a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
+++ b/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
@@ -81,12 +81,12 @@
         public string ACOOLYOrderNo { get; set; }
 
         /// <summary>
-        /// 璁㈠崟鐘舵��
+        /// 骞冲彴璁㈠崟鐘舵��
         /// </summary>
         public LifePayOrderStatusEnum LifePayOrderStatus { get; set; }
 
         /// <summary>
-        /// 骞冲彴鐘舵��
+        /// 渚涘簲鍟嗙姸鎬�
         /// </summary>
         public ACOOLYStatusEnum? ACOOLYStatus { get; set; }
 
diff --git a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
index dc1a9ed..44eb421 100644
--- a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
+++ b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
@@ -104,6 +104,12 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="M:LifePayment.HttpApi.LifePayController.GetChannelRate(LifePayment.Domain.Shared.ChannelsBaseInput)">
+            <summary>
+            鑾峰彇娓犻亾鎶樻墸
+            </summary>
+            <returns></returns>
+        </member>
         <member name="M:LifePayment.HttpApi.LifePayController.GetPremium">
             <summary>
             鑾峰彇鎵嬬画璐硅垂鐜�
@@ -234,6 +240,13 @@
             <param name="input"></param>
             <returns></returns>
         </member>
+        <member name="M:LifePayment.HttpApi.LifePayController.GetLifePayRefudOrderPageExport(LifePayment.Application.Contracts.QueryLifePayRefundOrderListInput)">
+            <summary>
+            瀵煎嚭閫�娆捐鍗旹xcel
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
         <member name="M:LifePayment.HttpApi.LifePayController.CreateLifePayPhoneOrder(LifePayment.Application.Contracts.CreateLifePayOrderInput{LifePayment.Application.Contracts.LifePhoneData})">
             <summary>
             鍒涘缓鐢熸椿缂磋垂璇濊垂璁㈠崟
diff --git a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
index 83e9f57..d1566ed 100644
--- a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
+++ b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
@@ -42,9 +42,9 @@
             <param name="outOrderNo"></param>
             <returns></returns>
         </member>
-        <member name="M:LifePayment.Application.Contracts.ILifePayService.ACOOLYOrderNotifyHandler(System.String,System.String,LifePayment.Domain.Shared.LifePayOrderStatusEnum,LifePayment.Domain.Shared.ACOOLYStatusEnum,System.Decimal)">
+        <member name="M:LifePayment.Application.Contracts.ILifePayService.ACOOLYOrderNotifyHandler(System.String,System.String,LifePayment.Domain.Shared.LifePayOrderStatusEnum,LifePayment.Domain.Shared.ACOOLYStatusEnum,System.Decimal,System.String)">
             <summary>
-            鏀粯鎴愬姛鍥炶皟澶勭悊
+            渚涘簲鍟嗗洖璋冨鐞�
             </summary>
             <param name="orderNo"></param>
             <param name="acoolyOrderNo"></param>
@@ -127,6 +127,12 @@
         <member name="M:LifePayment.Application.Contracts.ILifePayService.GetRate">
             <summary>
             鑾峰彇鎶樻墸
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:LifePayment.Application.Contracts.ILifePayService.GetChannelRate(LifePayment.Domain.Shared.ChannelsBaseInput)">
+            <summary>
+            鑾峰彇娓犻亾鎶樻墸
             </summary>
             <returns></returns>
         </member>
@@ -520,6 +526,11 @@
             璁㈠崟鐘舵��
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.QueryLifePayRefundOrderListInput.LifePayRefundStatus">
+            <summary>
+            璁㈠崟鐘舵��
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.QueryLifePayRefundOrderListInput.UserId">
             <summary>
             鐢ㄦ埛Id
@@ -725,6 +736,11 @@
             璁㈠崟鍙�
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RefundOrderNo">
+            <summary>
+            閫�娆捐鍗曞彿
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RechargeAmount">
             <summary>
             鍏呭�奸噾棰�
@@ -865,6 +881,51 @@
             瀹屾垚鏃堕棿
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.RefundApplyTimeStr">
+            <summary>
+            閫�娆剧敵璇锋椂闂�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.CreationTime">
+            <summary>
+            涓嬪崟鏃堕棿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.RechargeAmount">
+            <summary>
+            鍏呭�奸噾棰�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.ActualReceivedAmount">
+            <summary>
+            瀹為檯鍒拌处閲戦
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.PayAmount">
+            <summary>
+            瀹炰粯閲戦
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.RefundPrice">
+            <summary>
+            閫�娆鹃噾棰�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.ACOOLYStatusStr">
+            <summary>
+            渚涘簲鍟嗚鍗曠姸鎬�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.FinishTime">
+            <summary>
+            瀹屾垚鏃堕棿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.LifePayRefundStatus">
+            <summary>
+            骞冲彴閫�娆剧姸鎬�
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.LifePayType">
             <summary>
             鐢熸椿缂磋垂鏀粯绫诲瀷
@@ -938,6 +999,16 @@
         <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.ACOOLYOrderNo">
             <summary>
             娓犻亾娴佹按鍙�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.LifePayRefundStatus">
+            <summary>
+            骞冲彴閫�娆剧姸鎬�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.ACOOLYStatus">
+            <summary>
+            骞冲彴鐘舵��
             </summary>
         </member>
         <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.UserPhoneNumber">
@@ -1980,6 +2051,11 @@
             鎵嬫満鍙�
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.CreateBackClientUserInput.Password">
+            <summary>
+            瀵嗙爜
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.CreateBackClientUserInput.UserName">
             <summary>
             璐︽埛
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
index df58574..82e8728 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
@@ -52,10 +52,11 @@
             }
             var baseInfo = JsonConvert.DeserializeObject<ACOOLYRequestBaseResponse>(body);
             var orderNo = string.Empty;
-            LifePayOrderStatusEnum status = LifePayOrderStatusEnum.宸插け璐�;
+            LifePayOrderStatusEnum status = LifePayOrderStatusEnum.寰呴��娆�;
             ACOOLYStatusEnum acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
             var acoolyOrderNo = string.Empty;
             decimal payAmount = 0;
+            string refundApplyRemark = string.Empty;
             _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙被鍨嬶細" + baseInfo.Service);
             _logger.LogError("ACOOLY鍥炶皟鍐呭锛�" + body);
             switch (baseInfo.Service)
@@ -70,7 +71,7 @@
                     if (!confirmElectricOrderResponse.Success
                     || (confirmElectricOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmElectricOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
@@ -82,14 +83,15 @@
                     else
                     if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
                     {
-                        status = LifePayOrderStatusEnum.寰呯‘璁�;
+                        status = LifePayOrderStatusEnum.鍏呭�间腑;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑;
                     }
                     else
                     if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.鍏呭�煎け璐�)
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
+                        refundApplyRemark = "渚涘簲鍟嗗厖鍊煎け璐�";
                     }
                     else
                     if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.閫�娆句腑)
@@ -106,7 +108,7 @@
                     else
                     if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.澶辫触鍏抽棴)
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     break;
@@ -119,7 +121,7 @@
                     if (!confirmPhoneOrderResponse.Success
                      || (confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
@@ -133,13 +135,13 @@
 
                      if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
                     {
-                        status = LifePayOrderStatusEnum.寰呯‘璁�;
+                        status = LifePayOrderStatusEnum.鍏呭�间腑;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑;
                     }
                     else
                      if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�煎け璐�)
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
@@ -157,7 +159,7 @@
                     else
                      if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.澶辫触鍏抽棴)
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     break;
@@ -170,7 +172,7 @@
                     if (!confirmGasOrderResponse.Success
                      || (confirmGasOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmGasOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
@@ -184,13 +186,13 @@
 
                      if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
                     {
-                        status = LifePayOrderStatusEnum.寰呯‘璁�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑;
                     }
                     else
                      if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�煎け璐�)
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
@@ -208,7 +210,7 @@
                     else
                      if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.澶辫触鍏抽棴)
                     {
-                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        status = LifePayOrderStatusEnum.寰呴��娆�;
                         acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     break;
@@ -216,7 +218,7 @@
                     throw new UserFriendlyException("ACOOLY鍥炶皟閫氬鐞嗙被鍨嬩笉瀛樺湪");
             }
 
-            await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount);
+            await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount, refundApplyRemark);
         }
     }
 }
\ No newline at end of file
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
index a7d2889..3758621 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
@@ -150,6 +150,17 @@
         }
 
         /// <summary>
+        /// 鑾峰彇娓犻亾鎶樻墸
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [AllowAnonymous]
+        public async Task<ChannelRateOutput> GetChannelRate(ChannelsBaseInput input)
+        {
+            return await _lifePayService.GetChannelRate(input);
+        }
+
+        /// <summary>
         /// 鑾峰彇鎵嬬画璐硅垂鐜�
         /// </summary>
         /// <returns></returns>
@@ -376,6 +387,24 @@
             return Json(default);
         }
 
+        /// <summary>
+        /// 瀵煎嚭閫�娆捐鍗旹xcel
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<ActionResult> GetLifePayRefudOrderPageExport(QueryLifePayRefundOrderListInput input)
+        {
+            var data = await _lifePayService.GetLifePayRefudOrderPageExport(input);
+            if (data.Any())
+            {
+                var bytes = ExcelHelper.ListToByteForExcel(data, "xlsx");
+                return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "閫�娆剧鐞�" + ".xlsx");
+            }
+            return Json(default);
+        }
+
+
         [HttpGet]
         public async Task<string> GetBillErceiptExport(string orderNo)
         {

--
Gitblit v1.9.1