Forráskód Böngészése

fix(account): sync-all 兼容SDK版本,降低 ImportError 处理

alphah 2 hete
szülő
commit
94ba7a9586
1 módosított fájl, 24 hozzáadás és 3 törlés
  1. 24 3
      backend/app/plugin/module_payment/account/service.py

+ 24 - 3
backend/app/plugin/module_payment/account/service.py

@@ -857,6 +857,8 @@ class AccountService:
         from app.plugin.module_payment.account.model import TransferModel
         from app.plugin.module_payment.account.enums import TransferStatusEnum
 
+        # 检查支付宝SDK是否支持转账订单查询API
+        _can_query = False
         try:
             from alipay.aop.api.request.AlipayCommerceEcTransOrderQueryRequest import (
                 AlipayCommerceEcTransOrderQueryRequest,
@@ -868,12 +870,13 @@ class AccountService:
                 AlipayCommerceEcTransOrderQueryResponse,
             )
             from app.core.alipay_client import AlipayClient
+            _can_query = True
         except ImportError:
-            raise CustomException(msg="支付宝SDK未正确安装")
+            log.warning("支付宝SDK未包含 TransOrderQuery API,将仅列出 DEALING 记录供手动同步")
 
-        client = AlipayClient.get_client()
+        client = AlipayClient.get_client() if _can_query else None
 
-        # 直接查库,绕过 CRUD 权限过滤,获取所有 DEALING 转账
+        # 直接查库,获取所有 DEALING 转账(不含 out_biz_no 为空的记录)
         stmt = select(TransferModel).where(
             TransferModel.status == TransferStatusEnum.DEALING.value,
             TransferModel.out_biz_no.isnot(None),
@@ -887,6 +890,24 @@ class AccountService:
         total = len(dealing_transfers)
         details = []
 
+        if not _can_query:
+            # SDK不支持查询API,仅列出记录供参考
+            for transfer in dealing_transfers:
+                details.append({
+                    "out_biz_no": transfer.out_biz_no,
+                    "enterprise_id": transfer.enterprise_id,
+                    "amount": float(transfer.amount) if transfer.amount else 0,
+                    "status": "DEALING",
+                    "hint": "请使用 transfer/sync-status 手动补录",
+                })
+            return {
+                "total": total,
+                "synced": 0,
+                "failed": 0,
+                "details": details,
+                "note": "SDK不支持自动查询,请参考 details 中的 out_biz_no 逐条调用 sync-status 手动同步",
+            }
+
         for transfer in dealing_transfers:
             out_biz_no = transfer.out_biz_no
             eid = transfer.enterprise_id