ソースを参照

fix: Alipay SDK返回对象统一转dict处理,兼容StandardInfo/ConditionInfo对象

alphah 1 週間 前
コミット
134bef0211

+ 15 - 3
backend/app/plugin/module_payment/expense/institution/controller.py

@@ -375,6 +375,15 @@ async def modify_institution_controller(
 
     if institution_id and enterprise_id and (new_amount is not None or new_single_limit is not None):
         try:
+
+            def _to_dict(obj):
+                """Alipay SDK 对象转 dict,已经是 dict 则直接返回"""
+                if isinstance(obj, dict):
+                    return obj
+                if hasattr(obj, 'to_alipay_dict'):
+                    return obj.to_alipay_dict()
+                return {}
+
             # 从支付宝查询当前制度的 standard_info_list,获取现有 condition 的 rule_id
             detail_dict = await InstitutionService.detailinfo_query_service(
                 auth=auth, institution_id=institution_id, enterprise_id=enterprise_id
@@ -384,7 +393,8 @@ async def modify_institution_controller(
                 if not isinstance(std_list, list):
                     std_list = [std_list]
                 modify_standard_list = []
-                for std in std_list:
+                for std_obj in std_list:
+                    std = _to_dict(std_obj)
                     std_id = std.get("standard_id")
                     if not std_id:
                         continue
@@ -393,7 +403,8 @@ async def modify_institution_controller(
                         conditions = [conditions]
                     modify_condition_list = []
 
-                    for cond in conditions:
+                    for cond_obj in conditions:
+                        cond = _to_dict(cond_obj)
                         cond_factor = cond.get("rule_factor", "")
                         cond_id = cond.get("rule_id", "")
 
@@ -438,7 +449,8 @@ async def modify_institution_controller(
                 if not isinstance(issue_rule_list, list):
                     issue_rule_list = [issue_rule_list]
                 for rule in issue_rule_list:
-                    issue_rule_id = rule.get("issue_rule_id") if isinstance(rule, dict) else getattr(rule, "issue_rule_id", None)
+                    rule_dict = _to_dict(rule)
+                    issue_rule_id = rule_dict.get("issue_rule_id", "")
                     if issue_rule_id:
                         try:
                             await IssueruleService.modify_issuerule_service(