From 7b77ac597eaacf2618a85d9506e918a4052201c0 Mon Sep 17 00:00:00 2001 From: zhengyuxuan <zhengyuxuan1995> Date: 星期四, 20 三月 2025 14:30:52 +0800 Subject: [PATCH] fix:bug修复 --- LifePayment/LifePayment.Application/LifePay/LifePayService.cs | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 100 insertions(+), 16 deletions(-) diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs index e3fc6ef..bbba5e5 100644 --- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs +++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs @@ -19,7 +19,10 @@ using Volo.Abp.EventBus.Distributed; using Z.EntityFramework.Plus; using ZeroD.Util; +using Alipay.EasySDK.Payment.Common.Models; using static LifePayment.Domain.Shared.LifePaymentConstant; +using ZeroD.Util.Fadd; +using Nest; namespace LifePayment.Application; @@ -209,7 +212,6 @@ }) .GetPageResult(input.PageModel); } - } /// <summary> @@ -219,7 +221,6 @@ /// <returns></returns> public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input) { - var result = await (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository) .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime) .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime) @@ -255,8 +256,55 @@ RefundCheckRemark = a.RefundCheckRemark, RefundApplyRemark = a.RefundApplyRemark, RefundTime = a.RefundTime, - ChannelName = b.ChannlesName + ChannelName = b.ChannlesName, + ActualRechargeAmount = a.ActualRechargeAmount, + PlatformDeductionAmount = a.PlatformDeductionAmount, + ACOOLYStatus = a.ACOOLYStatus, + LifePayRefundStatus = a.LifePayRefundStatus, }).GetPageResult(input.PageModel); + + return result; + } + + 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 channleRate = await _lifePayChannlesRep.FirstOrDefaultAsync(r => r.ChannlesNum == order.ChannelId); + var premiumRate = await _lifePayPremiumRepository.Where(x => x.IsDeleted == false && x.PremiumType == order.LifePayType).FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); + var result = new LifePayOrderOutput() + { + DiscountAmount = order.DiscountAmount, + FinishTime = order.FinishTime, + Id = order.Id, + LifePayOrderStatus = order.LifePayOrderStatus, + LifePayOrderType = order.LifePayOrderType, + LifePayType = order.LifePayType, + OrderNo = order.OrderNo, + PayAmount = order.PayAmount, + RechargeAmount = order.RechargeAmount, + PayStatus = order.PayStatus, + PayTime = order.PayTime, + OrderParamDetailJsonStr = order.OrderParamDetailJsonStr, + RefundCredentialsImgUrl = order.RefundCredentialsImgUrl.GetOssPath(), + CreationTime = order.CreationTime, + RefundCheckRemark = order.RefundCheckRemark, + RefundApplyRemark = order.RefundApplyRemark, + RefundTime = order.RefundTime, + ACOOLYOrderNo = order.ACOOLYOrderNo, + LifePayRefundStatus = order.LifePayRefundStatus, + ActualRechargeAmount = order.ActualRechargeAmount, + RefundPrice = order.RefundPrice, + PlatformRate = platformRate.Rate, + PlatformPrice = order.PlatformDeductionAmount, + ChannleRate = channleRate.ChannlesRate, + ChannlesRakeRate = channleRate.ChannlesRakeRate, + ChannlesRakePrice = (order.PayAmount - order.PlatformDeductionAmount) * channleRate.ChannlesRakeRate / 100, + PremiumRate = premiumRate == null ? default : premiumRate.Rate, + PremiumPrice = premiumRate == null ? default : Math.Round(order.PayAmount * premiumRate.Rate, 2), + Profit = (order.PayAmount - order.PlatformDeductionAmount) * (1.00m - channleRate.ChannlesRakeRate / 100) - (premiumRate == null ? 0 : Math.Round(order.PayAmount * premiumRate.Rate, 2)) + }; return result; } @@ -337,6 +385,8 @@ return result; } + + /// <summary> /// 鏍规嵁璁㈠崟鍙疯幏鍙栨敮浠樼姸鎬� @@ -550,7 +600,7 @@ var orderInput = new CreateLifePayOrderInput { - OrderNo = CreateOrderNo(), + OrderNo = channle.ChannlesNum + CreateOrderNo(), LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�, LifePayOrderType = LifePayOrderTypeEnum.璇濊垂璁㈠崟, //LifePayType = input.LifePayType, @@ -594,7 +644,7 @@ var orderInput = new CreateLifePayOrderInput { - OrderNo = CreateOrderNo(), + OrderNo = channle.ChannlesNum + CreateOrderNo(), LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�, LifePayOrderType = LifePayOrderTypeEnum.鐢佃垂璁㈠崟, // LifePayType = input.LifePayType, @@ -638,7 +688,7 @@ var orderInput = new CreateLifePayOrderInput { - OrderNo = CreateOrderNo(), + OrderNo = channle.ChannlesNum + CreateOrderNo(), LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�, LifePayOrderType = LifePayOrderTypeEnum.鐕冩皵璁㈠崟, // LifePayType = input.LifePayType, @@ -966,7 +1016,7 @@ /// <param name="orderNo"></param> /// <param name="outOrderNo"></param> /// <returns></returns> - public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status) + public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount) { var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); @@ -977,6 +1027,8 @@ } order.LifePayOrderStatus = status; + order.ACOOLYStatus = acoolyStatus; + order.PlatformDeductionAmount = payAmount; if (acoolyOrderNo.IsNotNullOrEmpty()) { order.ACOOLYOrderNo = acoolyOrderNo; @@ -1016,15 +1068,44 @@ throw new UserFriendlyException("褰撳墠璁㈠崟鐘舵�佹棤娉曢��娆�"); } - /// TODO 閫�娆捐姹傚畬鎴愬悗濡備綍鎿嶄綔 - /// var refundResult = await WxPayDomesticRefunds(order.OrderNo, order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100)); + switch (order.LifePayType) + { + case LifePayTypeEnum.WxPay: + var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100)); + if (wxRefundResult.Status == "SUCCESS") + { + order.PayStatus = LifePayStatusEnum.宸查��娆�; + order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; + } + else if (wxRefundResult.Status == "PROCESSING") + { + order.PayStatus = LifePayStatusEnum.閫�娆句腑; + order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑; + } + else + { + throw new UserFriendlyException("閫�娆惧け璐�"); + } - order.PayStatus = LifePayStatusEnum.宸查��娆�; - order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; + break; + case LifePayTypeEnum.AliPay: + var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = order.PayAmount.ToString() }); + if (aliRefundResult.Code != AlipayResultCode.Success) + { + throw new UserFriendlyException("閫�娆惧け璐�"); + } + + order.PayStatus = LifePayStatusEnum.宸查��娆�; + order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; + break; + default: throw new UserFriendlyException("閫�娆惧け璐�"); + } + order.RefundCredentialsImgUrl = input.RefundCredentialsImgUrl; order.RefundCheckRemark = input.RefundCheckRemark; order.RefundTime = DateTime.Now; order.RefundCheckUserId = CurrentUser.Id; + order.RefundPrice = order.PayAmount; await _lifePayOrderRepository.UpdateAsync(order); @@ -1064,7 +1145,7 @@ order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳; order.RefundApplyRemark = input.RefundApplyRemark; - order.RefundTime = DateTime.Now; + order.RefundApplyTime = DateTime.Now; await _lifePayOrderRepository.UpdateAsync(order); } @@ -1098,7 +1179,10 @@ return res; } - + private async Task<AlipayTradeRefundResponse> AliTradeRefund(AlipayTradeRefundRequest input) + { + return await _aliPayApi.TradeRefund(input); + } public async Task<int> AddUpdateUserAccount(AddUpdateUserAccountInput input) { @@ -1370,10 +1454,10 @@ private (decimal PayAmont, decimal DiscountAmount, decimal RechargeAmount) CalculateAmount(decimal amount, decimal rate) { /// 姝e父鏀粯 - var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero); + //var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero); /// 1鍒嗛挶鏀粯 - //decimal payAmount = 0.01m; + decimal payAmount = 0.01m; CheckExtensions.IfTrueThrowUserFriendlyException(payAmount < 0.01m, "鏀粯閲戦閿欒"); @@ -1493,7 +1577,6 @@ CheckExtensions.IfTrueThrowUserFriendlyException(amount <= 0, CustomeErrorMessage.SometingMustSometing, "鑾峰彇鏀粯浜岀淮鐮佹椂閲戦", "澶т簬0"); - var res = await _wxPayApi.PayTransactionsH5(new PayTransactionsNativeH5 { Appid = _wxPayOptions.AppID, @@ -1546,6 +1629,7 @@ return res.QrCode; } + /// <summary> /// 鏋勯�犲緟绛惧悕瀛楃涓� /// </summary> -- Gitblit v1.9.1