Ver código fonte

fix(account): next_retry_at用now、超时判FAIL写remark、反查FAIL写sub_msg到remark

alphah 1 semana atrás
pai
commit
da79c5d809

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

@@ -1104,6 +1104,10 @@ class AccountService:
             update_data["fund_order_id"] = api_fund_order_id
         if api_amount:
             update_data["amount"] = Decimal(str(api_amount))
+        if alipay_status == "FAIL":
+            sub_msg = getattr(result, 'sub_msg', '') or getattr(result, 'msg', '') or ''
+            if sub_msg:
+                update_data["remark"] = sub_msg
 
         upd = sa_update(TransferModel).where(
             TransferModel.out_biz_no == out_biz_no
@@ -1114,7 +1118,7 @@ class AccountService:
 
 
     # ─────────── 退避时间映射 ───────────
-    _RETRY_INTERVALS = [5, 10, 30, 60]  # 分钟: retry_count 0→1, 1→2, 2→3, 3 判 FAIL
+    _RETRY_INTERVALS = [10, 30, 60]  # 分钟: retry_count 0→1, 1→2, 2→3, 3 判 FAIL
 
     @classmethod
     async def retry_dealing_transfers(cls) -> dict:
@@ -1184,16 +1188,16 @@ class AccountService:
                                 pass
                         else:
                             if retry_count < 3:
-                                accumulated = sum(cls._RETRY_INTERVALS[:retry_count + 2])
+                                interval = cls._RETRY_INTERVALS[retry_count]
                                 transfer.retry_count = retry_count + 1
-                                transfer.next_retry_at = transfer.created_time + timedelta(minutes=accumulated)
+                                transfer.next_retry_at = datetime.now() + timedelta(minutes=interval)
                                 log.info(f"[重试任务] out_biz_no={out_biz_no}, retry={retry_count+1}/4, result=DEALING, 下次={transfer.next_retry_at}")
                                 processed += 1
                             else:
                                 transfer.status = TransferStatusEnum.FAIL.value
                                 transfer.retry_count = 4
                                 transfer.next_retry_at = None
-                                transfer.error_msg = "反查超时判定为失败"
+                                transfer.remark = "反查超时判定为失败"
                                 processed += 1
                                 log.info(f"[重试任务] out_biz_no={out_biz_no}, retry=4/4次DEALING, 超时判FAIL")
                                 try: