lingling
2025-04-16 d0558ff1687a1bffd62c45660d4bab3132643039
LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
@@ -11,17 +11,80 @@
using Volo.Abp.Domain.Repositories;
using Microsoft.EntityFrameworkCore;
using ZeroD.Util;
using LifePayment.Domain;
using static LifePayment.Domain.Shared.LifePaymentConstant;
using Newtonsoft.Json;
namespace LifePayment.Application.LifePay
{
    public class LifePayOrderService : ApplicationService, ILifePayOrderService
    {
        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;
        private readonly IWxPayApi _wxPayApi;
        public LifePayOrderService(
                              IRepository<LifePayRechargeReceipts, Guid> lifePayRechargeReceiptsRepository)
                              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>
@@ -31,8 +94,8 @@
        /// <returns></returns>
        public async Task<PageOutput<LifePayRechargeReceiptsListOutput>> GetLifePayRechargeReceiptsPage(LifePayRechargeReceiptsPageInput input)
        {
            var list = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false)
                .WhereIf(input.OrderNo.IsNotNullOrEmpty(), x => x.OrderNo.Contains(input.OrderNo))
            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)
                .Select(x => new LifePayRechargeReceiptsListOutput()
@@ -42,16 +105,122 @@
                    RechargeAmount = x.RechargeAmount,
                    Remark = x.Remark,
                    Voucher = x.Voucher.GetOssPath(),
                    CreationTime = x.CreationTime,
                })
                .GetPageResult(input.PageModel);
            var total = await _lifePayRechargeReceiptsRepository.SumAsync(x => x.RechargeAmount);
            LifePayRechargeReceiptsStatistics objectData = new LifePayRechargeReceiptsStatistics();
            objectData.TotalRechargeAmount = total;
            list.ObjectData = objectData;
            return list;
        }
        public async Task<decimal> GetTotalLifePayRechargeReceipts()
        /// <summary>
        /// 获取收支流水
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<PageOutput<LifePayExpensesReceiptsListOutput>> GetLifePayExpensesReceiptsPage(LifePayExpensesReceiptsPageInput input)
        {
            var result = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false).SumAsync(x => x.RechargeAmount);
            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)
                .WhereIf(input.TimeBegin.HasValue, x => x.FinishTime >= input.TimeBegin)
                .WhereIf(input.TimeEnd.HasValue, x => x.FinishTime <= input.TimeEnd)
                .Select(x => new LifePayExpensesReceiptsListOutput()
                {
                    Id = x.Id,
                    OrderNo = x.OrderNo,
                    OutOrderNo = x.OutOrderNo,
                    LifePayType = x.LifePayType,
                    ExpensesReceiptsType = x.ExpensesReceiptsType ?? 0,
                    Amount = x.Amount,
                    FinishTime = x.FinishTime
                })
                .GetPageResult(input.PageModel);
            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;
            objectData.TotalRefund = totalRefund;
            objectData.RealIncome = totalIncome - totalRefund;
            list.ObjectData = objectData;
            return list;
        }
        /// <summary>
        /// 获取渠道分佣
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<PageOutput<LifePayChannlesRakeListOutput>> GetLifePayChannlesRakePage(LifePayChannlesRakePageInput input)
        {
            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)
                .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,
                })
                .GetPageResult(input.PageModel);
            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;
            list.ObjectData = objectData;
            return list;
        }
        public async Task<List<LifePayChannlesRakeListTemplate>> GetLifePayChannlesRakePageExport(LifePayChannlesRakePageInput input)
        {
            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>
        /// 编辑充值流水
@@ -63,9 +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.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;
@@ -84,5 +255,337 @@
                await _lifePayRechargeReceiptsRepository.InsertAsync(payRechargeReceipts);
            }
        }
        /// <summary>
        /// 插入收支流水
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task AddLifePayExpensesReceipts(AddLifePayExpensesReceiptsInput input)
        {
            var repeat = await _lifePayExpensesReceiptsRepository.Where(x => x.ExpensesReceiptsType == input.ExpensesReceiptsType
            && x.OrderNo == input.OrderNo).AnyAsync();
            if (!repeat)
            {
                var data = new LifePayExpensesReceipts()
                {
                    Id = Guid.NewGuid(),
                    OutOrderNo = input.OutOrderNo,
                    LifePayType = input.LifePayType,
                    ExpensesReceiptsType = input.ExpensesReceiptsType,
                };
                switch (input.LifePayType)
                {
                    case LifePayTypeEnum.AliPay:
                        if (input.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses)
                        {
                            var query = await _aliPayApi.OrderInQuiry(new OrderInQuiryInput() { OutTradeNo = input.OrderNo });
                            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, 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);
                            }
                        }
                        break;
                    case LifePayTypeEnum.WxPay:
                        if (input.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses)
                        {
                            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.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);
                            }
                        }
                        break;
                    default: break;
                }
            }
        }
        /// <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.已支付)
                                   join b in _lifePayExpensesReceiptsRepository on a.OrderNo equals b.OrderNo into temp
                                   from b in temp.DefaultIfEmpty()
                                   select new LifePayExpensesReceiptsTemp()
                                   {
                                       OrderNo = a.OrderNo,
                                       OutOrderNo = a.OutOrderNo,
                                       RefundOrderNo = a.RefundOrderNo,
                                       LifePayType = a.LifePayType ?? 0,
                                       Amount = a.PayAmount ?? 0,
                                       ExpensesReceiptsType = b.ExpensesReceiptsType
                                   }).ToListAsync();
            foreach (var item in orderlist)
            {
                if (!item.ExpensesReceiptsType.HasValue)
                {
                    /// 入账
                    AddLifePayExpensesReceiptsInput input = new AddLifePayExpensesReceiptsInput()
                    {
                        OrderNo = item.OrderNo,
                        OutOrderNo = item.OutOrderNo,
                        LifePayType = item.LifePayType,
                        Amount = item.Amount,
                        ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses
                    };
                    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())
                    {
                        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.PayStatus == LifePayStatusEnum.已支付 && x.LifePayOrderStatus == LifePayOrderStatusEnum.已完成).ToListAsync();
            foreach (var item in orderlist)
            {
                /// 毛利
                var grossProfit = item.RechargeAmount * (item.ChannleRate - item.PlatformRate) / 100;
                /// 渠道佣金  ((充值面额 * 渠道折扣比例)-(充值面额 * 平台折扣比例))* 佣金比例
                var channlesRakePrice = grossProfit * item.ChannlesRakeRate / 100;
                if (channlesRakePrice.HasValue)
                {
                    LifePayChannlesRake lifePayChannlesRake = new LifePayChannlesRake()
                    {
                        OrderNo = item.OrderNo,
                        PayAmount = item.RechargeAmount ?? 0,
                        ChannlesRakeRate = item.ChannlesRakeRate ?? 0,
                        ChannlesRakePrice = channlesRakePrice ?? 0,
                        ChannelId = item.ChannelId,
                    };
                    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
    }
}