QueryRefundOrderJob.java 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package com.zsElectric.boot.business.quartz;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.zsElectric.boot.business.mapper.UserRefundsOrderInfoMapper;
  5. import com.zsElectric.boot.business.model.entity.Coupon;
  6. import com.zsElectric.boot.business.model.entity.UserRefundsOrderInfo;
  7. import com.zsElectric.boot.business.service.CouponService;
  8. import com.zsElectric.boot.business.service.UserRefundsOrderInfoService;
  9. import com.zsElectric.boot.business.service.WFTOrderService;
  10. import com.zsElectric.boot.business.service.impl.UserRefundsOrderInfoServiceImpl;
  11. import com.zsElectric.boot.common.util.SpringUtils;
  12. import lombok.RequiredArgsConstructor;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.scheduling.annotation.Scheduled;
  15. import org.springframework.stereotype.Component;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import java.time.LocalDateTime;
  18. import java.time.format.DateTimeFormatter;
  19. import java.util.List;
  20. import java.util.Map;
  21. /**
  22. * 退款订单定时任务
  23. * 不为SUCCESS的退款订单任务查询结果
  24. *
  25. * @author zsElectric
  26. * @since 2026-01-09
  27. */
  28. @Slf4j
  29. @Component
  30. @RequiredArgsConstructor
  31. public class QueryRefundOrderJob {
  32. private final UserRefundsOrderInfoService userRefundsOrderInfoService;
  33. private final WFTOrderService wftOrderService;
  34. /**
  35. * 每天凌晨2点执行一次
  36. * 不为SUCCESS的退款订单任务查询结果
  37. */
  38. @Scheduled(cron = "0 0 01 * * ?")
  39. @Transactional(rollbackFor = Exception.class)
  40. public void processExpiredCoupons() {
  41. log.info("开始执行不为SUCCESS的退款订单任务");
  42. try {
  43. // 查询一周内不为SUCCESS的退款订单任务
  44. List<UserRefundsOrderInfo> refundsOrderInfoList =
  45. userRefundsOrderInfoService.list(Wrappers.lambdaQuery(UserRefundsOrderInfo.class).ne(UserRefundsOrderInfo::getStatus, "SUCCESS"));
  46. log.info("查询到{}条不为SUCCESS的退款订单任务", refundsOrderInfoList.size());
  47. for (UserRefundsOrderInfo userRefundsOrderInfo : refundsOrderInfoList) {
  48. if(ObjectUtil.isNotEmpty(userRefundsOrderInfo.getRefundId())){
  49. // 获取微信退款结果
  50. Map<String, Object> map = wftOrderService.queryRefund(null, null, null, userRefundsOrderInfo.getRefundId());
  51. // 获取微信退款结果状态
  52. List<Map<String, Object>> refundList = (List<Map<String, Object>>) map.get("refund_list");
  53. String refundStatus = refundList.get(0).get("refund_status").toString();
  54. if(ObjectUtil.isEmpty(userRefundsOrderInfo.getStatus())){
  55. userRefundsOrderInfo.setStatus(refundStatus);
  56. }
  57. if(ObjectUtil.isEmpty(userRefundsOrderInfo.getSuccessTime())){
  58. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
  59. LocalDateTime dateTime = LocalDateTime.parse(refundList.get(0).get("refund_time").toString(), formatter);
  60. userRefundsOrderInfo.setSuccessTime(dateTime);
  61. }
  62. userRefundsOrderInfoService.updateById(userRefundsOrderInfo);
  63. log.info("退款金额:{},退款状态:{}", refundList.get(0).get("refund_fee").toString(), refundStatus);
  64. }
  65. }
  66. } catch (Exception e) {
  67. log.error("执行查看不为SUCCESS的退款订单任务失败", e);
  68. }
  69. }
  70. }