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

---
 LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs |  370 +++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 290 insertions(+), 80 deletions(-)

diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
index f640885..4bb201c 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
@@ -21,6 +21,8 @@
     {
         private readonly IRepository<LifePayRechargeReceipts, Guid> _lifePayRechargeReceiptsRepository;
         private readonly IRepository<LifePayExpensesReceipts, Guid> _lifePayExpensesReceiptsRepository;
+        private readonly IRepository<LifePayConsumption, Guid> _lifePayConsumption;
+        private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep;
         private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository;
         private readonly IRepository<LifePayOrder, Guid> _lifePayOrderRepository;
         private readonly IAliPayApi _aliPayApi;
@@ -29,20 +31,62 @@
         public LifePayOrderService(
                               IRepository<LifePayRechargeReceipts, Guid> lifePayRechargeReceiptsRepository,
                               IRepository<LifePayExpensesReceipts, Guid> lifePayExpensesReceiptsRepository,
+                              IRepository<LifePayConsumption, Guid> lifePayConsumptionRepository,
                               IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository,
+                              IRepository<LifePayChannles, Guid> lifePayChannlesRep,
                               IRepository<LifePayOrder, Guid> lifePayOrderRepository,
                               IAliPayApi aliPayApi,
                               IWxPayApi wxPayApi)
         {
             _lifePayRechargeReceiptsRepository = lifePayRechargeReceiptsRepository;
             _lifePayExpensesReceiptsRepository = lifePayExpensesReceiptsRepository;
+            _lifePayConsumption = lifePayConsumptionRepository;
             _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository;
+            _lifePayChannlesRep = lifePayChannlesRep;
             _lifePayOrderRepository = lifePayOrderRepository;
             _aliPayApi = aliPayApi;
             _wxPayApi = wxPayApi;
         }
 
         #region 鏌ヨ
+
+        /// <summary>
+        /// 鑾峰彇娑堣垂娴佹按
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<PageOutput<LifePayConsumptionListOutput>> GetLifePayConsumptionPage(LifePayConsumptionPageInput input)
+        {
+            var channles = await _lifePayChannlesRep.Where(x => x.ChannlesName.Contains(input.KeyWord)).Select(x => x.ChannlesNum).ToListAsync();
+            var list = await _lifePayConsumption
+                .WhereIf(input.KeyWord.IsNotNullOrEmpty(), x => x.OrderNo.Contains(input.KeyWord) || x.AcoolyOrderNo.Contains(input.KeyWord) || channles.Contains(x.ChannelId))
+                .WhereIf(input.Flow.HasValue, x => x.Flow == input.Flow)
+                .WhereIf(input.TimeBegin.HasValue, x => x.FinishTime >= input.TimeBegin)
+                .WhereIf(input.TimeEnd.HasValue, x => x.FinishTime <= input.TimeEnd)
+                .Select(x => new LifePayConsumptionListOutput()
+                {
+                    Id = x.Id,
+                    OrderNo = x.OrderNo,
+                    AcoolyOrderNo = x.AcoolyOrderNo,
+                    Amount = x.Amount,
+                    ACOOLYStatus = x.ACOOLYStatus,
+                    FinishTime = x.FinishTime,
+                    FrozenStatus = x.FrozenStatus,
+                    Flow = x.Flow,
+                    DeductionAmount = x.DeductionAmount,
+                    FrozenAmount = x.FrozenAmount ?? 0
+                })
+                .GetPageResult(input.PageModel);
+
+            var totalDeductionAmount = await _lifePayConsumption.SumAsync(x => x.DeductionAmount);
+            var totalFrozenAmount = await _lifePayConsumption.SumAsync(x => x.FrozenAmount);
+            LifePayConsumptionStatistics objectData = new LifePayConsumptionStatistics();
+            objectData.TotalDeductionAmount = totalDeductionAmount;
+            objectData.TotalFrozenAmount = totalFrozenAmount ?? 0;
+            list.ObjectData = objectData;
+            return list;
+        }
+
         /// <summary>
         /// 鑾峰彇鍏呭�兼祦姘�
         /// </summary>
@@ -50,7 +94,7 @@
         /// <returns></returns>
         public async Task<PageOutput<LifePayRechargeReceiptsListOutput>> GetLifePayRechargeReceiptsPage(LifePayRechargeReceiptsPageInput input)
         {
-            var list = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false)
+            var list = await _lifePayRechargeReceiptsRepository
                 .WhereIf(input.KeyWord.IsNotNullOrEmpty(), x => x.OrderNo.Contains(input.KeyWord))
                 .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin)
                 .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd)
@@ -65,7 +109,7 @@
                 })
                 .GetPageResult(input.PageModel);
 
-            var total = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false).SumAsync(x => x.RechargeAmount);
+            var total = await _lifePayRechargeReceiptsRepository.SumAsync(x => x.RechargeAmount);
             LifePayRechargeReceiptsStatistics objectData = new LifePayRechargeReceiptsStatistics();
             objectData.TotalRechargeAmount = total;
             list.ObjectData = objectData;
@@ -79,7 +123,7 @@
         /// <returns></returns>
         public async Task<PageOutput<LifePayExpensesReceiptsListOutput>> GetLifePayExpensesReceiptsPage(LifePayExpensesReceiptsPageInput input)
         {
-            var list = await _lifePayExpensesReceiptsRepository.Where(x => x.IsDeleted == false)
+            var list = await _lifePayExpensesReceiptsRepository
                 .WhereIf(input.KeyWord.IsNotNullOrEmpty(), x => x.OrderNo.Contains(input.KeyWord) || x.OutOrderNo.Contains(input.KeyWord))
                 .WhereIf(input.LifePayType.HasValue, x => x.LifePayType == input.LifePayType)
                 .WhereIf(input.ExpensesReceiptsType.HasValue, x => x.ExpensesReceiptsType == input.ExpensesReceiptsType)
@@ -92,14 +136,14 @@
                     OrderNo = x.OrderNo,
                     OutOrderNo = x.OutOrderNo,
                     LifePayType = x.LifePayType,
-                    ExpensesReceiptsType = x.ExpensesReceiptsType.Value,
+                    ExpensesReceiptsType = x.ExpensesReceiptsType ?? 0,
                     Amount = x.Amount,
                     FinishTime = x.FinishTime
                 })
                 .GetPageResult(input.PageModel);
 
-            var totalIncome = await _lifePayExpensesReceiptsRepository.Where(x => x.IsDeleted == false && x.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses).SumAsync(x => x.Amount);
-            var totalRefund = await _lifePayExpensesReceiptsRepository.Where(x => x.IsDeleted == false && x.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Receipts).SumAsync(x => x.Amount);
+            var totalIncome = await _lifePayExpensesReceiptsRepository.Where(x => x.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses).SumAsync(x => x.Amount);
+            var totalRefund = await _lifePayExpensesReceiptsRepository.Where(x => x.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Receipts).SumAsync(x => x.Amount);
 
             LifePayExpensesReceiptsStatistics objectData = new LifePayExpensesReceiptsStatistics();
             objectData.TotalIncome = totalIncome;
@@ -116,7 +160,7 @@
         /// <returns></returns>
         public async Task<PageOutput<LifePayChannlesRakeListOutput>> GetLifePayChannlesRakePage(LifePayChannlesRakePageInput input)
         {
-            var list = await _lifePayChannlesRakeRepository.Where(x => x.IsDeleted == false)
+            var list = await _lifePayChannlesRakeRepository
                 .WhereIf(input.ChannelId.IsNotNullOrEmpty(), x => x.ChannelId == input.ChannelId)
                 .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin)
                 .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd)
@@ -136,7 +180,13 @@
                 })
                 .GetPageResult(input.PageModel);
 
-            var totalRakePrice = await _lifePayChannlesRakeRepository.Where(x => x.IsDeleted == false).SumAsync(x => x.ChannlesRakePrice);
+            var totalRakePrice = await _lifePayChannlesRakeRepository
+                .WhereIf(input.ChannelId.IsNotNullOrEmpty(), x => x.ChannelId == input.ChannelId)
+                .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin)
+                .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd)
+                .WhereIf(input.FinishTimeBegin.HasValue, x => x.FinishTime >= input.FinishTimeBegin)
+                .WhereIf(input.FinishTimeEnd.HasValue, x => x.FinishTime <= input.FinishTimeEnd)
+                .SumAsync(x => x.ChannlesRakePrice);
 
             LifePayLifePayChannlesRakeStatistics objectData = new LifePayLifePayChannlesRakeStatistics();
             objectData.TotalRakePrice = totalRakePrice;
@@ -146,54 +196,31 @@
 
         public async Task<List<LifePayChannlesRakeListTemplate>> GetLifePayChannlesRakePageExport(LifePayChannlesRakePageInput input)
         {
-            //var result = await (await GetLifePayOrderListFilter(input)).Select(x => new LifePayOrderListTemplate
-            //{
-            //    DiscountAmount = x.DiscountAmount,
-            //    FinishTime = x.FinishTime,
-            //    LifePayOrderStatus = x.LifePayOrderStatus,
-            //    LifePayOrderType = x.LifePayOrderType,
-            //    LifePayType = x.LifePayType,
-            //    OrderNo = x.OrderNo,
-            //    PayAmount = x.PayAmount,
-            //    ActualRechargeAmount = x.RechargeAmount,
-            //    PhoneNumber = x.PhoneNumber,
-            //    RechargeAmount = x.RechargeAmount,
-            //    OutOrderNo = x.OutOrderNo,
-            //    PayStatus = x.PayStatus,
-            //    PayTime = x.PayTime,
-            //    ACOOLYOrderNo = x.ACOOLYOrderNo,
-            //    CreationTime = x.CreationTime,
-            //    LifePayRefundStatus = x.LifePayRefundStatus,
-            //    ACOOLYStatus = x.ACOOLYStatus,
-            //    //RefundApplyRemark = x.RefundApplyRemark,
-            //    ChannelName = x.ChannelName,
-            //    PlatformPrice = x.PlatformDeductionAmount.HasValue ? x.PlatformDeductionAmount.Value : 0.00m
-            //}).OrderByDescending(r => r.CreationTime).ToListAsync();
-            //var i = 0;
-            //result.ForEach(s =>
-            //{
-            //    s.SerialNumber = ++i;
-            //    s.LifePayOrderTypeStr = s.LifePayOrderType.GetDescription();
-            //    s.CreationTimeStr = s.CreationTime.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss);
-            //    s.RechargeAmountStr = s.RechargeAmount.ToString("F2");
-            //    s.PayAmountStr = s.PayAmount.ToString("F2");
-            //    s.PayTimeStr = !s.PayTime.HasValue ? string.Empty : s.PayTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss);
-            //    s.LifePayTypeStr = s.LifePayType.GetDescription();
-            //    s.PayStatusStr = s.PayStatus.GetDescription();
-            //    s.ActualRechargeAmountStr = s.ActualRechargeAmount.ToString("F2");
-            //    s.LifePayRefundStatusStr = s.LifePayRefundStatus == LifePayRefundStatusEnum.鏃犻渶閫�娆� ? "" : s.LifePayRefundStatus.GetDescription();
-            //    s.ACOOLYStatusStr = s.ACOOLYStatus.GetDescription();
-            //    s.LifePayOrderStatusStr = s.LifePayOrderStatus.GetDescription();
-            //    s.FinishTimeStr = !s.FinishTime.HasValue ? string.Empty : s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss);
-            //});
-            return null;
+            var result = await (await GetLifePayChannlesRakeListFilter(input)).Select(x => new LifePayChannlesRakeListTemplate
+            {
+                CreationTime = x.CreationTime,
+                FinishTime = x.FinishTime,
+                OrderNo = x.OrderNo,
+                PayAmount = x.PayAmount,
+                ChannlesRakeRate = x.ChannlesRakeRate,
+                ChannlesRakePrice = x.ChannlesRakePrice
+            }).OrderByDescending(r => r.CreationTime).ToListAsync();
+            var i = 0;
+            result.ForEach(s =>
+            {
+                s.SerialNumber = ++i;
+                s.CreationTimeStr = s.CreationTime.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss);
+                s.PayAmountStr = s.PayAmount.ToString("F2");
+                s.ChannlesRakeRateStr = s.ChannlesRakeRate.ToString("F0") + "%";
+                s.ChannlesRakePriceStr = s.ChannlesRakePrice.ToString("F2");
+                s.FinishTimeStr = s.FinishTime.HasValue ? s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss) : "";
+            });
+            return result;
         }
 
         #endregion
 
-
-
-
+        #region 鎿嶄綔
 
         /// <summary>
         /// 缂栬緫鍏呭�兼祦姘�
