From 2ba4b5952aed8356da2d41e3f6b711d4a61c656d Mon Sep 17 00:00:00 2001
From: zhengyuxuan <zhengyuxuan1995>
Date: 星期三, 02 四月 2025 16:49:46 +0800
Subject: [PATCH] fix:bug修复

---
 LifePayment/LifePayment.Application/LifePay/LifePayService.cs |  440 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 280 insertions(+), 160 deletions(-)

diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
index 405d11c..ed8c787 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -28,6 +28,9 @@
 using NPOI.SS.Formula.Functions;
 using StackExchange.Redis;
 using static Volo.Abp.Identity.Settings.IdentitySettingNames;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
+using LifePayment.Application.LifePay;
+using Alipay.AopSdk.Core.Domain;
 
 namespace LifePayment.Application;
 
@@ -45,12 +48,15 @@
     private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep;
     private readonly IRepository<LifePayAccount, Guid> _lifePayAccount;
     private readonly IRepository<OperateHistory, Guid> _operateHistory;
+    private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository;
+    private readonly ILifePayOrderService _lifePayOrderService;
     private readonly IDataFilter dataFilter;
     private readonly IChannelFilter _channelFilter;
     private readonly IAliPayApi _aliPayApi;
     private readonly IAlipayInterfaceManager _alipayInterfaceManager;
     private readonly IWxPayApi _wxPayApi;
     private readonly WxPayOption _wxPayOptions;
+    private readonly InitSetting _initSettingOptions;
 
     private readonly IACOOLYManager _aCOOLYManager;
 
@@ -62,11 +68,14 @@
                           IRepository<LifePayUser, Guid> lifePayUserRepository,
                           IRepository<LifePayPremium, Guid> lifePayPremiumRepository,
                           IRepository<LifePayIntroInfo, Guid> lifePayIntroInfoRepository,
+                          IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository,
                           IRepository<OperateHistory, Guid> operateHistory,
+                          ILifePayOrderService lifePayOrderService,
                           IAliPayApi aliPayApi,
                           IAlipayInterfaceManager aliPayInterfaceManager,
                           IWxPayApi wxPayApi,
                           IOptions<WxPayOption> wxPayOptions,
+                          IOptions<InitSetting> initSettingOptions,
                           IRepository<LifePayChannles, Guid> lifePayChannlesRep,
                           IRepository<LifePayAccount, Guid> lifePayAccount,
                           IDataFilter dataFilter,
@@ -77,12 +86,15 @@
         _lifePayRateRepository = lifePayRateRepository;
         _lifePayOrderRepository = lifePayOrderRepository;
         _lifePayUserRepository = lifePayUserRepository;
+        _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository;
         _lifePayPremiumRepository = lifePayPremiumRepository;
         _lifePayIntroInfoRepository = lifePayIntroInfoRepository;
         _aliPayApi = aliPayApi;
+        _lifePayOrderService = lifePayOrderService;
         _alipayInterfaceManager = aliPayInterfaceManager;
         _wxPayApi = wxPayApi;
         _wxPayOptions = wxPayOptions.Value;
+        _initSettingOptions = initSettingOptions.Value;
         _distributedEventBus = distributedEventBus;
         _lifePayChannlesRep = lifePayChannlesRep;
         _lifePayAccount = lifePayAccount;
@@ -194,6 +206,8 @@
             .WhereIf(!string.IsNullOrEmpty(input.QueryCondition), x => x.PhoneNumber.Contains(input.QueryCondition) || x.Name.Contains(input.QueryCondition))
             .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin)
             .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd)
