From 038e0f0b6899b92d1ea34a1bd617c31832116aa3 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期五, 21 三月 2025 17:55:03 +0800 Subject: [PATCH] fix: s --- LifePayment/LifePayment.Application/LifePay/LifePayService.cs | 106 +++++++++++++++++++++------------------------------- 1 files changed, 43 insertions(+), 63 deletions(-) diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs index e24db15..0fc2dec 100644 --- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs +++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs @@ -26,6 +26,7 @@ using Volo.Abp.Domain.Entities; using Volo.Abp.ObjectMapping; using NPOI.SS.Formula.Functions; +using StackExchange.Redis; namespace LifePayment.Application; @@ -60,7 +61,6 @@ IRepository<LifePayUser, Guid> lifePayUserRepository, IRepository<LifePayPremium, Guid> lifePayPremiumRepository, IRepository<LifePayIntroInfo, Guid> lifePayIntroInfoRepository, - IRepository<DallyStatistics, Guid> dallyStatisticsRepository, IRepository<OperateHistory, Guid> operateHistory, IAliPayApi aliPayApi, IAlipayInterfaceManager aliPayInterfaceManager, @@ -78,7 +78,6 @@ _lifePayUserRepository = lifePayUserRepository; _lifePayPremiumRepository = lifePayPremiumRepository; _lifePayIntroInfoRepository = lifePayIntroInfoRepository; - _dallyStatisticsRepository = dallyStatisticsRepository; _aliPayApi = aliPayApi; _alipayInterfaceManager = aliPayInterfaceManager; _wxPayApi = wxPayApi; @@ -93,44 +92,6 @@ #region 鏌ヨ - public async Task<TopStatisticsOutput> GetTopStatistics() - { - var today = DateTime.Now.Date; - var statistics = await _dallyStatisticsRepository.Where(x => x.CreationTime.Date == today).FirstOrDefaultAsync(); - if (statistics == null) - { - var accumulatedReceipts = await _lifePayOrderRepository.Where(x => x.CreationTime < today).SumAsync(x => x.PayAmount); - var receiptsYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today).SumAsync(x => x.PayAmount); - var accumulatedOrders = await _lifePayOrderRepository.Where(x => x.CreationTime < today).CountAsync(); - var accumulatedIncome = await _lifePayOrderRepository.Where(x => x.CreationTime < today).SumAsync(x => x.ActualRechargeAmount); - var ordersNumYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today).CountAsync(); - var yesterdaySuccess = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�).CountAsync(); - var yesterdayFail = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插け璐�).CountAsync(); - var accumulatedUsers = await _lifePayUserRepository.CountAsync(); - - var entity = new DallyStatistics() - { - Id = GuidGenerator.Create(), - CreationTime = DateTime.Now, - Amount = 0, - AccumulatedReceipts = accumulatedReceipts, - ReceiptsYesterday = receiptsYesterday, - AccumulatedOrders = accumulatedOrders, - OrdersNumYesterday = ordersNumYesterday, - YesterdaySuccess = yesterdaySuccess, - YesterdayFail = yesterdayFail, - AccumulatedUsers = accumulatedUsers, - }; - await _dallyStatisticsRepository.InsertAsync(entity); - //var result = ObjectMapper.Map<DallyStatistics, TopStatisticsOutput>(entity); - return new TopStatisticsOutput(); - } - else - { - var result = ObjectMapper.Map<DallyStatistics, TopStatisticsOutput>(statistics); - return result; - } - } /// <summary> /// 鑾峰彇鐢佃垂闈㈠�� @@ -381,10 +342,8 @@ public async Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo) { var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); - var platformRate = await _lifePayRateRepository.FirstOrDefaultAsync(r => r.RateType == LifePayRateTypeEnum.渚涘簲鍟嗘姌鎵d环); var channle = await _lifePayChannlesRep.FirstOrDefaultAsync(r => r.ChannlesNum == order.ChannelId); - var premium = await _lifePayPremiumRepository.Where(x => x.IsDeleted == false && x.PremiumType == order.LifePayType).FirstOrDefaultAsync(); - CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); var user = await _lifePayUserRepository.FirstOrDefaultAsync(x => x.Id == order.UserId); var channlesRakePrice = (order.PayAmount - (order.PlatformDeductionAmount == null ? 0 : order.PlatformDeductionAmount)) * channle.ChannlesRakeRate / 100; @@ -415,16 +374,16 @@ LifePayRefundStatus = order.LifePayRefundStatus, ActualRechargeAmount = order.ActualRechargeAmount, RefundPrice = order.RefundPrice, - PlatformRate = platformRate.Rate, + PlatformRate = order.PlatformRate, PlatformPrice = order.PlatformDeductionAmount, ElecBillUrl = order.ElecBillUrl.GetOssPath(), RefundElecBillUrl = order.RefundElecBillUrl.GetOssPath(), ChannleRate = channle.ChannlesRate, ChannlesRakeRate = channle.ChannlesRakeRate, ChannlesRakePrice = channlesRakePrice.HasValue ? 0 : Math.Round(channlesRakePrice.Value, 2), - PremiumRate = premium == null ? 0 : premium.Rate, - PremiumPrice = premium == null ? 0 : Math.Round(order.PayAmount * premium.Rate, 2), - Profit = (order.PayAmount - order.PlatformDeductionAmount) * (1.00m - channle.ChannlesRakeRate / 100) - (premium == null ? 0 : Math.Round(order.PayAmount * premium.Rate, 2)) + PremiumRate = order.PremiumRate, + PremiumPrice = Math.Round(order.PayAmount * (order.PremiumRate.HasValue ? order.PremiumRate.Value:0), 2), + Profit = (order.PayAmount - order.PlatformDeductionAmount) * (1.00m - channle.ChannlesRakeRate / 100) - Math.Round(order.PayAmount * (order.PremiumRate.HasValue ? order.PremiumRate.Value : 0), 2) }; return result; @@ -518,6 +477,8 @@ RefundApplyRemark = x.RefundApplyRemark, RefundTime = x.RefundTime, ACOOLYOrderNo = x.ACOOLYOrderNo, + LifePayRefundStatus = x.LifePayRefundStatus, + ACOOLYStatus = x.ACOOLYStatus, }) .GetPageResult(input.PageModel); } @@ -812,6 +773,9 @@ var amount = CalculateAmount(input.ProductData.ParValue, rate.FirstOrDefault(x => x.RateType == LifePayRateTypeEnum.榛樿璇濊垂鎶樻墸).Rate); + var platformRate = await _lifePayRateRepository.FirstOrDefaultAsync(r => r.RateType == LifePayRateTypeEnum.渚涘簲鍟嗘姌鎵d环); + + var orderInput = new CreateLifePayOrderInput { OrderNo = channle.ChannlesNum + CreateOrderNo(), @@ -825,7 +789,10 @@ PayAmount = amount.PayAmont, DiscountAmount = amount.DiscountAmount, RechargeAmount = amount.RechargeAmount, - ChannelId = channle.ChannlesNum + ChannelId = channle.ChannlesNum, + PlatformRate = platformRate.Rate, + ChannleRate = channle.ChannlesRate, + ChannlesRakeRate = channle.ChannlesRakeRate, }; await CreateLifePayOrder(orderInput); @@ -856,6 +823,8 @@ var amount = CalculateAmount(input.ProductData.ParValue, rate.FirstOrDefault(x => x.RateType == LifePayRateTypeEnum.榛樿鐢佃垂鎶樻墸).Rate); + var platformRate = await _lifePayRateRepository.FirstOrDefaultAsync(r => r.RateType == LifePayRateTypeEnum.渚涘簲鍟嗘姌鎵d环); + var orderInput = new CreateLifePayOrderInput { OrderNo = channle.ChannlesNum + CreateOrderNo(), @@ -869,7 +838,10 @@ PayAmount = amount.PayAmont, DiscountAmount = amount.DiscountAmount, RechargeAmount = amount.RechargeAmount, - ChannelId = channle.ChannlesNum + ChannelId = channle.ChannlesNum, + PlatformRate = platformRate.Rate, + ChannleRate = channle.ChannlesRate, + ChannlesRakeRate = channle.ChannlesRakeRate, }; await CreateLifePayOrder(orderInput); @@ -899,6 +871,8 @@ CheckExtensions.IfTrueThrowUserFriendlyException(rate.IsNullOrEmpty(), "鏈厤缃姌鎵�"); var amount = CalculateAmount(input.ProductData.ParValue, rate.FirstOrDefault(x => x.RateType == LifePayRateTypeEnum.榛樿鐕冩皵鎶樻墸).Rate); + + var platformRate = await _lifePayRateRepository.FirstOrDefaultAsync(r => r.RateType == LifePayRateTypeEnum.渚涘簲鍟嗘姌鎵d环); var orderInput = new CreateLifePayOrderInput { @@ -938,7 +912,8 @@ 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 = "鐢熸椿缂磋垂-"; @@ -1257,9 +1232,9 @@ order.FinishTime = DateTime.Now; } - if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插け璐� && order.PayStatus != LifePayStatusEnum.宸查��娆�) + if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插け璐� && order.LifePayRefundStatus != LifePayRefundStatusEnum.宸查��娆�) { - order.PayStatus = LifePayStatusEnum.寰呴��娆�; + order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�; } order.LifePayOrderStatus = status; @@ -1279,9 +1254,19 @@ var order = await _lifePayOrderRepository.FirstOrDefaultAsync(x => x.Id == input.Id); CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); - if (order.PayStatus == LifePayStatusEnum.宸查��娆�) + if (order.LifePayRefundStatus == LifePayRefundStatusEnum.宸查��娆�) { return; + } + + if (input.RefundPrice > order.PayAmount) + { + throw new UserFriendlyException("閫�娆剧殑閲戦涓嶈兘澶т簬瀹炰粯閲戦"); + } + + if (input.LifePayRefundType == LifePayRefundTypeEnum.鍏ㄩ閫�娆�) + { + input.RefundPrice = order.PayAmount; } if (order.LifePayOrderStatus != LifePayOrderStatusEnum.宸插け璐� && order.PayStatus != LifePayStatusEnum.寰呴��娆� && order.LifePayOrderStatus != LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳) @@ -1294,35 +1279,30 @@ switch (order.LifePayType) { case LifePayTypeEnum.WxPay: - var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, outRefundNo,order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100)); + var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, outRefundNo,order.RefundApplyRemark, Convert.ToInt32(input.RefundPrice * 100), Convert.ToInt32(order.PayAmount * 100)); if (wxRefundResult.Status == "SUCCESS") { - order.PayStatus = LifePayStatusEnum.宸查��娆�; order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�; } else if (wxRefundResult.Status == "PROCESSING") { - order.PayStatus = LifePayStatusEnum.閫�娆句腑; order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑; order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑; } else { - order.PayStatus = LifePayStatusEnum.寰呴��娆�; order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧け璐�; order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�; } break; case LifePayTypeEnum.AliPay: - var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = order.PayAmount.ToString() }); + var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = Convert.ToInt32(input.RefundPrice * 100).ToString() }); if (aliRefundResult.Code != AlipayResultCode.Success) { throw new UserFriendlyException("閫�娆惧け璐�"); } - - order.PayStatus = LifePayStatusEnum.宸查��娆�; order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; break; default: throw new UserFriendlyException("閫�娆惧け璐�"); @@ -1332,7 +1312,7 @@ order.RefundCheckRemark = input.RefundCheckRemark; order.RefundTime = DateTime.Now; order.RefundCheckUserId = CurrentUser.Id; - order.RefundPrice = order.PayAmount; + order.RefundPrice = input.RefundPrice; await _lifePayOrderRepository.UpdateAsync(order); @@ -1359,7 +1339,7 @@ throw new UserFriendlyException("闈炵敤鎴锋湰浜洪��娆�"); } - if (order.PayStatus == LifePayStatusEnum.宸查��娆�) + if (order.LifePayRefundStatus == LifePayRefundStatusEnum.宸查��娆�) { return; } @@ -1493,7 +1473,7 @@ var order = await _lifePayOrderRepository.FirstOrDefaultAsync(x => x.Id == input.Id); CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); - if (order.PayStatus == LifePayStatusEnum.宸查��娆�) + if(order.LifePayRefundStatus == LifePayRefundStatusEnum.宸查��娆�) { return; } -- Gitblit v1.9.1