diff --git a/README.md b/README.md index 9822fdd8b..cbba445af 100644 --- a/README.md +++ b/README.md @@ -213,3 +213,188 @@ QQ扫码加入QQ交流群 ## 🍷License Apache License Version 2.0 + +# 🚀Dromara成员项目 + + + +
+ + TLog + + + liteFlow + + + hutool + + + sa-token + + + hmily + + + Raincat + + + myth + + + cubic + + + maxkey + + + forest + + + jpom + + + sureness + + + easy-es + + + northstar + + + hertzbeat + + + fast-request + + + mendmix + + + koalas-rpc + + + gobrs-async + + + dynamic-tp + + + x-easypdf + + + image-combiner + + + dante-cloud + + + go-view + + + lamp-cloud + + + redis-front + + + electron-egg + + + open-capacity-platform + + + Easy-Trans + + + neutrino-proxy + + + chatgpt + + + zyplayer-doc + + + payment-spring-boot + + + j2eefast + + + data-compare + + + open-giteye-api + + + RuoYi-Vue-Plus + + + RuoYi-Cloud-Plus + + + stream-query + + + sms4j + + + cloudeon + + + hodor + + + test-hub + + + disjob + + + binlog4j + + + yft-design + + + x-file-storage + + + WeMQAQ + + + Mayfly-Go + + + Akali + + + dbswitch + + + easyAi + + + tianai-captcha + + + dromara + +
+ diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/dao/PayOrderManager.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/dao/PayOrderManager.java index 0a614c5f9..4922d97df 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/dao/PayOrderManager.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/dao/PayOrderManager.java @@ -37,4 +37,12 @@ public class PayOrderManager extends BaseManager { QueryWrapper generator = QueryGenerator.generator(query); return page(mpPage, generator); } + + /** + * 强制更新 (忽略版本号) + */ + public void updateForceById(PayOrder payOrder) { + payOrder.setVersion(null); + this.updateById(payOrder); + } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/service/PayOrderService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/service/PayOrderService.java index f96de686d..7c0c4470b 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/service/PayOrderService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/service/PayOrderService.java @@ -56,4 +56,17 @@ public class PayOrderService { } payOrderManager.updateById(payOrder); } + + /** + * 使用强制更新 + */ + public void updateForceById(PayOrder payOrder){ + // 如果是异步支付且支付订单完成, 需要删除订单超时任务记录 + if (payOrder.isAsyncPay() && ORDER_FINISH.contains(payOrder.getStatus())){ + expiredTimeService.cancelExpiredTime(payOrder.getId()); + } + payOrder.setVersion(null); + payOrderManager.updateForceById(payOrder); + } + } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/refund/dao/RefundOrderManager.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/refund/dao/RefundOrderManager.java index 740c5b0cf..3de8c6975 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/refund/dao/RefundOrderManager.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/refund/dao/RefundOrderManager.java @@ -4,6 +4,7 @@ import cn.bootx.platform.common.core.rest.param.PageParam; import cn.bootx.platform.common.mybatisplus.impl.BaseManager; import cn.bootx.platform.common.mybatisplus.util.MpUtil; import cn.bootx.platform.common.query.generator.QueryGenerator; +import cn.bootx.platform.daxpay.code.RefundStatusEnum; import cn.bootx.platform.daxpay.service.core.order.refund.entity.RefundOrder; import cn.bootx.platform.daxpay.service.param.order.RefundOrderQuery; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -12,6 +13,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; +import java.time.LocalDateTime; +import java.util.List; import java.util.Optional; /** @@ -46,4 +49,15 @@ public class RefundOrderManager extends BaseManager findAllByProgress() { + LocalDateTime now = LocalDateTime.now(); + return lambdaQuery() + .le(RefundOrder::getRefundTime,now) + .eq(RefundOrder::getStatus, RefundStatusEnum.PROGRESS) + .list(); + } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/callback/service/PayCallbackService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/callback/service/PayCallbackService.java index 83581af78..a1c6bfe21 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/callback/service/PayCallbackService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/callback/service/PayCallbackService.java @@ -42,7 +42,7 @@ public class PayCallbackService { public void payCallback() { CallbackLocal callbackInfo = PaymentContextLocal.get().getCallbackInfo(); // 加锁 - LockInfo lock = lockTemplate.lock("callback:payment:" + callbackInfo.getOrderId()); + LockInfo lock = lockTemplate.lock("callback:payment:" + callbackInfo.getOrderId(),10000, 200); if (Objects.isNull(lock)){ callbackInfo.setCallbackStatus(PayCallbackStatusEnum.IGNORE).setMsg("回调正在处理中,忽略本次回调请求"); log.warn("订单号: {} 回调正在处理中,忽略本次回调请求", callbackInfo.getOrderId()); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/callback/service/RefundCallbackService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/callback/service/RefundCallbackService.java index cca9a6068..7db3736a6 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/callback/service/RefundCallbackService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/callback/service/RefundCallbackService.java @@ -39,7 +39,7 @@ public class RefundCallbackService { CallbackLocal callbackInfo = PaymentContextLocal.get().getCallbackInfo(); // 加锁 - LockInfo lock = lockTemplate.lock("callback:refund:" + callbackInfo.getOrderId()); + LockInfo lock = lockTemplate.lock("callback:refund:" + callbackInfo.getOrderId(),10000, 200); if (Objects.isNull(lock)){ callbackInfo.setCallbackStatus(PayCallbackStatusEnum.IGNORE).setMsg("回调正在处理中,忽略本次回调请求"); log.warn("订单号: {} 回调正在处理中,忽略本次回调请求", callbackInfo.getOrderId()); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/close/service/PayCloseService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/close/service/PayCloseService.java index 87b26a0a0..b3b8870ea 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/close/service/PayCloseService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/close/service/PayCloseService.java @@ -63,7 +63,7 @@ public class PayCloseService { payOrder = payOrderQueryService.findByBusinessNo(param.getBusinessNo()) .orElseThrow(() -> new PayFailureException("未查询到支付订单")); } - LockInfo lock = lockTemplate.lock("payment:close:" + payOrder.getId()); + LockInfo lock = lockTemplate.lock("payment:close:" + payOrder.getId(),10000, 50); if (Objects.isNull(lock)){ throw new RepetitiveOperationException("支付订单已在关闭中,请勿重复发起"); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java index f06f408de..5228723a3 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java @@ -189,7 +189,7 @@ public class ClientNoticeService { private void run(Long taskId){ LocalDateTime now = LocalDateTime.now(); // 开启分布式锁 - LockInfo lock = lockTemplate.lock(KEY + ":" + taskId,2000, 50); + LockInfo lock = lockTemplate.lock(KEY + ":" + taskId,10000, 200); if (Objects.isNull(lock)){ throw new RepetitiveOperationException("支付同步处理中,请勿重复操作"); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/task/PayWaitOrderSyncTask.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/task/PayWaitOrderSyncTask.java deleted file mode 100644 index 2cad28b01..000000000 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/task/PayWaitOrderSyncTask.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.bootx.platform.daxpay.service.core.payment.pay.task; - -import cn.bootx.platform.common.core.exception.RepetitiveOperationException; -import cn.bootx.platform.daxpay.param.pay.PaySyncParam; -import cn.bootx.platform.daxpay.service.core.payment.pay.dao.PayExpiredTimeRepository; -import cn.bootx.platform.daxpay.service.core.payment.sync.service.PaySyncService; -import com.baomidou.lock.LockInfo; -import com.baomidou.lock.LockTemplate; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.Objects; -import java.util.Set; - -/** - * 待支付订单的状态同步, 先不进行启用 - * @author xxm - * @since 2024/1/5 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PayWaitOrderSyncTask { - private final PayExpiredTimeRepository repository; - - private final PaySyncService paySyncService; - - private final LockTemplate lockTemplate; - - public void task(){ - log.debug("开始同步支付订单状态"); - // 从超时订单列表中获取到未超时的订单号 - Set keys = repository.getNormalKeysBy30Day(); - for (String key : keys) { - LockInfo lock = lockTemplate.lock("payment:sync:" + key,10000,200); - if (Objects.isNull(lock)){ - throw new RepetitiveOperationException("支付同步处理中,请勿重复操作"); - } - try { - Long paymentId = Long.parseLong(key); - PaySyncParam paySyncParam = new PaySyncParam(); - paySyncParam.setPaymentId(paymentId); - // 执行网关同步, 网关同步时会对支付的进行状态的处理 - paySyncService.sync(paySyncParam); - } catch (Exception e) { - log.error("同步支付订单异常", e); - } finally { - lockTemplate.releaseLock(lock); - } - } - - } -} diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/PayRepairService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/PayRepairService.java index d3d3d841b..cd74d9228 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/PayRepairService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/PayRepairService.java @@ -17,16 +17,15 @@ import cn.bootx.platform.daxpay.service.core.record.repair.entity.PayRepairRecor import cn.bootx.platform.daxpay.service.core.record.repair.service.PayRepairRecordService; import cn.bootx.platform.daxpay.service.func.AbsPayRepairStrategy; import cn.hutool.core.util.IdUtil; +import com.baomidou.lock.LockInfo; +import com.baomidou.lock.LockTemplate; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -48,11 +47,20 @@ public class PayRepairService { private final PayRepairRecordService recordService; + private final LockTemplate lockTemplate; + /** * 修复支付单 */ @Transactional(rollbackFor = Exception.class) public PayRepairResult repair(PayOrder order, PayRepairWayEnum repairType){ + // 添加分布式锁 + LockInfo lock = lockTemplate.lock("repair:pay:" + order.getId(), 10000, 200); + if (Objects.isNull(lock)){ + log.warn("当前支付定单正在修复中: {}", order.getId()); + return new PayRepairResult(); + } + // 1. 获取支付单管理的通道支付订单 Map channelOrderMap = channelOrderManager.findAllByPaymentId(order.getId()) .stream() diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/RefundRepairService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/RefundRepairService.java index b623be0e9..7e5fce7e7 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/RefundRepairService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/RefundRepairService.java @@ -23,6 +23,8 @@ import cn.bootx.platform.daxpay.service.core.record.repair.entity.PayRepairRecor import cn.bootx.platform.daxpay.service.core.record.repair.service.PayRepairRecordService; import cn.bootx.platform.daxpay.service.func.AbsRefundRepairStrategy; import cn.hutool.core.util.IdUtil; +import com.baomidou.lock.LockInfo; +import com.baomidou.lock.LockTemplate; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -56,54 +58,67 @@ public class RefundRepairService { private final PayRepairRecordService recordService; + private final LockTemplate lockTemplate; + /** * 修复退款单 */ @Transactional(rollbackFor = Exception.class) public RefundRepairResult repair(RefundOrder refundOrder, RefundRepairWayEnum repairType){ - - // 获取关联支付单 - PayOrder payOrder = payOrderQueryService.findById(refundOrder.getPaymentId()) - .orElseThrow(() -> new RuntimeException("支付单不存在")); - // 关联支付通道支付单 - Map payChannelOrderMap = payChannelOrderManager.findAllByPaymentId(refundOrder.getPaymentId()) - .stream() - .collect(Collectors.toMap(PayChannelOrder::getChannel, Function.identity(), CollectorsFunction::retainLatest)); - // 异步通道退款单 - Map refundChannelOrderMap = refundChannelOrderManager.findAllByRefundId(refundOrder.getId()) - .stream() - .collect(Collectors.toMap(RefundChannelOrder::getChannel, Function.identity(), CollectorsFunction::retainLatest)); - - // 2 初始化修复参数 - List channels = new ArrayList<>(payChannelOrderMap.keySet()); - List repairStrategies = RefundRepairStrategyFactory.createAsyncLast(channels); - for (AbsRefundRepairStrategy repairStrategy : repairStrategies) { - PayChannelOrder payChannelOrder = payChannelOrderMap.get(repairStrategy.getChannel().getCode()); - RefundChannelOrder refundChannelOrder = refundChannelOrderMap.get(repairStrategy.getChannel().getCode()); - repairStrategy.initRepairParam(refundOrder, refundChannelOrder, payOrder, payChannelOrder); + // 添加分布式锁 + LockInfo lock = lockTemplate.lock("repair:refund:" + refundOrder.getId(), 10000, 200); + if (Objects.isNull(lock)){ + log.warn("当前退款单正在修复中: {}", refundOrder.getId()); + return new RefundRepairResult(); } + try { + // 获取关联支付单 + PayOrder payOrder = payOrderQueryService.findById(refundOrder.getPaymentId()) + .orElseThrow(() -> new RuntimeException("支付单不存在")); + // 关联支付通道支付单 + Map payChannelOrderMap = payChannelOrderManager.findAllByPaymentId(refundOrder.getPaymentId()) + .stream() + .collect(Collectors.toMap(PayChannelOrder::getChannel, Function.identity(), CollectorsFunction::retainLatest)); + // 异步通道退款单 + Map refundChannelOrderMap = refundChannelOrderManager.findAllByRefundId(refundOrder.getId()) + .stream() + .collect(Collectors.toMap(RefundChannelOrder::getChannel, Function.identity(), CollectorsFunction::retainLatest)); - // 根据不同的类型执行对应的修复逻辑 - RefundRepairResult repairResult = new RefundRepairResult(); - if (Objects.requireNonNull(repairType) == RefundRepairWayEnum.REFUND_SUCCESS) { - repairResult = this.success(refundOrder,payOrder,repairStrategies); - } else if (repairType == RefundRepairWayEnum.REFUND_FAIL) { - repairResult = this.close(refundOrder,payOrder,repairStrategies); - } else { - log.error("走到了理论上讲不会走到的分支"); + // 2 初始化修复参数 + List channels = new ArrayList<>(payChannelOrderMap.keySet()); + List repairStrategies = RefundRepairStrategyFactory.createAsyncLast(channels); + for (AbsRefundRepairStrategy repairStrategy : repairStrategies) { + PayChannelOrder payChannelOrder = payChannelOrderMap.get(repairStrategy.getChannel() + .getCode()); + RefundChannelOrder refundChannelOrder = refundChannelOrderMap.get(repairStrategy.getChannel() + .getCode()); + repairStrategy.initRepairParam(refundOrder, refundChannelOrder, payOrder, payChannelOrder); + } + + // 根据不同的类型执行对应的修复逻辑 + RefundRepairResult repairResult = new RefundRepairResult(); + if (Objects.requireNonNull(repairType) == RefundRepairWayEnum.REFUND_SUCCESS) { + repairResult = this.success(refundOrder, payOrder, repairStrategies); + } else if (repairType == RefundRepairWayEnum.REFUND_FAIL) { + repairResult = this.close(refundOrder, payOrder, repairStrategies); + } else { + log.error("走到了理论上讲不会走到的分支"); + } + + // 设置修复ID并保存修复记录 + repairResult.setRepairNo(IdUtil.getSnowflakeNextIdStr()); + // 支付修复记录 + PayRepairRecord payRepairRecord = this.payRepairRecord(payOrder, repairType, repairResult); + // 退款修复记录 + PayRepairRecord refundRepairRecord = this.refundRepairRecord(refundOrder, repairType, repairResult); + + // 发送通知 + clientNoticeService.registerRefundNotice(refundOrder, null, new ArrayList<>(refundChannelOrderMap.values())); + recordService.saveAllRecord(Arrays.asList(payRepairRecord, refundRepairRecord)); + return repairResult; + } finally { + lockTemplate.releaseLock(lock); } - - // 设置修复ID并保存修复记录 - repairResult.setRepairNo(IdUtil.getSnowflakeNextIdStr()); - // 支付修复记录 - PayRepairRecord payRepairRecord = this.payRepairRecord(payOrder, repairType, repairResult); - // 退款修复记录 - PayRepairRecord refundRepairRecord = this.refundRepairRecord(refundOrder, repairType, repairResult); - - // 发送通知 - clientNoticeService.registerRefundNotice(refundOrder, null, new ArrayList<>(refundChannelOrderMap.values())); - recordService.saveAllRecord(Arrays.asList(payRepairRecord, refundRepairRecord)); - return repairResult; } /** diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/sync/service/PaySyncService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/sync/service/PaySyncService.java index de5cf3cbb..5faa1faf9 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/sync/service/PaySyncService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/sync/service/PaySyncService.java @@ -88,7 +88,7 @@ public class PaySyncService { @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public SyncResult syncPayOrder(PayOrder payOrder) { // 加锁 - LockInfo lock = lockTemplate.lock("sync:payment" + payOrder.getId(),10000,200); + LockInfo lock = lockTemplate.lock("sync:pay" + payOrder.getId(),10000,200); if (Objects.isNull(lock)){ throw new RepetitiveOperationException("支付同步处理中,请勿重复操作"); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/task/RefundSyncTask.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/task/RefundSyncTask.java new file mode 100644 index 000000000..d4050ccb9 --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/task/RefundSyncTask.java @@ -0,0 +1,27 @@ +package cn.bootx.platform.daxpay.service.task; + +import cn.bootx.platform.daxpay.service.task.service.RefundSyncTaskService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.quartz.*; +import org.springframework.stereotype.Component; + +/** + * 退款定时同步任务 一分钟一次, 查询退款中的订单进行同步 + * @author xxm + * @since 2024/3/12 + */ +@Slf4j +@Component +@DisallowConcurrentExecution +@PersistJobDataAfterExecution +@RequiredArgsConstructor +public class RefundSyncTask implements Job { + + private final RefundSyncTaskService refundSyncTaskService; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + refundSyncTaskService.syncTask(); + } +} diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/task/service/RefundSyncTaskService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/task/service/RefundSyncTaskService.java new file mode 100644 index 000000000..7054a2bbe --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/task/service/RefundSyncTaskService.java @@ -0,0 +1,41 @@ +package cn.bootx.platform.daxpay.service.task.service; + +import cn.bootx.platform.daxpay.service.core.order.refund.dao.RefundOrderManager; +import cn.bootx.platform.daxpay.service.core.order.refund.entity.RefundOrder; +import cn.bootx.platform.daxpay.service.core.payment.sync.service.RefundSyncService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 定时 + * @author xxm + * @since 2024/3/12 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class RefundSyncTaskService { + + private final RefundSyncService refundSyncService; + + private final RefundOrderManager refundOrderManager; + + /** + * 同步任务 + */ + public void syncTask(){ + // 查询退款中的退款订单 + List list = refundOrderManager.findAllByProgress(); + for (RefundOrder refundOrder : list) { + try { + // 调用同步方法 + refundSyncService.syncRefundOrder(refundOrder); + } catch (Exception e) { + log.warn("退款执行同步失败, ID: {}",refundOrder.getId()); + } + } + } +}