+            .WhereIf(input.LoginTimeBegin.HasValue, x => x.LastLoginTime >= input.LoginTimeBegin)
+            .WhereIf(input.LoginTimeEnd.HasValue, x => x.LastLoginTime <= input.LoginTimeEnd)
                                             .Select(x =>
                                                    new UserListOutput()
                                                    {
@@ -263,19 +277,19 @@
                             from b in temp.DefaultIfEmpty()
                             select new LifePayOrderListOutput
                             {
-                                DiscountAmount = a.DiscountAmount,
+                                DiscountAmount = a.DiscountAmount ?? 0,
                                 FinishTime = a.FinishTime,
                                 Id = a.Id,
-                                LifePayOrderStatus = a.LifePayOrderStatus,
+                                LifePayOrderStatus = a.LifePayOrderStatus?? 0,
                                 LifePayOrderType = a.LifePayOrderType,
                                 LifePayType = a.LifePayType,
                                 OrderNo = a.OrderNo,
-                                PayAmount = a.PayAmount,
+                                PayAmount = a.PayAmount ?? 0,
                                 PhoneNumber = a.PhoneNumber,
-                                RechargeAmount = a.RechargeAmount,
+                                RechargeAmount = a.RechargeAmount??0,
                                 UserId = a.UserId,
                                 OutOrderNo = a.OutOrderNo,
-                                PayStatus = a.PayStatus,
+                                PayStatus = a.PayStatus?? 0,
                                 PayTime = a.PayTime,
                                 ACOOLYOrderNo = a.ACOOLYOrderNo,
                                 RefundCredentialsImgUrl = a.RefundCredentialsImgUrl.GetOssPath(),
@@ -314,24 +328,24 @@
                                             .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.PhoneNumber.Contains(input.KeyWords) || x.RefundOrderNo.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,
+                                DiscountAmount = a.DiscountAmount ?? 0,
                                 FinishTime = a.FinishTime,
                                 Id = a.Id,
-                                LifePayOrderStatus = a.LifePayOrderStatus,
+                                LifePayOrderStatus = a.LifePayOrderStatus ?? 0,
                                 LifePayOrderType = a.LifePayOrderType,
                                 LifePayType = a.LifePayType,
                                 OrderNo = a.OrderNo,
-                                PayAmount = a.PayAmount,
+                                PayAmount = a.PayAmount ?? 0,
                                 PhoneNumber = a.PhoneNumber,
-                                RechargeAmount = a.RechargeAmount,
+                                RechargeAmount = a.RechargeAmount ?? 0,
                                 UserId = a.UserId,
                                 OutOrderNo = a.OutOrderNo,
-                                PayStatus = a.PayStatus,
+                                PayStatus = a.PayStatus ?? 0,
                                 PayTime = a.PayTime,
                                 ACOOLYOrderNo = a.ACOOLYOrderNo,
                                 RefundCredentialsImgUrl = a.RefundCredentialsImgUrl.GetOssPath(),
@@ -403,25 +417,24 @@
         CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
         var user = await _lifePayUserRepository.FirstOrDefaultAsync(x => x.Id == order.UserId);
         CheckExtensions.IfTrueThrowUserFriendlyException(user == null, "鐢ㄦ埛涓嶅瓨鍦�");
-        var orderpirce = await GetOrderPrice(order.RechargeAmount, order.PayAmount, order.PlatformRate ?? 0, order.ChannleRate ?? 0, order.ChannlesRakeRate ?? 0, order.PremiumRate ?? 0);
-
+        var orderpirce = await GetOrderPrice(order.RechargeAmount ?? 0, order.PayAmount ?? 0, order.PlatformRate ?? 0, order.ChannleRate ?? 0, order.ChannlesRakeRate ?? 0, order.PremiumRate ?? 0);
 
         var result = new LifePayOrderOutput()
         {
             UserName = user.Name,
             UserPhoneNumber = user.PhoneNumber,
-            DiscountAmount = order.DiscountAmount,
+            DiscountAmount = order.DiscountAmount ?? 0,
             FinishTime = order.FinishTime,
             Id = order.Id,
             OutOrderNo = order.OutOrderNo,
             LifePayChannle = channle.ChannlesName,
-            Status = order.LifePayOrderStatus,
+            Status = order.LifePayOrderStatus ?? 0,
             LifePayOrderType = order.LifePayOrderType,
             LifePayType = order.LifePayType,
             OrderNo = order.OrderNo,
-            PayAmount = order.PayAmount,
-            RechargeAmount = order.RechargeAmount,
-            PayStatus = order.PayStatus,
+            PayAmount = order.PayAmount ?? 0,
+            RechargeAmount = order.RechargeAmount ?? 0,
+            PayStatus = order.PayStatus ?? 0,
             PayTime = order.PayTime,
             OrderParamDetailJsonStr = order.OrderParamDetailJsonStr,
             RefundCredentialsImgUrl = order.RefundCredentialsImgUrl.GetOssPath(),
@@ -463,18 +476,18 @@
         {
             UserName = user.Name,
             UserPhoneNumber = user.PhoneNumber,
-            DiscountAmount = order.DiscountAmount,
+            DiscountAmount = order.DiscountAmount ?? 0,
             FinishTime = order.FinishTime,
             Id = order.Id,
             OutOrderNo = order.OutOrderNo,
             LifePayChannle = channle.ChannlesName,
-            Status = order.LifePayOrderStatus,
+            Status = order.LifePayOrderStatus ?? 0,
             LifePayOrderType = order.LifePayOrderType,
             LifePayType = order.LifePayType,
             OrderNo = order.OrderNo,
-            PayAmount = order.PayAmount,
-            RechargeAmount = order.RechargeAmount,
-            PayStatus = order.PayStatus,
+            PayAmount = order.PayAmount ?? 0,
+            RechargeAmount = order.RechargeAmount ?? 0,
+            PayStatus = order.PayStatus ?? 0,
             PayTime = order.PayTime,
             RefundCredentialsImgUrl = order.RefundCredentialsImgUrl.GetOssPath(),
             CreationTime = order.CreationTime,
@@ -519,16 +532,16 @@
                                             .Select(x =>
                                                     new UserLifePayOrderOutput
                                                     {
-                                                        DiscountAmount = x.DiscountAmount,
+                                                        DiscountAmount = x.DiscountAmount ?? 0,
                                                         FinishTime = x.FinishTime,
                                                         Id = x.Id,
-                                                        LifePayOrderStatus = x.LifePayOrderStatus,
+                                                        LifePayOrderStatus = x.LifePayOrderStatus ?? 0,
                                                         LifePayOrderType = x.LifePayOrderType,
                                                         LifePayType = x.LifePayType,
                                                         OrderNo = x.OrderNo,
-                                                        PayAmount = x.PayAmount,
-                                                        RechargeAmount = x.RechargeAmount,
-                                                        PayStatus = x.PayStatus,
+                                                        PayAmount = x.PayAmount ?? 0,
+                                                        RechargeAmount = x.RechargeAmount ?? 0,
+                                                        PayStatus = x.PayStatus ?? 0,
                                                         PayTime = x.PayTime,
                                                         OrderParamDetailJsonStr = x.OrderParamDetailJsonStr,
                                                         RefundCredentialsImgUrl = x.RefundCredentialsImgUrl.GetOssPath(),
@@ -550,16 +563,16 @@
                                             .Select(x =>
                                                     new UserLifePayOrderOutput
                                                     {
-                                                        DiscountAmount = x.DiscountAmount,
+                                                        DiscountAmount = x.DiscountAmount ?? 0,
                                                         FinishTime = x.FinishTime,
                                                         Id = x.Id,
-                                                        LifePayOrderStatus = x.LifePayOrderStatus,
+                                                        LifePayOrderStatus = x.LifePayOrderStatus?? 0 ,
                                                         LifePayOrderType = x.LifePayOrderType,
                                                         LifePayType = x.LifePayType,
                                                         OrderNo = x.OrderNo,
-                                                        PayAmount = x.PayAmount,
-                                                        RechargeAmount = x.RechargeAmount,
-                                                        PayStatus = x.PayStatus,
+                                                        PayAmount = x.PayAmount ?? 0,
+                                                        RechargeAmount = x.RechargeAmount ?? 0,
+                                                        PayStatus = x.PayStatus ?? 0,
                                                         PayTime = x.PayTime,
                                                         OrderParamDetailJsonStr = x.OrderParamDetailJsonStr,
                                                         RefundCredentialsImgUrl = x.RefundCredentialsImgUrl.GetOssPath(),
@@ -585,7 +598,7 @@
     public async Task<LifePayStatusEnum> GetPayStatusByOrderNo(string orderNo)
     {
         return await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo)
-                                            .Select(x => x.PayStatus)
+                                            .Select(x => x.PayStatus ?? 0)
                                             .FirstOrDefaultAsync();
     }
 
@@ -594,9 +607,9 @@
         return await GetLifePayChannlesListFilter().GetPageResult(input.PageModel);
     }
 
-    public async Task<List<CreateEditPayChannelsInput>> GetLifePayChannlesAllList()
+    public async Task<List<CreateEditPayChannelsInput>> GetLifePayChannlesAllList(QueryLifePayChannlesInput input)
     {
-        return await GetLifePayChannlesListFilter().Where(x => x.Status == LifePayChannelsStatsEnum.鍚敤).ToListAsync();
+        return await GetLifePayChannlesListFilter().WhereIf(input.Status.HasValue,x => x.Status == input.Status).ToListAsync();
     }
 
     public async Task<CreateEditPayChannelsInput> GetLifePayChannlesDto(Guid id)
@@ -641,7 +654,7 @@
                                                         OrderNo = x.OrderNo,
                                                         RefundCheckRemark = x.RefundCheckRemark,
                                                         RefundApplyRemark = x.RefundApplyRemark,
-                                                        LifePayOrderStatus = x.LifePayOrderStatus,
+                                                        LifePayOrderStatus = x.LifePayOrderStatus ?? 0,
                                                     }).FirstOrDefaultAsync();
 
         CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "鏈壘鍒拌鍗曚俊鎭�");
@@ -816,6 +829,86 @@
             return "";
         }
     }
+
+    /// <summary>
+    /// 鏌ヨ鏀粯瀹濇敮浠樿鍗曚俊鎭�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<AlipayTradeQueryResponse> QueryAlipayTrade(OrderInQuiryInput input)
+    {
+        var result = await _aliPayApi.OrderInQuiry(input);
+
+        return result;
+    }
+
+    /// <summary>
+    /// 鏌ヨ鏀粯瀹濋��娆捐鍗曚俊鎭�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input)
+    {
+        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OutTradeNo || x.RefundOrderNo == input.OutRefundNo).FirstOrDefaultAsync();
+        CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "鏈壘鍒拌鍗曚俊鎭�");
+        input.OutTradeNo = order.OrderNo;
+        input.OutRefundNo = order.RefundOrderNo;
+        var result = await _aliPayApi.QueryAlipayTradeRefund(input);
+        if (result.Code == AlipayResultCode.Success && result.RefundStatus == AlipayRefundStatus.Success)
+        {
+            order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
+            order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�;
+            await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+            {
+                OrderNo = order.RefundOrderNo,
+                OutOrderNo = result.TradeNo,
+                LifePayType = LifePayTypeEnum.AliPay,
+                ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts
+            });
+        }
+
+        return result;
+    }
+
+    /// <summary>
+    /// 鏌ヨ寰俊閫�娆捐鍗曚俊鎭�
+    /// </summary>
+    /// <param name="outTradeNo"></param>
+    /// <returns></returns>
+    public async Task<WxPayDomesticRefundsQueryReponse> WxPayDomesticRefundsQuery(string outTradeNo)
+    {
+        var order = await _lifePayOrderRepository.Where(x => x.RefundOrderNo == outTradeNo).FirstOrDefaultAsync();
+        CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "鏈壘鍒拌鍗曚俊鎭�");
+        var result = await _wxPayApi.WxPayDomesticRefundsQuery(outTradeNo);
+        if (order.LifePayRefundStatus != LifePayRefundStatusEnum.宸查��娆� && result.Code == WxpayResultCode.Success && result.Status == WxPayRefundStatus.閫�娆炬垚鍔�)
+        {
+            order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
+            order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�;
+            await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+            {
+                OrderNo = order.OrderNo,
+                OutRefundNo = order.RefundOrderNo,
+                OutOrderNo = order.OutOrderNo,
+                LifePayType = LifePayTypeEnum.AliPay,
+                ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts
+            });
+        }
+        return result;
+
+    }
+
+    /// <summary>
+    /// 鏌ヨ寰俊璁㈠崟淇℃伅
+    /// </summary>
+    /// <param name="outTradeNo"></param>
+    /// <returns></returns>
+    public async Task<WxPayTradeQueryReponse> WxPayTradeQuery(string outTradeNo)
+    {
+        return await _wxPayApi.WxPayTradeQuery(outTradeNo);
+    }
+
+  
+
     #endregion
 
     #region 鎿嶄綔
