From 4cb523bee320f335100c63df4c8f51ed09fca9eb Mon Sep 17 00:00:00 2001
From: lingling <kety1122@163.com>
Date: 星期四, 20 三月 2025 16:47:07 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/LifePaymentApi

---
 LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs                  |   10 
 LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs                |    2 
 LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml      |  183 +++++++++++++
 LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs               |   64 ++++
 LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs                    |   23 +
 LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs           |    4 
 LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs                          |   41 +++
 LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs              |   10 
 LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs                         |    2 
 LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs          |  197 +++++++++++++++
 LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs                  |   15 +
 LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs |    1 
 LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs                                |    2 
 LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs        |   16 +
 LifePayment/LifePayment.Domain/Ali/AliPayApi.cs                                 |    6 
 LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs               |   25 +
 LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml                     |    7 
 LifePayment/LifePayment.Application/LifePay/LifePayService.cs                   |  125 ++++++++-
 LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs               |    4 
 19 files changed, 696 insertions(+), 41 deletions(-)

diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
index 00d88e3..5fd06b6 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
+++ b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
@@ -10,6 +10,10 @@
 
 public interface ILifePayService : IApplicationService
 {
+
+
+    //Task<ElectricParValueResponse> GetTopStatistics();
+
     /// <summary>
     /// 鑾峰彇鐢佃垂闈㈠��
     /// </summary>
@@ -54,8 +58,10 @@
     /// <param name="orderNo"></param>
     /// <param name="acoolyOrderNo"></param>
     /// <param name="status"></param>
+    /// <param name="acoolyStatus"></param>
+    /// <param name="payAmount"></param>
     /// <returns></returns>
-    Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status);
+    Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount);
 
     /// <summary>
     /// 鍒涘缓鐢熸椿缂磋垂璇濊垂璁㈠崟
@@ -188,6 +194,14 @@
     /// <returns></returns>
     Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input);
 
+
+    /// <summary>
+    /// 鑾峰彇璁㈠崟璇︽儏
+    /// </summary>
+    /// <param name="orderNo"></param>
+    /// <returns></returns>
+    Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo);
+
     /// <summary>
     /// 鏍规嵁璁㈠崟鍙疯幏鍙栨敮浠樼姸鎬�
     /// </summary>
diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
index b9f5cef..5d12f06 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
+++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
@@ -293,6 +293,7 @@
 
     public string RefundCheckRemark { get; set; }
 }
+
 public class RefundUserLifePayOrderInput : ChannelsBaseInput
 {
     public Guid Id { get; set; }
@@ -403,7 +404,8 @@
     /// <summary>
     /// 娉ㄥ唽鏃堕棿
     /// </summary>
-    public DateTime? CreationTime { get; set; }
+    public DateTime? CreationTimeBegin { get; set; }
+    public DateTime? CreationTimeEnd { get; set; }
 }
 
 public class Model_UserAccountExtraProperties
diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
index b1fc7b3..6bbd71c 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
+++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
@@ -181,6 +181,11 @@
     public decimal RechargeAmount { get; set; }
 
     /// <summary>
+    /// 瀹為檯鍏呭�奸噾棰�
+    /// </summary>
+    public decimal? ActualRechargeAmount { get; set; }
+
+    /// <summary>
     /// 浼樻儬閲戦
     /// </summary>
     public decimal DiscountAmount { get; set; }
@@ -194,6 +199,12 @@
     /// 鏀粯鏃堕棿
     /// </summary>
     public DateTime? PayTime { get; set; }
+
+
+    /// <summary>
+    /// 骞冲彴鎵f閲戦
+    /// </summary>
+    public decimal? PlatformDeductionAmount { get; set; }
 
     /// <summary>
     /// 鏀粯鐘舵��
@@ -230,13 +241,30 @@
     /// </summary>
     public DateTime? RefundTime { get; set; }
 
-
+    /// <summary>
+    /// 鐢宠閫�娆惧師鍥�
+    /// </summary>
     public string RefundApplyRemark { get; set; }
 
+    /// <summary>
+    /// 椹冲洖鍘熷洜
+    /// </summary>
     public string RefundCheckRemark { get; set; }
 
+    /// <summary>
+    /// 渚涘簲鍟嗚鍗曞彿
+    /// </summary>
     public string ACOOLYOrderNo { get; set; }
 
+    /// <summary>
+    /// 渚涘簲鍟嗚鍗曠姸鎬�
+    /// </summary>
+    public ACOOLYStatusEnum? ACOOLYStatus { get; set; }
+
+    /// <summary>
+    /// 骞冲彴閫�娆剧姸鎬�
+    /// </summary>
+    public LifePayRefundStatusEnum? LifePayRefundStatus { get; set; }
 }
 
 public class LifePayOrderListTemplate
@@ -424,6 +452,158 @@
     public string ACOOLYOrderNo { get; set; }
 }
 