@@ -205,11 +232,11 @@
             CheckExtensions.IfTrueThrowUserFriendlyException(input.OrderNo == null, "璇疯緭鍏ヤ笟鍔¤鍗曞彿");
             CheckExtensions.IfTrueThrowUserFriendlyException(input.RechargeAmount <= 0, "鍏呭�奸噾棰濆簲澶т簬0");
             CheckExtensions.IfTrueThrowUserFriendlyException(input.Voucher == null, "璇锋彁浜ゅ厖鍊煎嚟璇�");
-            var repeat = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false && x.OrderNo == input.OrderNo).FirstOrDefaultAsync();
-            CheckExtensions.IfTrueThrowUserFriendlyException(repeat != null && repeat.Id != input.Id, "涓氬姟璁㈠崟鍙烽噸澶�");
+            var repeat = await _lifePayRechargeReceiptsRepository.Where(x => x.OrderNo == input.OrderNo && x.Id != input.Id).AnyAsync();
+            CheckExtensions.IfTrueThrowUserFriendlyException(repeat, "涓氬姟璁㈠崟鍙烽噸澶�");
             if (input.Id.HasValue)
             {
-                var payRechargeReceipts = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false && x.Id == input.Id.Value).FirstOrDefaultAsync();
+                var payRechargeReceipts = await _lifePayRechargeReceiptsRepository.Where(x => x.Id == input.Id.Value).FirstOrDefaultAsync();
                 payRechargeReceipts.OrderNo = input.OrderNo;
                 payRechargeReceipts.RechargeAmount = input.RechargeAmount;
                 payRechargeReceipts.Remark = input.Remark;
@@ -229,7 +256,6 @@
             }
         }
 
-        
         /// <summary>
         /// 鎻掑叆鏀舵敮娴佹按
         /// </summary>
@@ -238,17 +264,15 @@
         public async Task AddLifePayExpensesReceipts(AddLifePayExpensesReceiptsInput input)
         {
             var repeat = await _lifePayExpensesReceiptsRepository.Where(x => x.ExpensesReceiptsType == input.ExpensesReceiptsType
-            && x.OrderNo == input.OrderNo).FirstOrDefaultAsync();
-            if (repeat == null)
+            && x.OrderNo == input.OrderNo).AnyAsync();
+            if (!repeat)
             {
                 var data = new LifePayExpensesReceipts()
                 {
                     Id = Guid.NewGuid(),
-                    OrderNo = input.OrderNo,
                     OutOrderNo = input.OutOrderNo,
                     LifePayType = input.LifePayType,
                     ExpensesReceiptsType = input.ExpensesReceiptsType,
-                    Amount = input.Amount,
                 };
 
                 switch (input.LifePayType)
@@ -260,18 +284,22 @@
                             if (query.Code == AlipayResultCode.Success && (query.TradeStatus == AlipayStatus.TRADESUCCESS
                                 || query.TradeStatus == AlipayStatus.TRADECLOSED))
                             {
+                                data.OrderNo = input.OrderNo;
                                 data.ExtraProperties = JsonConvert.SerializeObject(query);
                                 data.FinishTime = Convert.ToDateTime(query.SendPayDate);
+                                data.Amount = Convert.ToDecimal(query.TotalAmount);
                                 await _lifePayExpensesReceiptsRepository.InsertAsync(data);
                             }
                         }
                         else
                         {
-                            var query = await _aliPayApi.QueryAlipayTradeRefund(new OrderInQuiryInput() { OutTradeNo = input.OrderNo });
+                            var query = await _aliPayApi.QueryAlipayTradeRefund(new OrderInQuiryInput() { OutTradeNo = input.OrderNo, OutRefundNo = input.OutRefundNo });
                             if (query.Code == AlipayResultCode.Success && query.RefundStatus == AlipayRefundStatus.Success)
                             {
+                                data.OrderNo = input.OutRefundNo;
                                 data.ExtraProperties = JsonConvert.SerializeObject(query);
                                 data.FinishTime = Convert.ToDateTime(query.GmtRefundPay);
+                                data.Amount = Convert.ToDecimal(query.RefundAmount);
                                 await _lifePayExpensesReceiptsRepository.InsertAsync(data);
                             }
                         }