@@ -836,6 +929,12 @@
         var channle = await GetLifePayChannlesDtoByNum(input.ChannelId);
         CheckExtensions.IfTrueThrowUserFriendlyException(channle == null, "娓犻亾涓嶅瓨鍦�");
 
+        var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.PhoneOrder 
+        && x.PayStatus == LifePayStatusEnum.宸叉敮浠�
+        && x.LifePayOrderStatus == LifePayOrderStatusEnum.鍏呭�间腑
+        && x.OrderParamDetailJsonStr.Contains(input.ProductData.Phone)).ToListAsync();
+         CheckExtensions.IfTrueThrowUserFriendlyException(repeatOrder.Count() > 0, "鎮ㄦ湁鍚屾埛鍙疯鍗曟鍦ㄥ厖鍊间腑锛岃鍕块噸澶嶅厖鍊�");
+
         //var rate = await GetRate();
         //CheckExtensions.IfTrueThrowUserFriendlyException(rate.IsNullOrEmpty(), "鏈厤缃姌鎵�");
 
@@ -850,7 +949,7 @@
         {
             OrderNo = channle.ChannlesNum + CreateOrderNo(),
             LifePayOrderStatus = LifePayOrderStatusEnum.鍏呭�间腑,
-            LifePayOrderType = LifePayOrderTypeEnum.璇濊垂璁㈠崟,
+            LifePayOrderType = LifePayOrderTypeEnum.PhoneOrder,
             //LifePayType = input.LifePayType,
             OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData),
             UserId = user.Id,