+public class LifePayOrderOutput
+{
+    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 string OrderParamDetailJsonStr { 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; }
+
+    /// <summary>
+    /// 骞冲彴鎶樻墸姣斾緥
+    /// </summary>
+    public decimal? PlatformRate { get; set; }
+
+    /// <summary>
+    /// 骞冲彴鎵f閲戦
+    /// </summary>
+    public decimal? PlatformPrice { get; set; }
+
+    /// <summary>
+    /// 娓犻亾鎶樻墸
+    /// </summary>
+    public decimal? ChannleRate { get; set; }
+
+
+    /// <summary>
+    /// 娓犻亾浣i噾姣斾緥
+    /// </summary>
+    public decimal? ChannlesRakeRate { get; set; }
+
+    /// <summary>
+    /// 娓犻亾浣i噾
+    /// </summary>
+    public decimal? ChannlesRakePrice { get; set; }
+
+    /// <summary>
+    /// 鎵嬬画璐规瘮渚�
+    /// </summary>
+    public decimal PremiumRate { get; set; }
+
+    /// <summary>
+    /// 鎵嬬画璐�
+    /// </summary>
+    public decimal PremiumPrice { get; set; }
+
+    public decimal? Profit { get; set; }
+}
+
 public class CreateLifePayOrderOutput
 {
     public string OrderNo { get; set; }
@@ -504,4 +684,19 @@
     public DateTime CreationTime { get; set; }
 
     public bool IsDeleted { get; set; }
+}
+
+public class TopStatisticsOutput
+{
+    /// <summary>
+    /// 璐︽埛浣欓
+    /// </summary>
+    public string Amount { get; set; }
+
+    /// <summary>
+    /// 绱鏀舵
+    /// </summary>
+    public string AccumulatedReceipts { 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 89d0e22..2dbdc47 100644
--- a/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs
+++ b/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs
@@ -15,6 +15,7 @@
         /// 鎵嬫満鍙�
         /// </summary>
         public string PhoneNumber { get; set; }
+        public string Password { get; set; }
 
         /// <summary>
         /// 璐︽埛
diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
index 4a42663..037418e 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -19,7 +19,10 @@
 using Volo.Abp.EventBus.Distributed;
 using Z.EntityFramework.Plus;
 using ZeroD.Util;
+using Alipay.EasySDK.Payment.Common.Models;
 using static LifePayment.Domain.Shared.LifePaymentConstant;
+using ZeroD.Util.Fadd;
+using Nest;
 
 namespace LifePayment.Application;
 
@@ -166,7 +169,8 @@
     {
         return await _channelFilter.GetChannelLifePayUserFilter(_lifePayUserRepository).Where(x => x.IsDeleted == false)
             .WhereIf(!string.IsNullOrEmpty(input.QueryCondition), x => x.PhoneNumber.Contains(input.QueryCondition) || x.Name.Contains(input.QueryCondition))
-            .WhereIf(input.CreationTime.HasValue, x => x.CreationTime.ToString("yyyy-MM-dd") == input.CreationTime.Value.ToString("yyyy-MM-dd"))
+            .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin)
+            .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd)
                                             .Select(x =>
                                                    new UserListOutput()
                                                    {
@@ -218,7 +222,6 @@
     /// <returns></returns>
     public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input)
     {
-
         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)
@@ -254,8 +257,62 @@
                                 RefundCheckRemark = a.RefundCheckRemark,
                                 RefundApplyRemark = a.RefundApplyRemark,
                                 RefundTime = a.RefundTime,
-                                ChannelName = b.ChannlesName
+                                ChannelName = b.ChannlesName,
+                                ActualRechargeAmount = a.ActualRechargeAmount,
+                                PlatformDeductionAmount = a.PlatformDeductionAmount,
+                                ACOOLYStatus = a.ACOOLYStatus,
+                                LifePayRefundStatus = a.LifePayRefundStatus,
                             }).GetPageResult(input.PageModel);
+
+        return result;
+    }
+
+    public async Task<LifePayOrderOutput> GetLifePayOrderDetail(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 LifePayOrderOutput()
+                {
+            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,
+            OrderParamDetailJsonStr = order.OrderParamDetailJsonStr,
+            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,
+            PlatformRate = platformRate.Rate,
+            PlatformPrice = order.PlatformDeductionAmount,
+            ChannleRate = channle.ChannlesRate,
+            ChannlesRakeRate = channle.ChannlesRakeRate,
+            ChannlesRakePrice = channlesRakePrice.HasValue ? 0 : Math.Round(channlesRakePrice.Value, 2),
+            PremiumRate = premium == null ? 0 : premium.Rate,
+            PremiumPrice = premium == null ? 0 : Math.Round(order.PayAmount * premium.Rate, 2),
+            Profit = (order.PayAmount - order.PlatformDeductionAmount) * (1.00m - channle.ChannlesRakeRate / 100) - (premium == null ? 0 : Math.Round(order.PayAmount * premium.Rate, 2))
+        };
 
         return result;
     }
@@ -336,6 +393,8 @@
 
         return result;
     }
+
+
 
     /// <summary>
     /// 鏍规嵁璁㈠崟鍙疯幏鍙栨敮浠樼姸鎬�
