ソースを参照

feat: 支付宝转账反查仅重试1次,对卡转账保留多次退避

alphah 1 週間 前
コミット
046e9e5527
1 ファイル変更9 行追加4 行削除
  1. 9 4
      backend/app/plugin/module_payment/account/service.py

+ 9 - 4
backend/app/plugin/module_payment/account/service.py

@@ -1187,19 +1187,24 @@ class AccountService:
                             except Exception:
                             except Exception:
                                 pass
                                 pass
                         else:
                         else:
-                            if retry_count < 3:
+                            # 区分退避策略:对卡转账走多次退避,支付宝转账仅重试1次
+                            is_card_transfer = transfer.payee_type == "BANK_CARD"
+                            max_retries = 3 if is_card_transfer else 0
+
+                            if retry_count < max_retries:
                                 accumulated = sum(cls._RETRY_INTERVALS[:retry_count + 2])
                                 accumulated = sum(cls._RETRY_INTERVALS[:retry_count + 2])
                                 transfer.retry_count = retry_count + 1
                                 transfer.retry_count = retry_count + 1
                                 transfer.next_retry_at = transfer.created_time + timedelta(minutes=accumulated)
                                 transfer.next_retry_at = transfer.created_time + timedelta(minutes=accumulated)
-                                log.info(f"[重试任务] out_biz_no={out_biz_no}, retry={retry_count+1}/4, result=DEALING, 下次={transfer.next_retry_at}")
+                                log.info(f"[重试任务] out_biz_no={out_biz_no}, payee_type={transfer.payee_type}, retry={retry_count+1}/{max_retries+1}, result=DEALING, 下次={transfer.next_retry_at}")
                                 processed += 1
                                 processed += 1
                             else:
                             else:
                                 transfer.status = TransferStatusEnum.FAIL.value
                                 transfer.status = TransferStatusEnum.FAIL.value
                                 transfer.retry_count = 4
                                 transfer.retry_count = 4
                                 transfer.next_retry_at = None
                                 transfer.next_retry_at = None
-                                transfer.error_msg = "反查超时判定为失败"
+                                fail_reason = "反查超时判定为失败" if is_card_transfer else "支付宝转账仅重试1次仍DEALING"
+                                transfer.error_msg = fail_reason
                                 processed += 1
                                 processed += 1
-                                log.info(f"[重试任务] out_biz_no={out_biz_no}, retry=4/4次DEALING, 超时判FAIL")
+                                log.info(f"[重试任务] out_biz_no={out_biz_no}, payee_type={transfer.payee_type}, retry={retry_count+1}/{max_retries+1}次DEALING, 判FAIL: {fail_reason}")
                                 try:
                                 try:
                                     auth = AuthSchema(db=db, check_data_scope=False, tenant_id=transfer.tenant_id)
                                     auth = AuthSchema(db=db, check_data_scope=False, tenant_id=transfer.tenant_id)
                                     await OpenTransferService.open_return_service(auth, order_no or out_biz_no)
                                     await OpenTransferService.open_return_service(auth, order_no or out_biz_no)