@@ -892,19 +991,21 @@
 
         //var rate = await GetRate();
         //CheckExtensions.IfTrueThrowUserFriendlyException(rate.IsNullOrEmpty(), "鏈厤缃姌鎵�");
+        var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.ElectricOrder && x.PayStatus == LifePayStatusEnum.宸叉敮浠�
+         && x.LifePayOrderStatus == LifePayOrderStatusEnum.鍏呭�间腑 && x.OrderParamDetailJsonStr.Contains(input.ProductData.ElectricType)
+         && x.OrderParamDetailJsonStr.Contains(input.ProductData.ElectricAccount)).ToListAsync();
+        CheckExtensions.IfTrueThrowUserFriendlyException(repeatOrder.Count() > 0, "鎮ㄦ湁鍚屾埛鍙疯鍗曟鍦ㄥ厖鍊间腑锛岃鍕块噸澶嶅厖鍊�");
 
 
         var rate = await GetLifePayRate(channle, LifePayRateTypeEnum.榛樿鐢佃垂鎶樻墸);
-
         var amount = CalculateAmount(input.ProductData.ParValue, rate);
-
         var platformRate = await _lifePayRateRepository.FirstOrDefaultAsync(r => r.RateType == LifePayRateTypeEnum.渚涘簲鍟嗘姌鎵d环);
 
         var orderInput = new CreateLifePayOrderInput
         {
             OrderNo = channle.ChannlesNum + CreateOrderNo(),
             LifePayOrderStatus = LifePayOrderStatusEnum.鍏呭�间腑,
-            LifePayOrderType = LifePayOrderTypeEnum.鐢佃垂璁㈠崟,
+            LifePayOrderType = LifePayOrderTypeEnum.ElectricOrder,
             // LifePayType = input.LifePayType,
             OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData),
             UserId = user.Id,
@@ -944,6 +1045,10 @@
 
         //var rate = await GetRate();
         //CheckExtensions.IfTrueThrowUserFriendlyException(rate.IsNullOrEmpty(), "鏈厤缃姌鎵�");
+        var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.GasOrder && x.PayStatus == LifePayStatusEnum.宸叉敮浠�
+        && x.LifePayOrderStatus == LifePayOrderStatusEnum.鍏呭�间腑 && x.OrderParamDetailJsonStr.Contains(input.ProductData.GasOrgType)
+        && x.OrderParamDetailJsonStr.Contains(input.ProductData.GasAccount)).ToListAsync();
+        CheckExtensions.IfTrueThrowUserFriendlyException(repeatOrder.Count() > 0, "鎮ㄦ湁鍚屾埛鍙疯鍗曟鍦ㄥ厖鍊间腑锛岃鍕块噸澶嶅厖鍊�");
 
 
         var rate = await GetLifePayRate(channle, LifePayRateTypeEnum.榛樿鐕冩皵鎶樻墸);
@@ -956,7 +1061,7 @@
         {
             OrderNo = channle.ChannlesNum + CreateOrderNo(),
             LifePayOrderStatus = LifePayOrderStatusEnum.鍏呭�间腑,
-            LifePayOrderType = LifePayOrderTypeEnum.鐕冩皵璁㈠崟,
+            LifePayOrderType = LifePayOrderTypeEnum.GasOrder,
             // LifePayType = input.LifePayType,
             OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData),
             UserId = user.Id,
@@ -987,38 +1092,15 @@
     /// <returns></returns>
     public async Task<string> SetLifePayOrderPayType(SetLifePayOrderPayTypeInput input, string ip)
     {
-        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OrderNo).FirstOrDefaultAsync();
-        CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
 
