80 lines
3.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.cdzy.payment.task;
import com.cdzy.payment.config.WxPayConfig;
import com.cdzy.payment.model.entity.EbikePayment;
import com.cdzy.payment.model.entity.EbikeRefund;
import com.cdzy.payment.service.EbikePaymentService;
import com.cdzy.payment.service.EbikeRefundService;
import com.cdzy.payment.service.WxPayService;
import com.wechat.pay.java.service.payments.model.Transaction;
import com.wechat.pay.java.service.refund.model.Refund;
import com.wechat.pay.java.service.refund.model.Status;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 用户订单支付任务。检测支付状态,更新订单状态。
*
* @author dingchao
* @date 2025/4/25
* @modified by:
*/
@Slf4j
@Component
public class WsPayTask {
@Resource
private WxPayConfig wxPayConfig;
@Resource
private WxPayService wxPayService;
@Resource
private EbikePaymentService ebikePaymentService;
@Resource
private EbikeRefundService ebikeRefundService;
/**
* 从第0秒开始每隔30秒执行1次查询创建超过5分钟并且未支付的订单
*/
@Scheduled(cron = "0/30 * * * * ?")
public void orderConfirm() throws Exception {
log.info("orderConfirm 执行......");
// 1. 查询未支付的订单
List<EbikePayment> ebikePaymentList = ebikePaymentService.getNoPayOrderByDuration(wxPayConfig.getExpireMinute());
// 2. 遍历订单,查询支付状态
for (EbikePayment ebikePayment : ebikePaymentList) {
log.warn("超时未支付的订单号 ===> {}", ebikePayment.getOrderId());
// 调用微信支付查询接口,查询支付状态
Transaction transaction = wxPayService.queryOrderByOutTradeNo(ebikePayment.getOrderId());
// 3. 更新订单状态
if (transaction != null)
ebikePaymentService.updatePaymentStatus(ebikePayment.getRecordId(), transaction);
}
}
/**
* 从第0秒开始每隔30秒执行1次查询创建超过5分钟并且未成功的退款单
*/
@Scheduled(cron = "0/30 * * * * ?")
public void refundConfirm() throws Exception {
log.info("refundConfirm 执行......");
// 1. 查询未成功的退款单
List<EbikeRefund> ebikeRefundList = ebikeRefundService.getNoSuccessRefundOrderByDuration(wxPayConfig.getExpireMinute());
// 2. 遍历退款单,查询退款状态
for (EbikeRefund ebikeRefund : ebikeRefundList) {
log.warn("超时未退款的退款单号 ===> {}", ebikeRefund.getRefundId());
// 调用微信退款查询接口,查询退款状态
Refund refund = wxPayService.queryRefundByOutNo(ebikeRefund.getRefundId());
if (refund!= null&& Status.SUCCESS.equals(refund.getStatus())){
// 3. 更新退款单状态
//ebikeRefundService.updateRefundStatus(ebikeRefund.getRefundId(), 2);
}
}
}
}