@@ -282,18 +310,22 @@
                             var query = await _wxPayApi.WxPayTradeQuery(input.OrderNo);
                             if (query.TradeState == WxPayStatus.鏀粯鎴愬姛 || query.TradeState == WxPayStatus.杞叆閫�娆�)
                             {
+                                data.OrderNo = input.OrderNo;
                                 data.ExtraProperties = JsonConvert.SerializeObject(query);
                                 data.FinishTime = Convert.ToDateTime(query.SuccessTime);
+                                data.Amount = Convert.ToDecimal(query.Amount.Total) / 100;
                                 await _lifePayExpensesReceiptsRepository.InsertAsync(data);
                             }
                         }
                         else
                         {
-                            var query = await _wxPayApi.WxPayDomesticRefundsQuery(input.OrderNo);
+                            var query = await _wxPayApi.WxPayDomesticRefundsQuery(input.OutRefundNo);
                             if (query.Status == WxPayRefundStatus.閫�娆炬垚鍔�)
                             {
+                                data.OrderNo = input.OutRefundNo;
                                 data.ExtraProperties = JsonConvert.SerializeObject(query);
                                 data.FinishTime = Convert.ToDateTime(query.SuccessTime);
+                                data.Amount = Convert.ToDecimal(query.Amount.Total) / 100;
                                 await _lifePayExpensesReceiptsRepository.InsertAsync(data);
                             }
                         }
@@ -303,6 +335,55 @@
             }
         }
 
