From c3df0d611fc5fde066867c772bd268e5921f5b05 Mon Sep 17 00:00:00 2001 From: zhengyuxuan <zhengyuxuan1995> Date: 星期一, 24 三月 2025 20:31:48 +0800 Subject: [PATCH] fix;提交 --- LifePayment/LifePayment.Application/LifePay/LifePayService.cs | 92 ++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 76 insertions(+), 16 deletions(-) diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs index df1bc9a..9474795 100644 --- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs +++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs @@ -303,8 +303,8 @@ var result = await (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository) .Where(x => x.LifePayOrderStatus == LifePayOrderStatusEnum.寰呴��娆� || x.LifePayOrderStatus == LifePayOrderStatusEnum.宸查��娆� || x.LifePayOrderStatus == LifePayOrderStatusEnum.閫�娆句腑 || x.LifePayRefundStatus > LifePayRefundStatusEnum.鏃犻渶閫�娆�) - .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime) - .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime) + .WhereIf(input.BeginRefundTime.HasValue, x => x.RefundTime >= input.BeginRefundTime) + .WhereIf(input.EndRefundTime.HasValue, x => x.RefundTime <= input.EndRefundTime) .WhereIf(input.BeginRefundApplyTime.HasValue, x => x.RefundApplyTime >= input.BeginRefundApplyTime) .WhereIf(input.LifePayType.HasValue, x => x.LifePayType == input.LifePayType) .WhereIf(input.EndRefundApplyTime.HasValue, x => x.RefundApplyTime <= input.EndRefundApplyTime) @@ -397,8 +397,10 @@ var channle = await _lifePayChannlesRep.FirstOrDefaultAsync(r => r.ChannlesNum == order.ChannelId); 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; + var orderpirce = await GetOrderPrice(order.RechargeAmount, order.PayAmount,order.PlatformRate, order.ChannleRate, order.ChannlesRakeRate,order.PremiumRate); + + var result = new LifePayOrderOutput() { UserName = user.Name, @@ -430,12 +432,12 @@ 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), + ChannleRate = order.ChannleRate, + ChannlesRakeRate = order.ChannlesRakeRate, + ChannlesRakePrice = orderpirce.ChannlesRakePrice, 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) + PremiumPrice = orderpirce.PremiumPrice, + Profit = orderpirce.Profit }; return result; @@ -721,11 +723,12 @@ { DiscountAmount = x.DiscountAmount, FinishTime = x.FinishTime, - LifePayOrderStatus = x.LifePayOrderStatus, + //LifePayOrderStatus = x.LifePayOrderStatus, LifePayOrderType = x.LifePayOrderType, LifePayType = x.LifePayType, OrderNo = x.OrderNo, PayAmount = x.PayAmount, + ActualRechargeAmount = x.ActualRechargeAmount.HasValue?x.ActualRechargeAmount.Value:0, PhoneNumber = x.PhoneNumber, RechargeAmount = x.RechargeAmount, OutOrderNo = x.OutOrderNo, @@ -733,8 +736,11 @@ PayTime = x.PayTime, ACOOLYOrderNo = x.ACOOLYOrderNo, CreationTime = x.CreationTime, - RefundApplyRemark = x.RefundApplyRemark, - ChannelName = x.ChannelName + LifePayRefundStatus = x.LifePayRefundStatus, + ACOOLYStatus = x.ACOOLYStatus, + //RefundApplyRemark = x.RefundApplyRemark, + ChannelName = x.ChannelName, + PlatformPrice = x.PlatformDeductionAmount.HasValue ? x.PlatformDeductionAmount.Value : 0 }).OrderByDescending(r => r.CreationTime).ToListAsync(); var i = 0; result.ForEach(s => @@ -747,7 +753,10 @@ s.PayTimeStr = !s.PayTime.HasValue ? string.Empty : s.PayTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm); s.LifePayTypeStr = s.LifePayType.GetDescription(); s.PayStatusStr = s.PayStatus.GetDescription(); - s.LifePayOrderStatusStr = s.LifePayOrderStatus.GetDescription(); + s.ActualRechargeAmountStr = s.ActualRechargeAmount.ToString("F2"); + s.LifePayRefundStatusStr = s.LifePayRefundStatusStr.GetDescription(); + s.ACOOLYStatusStr = s.ACOOLYStatus.GetDescription(); + //s.LifePayOrderStatusStr = s.LifePayOrderStatus.GetDescription(); s.FinishTimeStr = !s.FinishTime.HasValue ? string.Empty : s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm); }); return result; @@ -843,8 +852,10 @@ RechargeAmount = amount.RechargeAmount, ChannelId = channle.ChannlesNum, PlatformRate = platformRate.Rate, + PlatformDeductionAmount = amount.RechargeAmount * platformRate.Rate /100, ChannleRate = channle.ChannlesRate, ChannlesRakeRate = channle.ChannlesRakeRate, + //ChannlesRakePrice = amount.RechargeAmount * (channle.ChannlesRate - platformRate.Rate) / 100 * channle.ChannlesRakeRate / 100 }; await CreateLifePayOrder(orderInput); @@ -1257,6 +1268,24 @@ await _lifePayOrderRepository.UpdateAsync(order); } + public async Task WxPayDomesticRefundsHandler(string orderNo, LifePayRefundStatusEnum refundStatus) + { + var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); + order.LifePayRefundStatus = refundStatus; + switch (refundStatus) + { + case LifePayRefundStatusEnum.宸查��娆�: + order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; + order.ACOOLYStatus = ACOOLYStatusEnum.宸查��娆�; + break; + case LifePayRefundStatusEnum.閫�娆句腑: + order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑; + break; + default:break; + } + } + /// <summary> /// ACOOLYO璁㈠崟閫氱煡澶勭悊 /// </summary> @@ -1278,6 +1307,7 @@ { order.ACOOLYOrderNo = acoolyOrderNo; } + if (refundApplyRemark.IsNotNullOrEmpty()) { order.RefundApplyRemark = refundApplyRemark; @@ -1285,7 +1315,7 @@ order.LifePayOrderStatus = status; order.ACOOLYStatus = acoolyStatus; - + order.FinishTime = DateTime.Now; await _lifePayOrderRepository.UpdateAsync(order); } @@ -1346,6 +1376,7 @@ order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呴��娆�; order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�; } + break; case LifePayTypeEnum.AliPay: var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = Convert.ToInt32(input.RefundPrice * 100).ToString() }); @@ -1353,7 +1384,9 @@ { throw new UserFriendlyException("閫�娆惧け璐�"); } + order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; + order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�; break; default: throw new UserFriendlyException("閫�娆惧け璐�"); } @@ -1398,9 +1431,9 @@ && order.LifePayOrderStatus != LifePayOrderStatusEnum.寰呴��娆� && order.LifePayOrderStatus != LifePayOrderStatusEnum.宸查��娆�) { order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呴��娆�; + order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�; order.RefundApplyRemark = input.RefundApplyRemark; order.RefundApplyTime = DateTime.Now; - await _lifePayOrderRepository.UpdateAsync(order); } else if (order.LifePayOrderStatus == LifePayOrderStatusEnum.寰呴��娆� || order.LifePayRefundStatus == LifePayRefundStatusEnum.寰呴��娆� || @@ -1978,8 +2011,8 @@ var result = (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository) .Where(x => x.LifePayOrderStatus == LifePayOrderStatusEnum.寰呴��娆� || x.LifePayOrderStatus == LifePayOrderStatusEnum.宸查��娆� || x.LifePayOrderStatus == LifePayOrderStatusEnum.閫�娆句腑 || x.LifePayRefundStatus > LifePayRefundStatusEnum.鏃犻渶閫�娆�) - .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime) - .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime) + .WhereIf(input.BeginRefundTime.HasValue, x => x.RefundTime >= input.BeginRefundTime) + .WhereIf(input.EndRefundTime.HasValue, x => x.RefundTime <= input.EndRefundTime) .WhereIf(input.BeginRefundApplyTime.HasValue, x => x.RefundApplyTime >= input.BeginRefundApplyTime) .WhereIf(input.LifePayType.HasValue, x => x.LifePayType == input.LifePayType) .WhereIf(input.EndRefundApplyTime.HasValue, x => x.RefundApplyTime <= input.EndRefundApplyTime) @@ -2039,5 +2072,32 @@ }); } + public async Task<OrderPriceReturn> GetOrderPrice(decimal price, decimal priceAmount, decimal? platformRate,decimal? channleRate, + decimal? channlesRakeRate,decimal? premiumRate) + { + /// 姣涘埄 + var grossProfit = price * (channleRate - platformRate) / 100; + + /// 骞冲彴鎵f閲戦 鍏呭�奸潰棰� * 骞冲彴鎶樻墸姣斾緥 + var platformPrice = price * platformRate / 100; + + /// 鎵嬬画璐� + var premiumPrice = priceAmount * premiumRate / 100; + + /// 娓犻亾浣i噾 锛�(鍏呭�奸潰棰� * 娓犻亾鎶樻墸姣斾緥)-(鍏呭�奸潰棰� * 骞冲彴鎶樻墸姣斾緥)锛�* 浣i噾姣斾緥 + var channlesRakePrice = grossProfit * channlesRakeRate / 100; + + /// 鍒╂鼎 + var profit = grossProfit - channlesRakePrice - premiumPrice; + + return new OrderPriceReturn() + { + PlatformPrice = platformPrice.HasValue? platformPrice.Value :0, + PremiumPrice = premiumPrice.HasValue ? premiumPrice.Value : 0, + ChannlesRakePrice = channlesRakePrice.HasValue? channlesRakePrice.Value:0, + Profit = profit.HasValue ? profit.Value : 0 + }; + } + #endregion } -- Gitblit v1.9.1