@@ -549,7 +608,7 @@
 
         var orderInput = new CreateLifePayOrderInput
         {
-            OrderNo = CreateOrderNo(),
+            OrderNo = channle.ChannlesNum + CreateOrderNo(),
             LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�,
             LifePayOrderType = LifePayOrderTypeEnum.璇濊垂璁㈠崟,
             //LifePayType = input.LifePayType,
@@ -593,7 +652,7 @@
 
         var orderInput = new CreateLifePayOrderInput
         {
-            OrderNo = CreateOrderNo(),
+            OrderNo = channle.ChannlesNum + CreateOrderNo(),
             LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�,
             LifePayOrderType = LifePayOrderTypeEnum.鐢佃垂璁㈠崟,
             // LifePayType = input.LifePayType,
@@ -637,7 +696,7 @@
 
         var orderInput = new CreateLifePayOrderInput
         {
-            OrderNo = CreateOrderNo(),
+            OrderNo = channle.ChannlesNum + CreateOrderNo(),
             LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�,
             LifePayOrderType = LifePayOrderTypeEnum.鐕冩皵璁㈠崟,
             // LifePayType = input.LifePayType,
@@ -967,7 +1026,7 @@
     /// <param name="orderNo"></param>
     /// <param name="outOrderNo"></param>
     /// <returns></returns>
-    public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status)
+    public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount)
     {
         var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
         CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
@@ -978,6 +1037,8 @@
         }
 
         order.LifePayOrderStatus = status;
+        order.ACOOLYStatus = acoolyStatus;
+        order.PlatformDeductionAmount = payAmount;
         if (acoolyOrderNo.IsNotNullOrEmpty())
         {
             order.ACOOLYOrderNo = acoolyOrderNo;
@@ -1017,15 +1078,44 @@
             throw new UserFriendlyException("褰撳墠璁㈠崟鐘舵�佹棤娉曢��娆�");
         }
 
-        /// TODO 閫�娆捐姹傚畬鎴愬悗濡備綍鎿嶄綔
-        /// var refundResult = await WxPayDomesticRefunds(order.OrderNo, order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100));
+        switch (order.LifePayType)
+        {
+            case LifePayTypeEnum.WxPay:
+                var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100));
+                if (wxRefundResult.Status == "SUCCESS")
+                {
+                    order.PayStatus = LifePayStatusEnum.宸查��娆�;
+                    order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
+                }
+                else if (wxRefundResult.Status == "PROCESSING")
+                {
+                    order.PayStatus = LifePayStatusEnum.閫�娆句腑;
+                    order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑;
+                }
+                else
+                {
+                    throw new UserFriendlyException("閫�娆惧け璐�");
+                }
 
-        order.PayStatus = LifePayStatusEnum.宸查��娆�;
-        order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
+                break;
+            case LifePayTypeEnum.AliPay:
+                var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = order.PayAmount.ToString() });
+                if (aliRefundResult.Code != AlipayResultCode.Success)
+                {
+                    throw new UserFriendlyException("閫�娆惧け璐�");
+                }
+
+                order.PayStatus = LifePayStatusEnum.宸查��娆�;
+                order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
+                break;
+            default: throw new UserFriendlyException("閫�娆惧け璐�");
+        }
+
         order.RefundCredentialsImgUrl = input.RefundCredentialsImgUrl;
         order.RefundCheckRemark = input.RefundCheckRemark;
         order.RefundTime = DateTime.Now;
         order.RefundCheckUserId = CurrentUser.Id;
+        order.RefundPrice = order.PayAmount;
 
         await _lifePayOrderRepository.UpdateAsync(order);
 
@@ -1065,7 +1155,7 @@
 
         order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳;
         order.RefundApplyRemark = input.RefundApplyRemark;
-        order.RefundTime = DateTime.Now;
+        order.RefundApplyTime = DateTime.Now;
 
         await _lifePayOrderRepository.UpdateAsync(order);
     }
@@ -1099,7 +1189,10 @@
         return res;
     }
 