+
+
+
+        /// <summary>
+        /// 缁熻鎵�鏈夋秷璐规祦姘�
+        /// </summary>
+        /// <returns></returns>
+        public async Task GetAllLifePayConsumption()
+        {
+            var orderList = await _lifePayOrderRepository.Where(x => x.PayStatus == LifePayStatusEnum.宸叉敮浠�).ToListAsync();
+            foreach (var item in orderList)
+            {
+
+                if (item.ACOOLYStatus != null)
+                {
+                    switch (item.ACOOLYStatus)
+                    {
+                        case ACOOLYStatusEnum.鍏呭�间腑:
+                            await CreatLifePayConsumption(ACOOLYStatusEnum.鍏呭�间腑, item.OrderNo, item.ACOOLYOrderNo,
+                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
+                            break;
+                        case ACOOLYStatusEnum.鍏呭�兼垚鍔�:
+                            await CreatLifePayConsumption(ACOOLYStatusEnum.鍏呭�间腑, item.OrderNo, item.ACOOLYOrderNo,
+                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
+                            await CreatLifePayConsumption(ACOOLYStatusEnum.鍏呭�兼垚鍔�, item.OrderNo, item.ACOOLYOrderNo,
+                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
+                            break;
+                        case ACOOLYStatusEnum.宸插畬鎴�:
+                            await CreatLifePayConsumption(ACOOLYStatusEnum.鍏呭�间腑, item.OrderNo, item.ACOOLYOrderNo,
+                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
+                            await CreatLifePayConsumption(ACOOLYStatusEnum.宸插畬鎴�, item.OrderNo, item.ACOOLYOrderNo,
+                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
+                            break;
+                        case ACOOLYStatusEnum.鍏呭�煎け璐�:
+                            await CreatLifePayConsumption(ACOOLYStatusEnum.鍏呭�间腑, item.OrderNo, item.ACOOLYOrderNo,
+                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
+                            await CreatLifePayConsumption(ACOOLYStatusEnum.鍏呭�煎け璐�, item.OrderNo, item.ACOOLYOrderNo,
+                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
+                            break;
+                        default: break;
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缁熻鎵�鏈夋敹鏀祦姘�
+        /// </summary>
+        /// <returns></returns>
         public async Task GetAllLifePayExpensesReceipts()
         {
             var orderlist = await (from a in _lifePayOrderRepository.Where(x => x.PayStatus >= LifePayStatusEnum.宸叉敮浠�)
@@ -313,8 +394,8 @@
                                        OrderNo = a.OrderNo,
                                        OutOrderNo = a.OutOrderNo,
                                        RefundOrderNo = a.RefundOrderNo,
-                                       LifePayType = a.LifePayType.Value,
-                                       Amount = a.PayAmount.Value,
+                                       LifePayType = a.LifePayType ?? 0,
+                                       Amount = a.PayAmount ?? 0,
                                        ExpensesReceiptsType = b.ExpensesReceiptsType
                                    }).ToListAsync();
             foreach (var item in orderlist)
@@ -334,48 +415,177 @@
                     await AddLifePayExpensesReceipts(input);
 
                     /// 鍑鸿处
+                    AddLifePayExpensesReceiptsInput receipts = new AddLifePayExpensesReceiptsInput()
+                    {
+                        OrderNo = item.OrderNo,
+                        OutOrderNo = item.OutOrderNo,
+                        LifePayType = item.LifePayType,
+                        Amount = item.Amount,
+                        ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses
+                    };
                     if (item.RefundOrderNo.IsNotNullOrEmpty())
                     {
-                        if (input.LifePayType == LifePayTypeEnum.WxPay)
-                        {
-                            input.OrderNo = item.RefundOrderNo;
-                        }
-
-                        input.ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts;
-                        await AddLifePayExpensesReceipts(input);
+                        receipts.OutRefundNo = item.RefundOrderNo;
+                        receipts.ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts;
+                        await AddLifePayExpensesReceipts(receipts);
                     }
-                    
                 }
             }
         }
 
+        /// <summary>
+        /// 鑾峰彇鍏ㄩ儴娓犻亾鍒嗕剑
+        /// </summary>
+        /// <returns></returns>
         public async Task GetAllChannlesRake()
         {
-            var orderlist = await _lifePayOrderRepository.Where(x => x.IsDeleted == false && x.PayStatus == LifePayStatusEnum.宸叉敮浠� && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�).ToListAsync();
+            var orderlist = await _lifePayOrderRepository.Where(x => x.PayStatus == LifePayStatusEnum.宸叉敮浠� && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�).ToListAsync();
             foreach (var item in orderlist)
             {
                 /// 姣涘埄
                 var grossProfit = item.RechargeAmount * (item.ChannleRate - item.PlatformRate) / 100;
                 /// 娓犻亾浣i噾  锛�(鍏呭�奸潰棰� * 娓犻亾鎶樻墸姣斾緥)-(鍏呭�奸潰棰� * 骞冲彴鎶樻墸姣斾緥)锛�* 浣i噾姣斾緥
-                var channlesRakePrice = grossProfit * (item.ChannlesRakeRate) / 100;
+                var channlesRakePrice = grossProfit * item.ChannlesRakeRate / 100;
+
                 if (channlesRakePrice.HasValue)
                 {
                     LifePayChannlesRake lifePayChannlesRake = new LifePayChannlesRake()
                     {
                         OrderNo = item.OrderNo,
-                        PayAmount = item.PayAmount.Value,
-                        ChannlesRakeRate = item.ChannlesRakeRate.Value,
-                        ChannlesRakePrice = channlesRakePrice.Value,
-                        FinishTime = item.FinishTime.Value,
+                        PayAmount = item.RechargeAmount ?? 0,
+                        ChannlesRakeRate = item.ChannlesRakeRate ?? 0,
+                        ChannlesRakePrice = channlesRakePrice ?? 0,
                         ChannelId = item.ChannelId,
                     };
-                    var repeat = _lifePayChannlesRakeRepository.Where(x => x.OrderNo == item.OrderNo).FirstOrDefaultAsync();
-                    if (repeat != null)
+                    if (item.FinishTime.HasValue)
+                    {
+                        lifePayChannlesRake.FinishTime = item.FinishTime.Value;
+                    }
+
+                    var repeat = await _lifePayChannlesRakeRepository.Where(x => x.OrderNo == item.OrderNo).AnyAsync();
+                    if (!repeat)
                     {
                         await _lifePayChannlesRakeRepository.InsertAsync(lifePayChannlesRake);
                     }
                 }
             }
         }
+        #endregion
+
+        #region 鏂规硶
+        public async Task CreatLifePayConsumption(ACOOLYStatusEnum status, string orderNo, string aCOOLYOrderNo,
+            decimal platformDeductionAmount, string channelId, DateTime orderCreationTime, DateTime? orderFinishTime, decimal? channelRate = 0, decimal? parValue = 0, decimal? actualParValue = 0)
+        {
+            LifePayConsumption lifePayConsumption = new LifePayConsumption()
+            {
+                OrderNo = orderNo,
+                AcoolyOrderNo = aCOOLYOrderNo,
+                Amount = platformDeductionAmount,
+                ChannelId = channelId,
+            };
+            switch (status)
+            {
+                case ACOOLYStatusEnum.鍏呭�间腑:
+                    lifePayConsumption.FinishTime = orderCreationTime;
+                    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.鍏呭�间腑;
+                    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Frozen;
+                    lifePayConsumption.Flow = ConsumptionFlowEnum.Unchanged;
+                    lifePayConsumption.DeductionAmount = 0;
+                    lifePayConsumption.FrozenAmount = lifePayConsumption.Amount;
+                    break;
+                case ACOOLYStatusEnum.宸插畬鎴�:
+                    if (orderFinishTime.HasValue)
+                    {
+                        lifePayConsumption.FinishTime = orderFinishTime.Value;
+                    }
+
+                    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.宸插畬鎴�;
+                    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Thaw;
+                    lifePayConsumption.Flow = ConsumptionFlowEnum.Out;
+                    lifePayConsumption.DeductionAmount = lifePayConsumption.Amount;
+                    lifePayConsumption.FrozenAmount = 0;
+                    break;
+                case ACOOLYStatusEnum.鍏呭�煎け璐�:
+                    lifePayConsumption.FinishTime = orderCreationTime;
+                    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.鍏呭�煎け璐�;
+                    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Frozen;
+                    lifePayConsumption.Flow = ConsumptionFlowEnum.Unchanged;
+                    lifePayConsumption.DeductionAmount = 0;
+                    lifePayConsumption.FrozenAmount = lifePayConsumption.Amount;
+                    break;
+                case ACOOLYStatusEnum.宸查��娆�:
+                    if (orderFinishTime.HasValue)
+                    {
+                        lifePayConsumption.FinishTime = orderFinishTime.Value;
+                    }
+
+                    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.宸查��娆�;
+                    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Thaw;
+                    lifePayConsumption.Flow = ConsumptionFlowEnum.Unchanged;
+                    lifePayConsumption.DeductionAmount = 0;
+                    lifePayConsumption.FrozenAmount = 0;
+                    break;
+                case ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�:
+                    lifePayConsumption.FinishTime = orderCreationTime;
+                    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
+                    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Thaw;
+                    lifePayConsumption.Flow = ConsumptionFlowEnum.Out;
+                    lifePayConsumption.DeductionAmount = lifePayConsumption.Amount;
+                    lifePayConsumption.FrozenAmount = 0;
+                    if ((parValue ?? 0) != 0 && (parValue ?? 0) != actualParValue)
+                    {
+                        LifePayConsumption lifePayConsumptionOther = new LifePayConsumption()
+                        {
+                            OrderNo = orderNo,
+                            AcoolyOrderNo = aCOOLYOrderNo,
+                            Amount = ((parValue ?? 0) - (actualParValue ?? 0)) * (channelRate ?? 0),
+                            ChannelId = channelId,
+                            FinishTime = orderCreationTime,
+                            ACOOLYStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�,
+                            FrozenStatus = ConsumptionFrozenStatusEnum.Thaw,
+                            Flow = ConsumptionFlowEnum.Unchanged,
+                            DeductionAmount = 0,
+                            FrozenAmount = 0
+                        };
+                        await _lifePayConsumption.InsertAsync(lifePayConsumptionOther);
+                    }
+
+                    break;
+                default: break;
+            }
+
+            var repeat = await _lifePayConsumption.Where(x => x.OrderNo == lifePayConsumption.OrderNo
+                   && x.ACOOLYStatus == lifePayConsumption.ACOOLYStatus && x.Flow == lifePayConsumption.Flow).AnyAsync();
+            if (!repeat)
+            {
+                await _lifePayConsumption.InsertAsync(lifePayConsumption);
+            }
+        }
+
+        private async Task<IQueryable<LifePayChannlesRakeListOutput>> GetLifePayChannlesRakeListFilter(LifePayChannlesRakePageInput input)
+        {
+            var list = _lifePayChannlesRakeRepository
+                .WhereIf(input.ChannelId.IsNotNullOrEmpty(), x => x.ChannelId == input.ChannelId)
+                .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin)
+                .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd)
+                .WhereIf(input.FinishTimeBegin.HasValue, x => x.FinishTime >= input.FinishTimeBegin)
+                .WhereIf(input.FinishTimeEnd.HasValue, x => x.FinishTime <= input.FinishTimeEnd)
+
+                .Select(x => new LifePayChannlesRakeListOutput()
+                {
+                    Id = x.Id,
+                    OrderNo = x.OrderNo,
+                    PayAmount = x.PayAmount,
+                    ChannlesRakeRate = x.ChannlesRakeRate,
+                    ChannlesRakePrice = x.ChannlesRakePrice,
+                    ChannelId = x.ChannelId,
+                    FinishTime = x.FinishTime,
+                    CreationTime = x.CreationTime,
+                });
+            return list;
+        }
+
+        #endregion
+
     }
 }

--
Gitblit v1.9.1