-        CheckExtensions.IfTrueThrowUserFriendlyException(order.LifePayType.HasValue, "褰撳墠璁㈠崟宸查�夋嫨鏀粯绫诲瀷");
-
-        order.LifePayType = input.LifePayType;
-        var premium = await _lifePayPremiumRepository.Where(x => x.IsDeleted == false && x.PremiumType == order.LifePayType).FirstOrDefaultAsync();
-        order.PremiumRate = premium == null ? 0 : premium.Rate;
-        await _lifePayOrderRepository.UpdateAsync(order);
-
-        var desc = "鐢熸椿缂磋垂-";
-        switch (order.LifePayOrderType)
-        {
-            case LifePayOrderTypeEnum.璇濊垂璁㈠崟:
-                desc += "璇濊垂";
-                break;
-            case LifePayOrderTypeEnum.鐢佃垂璁㈠崟:
-                desc += "鐢佃垂";
-                break;
-            case LifePayOrderTypeEnum.鐕冩皵璁㈠崟:
-                desc += "鐕冩皵";
-                break;
-            default:
-                break;
-        }
+        var res = await SetPayType(input.OrderNo, input.LifePayType, ip);
 
 #if DEBUG
         //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type);
-        var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, order.PayAmount, ip, input.H5Type);
+        var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, res.PayAmount, ip, input.H5Type);
 #else
-      //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type);
-        var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, order.PayAmount, ip, input.H5Type);
+      //var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, 0.01m, ip, input.H5Type);
+        var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, res.PayAmount, ip, input.H5Type);
 #endif
 
         return payUrl;
@@ -1031,43 +1113,9 @@
     /// <returns></returns>
     public async Task<ModelPaymentMiniPay> GetPayOrderForJsAPI(GetPayOrderForJsAPIInput input, string ip)
     {
-        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OrderNo).FirstOrDefaultAsync();
-        CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
-
-        CheckExtensions.IfTrueThrowUserFriendlyException(order.LifePayType.HasValue, "褰撳墠璁㈠崟宸查�夋嫨鏀粯绫诲瀷");
-
-        order.LifePayType = input.LifePayType;
-        var premium = await _lifePayPremiumRepository.Where(x => x.IsDeleted == false && x.PremiumType == order.LifePayType).FirstOrDefaultAsync();
-        order.PremiumRate = premium == null ? 0 : premium.Rate;
-        await _lifePayOrderRepository.UpdateAsync(order);
-
-        var desc = "鐢熸椿缂磋垂-";
-        switch (order.LifePayOrderType)
-        {
-            case LifePayOrderTypeEnum.璇濊垂璁㈠崟:
-                desc += "璇濊垂";
-                break;
-            case LifePayOrderTypeEnum.鐢佃垂璁㈠崟:
-                desc += "鐢佃垂";
-                break;
-            case LifePayOrderTypeEnum.鐕冩皵璁㈠崟:
-                desc += "鐕冩皵";
-                break;
-            default:
-                break;
-        }
-
-
-        //var result = await PayTransactionsJsAPI(input.OpenId, input.Attach, 0.01m, input.OrderNo, desc);
-        //return result;
-
-        //  var result = await PayTransactionsJsAPI(input.OpenId, input.Attach,  order.PayAmount, input.OrderNo, desc);
-
-        var result = await PayTransactionsJsAPI(input.OpenId, input.PayAppId, input.Attach, order.PayAmount, input.OrderNo, desc);
+        var res = await SetPayType(input.OrderNo, input.LifePayType, ip);
+        var result = await PayTransactionsJsAPI(input.OpenId, input.PayAppId, input.Attach, res.PayAmount, input.OrderNo, res.Desc);
         return result;
-        //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type);
-        //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, order.PayAmount, ip, input.H5Type);
-
     }
 
     /// <summary>
@@ -1083,7 +1131,6 @@
         CheckExtensions.IfTrueThrowUserFriendlyException(order.ACOOLYStatus != ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�, "璇ヨ鍗曟棤娉曚慨鏀瑰埌璐﹂噾棰�");
 
         order.ActualReceivedAmount = input.ActualReceivedAmount;
-
         await _lifePayOrderRepository.UpdateAsync(order);
 
         return Constant.SUCCESS;
@@ -1096,8 +1143,6 @@
     /// <returns></returns>
     public async Task CreateLifePayOrder(CreateLifePayOrderInput input)
     {
-        CheckExtensions.IfTrueThrowUserFriendlyException(input.RechargeAmount < 0.01m || input.PayAmount < 0.01m || input.DiscountAmount < 0, "璁㈠崟閲戦閿欒");
-
         var entity = ObjectMapper.Map<CreateLifePayOrderInput, LifePayOrder>(input);
         await _lifePayOrderRepository.InsertAsync(entity);
     }
@@ -1149,11 +1194,7 @@
             OutOrderNo = orderNo
         };
         var result = await _aCOOLYManager.ConfirmElectricOrder(requestInput);
-#if DEBUG
-
         _logger.LogInformation($"CreateACOOLYElectricOrder:{JsonConvert.SerializeObject(result)}");
-
-#endif
 
         CheckExtensions.IfTrueThrowUserFriendlyException(!result.Success || (result.Code != ACOOLYConstant.Code.SUCCESS && result.Code != ACOOLYConstant.Code.PROCESSING),
                                                         result.Message);
@@ -1273,18 +1314,19 @@
         order.PayStatus = LifePayStatusEnum.宸叉敮浠�;
         order.PayTime = DateTime.Now;
         order.OutOrderNo = outOrderNo;
