From d0558ff1687a1bffd62c45660d4bab3132643039 Mon Sep 17 00:00:00 2001 From: lingling <kety1122@163.com> Date: 星期三, 16 四月 2025 17:44:07 +0800 Subject: [PATCH] fix bug --- LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs | 520 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 510 insertions(+), 10 deletions(-) diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs index 73749e2..4bb201c 100644 --- a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs +++ b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs @@ -2,9 +2,6 @@ using LifePayment.Domain.LifePay; using LifePayment.Domain.Models; using LifePayment.Domain.Shared; -using LifePayment.Domain; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; @@ -14,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> @@ -34,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() @@ -44,17 +104,123 @@ OrderNo = x.OrderNo, RechargeAmount = x.RechargeAmount, Remark = x.Remark, - Voucher = x.Voucher, + 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> /// 缂栬緫鍏呭�兼祦姘� @@ -66,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; @@ -87,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; + /// 娓犻亾浣i噾 锛�(鍏呭�奸潰棰� * 娓犻亾鎶樻墸姣斾緥)-(鍏呭�奸潰棰� * 骞冲彴鎶樻墸姣斾緥)锛�* 浣i噾姣斾緥 + 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 + } } -- Gitblit v1.9.1