-
+    private async Task<AlipayTradeRefundResponse> AliTradeRefund(AlipayTradeRefundRequest input)
+    {
+        return await _aliPayApi.TradeRefund(input);
+    }
 
     public async Task<int> AddUpdateUserAccount(AddUpdateUserAccountInput input)
     {
@@ -1371,10 +1464,10 @@
     private (decimal PayAmont, decimal DiscountAmount, decimal RechargeAmount) CalculateAmount(decimal amount, decimal rate)
     {
         /// 姝e父鏀粯
-        var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero);
+        //var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero);
 
         /// 1鍒嗛挶鏀粯
-        //decimal payAmount = 0.01m;
+        decimal payAmount = 0.01m;
 
         CheckExtensions.IfTrueThrowUserFriendlyException(payAmount < 0.01m, "鏀粯閲戦閿欒");
 
@@ -1494,7 +1587,6 @@
         CheckExtensions.IfTrueThrowUserFriendlyException(amount <= 0,
                                                          CustomeErrorMessage.SometingMustSometing,
                                                          "鑾峰彇鏀粯浜岀淮鐮佹椂閲戦", "澶т簬0");
-
         var res = await _wxPayApi.PayTransactionsH5(new PayTransactionsNativeH5
         {
             Appid = _wxPayOptions.AppID,
@@ -1547,6 +1639,7 @@
 
         return res.QrCode;
     }
+
     /// <summary>
     /// 鏋勯�犲緟绛惧悕瀛楃涓�
     /// </summary>
diff --git a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs
index 8d96436..8ed9b72 100644
--- a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs
+++ b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs
@@ -62,5 +62,20 @@
         public const string PROCESSING = "PROCESSING";
     }
 
+    public static class Status
+    {
+        public const string 鍏呭�兼垚鍔� = "SUCCESS";
+
+        public const string 鍏呭�间腑 = "PROCESSING";
+
+        public const string 鍏呭�煎け璐� = "FAIL";
+
+        public const string 閫�娆句腑 = "REFUNDING";
+
+        public const string 閫�娆惧畬鎴� = "REFUND_CLOSE";
+
+        public const string 澶辫触鍏抽棴 = "FAIL_CLOSE";
+    }
+
     public const string NotifyUrl = "/api/ACOOLYNotify/ACOOLYNotify";
 }
diff --git a/LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs b/LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs
index cd0fbd3..d8f195a 100644
--- a/LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs
+++ b/LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs
@@ -25,4 +25,14 @@
         /// </summary>
         public string OutTradeNo { get; set; }
     }
+
+    public class AlipayTradeRefundRequest
+    {
+        /// <summary>
+        /// 浜ゆ槗鍒涘缓鏃朵紶鍏ョ殑鍟嗘埛璁㈠崟鍙�
+        /// </summary>
+        public string OutTradeNo { get; set; }
+
+        public string RefundAmount { get; set; }
+    }
 }
\ No newline at end of file
diff --git a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
index 69ba26d..585f39d 100644
--- a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
+++ b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
@@ -35,7 +35,10 @@
     寰呴��娆� = 30,
 
     [Description("宸查��娆�")]
-    宸查��娆� = 40,    
+    宸查��娆� = 40,
+
+    [Description("閫�娆句腑")]
+    閫�娆句腑 = 50,
 }
 
 public enum LifePayOrderStatusEnum
@@ -57,6 +60,26 @@
 
     [Description("閫�娆惧け璐�")]
     閫�娆惧け璐� = 60,
+
+
+    [Description("閫�娆句腑")]
+    閫�娆句腑 = 70,
+}
+
+public enum ACOOLYStatusEnum
+{
+    [Description("鍏呭�间腑")]
+    鍏呭�间腑 = 10,
+    [Description("鍏呭�兼垚鍔�")]
+    鍏呭�兼垚鍔� = 20,
+    [Description("宸插畬鎴�")]
+    宸插畬鎴� = 30,
+    [Description("閮ㄥ垎鍏呭�兼垚鍔�")]
+    閮ㄥ垎鍏呭�兼垚鍔� = 40,
+    [Description("鍏呭�煎け璐�")]
+    鍏呭�煎け璐� = 50,
+    [Description("宸查��娆�")]
+    宸查��娆� = 60,
 }
 
 public enum LifePayRefundStatusEnum
diff --git a/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs b/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs
index 88a9193..d9e2d8b 100644
--- a/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs
+++ b/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs
@@ -600,11 +600,6 @@
     /// </summary>
     public class WxPayDomesticRefundsRequest
     {
-        /// <summary>
-        /// 寰俊鏀粯璁㈠崟鍙� 鍜宱ut_trade_no蹇呴』浜岄�変竴杩涜浼犲弬
-        /// </summary>
-        [JsonProperty("transaction_id")]
-        public string TransactionId { get; set; }
 
         /// <summary>
         /// 鍟嗘埛璁㈠崟鍙� 鍜宱ut_trade_no蹇呴』浜岄�変竴杩涜浼犲弬
@@ -630,11 +625,6 @@
         [JsonProperty("notify_url")]
         public string NotifyUrl { get; set; }
 
-        /// <summary>
-        /// 閫�娆捐祫閲戞潵婧�
-        /// </summary>
-        [JsonProperty("funds_account")]
-        public string FundsAccount { get; set; }
 
         /// <summary>
         /// 閲戦淇℃伅 蹇呭~
diff --git a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs
index 40ccd7c..a64cc72 100644
--- a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs
+++ b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs
@@ -33,5 +33,11 @@
             AlipayTradeQueryResponse response = Factory.Payment.Common().Query(input.OutTradeNo);
             return response;
         }
+
+        public async Task<AlipayTradeRefundResponse> TradeRefund(AlipayTradeRefundRequest input)
+        {
+            AlipayTradeRefundResponse response = Factory.Payment.Common().Refund(input.OutTradeNo,input.RefundAmount);
+            return response;
+        }
     }
 }