+
         try
         {
             var result = (Code: "Fail", RequestNo: "", ACOOLYOrderNo: "");
             switch (order.LifePayOrderType)
             {
-                case LifePayOrderTypeEnum.璇濊垂璁㈠崟:
+                case LifePayOrderTypeEnum.PhoneOrder:
                     result = await CreateACOOLYPhoneOrder(JsonConvert.DeserializeObject<LifePhoneData>(order.OrderParamDetailJsonStr), order.OrderNo);
                     break;
-                case LifePayOrderTypeEnum.鐢佃垂璁㈠崟:
+                case LifePayOrderTypeEnum.ElectricOrder:
                     result = await CreateACOOLYElectricOrder(JsonConvert.DeserializeObject<LifeElectricData>(order.OrderParamDetailJsonStr), order.OrderNo);
                     break;
-                case LifePayOrderTypeEnum.鐕冩皵璁㈠崟:
+                case LifePayOrderTypeEnum.GasOrder:
                     result = await CreateACOOLYGasOrder(JsonConvert.DeserializeObject<LifeGasData>(order.OrderParamDetailJsonStr), order.OrderNo);
                     break;
                 default:
@@ -1295,20 +1337,27 @@
             order.LifePayOrderStatus = LifePayOrderStatusEnum.鍏呭�间腑;
             //SetOrderStatus(order, result.Code);
             order.OutRequestNo = result.RequestNo.IsNullOrEmpty() ? null : result.RequestNo;
-            order.ACOOLYOrderNo = result.ACOOLYOrderNo.IsNullOrEmpty() ? null : result.ACOOLYOrderNo;
+            order.ACOOLYOrderNo = result.ACOOLYOrderNo;
+            order.ACOOLYStatus = ACOOLYStatusEnum.鍏呭�间腑;
+
+            /// 鍒涘缓鐢熸椿缂磋垂娑堣垂璁板綍
+            await _lifePayOrderService.CreatLifePayConsumption(ACOOLYStatusEnum.鍏呭�间腑, order.OrderNo, order.ACOOLYOrderNo,
+                                order.PlatformDeductionAmount ?? 0, order.ChannelId, order.CreationTime, order.FinishTime);
         }
         catch (Exception ex)
         {
             _logger.LogError(ex, "澶勭悊鐢熸椿缂磋垂鏀粯鎴愬姛鍥炶皟鏃跺紓甯�");
             order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呴��娆�;
             order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�;
+            order.ACOOLYStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
             order.RefundApplyRemark = ex.Message;
         }
+
         _logger.LogError("鐢熸椿缂磋垂璁㈠崟鐘舵�侊細" + order.LifePayOrderStatus.ToString());
         await _lifePayOrderRepository.UpdateAsync(order);
     }
 
-    public async Task WxPayDomesticRefundsHandler(string orderNo, LifePayRefundStatusEnum refundStatus)
+    public async Task LifePayRefundsHandler(string orderNo, LifePayRefundStatusEnum refundStatus)
     {
         var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
         CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
@@ -1317,14 +1366,16 @@
         {
             case LifePayRefundStatusEnum.宸查��娆�:
                 order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
-                order.ACOOLYStatus = ACOOLYStatusEnum.宸查��娆�;
+                order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�;
                 break;
             case LifePayRefundStatusEnum.閫�娆句腑:
                 order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑;
+                order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑;
                 break;
             default: break;
         }
     }
+
 
     /// <summary>
     /// ACOOLYO璁㈠崟閫氱煡澶勭悊
@@ -1337,10 +1388,10 @@
         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())
@@ -1362,6 +1413,32 @@
         order.ACOOLYStatus = acoolyStatus;
         order.FinishTime = DateTime.Now;
         await _lifePayOrderRepository.UpdateAsync(order);
+
+        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
+        {
+            ///缁撶畻娓犻亾浣i噾
+            /// 姣涘埄
+            var grossProfit = order.RechargeAmount * (order.ChannleRate - order.PlatformRate) / 100;
+            /// 娓犻亾浣i噾  锛�(鍏呭�奸潰棰� * 娓犻亾鎶樻墸姣斾緥)-(鍏呭�奸潰棰� * 骞冲彴鎶樻墸姣斾緥)锛�* 浣i噾姣斾緥
+            var channlesRakePrice = grossProfit * (order.ChannlesRakeRate) / 100;
+            if (channlesRakePrice.HasValue)
+            {
+                LifePayChannlesRake lifePayChannlesRake = new LifePayChannlesRake()
+                {
+                    OrderNo = order.OrderNo,
+                    PayAmount = order.RechargeAmount ?? 0,
+                    ChannlesRakeRate = order.ChannlesRakeRate ?? 0,
+                    ChannlesRakePrice = channlesRakePrice ?? 0,
+                    FinishTime = order.FinishTime.Value,
+                    ChannelId = order.ChannelId,
+                };
+                await _lifePayChannlesRakeRepository.InsertAsync(lifePayChannlesRake);
+            }
+        }
+
+        /// 鍒涘缓鐢熸椿缂磋垂娑堣垂璁板綍
+        await _lifePayOrderService.CreatLifePayConsumption(acoolyStatus, order.OrderNo, order.ACOOLYOrderNo,
+                    order.PlatformDeductionAmount ?? 0, order.ChannelId, order.CreationTime, order.FinishTime);
     }
 
     /// <summary>
@@ -1387,7 +1464,7 @@
 
         if (input.LifePayRefundType == LifePayRefundTypeEnum.鍏ㄩ閫�娆�)
         {
-            input.RefundPrice = order.PayAmount;
+            input.RefundPrice = order.PayAmount ?? 0;
         }
 
         if (order.LifePayOrderStatus != LifePayOrderStatusEnum.寰呴��娆� || order.PayStatus != LifePayStatusEnum.宸叉敮浠� || order.LifePayRefundStatus != LifePayRefundStatusEnum.寰呴��娆�)
@@ -1396,42 +1473,43 @@
         }
 
         var outRefundNo = order.ChannelId + CreateRefundOrderNo();
-        order.RefundOrderNo = outRefundNo;
         switch (order.LifePayType)
         {
             case LifePayTypeEnum.WxPay:
                 var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, outRefundNo, order.RefundApplyRemark, Convert.ToInt32(input.RefundPrice * 100), Convert.ToInt32(order.PayAmount * 100));
-                if (wxRefundResult.Status == "SUCCESS")
+                if (wxRefundResult.Status == WxpayRefundResultStatus.SUCCESS)
                 {
-                    order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
-                    order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�;
-                }
-                else if (wxRefundResult.Status == "PROCESSING")
-                {
+                    order.RefundOrderNo = outRefundNo;
                     order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑;
                     order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑;
                 }
-                else if (wxRefundResult.Message == "璁㈠崟宸插叏棰濋��娆�")
+                else if (wxRefundResult.Status == WxpayRefundResultStatus.PROCESSING)
+                {
+                    order.RefundOrderNo = outRefundNo;
+                    order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑;
+                    order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑;
+                }
+                else if (wxRefundResult.Status.IsNullOrEmpty() && wxRefundResult.Message == WxpayRefundResultMessage.FullRefund)
                 {
                     order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
                     order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�;
                 }
                 else
                 {
-                    order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呴��娆�;
-                    order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�;
+                    throw new UserFriendlyException("閫�娆惧け璐�:" + wxRefundResult.Message);
                 }
 
                 break;
             case LifePayTypeEnum.AliPay:
-                var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = input.RefundPrice.ToString() });
+                var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, OutRefundNo = outRefundNo, RefundAmount = input.RefundPrice.ToString() });
                 if (aliRefundResult.Code != AlipayResultCode.Success)
                 {
                     throw new UserFriendlyException("閫�娆惧け璐�:" + aliRefundResult.SubMsg);
                 }
 
-                order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
-                order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�;
+                order.RefundOrderNo = outRefundNo;
+                order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑;
+                order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑;
                 break;
             default: throw new UserFriendlyException("閫�娆惧け璐�");
         }
@@ -1537,7 +1615,7 @@
             var userAccount = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.Id == input.Id)
                                             .FirstOrDefaultAsync();
             CheckExtensions.IfTrueThrowUserFriendlyException(userAccount == null, "鎴峰彿涓嶅瓨鍦�");
-            var repeatAccountContent = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.LifePayType == input.LifePayType && x.Content == input.Content && x.Id != input.Id)
+            var repeatAccountContent = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.LifePayType == input.LifePayType && x.Content == input.Content && x.Id != input.Id && x.IsDeleted == false)
                                             .FirstOrDefaultAsync();
             CheckExtensions.IfTrueThrowUserFriendlyException(repeatAccountContent != null, "鎴峰彿宸插瓨鍦�");
 
@@ -1551,7 +1629,7 @@
         }
         else
         {
-            var repeatAccountContent = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.LifePayType == input.LifePayType && x.Content == input.Content)
+            var repeatAccountContent = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.LifePayType == input.LifePayType && x.Content == input.Content && x.IsDeleted == false)
                                             .FirstOrDefaultAsync();
             CheckExtensions.IfTrueThrowUserFriendlyException(repeatAccountContent != null, "鎴峰彿宸插瓨鍦�");
             var userAccount = new LifePayAccount
@@ -1569,7 +1647,7 @@
             await _lifePayAccount.InsertAsync(userAccount);
         }
 
-        if (input.LifePayType == LifePayOrderTypeEnum.璇濊垂璁㈠崟)
+        if (input.LifePayType == LifePayOrderTypeEnum.PhoneOrder || input.LifePayType == LifePayOrderTypeEnum.ElectricOrder)
         {
             var extraProperties = JsonConvert.DeserializeObject<Model_UserAccountExtraProperties>(input.ExtraProperties);
             if (!string.IsNullOrEmpty(extraProperties.Name) && extraProperties.Phone == user.PhoneNumber)
@@ -1595,6 +1673,7 @@
         userAccount.DeleterId = userAccount.UserId;
         userAccount.DeletionTime = DateTime.Now;
         userAccount.IsDeleted = true;
+
         return Constant.SUCCESS;
     }
 
@@ -1629,8 +1708,7 @@
 
             #region 璁板綍鏃ュ織
 
-            await PublishLifePayOrderHistoryEvent("閫�娆鹃┏鍥�", "閫�娆�", order.Id);
-
+            await LifePayOrderHistory("閫�娆鹃┏鍥�", "閫�娆鹃┏鍥�", order.Id, (int)OperateHistoryTypeEnum.LifePayRefund);
             #endregion
         }
         else
@@ -1799,15 +1877,21 @@
 
     private (decimal PayAmont, decimal DiscountAmount, decimal RechargeAmount) CalculateAmount(decimal amount, decimal rate)
     {
-        /// 姝e父鏀粯
-        var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero);
+        if (_initSettingOptions.OpenTheOnePennyTest)
+        {
+            /// 1鍒嗛挶鏀粯
+            decimal payAmount = 0.01m;
 
-        /// 1鍒嗛挶鏀粯
-        //decimal payAmount = 0.01m;
+            CheckExtensions.IfTrueThrowUserFriendlyException(payAmount < 0.01m, "鏀粯閲戦閿欒");
 
-        CheckExtensions.IfTrueThrowUserFriendlyException(payAmount < 0.01m, "鏀粯閲戦閿欒");
-
-        return (payAmount, amount - payAmount, amount);
+            return (payAmount, amount - payAmount, amount);
+        }
+        else
+        {
+            /// 姝e父鏀粯
+            var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero);
+            return (payAmount, amount - payAmount, amount);
+        }
     }
 
     private void SetOrderStatus(LifePayOrder order, string code)
