zhangli-test #8

Merged
zhangli merged 2 commits from zhangli-test into main 2025-09-17 23:20:32 +08:00
3 changed files with 114 additions and 38 deletions

View File

@ -295,27 +295,33 @@ public class WechatPayService {
*/
private void recordRefundInfo(RefundRequest request, CompanyWechatConfig companyConfig, Map<String, String> result,BigDecimal totalFee) {
try {
RefundRecord refundRecord = new RefundRecord();
refundRecord.setCompanyId(request.getCompanyId());
refundRecord.setOutTradeNo(request.getOutTradeNo());
refundRecord.setOutRefundNo(request.getOutRefundNo());
refundRecord.setTotalFee(totalFee);
refundRecord.setRefundFee(new BigDecimal(request.getRefundFee()).divide(new BigDecimal(100))); // 转换为元
refundRecord.setRefundDesc(request.getRefundDesc());
refundRecord.setCreateTime(new Date());
refundRecord.setUpdateTime(new Date());
RefundRecord refundRecord = refundRecordMapper.getRefundRecordByOutRefundNo(request.getOutRefundNo());
if (refundRecord == null) {
refundRecord = new RefundRecord();
refundRecord.setCompanyId(request.getCompanyId());
refundRecord.setOutTradeNo(request.getOutTradeNo());
refundRecord.setOutRefundNo(request.getOutRefundNo());
refundRecord.setTotalFee(totalFee);
refundRecord.setRefundFee(new BigDecimal(request.getRefundFee()).divide(new BigDecimal(100))); // 转换为元
refundRecord.setRefundDesc(request.getRefundDesc());
refundRecord.setCreateTime(new Date());
refundRecord.setUpdateTime(new Date());
if ("SUCCESS".equals(result.get("result_code"))) {
refundRecord.setRefundStatus("PROCESSING"); // 退款处理中
refundRecord.setRefundStatusDesc("退款处理中");
refundRecord.setRefundId(result.get("refund_id"));
} else {
refundRecord.setRefundStatus("FAIL"); // 退款失败
refundRecord.setRefundStatusDesc(result.get("err_code_des"));
if ("SUCCESS".equals(result.get("result_code"))) {
refundRecord.setRefundStatus("PROCESSING"); // 退款处理中
refundRecord.setRefundStatusDesc("退款处理中");
refundRecord.setRefundId(result.get("refund_id"));
} else {
refundRecord.setRefundStatus("FAIL"); // 退款失败
refundRecord.setRefundStatusDesc(result.get("err_code_des"));
}
refundRecordMapper.insertRefundRecord(refundRecord);
logger.info("退款记录已保存,退款单号: {}", request.getOutRefundNo());
} else{
logger.info("退款记录已存在,退款单号: {}", request.getOutRefundNo());
}
refundRecordMapper.insertRefundRecord(refundRecord);
logger.info("退款记录已保存,退款单号: {}", request.getOutRefundNo());
} catch (Exception e) {
logger.error("保存退款记录异常,退款单号: {}", request.getOutRefundNo(), e);
}

View File

@ -15,6 +15,7 @@ import com.sczx.pay.mapper.PaymentRecordMapper;
import com.sczx.pay.mapper.RefundRecordMapper;
import com.sczx.pay.service.AlipayService;
import com.sczx.pay.utils.AlipaySdkUtil;
import com.sczx.pay.utils.ThreadPoolUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -277,6 +278,16 @@ public class AlipayServiceImpl implements AlipayService {
response.setSuccess(true);
response.setCode("SUCCESS");
response.setMessage("退款成功");
ThreadPoolUtils.getThreadPool().execute(() -> {
refundRecordMapper.updateRefundStatus(
refundQueryRequest.getOutRequestNo(),
refundQueryResponse.getRefundStatus(),
refundQueryResponse.getRefundReason(),
refundQueryRequest.getOutRequestNo(),
new Date(),// 退款成功时间
new Date() // 更新时间
);
});
} else {
response.setSuccess(false);
response.setCode("FAIL");
@ -395,7 +406,7 @@ public class AlipayServiceImpl implements AlipayService {
refundStatus,
statusDesc,
outRequestNo,
"SUCCESS".equals(refundStatus) ? new Date() : null, // 退款成功时间
"REFUND_SUCCESS".equals(refundStatus) ? new Date() : null, // 退款成功时间
new Date() // 更新时间
);
@ -442,26 +453,28 @@ public class AlipayServiceImpl implements AlipayService {
*/
private void recordRefundInfo(AlipayRefundRequest request) {
try {
PaymentRecord paymentRecord = paymentRecordMapper.getPaymentRecordByOutTradeNo(request.getOutTradeNo());
RefundRecord refundRecord = refundRecordMapper.getRefundRecordByOutRefundNo(request.getOutRequestNo());
if(refundRecord == null){
PaymentRecord paymentRecord = paymentRecordMapper.getPaymentRecordByOutTradeNo(request.getOutTradeNo());
refundRecord = new RefundRecord();
refundRecord.setCompanyId(request.getCompanyId());
refundRecord.setOutTradeNo(request.getOutTradeNo());
refundRecord.setOutRefundNo(request.getOutRequestNo());
refundRecord.setTotalFee(paymentRecord.getTotalFee());
refundRecord.setRefundFee(new BigDecimal(request.getRefundAmount())); // 转换为元
refundRecord.setRefundDesc(request.getRefundReason());
refundRecord.setCreateTime(new Date());
refundRecord.setUpdateTime(new Date());
RefundRecord refundRecord = new RefundRecord();
refundRecord.setCompanyId(request.getCompanyId());
refundRecord.setOutTradeNo(request.getOutTradeNo());
refundRecord.setOutRefundNo(request.getOutRequestNo());
refundRecord.setTotalFee(paymentRecord.getTotalFee());
refundRecord.setRefundFee(new BigDecimal(request.getRefundAmount())); // 转换为元
refundRecord.setRefundDesc(request.getRefundReason());
refundRecord.setCreateTime(new Date());
refundRecord.setUpdateTime(new Date());
refundRecord.setRefundStatus("PROCESSING"); // 退款处理中
refundRecord.setRefundStatusDesc("退款处理中");
refundRecord.setRefundId(request.getOutRequestNo());
refundRecord.setPayChannel(PaymentRecord.PayChannel.ALIPAY.name());
refundRecordMapper.insertRefundRecord(refundRecord);
log.info("退款记录已保存,退款单号: {}", request.getOutRequestNo());
refundRecord.setRefundStatus("PROCESSING"); // 退款处理中
refundRecord.setRefundStatusDesc("退款处理中");
refundRecord.setRefundId(request.getOutRequestNo());
refundRecord.setPayChannel(PaymentRecord.PayChannel.ALIPAY.name());
refundRecordMapper.insertRefundRecord(refundRecord);
log.info("退款记录已保存,退款单号: {}", request.getOutRequestNo());
}else {
log.info("退款记录已存在,退款单号: {}", request.getOutRequestNo());
}
} catch (Exception e) {
log.error("保存退款记录异常,退款单号: {}", request.getOutRequestNo(), e);
}

View File

@ -0,0 +1,57 @@
package com.sczx.pay.utils;
import org.springframework.stereotype.Service;
import java.util.concurrent.*;
/**
* 线程池工具类,用于执行异步任务
* Created by zengji on 2019/5/13.
*
*/
@Service
public class ThreadPoolUtils {
public static ThreadPoolExecutor threadPool;
//核心线程大小
private static int corePoolSize=120;
//最大线程个数
private static int maximumPoolSize=180;
//空闲线程存活时间
private static long keepAliveTime=300;
//队列容量
private static int capacity=200;
/**
* 无返回值
*/
public static void execute(Runnable runnable){
getThreadPool().execute(runnable);
}
/**
* 有返回值
*/
public static <T> Future<T> submit(Callable<T> callable){
return getThreadPool().submit(callable);
}
/**
* dcs获取线程池
* @return 线程池对象
*/
public static ThreadPoolExecutor getThreadPool() {
if (threadPool != null) {
return threadPool;
} else {
synchronized (ThreadPoolUtils.class) {
if (threadPool == null) {
threadPool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(capacity), new ThreadPoolExecutor.CallerRunsPolicy());
}
return threadPool;
}
}
}
}