\ No newline at end of file
diff --git a/LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs b/LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs
index 7598a2f..482b9fe 100644
--- a/LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs
+++ b/LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs
@@ -26,6 +26,8 @@
         internal const string DataBillErceiptApply = "alipay.data.bill.ereceiptagent.apply";
         internal const string DataBillEreceiptQuery = "alipay.data.bill.accountbookereceipt.query";
         internal const string DataDataserviceBillDownloadUrlQuery = "alipay.data.dataservice.bill.downloadurl.query";
+
+
     }
 
     public class AlipayResultCode
diff --git a/LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs b/LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs
index 13d9afd..8759070 100644
--- a/LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs
+++ b/LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs
@@ -11,5 +11,7 @@
         Task<AlipayTradePrecreateResponse> GetAliPayQRCode(GetPayQrCodeInput input);
 
         AlipayTradeQueryResponse OrderInQuiry(OrderInQuiryInput input);
+
+        Task<AlipayTradeRefundResponse> TradeRefund(AlipayTradeRefundRequest input);
     }
 }
\ No newline at end of file
diff --git a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs b/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
index f48715e..11f6a11 100644
--- a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
+++ b/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
@@ -38,6 +38,8 @@
         /// </summary>
         public decimal RechargeAmount { get; set; }
 
+
+
         /// <summary>
         /// 浼樻儬閲戦
         /// </summary>
@@ -47,6 +49,11 @@
         /// 瀹炰粯閲戦
         /// </summary>
         public decimal PayAmount { get; set; }
+
+        /// <summary>
+        /// 骞冲彴鎵f閲戦
+        /// </summary>
+        public decimal? PlatformDeductionAmount { get; set; }
 
         /// <summary>
         /// 鏀粯鏃堕棿
@@ -74,6 +81,11 @@
         public LifePayOrderStatusEnum LifePayOrderStatus { get; set; }
 
         /// <summary>
+        /// 骞冲彴鐘舵��
+        /// </summary>
+        public ACOOLYStatusEnum? ACOOLYStatus { get; set; }
+
+        /// <summary>
         /// 瀹屾垚鏃堕棿
         /// </summary>
         public DateTime? FinishTime { get; set; }
@@ -98,12 +110,41 @@
         /// </summary>
         public DateTime? RefundTime { get; set; }
 
+        /// <summary>
+        /// 閫�娆剧敵璇峰師鍥�
+        /// </summary>
         public string RefundApplyRemark { get; set; }
 
+        /// <summary>
+        /// 閫�娆剧敵璇锋椂闂�
+        /// </summary>
+        public DateTime? RefundApplyTime { get; set; }
+
+        /// <summary>
+        /// 椹冲洖鍘熷洜
+        /// </summary>
         public string RefundCheckRemark { get; set; }
 
+        /// <summary>
+        /// 閫�娆惧鏍镐汉
+        /// </summary>
         public Guid? RefundCheckUserId { get; set; }
 
         public string? ChannelId { get; set; }
+
+        /// <summary>
+        /// 閫�娆鹃噾棰�
+        /// </summary>
+        public decimal? RefundPrice { get; set; }
+
+        /// <summary>
+        /// 瀹為檯鍏呭�奸噾棰�
+        /// </summary>
+        public decimal? ActualRechargeAmount { get; set; }
+
+        /// <summary>
+        /// 骞冲彴閫�娆剧姸鎬�
+        /// </summary>
+        public LifePayRefundStatusEnum? LifePayRefundStatus { get; set; }
     }
 }
\ No newline at end of file
diff --git a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
index d63ca45..760101a 100644
--- a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
+++ b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
@@ -124,6 +124,13 @@
             <param name="input"></param>
             <returns></returns>
         </member>
+        <member name="M:LifePayment.HttpApi.LifePayController.GetLifePayOrderDetail(System.String)">
+            <summary>
+            鑾峰彇璁㈠崟璇︽儏
+            </summary>
+            <param name="orderNo"></param>
+            <returns></returns>
+        </member>
         <member name="M:LifePayment.HttpApi.LifePayController.GetUserLifePayOrderPage(LifePayment.Application.Contracts.QueryLifePayOrderListInput)">
             <summary>
             鑾峰彇鎴戠殑璁㈠崟鍒嗛〉鏁版嵁
diff --git a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
index 0dad992..863e3a7 100644
--- a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
+++ b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
@@ -42,13 +42,15 @@
             <param name="outOrderNo"></param>
             <returns></returns>
         </member>
-        <member name="M:LifePayment.Application.Contracts.ILifePayService.ACOOLYOrderNotifyHandler(System.String,System.String,LifePayment.Domain.Shared.LifePayOrderStatusEnum)">
+        <member name="M:LifePayment.Application.Contracts.ILifePayService.ACOOLYOrderNotifyHandler(System.String,System.String,LifePayment.Domain.Shared.LifePayOrderStatusEnum,LifePayment.Domain.Shared.ACOOLYStatusEnum,System.Decimal)">
             <summary>
             鏀粯鎴愬姛鍥炶皟澶勭悊
             </summary>
             <param name="orderNo"></param>
             <param name="acoolyOrderNo"></param>
             <param name="status"></param>
+            <param name="acoolyStatus"></param>
+            <param name="payAmount"></param>
             <returns></returns>
         </member>
         <member name="M:LifePayment.Application.Contracts.ILifePayService.CreateLifePayPhoneOrder(LifePayment.Application.Contracts.CreateLifePayOrderInput{LifePayment.Application.Contracts.LifePhoneData})">
@@ -173,6 +175,13 @@
             鑾峰彇璁㈠崟鍒嗛〉鏁版嵁
             </summary>
             <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:LifePayment.Application.Contracts.ILifePayService.GetLifePayOrderDetail(System.String)">
+            <summary>
+            鑾峰彇璁㈠崟璇︽儏
+            </summary>
+            <param name="orderNo"></param>
             <returns></returns>
         </member>
         <member name="M:LifePayment.Application.Contracts.ILifePayService.GetPayStatusByOrderNo(System.String)">
@@ -501,7 +510,7 @@
             鎵嬫満鍙�/鐢ㄦ埛鍚�
             </summary>
         </member>
-        <member name="P:LifePayment.Application.Contracts.QueryUserPageInput.CreationTime">
+        <member name="P:LifePayment.Application.Contracts.QueryUserPageInput.CreationTimeBegin">
             <summary>
             娉ㄥ唽鏃堕棿
             </summary>
@@ -621,6 +630,11 @@
             鍏呭�奸噾棰�
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.ActualRechargeAmount">
+            <summary>
+            瀹為檯鍏呭�奸噾棰�
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.DiscountAmount">
             <summary>
             浼樻儬閲戦
@@ -634,6 +648,11 @@
         <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.PayTime">
             <summary>
             鏀粯鏃堕棿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.PlatformDeductionAmount">
+            <summary>
+            骞冲彴鎵f閲戦
             </summary>
         </member>
         <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.PayStatus">
@@ -669,6 +688,31 @@
         <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RefundTime">
             <summary>
             閫�娆炬椂闂�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RefundApplyRemark">
+            <summary>
+            鐢宠閫�娆惧師鍥�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RefundCheckRemark">
+            <summary>
+            椹冲洖鍘熷洜
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.ACOOLYOrderNo">
+            <summary>
+            渚涘簲鍟嗚鍗曞彿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.ACOOLYStatus">
+            <summary>
+            渚涘簲鍟嗚鍗曠姸鎬�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.LifePayRefundStatus">
+            <summary>
+            骞冲彴閫�娆剧姸鎬�
             </summary>
         </member>
         <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.CreationTime">
@@ -786,6 +830,131 @@
             娓犻亾娴佹按鍙�
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.LifePayType">
+            <summary>
+            鐢熸椿缂磋垂鏀粯绫诲瀷
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.LifePayOrderType">
+            <summary>
+            璁㈠崟绫诲瀷
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.OrderNo">
+            <summary>
+            璁㈠崟鍙�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RechargeAmount">
+            <summary>
+            鍏呭�奸噾棰�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.DiscountAmount">
+            <summary>
+            浼樻儬閲戦
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PayAmount">
+            <summary>
+            瀹炰粯閲戦
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PayTime">
+            <summary>
+            鏀粯鏃堕棿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PayStatus">
+            <summary>
+            鏀粯鐘舵��
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.LifePayOrderStatus">
+            <summary>
+            璁㈠崟鐘舵��
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.FinishTime">
+            <summary>
+            瀹屾垚鏃堕棿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.OrderParamDetailJsonStr">
+            <summary>
+            璁㈠崟璇︾粏鏁版嵁
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.CreationTime">
+            <summary>
+            涓嬪崟鏃堕棿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundTime">
+            <summary>
+            閫�娆炬椂闂�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundCredentialsImgUrl">
+            <summary>
+            閫�娆惧嚟璇�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ACOOLYOrderNo">
+            <summary>
+            娓犻亾娴佹按鍙�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.LifePayRefundStatus">
+            <summary>
+            骞冲彴閫�娆剧姸鎬�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ActualRechargeAmount">
+            <summary>
+            瀹為檯鍏呭�奸噾棰�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundPrice">
+            <summary>
+            閫�娆鹃噾棰�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PlatformRate">
+            <summary>
+            骞冲彴鎶樻墸姣斾緥
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PlatformPrice">
+            <summary>
+            骞冲彴鎵f閲戦
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ChannleRate">
+            <summary>
+            娓犻亾鎶樻墸
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ChannlesRakeRate">
+            <summary>
+            娓犻亾浣i噾姣斾緥
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ChannlesRakePrice">
+            <summary>
+            娓犻亾浣i噾
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PremiumRate">
+            <summary>
+            鎵嬬画璐规瘮渚�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PremiumPrice">
+            <summary>
+            鎵嬬画璐�
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.UserLifePayOrderRefundOutput.Id">
             <summary>
             璁㈠崟缂栧彿
@@ -851,6 +1020,16 @@
             鍒涘缓鏃堕棿
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.Amount">
+            <summary>
+            璐︽埛浣欓
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.AccumulatedReceipts">
+            <summary>
+            绱鏀舵
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.RecordOperateHistoryEto.RelationId">
             <summary>
             鍏宠仈鍏崇郴ID
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
index 8e0e2b9..f9c6aca 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
@@ -53,7 +53,9 @@
             var baseInfo = JsonConvert.DeserializeObject<ACOOLYRequestBaseResponse>(body);
             var orderNo = string.Empty;
             var status = LifePayOrderStatusEnum.寰呯‘璁�;
+            var acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
             var acoolyOrderNo = string.Empty;
+            decimal payAmount = 0;
             _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙被鍨嬶細" + baseInfo.Service);
             _logger.LogError("ACOOLY鍥炶皟鍐呭锛�" + body);
             switch (baseInfo.Service)
@@ -62,29 +64,33 @@
                     var confirmElectricOrderResponse = JsonConvert.DeserializeObject<ConfirmElectricOrderResponse>(body);
                     orderNo = confirmElectricOrderResponse.ElectricChargeOrder.OutOrderNo;
                     acoolyOrderNo = confirmElectricOrderResponse.ElectricChargeOrder.BusiOrderNo;
+                    payAmount = confirmElectricOrderResponse.ElectricChargeOrder.PayAmount;
                     _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmElectricOrderResponse.ElectricChargeOrder.Status);
 
-                    /// TODO 鐘舵�佷笉姝g‘
                     if (!confirmElectricOrderResponse.Success
                     || (confirmElectricOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmElectricOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                     {
                         status = LifePayOrderStatusEnum.宸插け璐�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
 
-                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Code.SUCCESS)
+                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�)
                     {
                         status = LifePayOrderStatusEnum.宸插畬鎴�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�;
                     }
                     else
 
-                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Code.PROCESSING)
+                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
                     {
                         status = LifePayOrderStatusEnum.寰呯‘璁�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑;
                     }
                     else
                     {
                         status = LifePayOrderStatusEnum.宸插け璐�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
 
                     break;
@@ -92,35 +98,81 @@
                     var confirmPhoneOrderResponse = JsonConvert.DeserializeObject<ConfirmPhoneOrderResponse>(body);
                     orderNo = confirmPhoneOrderResponse.PhoneChargeOrder.OutOrderNo;
                     acoolyOrderNo = confirmPhoneOrderResponse.PhoneChargeOrder.BusiOrderNo;
+                    payAmount = confirmPhoneOrderResponse.PhoneChargeOrder.PayAmount;
                     _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmPhoneOrderResponse.PhoneChargeOrder.Status);
                     if (!confirmPhoneOrderResponse.Success
                     || (confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                     {
                         status = LifePayOrderStatusEnum.宸插け璐�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     else
 
-                    if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Code.SUCCESS)
+                    if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�)
                     {
                         status = LifePayOrderStatusEnum.宸插畬鎴�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�;
                     }
                     else
 
-                    if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Code.PROCESSING)
+                    if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
                     {
                         status = LifePayOrderStatusEnum.寰呯‘璁�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑;
                     }
                     else
                     {
                         status = LifePayOrderStatusEnum.宸插け璐�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
                     }
                     break;
+                case ACOOLYConstant.Sevice.ConfirmGasOrder:
+                    var confirmGasOrderResponse = JsonConvert.DeserializeObject<ConfirmGasOrderResponse>(body);
+                    orderNo = confirmGasOrderResponse.GasChargeOrder.OutOrderNo;
+                    acoolyOrderNo = confirmGasOrderResponse.GasChargeOrder.BusiOrderNo;
+                    payAmount = confirmGasOrderResponse.GasChargeOrder.PayAmount;
+                    _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmGasOrderResponse.GasChargeOrder.Status);
+                    if (!confirmGasOrderResponse.Success
+                    || (confirmGasOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmGasOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
+                    {
+                        status = LifePayOrderStatusEnum.宸插け璐�;
+                    }
+                    else
 
+                    if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�)
+                    {
+                        status = LifePayOrderStatusEnum.宸插畬鎴�;
+                        // TODO 纭浠�涔堟儏鍐典笅鍙互鍒ゆ柇鏄儴鍒嗗厖鍊兼垚鍔�
+
+                        //if (confirmGasOrderResponse.GasChargeOrder.ParValue == confirmGasOrderResponse.GasChargeOrder.PayAmount)
+                        //{
+
+                        //    acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�;
+                        //}
+                        //else
+                        //{
+                        //    acoolyStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
+                        //}
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�;
+                    }
+                    else
+
+                    if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑)
+                    {
+                        status = LifePayOrderStatusEnum.寰呯‘璁�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑;
+                    }
+                    else
+                    {
+                        status = LifePayOrderStatusEnum.宸插け璐�;
+                        acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
+                    }
+                    break;
                 default:
                     break;
             }
 
-            await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status);
+            await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount);
         }
     }
 }
\ No newline at end of file
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs
index e057499..28aee15 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs
@@ -51,7 +51,7 @@
             //var serializeRequest = "{\"gmt_create\":\"2025-02-25 13:18:59\",\"charset\":\"UTF-8\",\"seller_email\":\"zfb1@818nb.com\",\"subject\":\"鐢熸椿缂磋垂-璇濊垂\",\"sign\":\"Sp06G1GxrAfDvoHPz9l3DJ20SxhvRzEGFeCGu4LHrSWmEG4OY7MHMx+iJi54ETbdXV0YsyDH9JZD7PWN3HCpEq/wGO4Wh4VSYSe7lqxD6r4f/HFiB0YlrdQoSzjZgYPzLjy6bcdlKRRHOeDkgs2i7TfvIsxWxHs9t0xuS0RlkpdZfb7d7m0EuZ/3v2Cbsj5AHjxb1S2PkO0oQyriYgGQdmkPqILZHwieST+tNEHS4dGFKYu2nkfctAGjWIDv/hKQNY7jEUxsEeG0SnK4TPU8zNplFR9/aKM0Wfwp1pdlaiP2u/d8vOtNh5q+emvaYbKrUkIEFBok8pDLNDta7ZjtVw==\",\"invoice_amount\":\"0.01\",\"buyer_open_id\":\"071xYXDfXBLAI9U11jg_WrH1K6hWq8HYGz0u85xBivf3Sce\",\"notify_id\":\"2025022501222131904087711494539601\",\"fund_bill_list\":\"[{\\\"amount\\\":\\\"0.01\\\",\\\"fundChannel\\\":\\\"ALIPAYACCOUNT\\\"}]\",\"notify_type\":\"trade_status_sync\",\"trade_status\":\"TRADE_SUCCESS\",\"receipt_amount\":\"0.01\",\"buyer_pay_amount\":\"0.01\",\"app_id\":\"2021004171602214\",\"sign_type\":\"RSA2\",\"seller_id\":\"2088050542042301\",\"gmt_payment\":\"2025-02-25 13:19:03\",\"notify_time\":\"2025-02-25 13:44:34\",\"merchant_app_id\":\"2021004171602214\",\"version\":\"1.0\",\"out_trade_no\":\"JF202502251318555214671\",\"total_amount\":\"0.01\",\"trade_no\":\"2025022522001487711401331043\",\"auth_app_id\":\"2021004171602214\",\"buyer_logon_id\":\"130****2238\",\"point_amount\":\"0.00\"}";
             var input = JsonConvert.DeserializeObject<AliRechargeNotifyInput>(serializeRequest);
 
-            if (input.OutTradeNo.StartsWith("JF") && Regex.IsMatch(input.OutTradeNo, @"^JF\d+$"))
+            if (input.OutTradeNo.Contains("JF"))
             {
                 if (input.TradeStatus == LifePaymentConstant.AliPayStatus.鏀粯鎴愬姛)
                 {
@@ -72,7 +72,7 @@
         [AllowAnonymous]
         public async Task<ContentResult> TestAliRechargeNotify(string outTradeNo, string tradeNo, bool success)
         {
-            if (outTradeNo.StartsWith("JF") && Regex.IsMatch(outTradeNo, @"^JF\d+$"))
+            if (outTradeNo.Contains("JF"))
             {
                 if (success)
                 {
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
index 78fcb0a..0f24eca 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
@@ -36,6 +36,17 @@
         #region 鏌ヨ
 
         /// <summary>
+        /// 鑾峰彇椤堕儴缁熻鏁版嵁
+        /// </summary>
+        /// <returns></returns>
+        //[HttpGet]
+        //[AllowAnonymous]
+        //public async Task<TopStatisticsOutput> GetTopStatistics()
+        //{
+        //    return await _lifePayService.GetTopStatistics();
+        //}
+
+        /// <summary>
         /// 鑾峰彇鐢佃垂闈㈠��
         /// </summary>
         /// <returns></returns>
@@ -181,6 +192,18 @@
         }
 
         /// <summary>
+        /// 鑾峰彇璁㈠崟璇︽儏
+        /// </summary>
+        /// <param name="orderNo"></param>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo)
+        {
+            return await _lifePayService.GetLifePayOrderDetail(orderNo);
+        }
+
+
+        /// <summary>
         /// 鑾峰彇鎴戠殑璁㈠崟鍒嗛〉鏁版嵁
         /// </summary>
         /// <param name="input"></param>
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
index 54d3114..430f3ac 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
@@ -48,7 +48,7 @@
                 var data = _wxPayApi.AesGcmDecrypt(input.Resource.AssociatedData, input.Resource.Nonce, input.Resource.Ciphertext);
                 var wxPayNotice = JsonConvert.DeserializeObject<WxPayNotice>(data);
 
-                if (wxPayNotice.OutTradeNo.StartsWith("JF") && Regex.IsMatch(wxPayNotice.OutTradeNo, @"^JF\d+$"))
+                if (wxPayNotice.OutTradeNo.Contains("JF") )
                 {
                     if (wxPayNotice.TradeState == LifePaymentConstant.WxPayStatus.鏀粯鎴愬姛)
                     {

--
Gitblit v1.9.1