@@ -2005,7 +2089,6 @@
         return message;
     }
 
-
     private async Task<IQueryable<LifePayOrderListOutput>> GetLifePayOrderListFilter(QueryLifePayOrderListInput input)
     {
         var channles = await _lifePayChannlesRep.Where(x => x.ChannlesName.Contains(input.KeyWords)).Select(x => x.ChannlesNum).ToListAsync();
@@ -2026,19 +2109,19 @@
                       from b in temp.DefaultIfEmpty()
                       select new LifePayOrderListOutput
                       {
-                          DiscountAmount = a.DiscountAmount,
+                          DiscountAmount = a.DiscountAmount ?? 0,
                           FinishTime = a.FinishTime,
                           Id = a.Id,
-                          LifePayOrderStatus = a.LifePayOrderStatus,
+                          LifePayOrderStatus = a.LifePayOrderStatus ?? 0,
                           LifePayOrderType = a.LifePayOrderType,
                           LifePayType = a.LifePayType,
                           OrderNo = a.OrderNo,
-                          PayAmount = a.PayAmount,
+                          PayAmount = a.PayAmount ?? 0,
                           PhoneNumber = a.PhoneNumber,
-                          RechargeAmount = a.RechargeAmount,
+                          RechargeAmount = a.RechargeAmount ?? 0,
                           UserId = a.UserId,
                           OutOrderNo = a.OutOrderNo,
-                          PayStatus = a.PayStatus,
+                          PayStatus = a.PayStatus ?? 0,
                           PayTime = a.PayTime,
                           ACOOLYOrderNo = a.ACOOLYOrderNo,
                           RefundCredentialsImgUrl = a.RefundCredentialsImgUrl.GetOssPath(),
@@ -2077,19 +2160,19 @@
                       from b in temp.DefaultIfEmpty()
                       select new LifePayOrderListOutput
                       {
-                          DiscountAmount = a.DiscountAmount,
+                          DiscountAmount = a.DiscountAmount ?? 0,
                           FinishTime = a.FinishTime,
                           Id = a.Id,
-                          LifePayOrderStatus = a.LifePayOrderStatus,
+                          LifePayOrderStatus = a.LifePayOrderStatus ?? 0,
                           LifePayOrderType = a.LifePayOrderType,
                           LifePayType = a.LifePayType,
                           OrderNo = a.OrderNo,
-                          PayAmount = a.PayAmount,
+                          PayAmount = a.PayAmount ?? 0,
                           PhoneNumber = a.PhoneNumber,
-                          RechargeAmount = a.RechargeAmount,
+                          RechargeAmount = a.RechargeAmount ?? 0,
                           UserId = a.UserId,
                           OutOrderNo = a.OutOrderNo,
-                          PayStatus = a.PayStatus,
+                          PayStatus = a.PayStatus ?? 0,
                           PayTime = a.PayTime,
                           ACOOLYOrderNo = a.ACOOLYOrderNo,
                           RefundCredentialsImgUrl = a.RefundCredentialsImgUrl.GetOssPath(),
@@ -2141,7 +2224,7 @@
         var channlesRakePrice = grossProfit * (channlesRakeRate) / 100;
 
         /// 鍒╂鼎
-        var profit = grossProfit - channlesRakePrice - (premiumRate);
+        var profit = grossProfit - channlesRakePrice - premiumPrice;
 
         return new OrderPriceReturn()
         {
@@ -2167,5 +2250,42 @@
         }
     }
 
+    public async Task<SetPayTypeReturn> SetPayType(string orderNo, LifePayTypeEnum lifePayType, string ip)
+    {
+        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
+        CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
+
+        CheckExtensions.IfTrueThrowUserFriendlyException(order.LifePayType.HasValue, "褰撳墠璁㈠崟宸查�夋嫨鏀粯绫诲瀷");
+
+        order.LifePayType = lifePayType;
+        var premium = await _lifePayPremiumRepository.Where(x => x.IsDeleted == false && x.PremiumType == order.LifePayType).FirstOrDefaultAsync();
+        order.PremiumRate = premium == null ? 0 : premium.Rate;
+        await _lifePayOrderRepository.UpdateAsync(order);
+
+        var desc = "鐢熸椿缂磋垂-";
+        switch (order.LifePayOrderType)
+        {
+            case LifePayOrderTypeEnum.PhoneOrder:
+                desc += "璇濊垂";
+                break;
+            case LifePayOrderTypeEnum.ElectricOrder:
+                desc += "鐢佃垂";
+                break;
+            case LifePayOrderTypeEnum.GasOrder:
+                desc += "鐕冩皵";
+                break;
+            default:
+                break;
+        }
+        
+        return new SetPayTypeReturn()
+        {
+            Desc = desc,
+            OrderNo = order.OrderNo,
+            PayAmount = order.PayAmount.HasValue? order.PayAmount.Value : 0,
+            LifePayType = lifePayType,
+        };
+    }
+
     #endregion
 }

--
Gitblit v1.9.1