From 7f36c8b49b888cbf440ea400336a11abf4cab018 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期二, 01 四月 2025 11:19:40 +0800 Subject: [PATCH] Merge branch 'dev-lifepay-v1.3' of http://120.26.58.240:8888/r/LifePaymentApi into dev-lifepay-v1.3 --- LifePayment/LifePayment.Application/LifePay/LifePayService.cs | 102 +++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 82 insertions(+), 20 deletions(-) diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs index 1b8a173..a3135a3 100644 --- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs +++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs @@ -29,6 +29,8 @@ using StackExchange.Redis; using static Volo.Abp.Identity.Settings.IdentitySettingNames; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; +using LifePayment.Application.LifePay; +using Alipay.AopSdk.Core.Domain; namespace LifePayment.Application; @@ -46,6 +48,8 @@ private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep; private readonly IRepository<LifePayAccount, Guid> _lifePayAccount; private readonly IRepository<OperateHistory, Guid> _operateHistory; + private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository; + private readonly ILifePayOrderService _lifePayOrderService; private readonly IDataFilter dataFilter; private readonly IChannelFilter _channelFilter; private readonly IAliPayApi _aliPayApi; @@ -64,7 +68,9 @@ IRepository<LifePayUser, Guid> lifePayUserRepository, IRepository<LifePayPremium, Guid> lifePayPremiumRepository, IRepository<LifePayIntroInfo, Guid> lifePayIntroInfoRepository, + IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository, IRepository<OperateHistory, Guid> operateHistory, + ILifePayOrderService lifePayOrderService, IAliPayApi aliPayApi, IAlipayInterfaceManager aliPayInterfaceManager, IWxPayApi wxPayApi, @@ -80,9 +86,11 @@ _lifePayRateRepository = lifePayRateRepository; _lifePayOrderRepository = lifePayOrderRepository; _lifePayUserRepository = lifePayUserRepository; + _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository; _lifePayPremiumRepository = lifePayPremiumRepository; _lifePayIntroInfoRepository = lifePayIntroInfoRepository; _aliPayApi = aliPayApi; + _lifePayOrderService = lifePayOrderService; _alipayInterfaceManager = aliPayInterfaceManager; _wxPayApi = wxPayApi; _wxPayOptions = wxPayOptions.Value; @@ -841,12 +849,22 @@ /// <returns></returns> public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input) { + var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OutTradeNo || x.RefundOrderNo == input.OutRefundNo).FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "鏈壘鍒拌鍗曚俊鎭�"); + input.OutTradeNo = order.OrderNo; + input.OutRefundNo = order.RefundOrderNo; var result = await _aliPayApi.QueryAlipayTradeRefund(input); - var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OutTradeNo).FirstOrDefaultAsync(); if (result.Code == AlipayResultCode.Success && result.RefundStatus == AlipayRefundStatus.Success) { order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�; + await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput() + { + OrderNo = order.RefundOrderNo, + OutOrderNo = result.TradeNo, + LifePayType = LifePayTypeEnum.AliPay, + ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts + }); } return result; @@ -859,7 +877,24 @@ /// <returns></returns> public async Task<WxPayDomesticRefundsQueryReponse> WxPayDomesticRefundsQuery(string outTradeNo) { - return await _wxPayApi.WxPayDomesticRefundsQuery(outTradeNo); + var order = await _lifePayOrderRepository.Where(x => x.RefundOrderNo == outTradeNo).FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "鏈壘鍒拌鍗曚俊鎭�"); + var result = await _wxPayApi.WxPayDomesticRefundsQuery(outTradeNo); + if (order.LifePayRefundStatus != LifePayRefundStatusEnum.宸查��娆� && result.Code == WxpayResultCode.Success && result.Status == WxPayRefundStatus.閫�娆炬垚鍔�) + { + order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; + order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�; + await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput() + { + OrderNo = order.OrderNo, + OutRefundNo = order.RefundOrderNo, + OutOrderNo = order.OutOrderNo, + LifePayType = LifePayTypeEnum.AliPay, + ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts + }); + } + return result; + } /// <summary> @@ -1318,7 +1353,7 @@ await _lifePayOrderRepository.UpdateAsync(order); } - public async Task WxPayDomesticRefundsHandler(string orderNo, LifePayRefundStatusEnum refundStatus) + public async Task LifePayRefundsHandler(string orderNo, LifePayRefundStatusEnum refundStatus) { var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); @@ -1336,6 +1371,7 @@ } } + /// <summary> /// ACOOLYO璁㈠崟閫氱煡澶勭悊 /// </summary> @@ -1347,10 +1383,10 @@ var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); - //if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�) - //{ - // return; - //} + if (order.LifePayOrderStatus >= LifePayOrderStatusEnum.宸插畬鎴�) + { + return; + } order.PlatformDeductionAmount = payAmount; if (acoolyOrderNo.IsNotNullOrEmpty()) @@ -1372,6 +1408,27 @@ order.ACOOLYStatus = acoolyStatus; order.FinishTime = DateTime.Now; await _lifePayOrderRepository.UpdateAsync(order); + + if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�) + { + /// 姣涘埄 + var grossProfit = order.RechargeAmount * (order.ChannleRate - order.PlatformRate) / 100; + /// 娓犻亾浣i噾 锛�(鍏呭�奸潰棰� * 娓犻亾鎶樻墸姣斾緥)-(鍏呭�奸潰棰� * 骞冲彴鎶樻墸姣斾緥)锛�* 浣i噾姣斾緥 + var channlesRakePrice = grossProfit * (order.ChannlesRakeRate) / 100; + if (channlesRakePrice.HasValue) + { + LifePayChannlesRake lifePayChannlesRake = new LifePayChannlesRake() + { + OrderNo = order.OrderNo, + PayAmount = order.PayAmount.Value, + ChannlesRakeRate = order.ChannlesRakeRate.Value, + ChannlesRakePrice = channlesRakePrice.Value, + FinishTime = order.FinishTime.Value, + ChannelId = order.ChannelId, + }; + await _lifePayChannlesRakeRepository.InsertAsync(lifePayChannlesRake); + } + } } /// <summary> @@ -1406,25 +1463,30 @@ } var outRefundNo = order.ChannelId + CreateRefundOrderNo(); - order.RefundOrderNo = outRefundNo; switch (order.LifePayType) { case LifePayTypeEnum.WxPay: var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, outRefundNo, order.RefundApplyRemark, Convert.ToInt32(input.RefundPrice * 100), Convert.ToInt32(order.PayAmount * 100)); - if (wxRefundResult.Status == "SUCCESS") + if (wxRefundResult.Status == WxpayRefundResultStatus.SUCCESS) + { + order.RefundOrderNo = outRefundNo; + order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑; + order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑; + } + else if (wxRefundResult.Status == WxpayRefundResultStatus.PROCESSING) + { + order.RefundOrderNo = outRefundNo; + order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑; + order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑; + } + else if (wxRefundResult.Status.IsNullOrEmpty() && wxRefundResult.Message == WxpayRefundResultMessage.FullRefund) { order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�; } - else if (wxRefundResult.Status == "PROCESSING") - { - order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑; - order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑; - } else { - order.LifePayOrderStatus = LifePayOrderStatusEnum.寰呴��娆�; - order.LifePayRefundStatus = LifePayRefundStatusEnum.寰呴��娆�; + throw new UserFriendlyException("閫�娆惧け璐�:" + wxRefundResult.Message); } break; @@ -1435,8 +1497,9 @@ throw new UserFriendlyException("閫�娆惧け璐�:" + aliRefundResult.SubMsg); } - order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; - order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�; + order.RefundOrderNo = outRefundNo; + order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑; + order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑; break; default: throw new UserFriendlyException("閫�娆惧け璐�"); } @@ -1574,7 +1637,7 @@ await _lifePayAccount.InsertAsync(userAccount); } - if (input.LifePayType == LifePayOrderTypeEnum.PhoneOrder) + if (input.LifePayType == LifePayOrderTypeEnum.PhoneOrder || input.LifePayType == LifePayOrderTypeEnum.ElectricOrder) { var extraProperties = JsonConvert.DeserializeObject<Model_UserAccountExtraProperties>(input.ExtraProperties); if (!string.IsNullOrEmpty(extraProperties.Name) && extraProperties.Phone == user.PhoneNumber) @@ -2015,7 +2078,6 @@ string message = $"{method}\n{uri}\n{timestamp}\n{nonce}\n{body}\n"; return message; } - private async Task<IQueryable<LifePayOrderListOutput>> GetLifePayOrderListFilter(QueryLifePayOrderListInput input) { -- Gitblit v1.9.1