From a5f0843b6b8f1d12ba8d100c81461386b80d7883 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期二, 09 十二月 2025 17:43:54 +0800
Subject: [PATCH] fix: 退款
---
LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs | 129 ++++++++++++++++++++++++++++++++++--------
1 files changed, 103 insertions(+), 26 deletions(-)
diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
index 1bca3f1..002a208 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
@@ -1,7 +1,10 @@
锘縰sing 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
{
@@ -78,8 +79,8 @@
})
.GetPageResult(input.PageModel);
- var totalDeductionAmount = await _lifePayConsumption.SumAsync(x => x.DeductionAmount);
- var totalFrozenAmount = await _lifePayConsumption.SumAsync(x => x.FrozenAmount);
+ var totalDeductionAmount = await _lifePayConsumption.Where(it => it.ACOOLYStatus == ACOOLYStatusEnum.宸插畬鎴� || it.ACOOLYStatus == ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�).SumAsync(x => x.DeductionAmount);
+ var totalFrozenAmount = await _lifePayConsumption.Where(it => it.ACOOLYStatus == ACOOLYStatusEnum.鍏呭�间腑 || it.ACOOLYStatus == ACOOLYStatusEnum.鍏呭�煎け璐�).SumAsync(x => x.FrozenAmount);
LifePayConsumptionStatistics objectData = new LifePayConsumptionStatistics();
objectData.TotalDeductionAmount = totalDeductionAmount;
objectData.TotalFrozenAmount = totalFrozenAmount ?? 0;
@@ -215,6 +216,7 @@
s.ChannlesRakePriceStr = s.ChannlesRakePrice.ToString("F2");
s.FinishTimeStr = s.FinishTime.HasValue ? s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss) : "";
});
+ CheckExtensions.IfTrueThrowUserFriendlyException(result.IsNullOrEmpty(), "鏆傛棤鏁版嵁瀵煎嚭");
return result;
}
@@ -296,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);
@@ -322,7 +324,7 @@
var query = await _wxPayApi.WxPayDomesticRefundsQuery(input.OutRefundNo);
if (query.Status == WxPayRefundStatus.閫�娆炬垚鍔�)
{
- data.OrderNo = input.OutRefundNo;
+ data.OrderNo = input.OrderNo;
data.ExtraProperties = JsonConvert.SerializeObject(query);
data.FinishTime = Convert.ToDateTime(query.SuccessTime);
data.Amount = Convert.ToDecimal(query.Amount.Total) / 100;
@@ -335,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>
/// 缁熻鎵�鏈夋秷璐规祦姘�
@@ -347,7 +415,7 @@
var orderList = await _lifePayOrderRepository.Where(x => x.PayStatus == LifePayStatusEnum.宸叉敮浠�).ToListAsync();
foreach (var item in orderList)
{
-
+
if (item.ACOOLYStatus != null)
{
switch (item.ACOOLYStatus)
@@ -474,7 +542,7 @@
#region 鏂规硶
public async Task CreatLifePayConsumption(ACOOLYStatusEnum status, string orderNo, string aCOOLYOrderNo,
- decimal platformDeductionAmount, string channelId, DateTime orderCreationTime, DateTime? orderFinishTime)
+ decimal platformDeductionAmount, string channelId, DateTime orderCreationTime, DateTime? orderFinishTime, decimal? channelRate = 0, decimal? parValue = 0, decimal? actualParValue = 0)
{
LifePayConsumption lifePayConsumption = new LifePayConsumption()
{
@@ -525,22 +593,32 @@
lifePayConsumption.DeductionAmount = 0;
lifePayConsumption.FrozenAmount = 0;
break;
- //case ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�:
- // lifePayConsumption.FinishTime = orderCreationTime;
- // lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
- // lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Thaw;
- // lifePayConsumption.Flow = ConsumptionFlowEnum.Unchanged;
- // lifePayConsumption.DeductionAmount = 0;
- // lifePayConsumption.FrozenAmount = lifePayConsumption.Amount;
+ case ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�:
+ lifePayConsumption.FinishTime = orderCreationTime;
+ lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�;
+ lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Thaw;
+ lifePayConsumption.Flow = ConsumptionFlowEnum.Out;
+ lifePayConsumption.DeductionAmount = lifePayConsumption.Amount;
+ lifePayConsumption.FrozenAmount = 0;
+ if ((parValue ?? 0) != 0 && (parValue ?? 0) != actualParValue)
+ {
+ LifePayConsumption lifePayConsumptionOther = new LifePayConsumption()
+ {
+ OrderNo = orderNo,
+ AcoolyOrderNo = aCOOLYOrderNo,
+ Amount = ((parValue ?? 0) - (actualParValue ?? 0)) * (channelRate ?? 0),
+ ChannelId = channelId,
+ FinishTime = orderCreationTime,
+ ACOOLYStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�,
+ FrozenStatus = ConsumptionFrozenStatusEnum.Thaw,
+ Flow = ConsumptionFlowEnum.Unchanged,
+ DeductionAmount = 0,
+ FrozenAmount = 0
+ };
+ await _lifePayConsumption.InsertAsync(lifePayConsumptionOther);
+ }
- // repeat = await _lifePayConsumption.Where(x => x.OrderNo == lifePayConsumption.OrderNo
- // && x.ACOOLYStatus == lifePayConsumption.ACOOLYStatus && x.Flow == lifePayConsumption.Flow).FirstOrDefaultAsync();
- // if (repeat == null)
- // {
- // await _lifePayConsumption.InsertAsync(lifePayConsumption);
- // }
-
- // break;
+ break;
default: break;
}
@@ -576,6 +654,5 @@
}
#endregion
-
}
}
--
Gitblit v1.9.1