Przeglądaj źródła

支付回调补偿机制

xdd 2 miesięcy temu
rodzic
commit
be811d5744

+ 20 - 0
fs-admin/src/main/java/com/fs/task/PaymentTask.java

@@ -0,0 +1,20 @@
+package com.fs.task;
+
+import com.fs.store.service.IFsStorePaymentService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service("paymentTask")
+public class PaymentTask {
+    @Autowired
+    private IFsStorePaymentService fsStorePaymentService;
+
+    /**
+     * 补偿机制,定时反查台州银行
+     */
+    public void paymentSync() {
+        fsStorePaymentService.paymentSync();
+    }
+}

+ 1 - 1
fs-service-system/src/main/java/com/fs/store/domain/FsStorePayment.java

@@ -57,7 +57,7 @@ public class FsStorePayment extends BaseEntity
     private String businessOrderId;
 
     /** 状态 0未支付 1已支付 -1 已退款 */
-    @Excel(name = "状态 0未支付 1已支付 -1 已退款")
+    @Excel(name = "状态 0未支付 1已支付 -1 已退款 -2 交易关闭或者失败")
     private Integer status;
 
     private String remark;

+ 6 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsStorePaymentMapper.java

@@ -366,4 +366,10 @@ public interface FsStorePaymentMapper
 
     @Select("select * from fs_store_payment where trade_no=#{tradeNo}")
     FsStorePayment selectFsStorePaymentByTradeNo(String tradeNo);
+
+    /**
+     * 一个小时状态还没有变化
+     */
+    @Select("select * from fs_store_payment where pay_mode='tzbk' and status=0 and trade_no is not null and remark is not null AND create_time < DATE_SUB(NOW(), INTERVAL 1 HOUR);")
+    List<FsStorePayment> queryPendingDelayState();
 }

+ 5 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsStorePaymentService.java

@@ -97,4 +97,9 @@ public interface IFsStorePaymentService
     List<FsStorePayment> selectFsStorePaymentByOrder(Long orderId);
 
     FsStorePayment selectFsStorePaymentByTradeNo(String tradeNo);
+
+    /**
+     * 补偿机制
+     */
+    void paymentSync();
 }

+ 49 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsStorePaymentServiceImpl.java

@@ -27,6 +27,7 @@ import com.fs.huifuPay.domain.HuifuCreateOrderResult;
 import com.fs.huifuPay.dto.*;
 import com.fs.huifuPay.service.HuiFuService;
 import com.fs.store.constants.StoreConstants;
+import com.fs.store.service.IFsStoreOrderService;
 import com.fs.tzBank.TzBankService;
 import com.fs.pay.pay.domain.CreateWxOrderResult;
 import com.fs.pay.pay.dto.WxJspayDTO;
@@ -37,6 +38,7 @@ import com.fs.store.param.FsStoreStatisticsParam;
 import com.fs.store.service.IFsCouponScheduleService;
 import com.fs.store.vo.FsStorePaymentStatisticsVO;
 import com.fs.system.service.ISysConfigService;
+import com.fs.tzBank.utils.TzConfigUtils;
 import com.fs.wx.miniapp.config.WxMaProperties;
 import com.fs.wx.pay.config.WxPayProperties;
 import com.fs.store.domain.FsUser;
@@ -94,6 +96,10 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService
     IFsCouponScheduleService fsCouponScheduleService;
     @Autowired
     TzBankService tzBankService;
+
+    @Autowired
+    private IFsStoreOrderService orderService;
+
     /**
      * 查询支付明细
      *
@@ -446,4 +452,47 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService
     public FsStorePayment selectFsStorePaymentByTradeNo(String tradeNo) {
         return fsStorePaymentMapper.selectFsStorePaymentByTradeNo(tradeNo);
     }
+
+    @Override
+    public void paymentSync() {
+        List<FsStorePayment> fsStorePayments = fsStorePaymentMapper.queryPendingDelayState();
+        for (FsStorePayment fsStorePayment : fsStorePayments) {
+            RequestDTO<QueryOrderRestDTO> requestDTO = new RequestDTO<>();
+
+            QueryOrderRestDTO queryOrderRestDTO = new QueryOrderRestDTO();
+
+            queryOrderRestDTO.setOrderFlowNo(fsStorePayment.getTradeNo());
+            TzConfigInfoDTO tzConfigInfoDTO = TzConfigUtils.getConfig();
+
+            queryOrderRestDTO.setPlatMerCstNo(tzConfigInfoDTO.getPlatMerCstNo());
+
+            requestDTO.setReqBody(queryOrderRestDTO);
+            requestDTO.setReqHeader(TzReqHeaderDTO.getInstance(fsStorePayment.getPayCode()));
+
+            TzReqResultDTO<QueryOrderInfoDTO> resultDTO = null;
+            try {
+                resultDTO = tzBankService.payQueryOrder(requestDTO);
+                String retCode = resultDTO.getRetCode();
+                // 如果查询支付成功
+                if(retCode.equals("00000000")){
+                    QueryOrderInfoDTO body = resultDTO.getBody();
+                    String status = body.getStatus();
+                    Long orderId = fsStorePayment.getOrderId();
+                    String payCode = fsStorePayment.getPayCode();
+                    if("90".equals(status)){
+                        // 如果查询支付成功 更新订单状态
+                        orderService.payConfirm(1,orderId,fsStorePayment.getPayCode(),
+                                fsStorePayment.getTradeNo(),body.getChlTrxId(),fsStorePayment.getTradeNo());
+
+                    } else if("70".equals(status) || "80".equals(status)) {
+                        fsStorePayment.setStatus(-2);
+                        this.updateFsStorePayment(fsStorePayment);
+                    }
+
+                }
+            } catch (Exception e) {
+                logger.error("台州银行支付回调查询失败:",e);
+            }
+        }
+    }
 }