LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayOrderService.cs
@@ -24,6 +24,12 @@ Task AddLifePayExpensesReceipts(AddLifePayExpensesReceiptsInput input); /// <summary> /// 获取退款平台流水详情 /// </summary> /// <returns></returns> Task<GetRefundPlatformTradeDetailOutput> GetRefundPlatformTradeDetail(string orderNo); Task GetAllLifePayExpensesReceipts(); Task GetAllChannlesRake(); LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
@@ -65,6 +65,13 @@ Task LifePayRefundsHandler(string orderNo, LifePayRefundStatusEnum refundStatus); /// <summary> /// 退款成功处理 /// </summary> /// <param name="input"></param> /// <returns></returns> Task<int> LifePayRefundsSuccessHandler(AddLifePayExpensesReceiptsInput input); /// <summary> /// 供应商回调处理 /// </summary> /// <param name="orderNo"></param> @@ -345,6 +352,6 @@ Task<bool> CheckChannelsStatus(string channlesId); Task LifePayOrderHistory(string operateContent, string operateName, Guid relationId, int? tableType = (int)OperateHistoryTypeEnum.LifePayRefund); } LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
@@ -894,4 +894,39 @@ public decimal SupplierRate { get; set; } public decimal Rate { get; set; } } public class GetRefundPlatformTradeDetailOutput { /// <summary> /// 订单号 /// </summary> public string OrderNo { get; set; } /// <summary> /// 退款订单号 /// </summary> public string RefundOrderNo { get; set; } /// <summary> /// 退款申请时间 /// </summary> public DateTime RefundTime { get; set; } /// <summary> /// 退款成功时间 /// </summary> public DateTime RefundSuccessTime { get; set; } public RefundPlatformStatusEnum RefundPlatformStatus { get; set; } /// <summary> /// 渠道流水号 /// </summary> public string OutOrderNo { get; set; } /// <summary> /// 支付渠道 /// </summary> public LifePayTypeEnum LifePayType { get; set; } } LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
@@ -1,7 +1,10 @@ using LifePayment.Application.Contracts; using LifePayment.Domain; using LifePayment.Domain.LifePay; using LifePayment.Domain.Models; using LifePayment.Domain.Shared; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -9,11 +12,9 @@ using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Microsoft.EntityFrameworkCore; using ZeroD.Util; using LifePayment.Domain; using ZeroD.Util.Fadd; using static LifePayment.Domain.Shared.LifePaymentConstant; using Newtonsoft.Json; namespace LifePayment.Application.LifePay { @@ -297,7 +298,7 @@ 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.OrderNo = input.OrderNo; data.ExtraProperties = JsonConvert.SerializeObject(query); data.FinishTime = Convert.ToDateTime(query.GmtRefundPay); data.Amount = Convert.ToDecimal(query.RefundAmount); @@ -336,8 +337,74 @@ } } /// <summary> /// 获取退款平台流水详情 /// </summary> /// <returns></returns> public async Task<GetRefundPlatformTradeDetailOutput> GetRefundPlatformTradeDetail(string orderNo) { var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在"); CheckExtensions.IfTrueThrowUserFriendlyException(order.LifePayRefundStatus != LifePayRefundStatusEnum.待退款 && order.LifePayRefundStatus != LifePayRefundStatusEnum.退款中, "当前订单状态无法查看退款流水"); CheckExtensions.IfTrueThrowUserFriendlyException(order.RefundOrderNo.IsNullOrEmpty(), "不存在退款流水订单"); var result = new GetRefundPlatformTradeDetailOutput(); if (order.LifePayType == LifePayTypeEnum.AliPay) { var query = await _aliPayApi.QueryAlipayTradeRefund(new OrderInQuiryInput() { OutTradeNo = order.OrderNo, OutRefundNo = order.RefundOrderNo }); result.OrderNo = order.OrderNo; result.RefundOrderNo = order.RefundOrderNo; result.OutOrderNo = query.TradeNo; result.LifePayType = LifePayTypeEnum.AliPay; result.RefundTime = Convert.ToDateTime(order.RefundTime); result.RefundSuccessTime = Convert.ToDateTime(query.GmtRefundPay); result.RefundPlatformStatus = MapWxpayRefundStatusToPlatformEnum(query.RefundStatus); } else if (order.LifePayType == LifePayTypeEnum.WxPay) { var query = await _wxPayApi.WxPayDomesticRefundsQuery(order.RefundOrderNo); result.OrderNo = order.OrderNo; result.RefundOrderNo = order.RefundOrderNo; result.OutOrderNo = query.TransactionId; result.LifePayType = LifePayTypeEnum.WxPay; result.RefundTime = Convert.ToDateTime(query.CreateTime); result.RefundSuccessTime = Convert.ToDateTime(query.SuccessTime); result.RefundPlatformStatus = MapWxpayRefundStatusToPlatformEnum(query.Status); } return result; } /// <summary> /// 支付宝退款状态映射到通用退款平台状态(Switch 版本) /// </summary> /// <param name="alipayStatus">支付宝退款状态</param> /// <returns>通用退款平台状态</returns> public static RefundPlatformStatusEnum MapAlipayRefundStatusToPlatformEnum(string alipayRefundStatus) { return alipayRefundStatus switch { AlipayRefundStatus.Success => RefundPlatformStatusEnum.SUCCESS, _ => RefundPlatformStatusEnum.PROCESSING }; } /// <summary> /// 微信退款状态映射到通用退款平台状态(Switch 版本) /// </summary> /// <param name="wxPayRefundStatus">微信退款状态</param> /// <returns>通用退款平台状态</returns> public static RefundPlatformStatusEnum MapWxpayRefundStatusToPlatformEnum(string wxPayRefundStatus) { return wxPayRefundStatus switch { WxPayRefundStatus.退款成功 => RefundPlatformStatusEnum.SUCCESS, WxPayRefundStatus.退款关闭 => RefundPlatformStatusEnum.CLOSED, WxPayRefundStatus.退款处理中 => RefundPlatformStatusEnum.PROCESSING, _ => RefundPlatformStatusEnum.ABNORMAL }; } /// <summary> /// 统计所有消费流水 @@ -587,6 +654,5 @@ } #endregion } } LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -1534,6 +1534,38 @@ } } /// <summary> /// 退款成功处理 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<int> LifePayRefundsSuccessHandler(AddLifePayExpensesReceiptsInput input) { var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OrderNo).FirstOrDefaultAsync(); CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在"); CheckExtensions.IfTrueThrowUserFriendlyException(order.LifePayRefundStatus != LifePayRefundStatusEnum.待退款 && order.LifePayRefundStatus != LifePayRefundStatusEnum.退款中, "当前订单状态无法查看退款流水"); CheckExtensions.IfTrueThrowUserFriendlyException(order.RefundOrderNo.IsNullOrEmpty(), "不存在退款流水订单"); await LifePayRefundsHandler(input.OrderNo, LifePayRefundStatusEnum.已退款); // 插入收支流水 await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput() { OrderNo = input.OrderNo, OutRefundNo = input.OutRefundNo, OutOrderNo = input.OutOrderNo, LifePayType = input.LifePayType, ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts }); #region 记录日志 await LifePayOrderHistory("更新订单退款状态", "更新订单退款状态", order.Id, (int)OperateHistoryTypeEnum.LifePayRefund); #endregion return Constant.SUCCESS; } /// <summary> /// ACOOLYO订单通知处理 @@ -2153,7 +2185,7 @@ await _distributedEventBus.PublishAsync(recordEto, false); } private async Task LifePayOrderHistory(string operateContent, string operateName, Guid relationId, int? tableType = (int)OperateHistoryTypeEnum.LifePayRefund) public async Task LifePayOrderHistory(string operateContent, string operateName, Guid relationId, int? tableType = (int)OperateHistoryTypeEnum.LifePayRefund) { var operateHistory = new OperateHistory { LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
@@ -1,4 +1,5 @@ using System.ComponentModel; using static LifePayment.Domain.Shared.LifePaymentConstant; namespace LifePayment.Domain.Shared; @@ -216,3 +217,18 @@ [Description("出金")] Out = 20, } public enum RefundPlatformStatusEnum { [Description("退款成功")] SUCCESS = 10, [Description("退款关闭")] CLOSED = 20, [Description("退款处理中")] PROCESSING = 30, [Description("退款异常")] ABNORMAL = 40, } LifePayment/LifePayment.Domain.Shared/Wallet/WalletConstant.cs
@@ -33,4 +33,5 @@ /// </summary> public const int NotFoundWallet = 10050; } } LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
@@ -411,6 +411,19 @@ </summary> <returns></returns> </member> <member name="M:LifePayment.HttpApi.LifePayController.GetRefundPlatformTradeDetail(System.String)"> <summary> 获取退款平台流水详情 </summary> <returns></returns> </member> <member name="M:LifePayment.HttpApi.LifePayController.LifePayRefundsSuccessHandler(LifePayment.Application.Contracts.AddLifePayExpensesReceiptsInput)"> <summary> 退款成功处理 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:LifePayment.HttpApi.LifePayController.CreateLifePayPhoneOrder(LifePayment.Application.Contracts.CreateLifePayOrderInput{LifePayment.Application.Contracts.LifePhoneData})"> <summary> 创建生活缴费话费订单 LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
@@ -31,6 +31,12 @@ </summary> <returns></returns> </member> <member name="M:LifePayment.Application.Contracts.ILifePayOrderService.GetRefundPlatformTradeDetail(System.String)"> <summary> 获取退款平台流水详情 </summary> <returns></returns> </member> <member name="M:LifePayment.Application.Contracts.ILifePayRateService.GetLifePayRateChannelPage(ZeroD.Util.PageInput)"> <summary> 获取折扣通道配置分页 @@ -118,6 +124,13 @@ </summary> <param name="orderNo"></param> <param name="refundStatus"></param> <returns></returns> </member> <member name="M:LifePayment.Application.Contracts.ILifePayService.LifePayRefundsSuccessHandler(LifePayment.Application.Contracts.AddLifePayExpensesReceiptsInput)"> <summary> 退款成功处理 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:LifePayment.Application.Contracts.ILifePayService.ACOOLYOrderNotifyHandler(System.String,System.String,LifePayment.Domain.Shared.LifePayOrderStatusEnum,LifePayment.Domain.Shared.ACOOLYStatusEnum,System.Decimal,System.String,System.Nullable{System.Decimal},System.Nullable{System.Decimal})"> @@ -1067,6 +1080,36 @@ 终止结算时间 </summary> </member> <member name="P:LifePayment.Application.Contracts.GetRefundPlatformTradeDetailOutput.OrderNo"> <summary> 订单号 </summary> </member> <member name="P:LifePayment.Application.Contracts.GetRefundPlatformTradeDetailOutput.RefundOrderNo"> <summary> 退款订单号 </summary> </member> <member name="P:LifePayment.Application.Contracts.GetRefundPlatformTradeDetailOutput.RefundTime"> <summary> 退款申请时间 </summary> </member> <member name="P:LifePayment.Application.Contracts.GetRefundPlatformTradeDetailOutput.RefundSuccessTime"> <summary> 退款成功时间 </summary> </member> <member name="P:LifePayment.Application.Contracts.GetRefundPlatformTradeDetailOutput.OutOrderNo"> <summary> 渠道流水号 </summary> </member> <member name="P:LifePayment.Application.Contracts.GetRefundPlatformTradeDetailOutput.LifePayType"> <summary> 支付渠道 </summary> </member> <member name="P:LifePayment.Application.Contracts.LifePayIntroInfoInput.LifePayType"> <summary> 生活缴费类型 LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
@@ -684,11 +684,32 @@ { await _lifePayOrderService.GetAllLifePayConsumption(); } /// <summary> /// 获取退款平台流水详情 /// </summary> /// <returns></returns> [HttpGet] public async Task<GetRefundPlatformTradeDetailOutput> GetRefundPlatformTradeDetail(string orderNo) { return await _lifePayOrderService.GetRefundPlatformTradeDetail(orderNo); } #endregion #region 操作 /// <summary> /// 退款成功处理 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<int> LifePayRefundsSuccessHandler(AddLifePayExpensesReceiptsInput input) { return await _lifePayService.LifePayRefundsSuccessHandler(input); } /// <summary> /// 创建生活缴费话费订单 /// </summary> /// <param name="input"></param>