Browse Source

fix: 用getattr兜底兼容SDK对象和dict,防止AttributeError被外层try吞掉

alphah 1 tuần trước cách đây
mục cha
commit
83bddeba48

+ 5 - 6
backend/app/plugin/module_payment/expense/institution/controller.py

@@ -388,18 +388,17 @@ async def modify_institution_controller(
                 if not isinstance(std_list, list):
                     std_list = [std_list]
                 for std in std_list:
-                    # 兼容 SDK 对象和 dict
-                    std_id = std.standard_id if hasattr(std, 'standard_id') else std.get("standard_id", "")
+                    std_id = getattr(std, 'standard_id', None) or (std.get("standard_id") if isinstance(std, dict) else None)
                     if not std_id:
                         continue
-                    conditions = std.standard_condition_info_list if hasattr(std, 'standard_condition_info_list') else (std.get("standard_condition_info_list") or [])
+                    conditions = getattr(std, 'standard_condition_info_list', None) or (std.get("standard_condition_info_list") if isinstance(std, dict) else [])
                     if not isinstance(conditions, list):
                         conditions = [conditions]
                     modify_condition_list = []
 
                     for cond in conditions:
-                        cond_factor = cond.rule_factor if hasattr(cond, 'rule_factor') else cond.get("rule_factor", "")
-                        cond_id = cond.rule_id if hasattr(cond, 'rule_id') else cond.get("rule_id", "")
+                        cond_factor = getattr(cond, 'rule_factor', None) or (cond.get("rule_factor") if isinstance(cond, dict) else "")
+                        cond_id = getattr(cond, 'rule_id', None) or (cond.get("rule_id") if isinstance(cond, dict) else "")
 
                         PERIOD_FACTOR_MAP = {"daily": "QUOTA_DAY", "weekly": "QUOTA_WEEK", "monthly": "QUOTA_MONTH", "quarterly": "QUOTA_QUARTER", "yearly": "QUOTA_YEAR"}
 
@@ -426,7 +425,7 @@ async def modify_institution_controller(
                 if not isinstance(issue_rule_list, list):
                     issue_rule_list = [issue_rule_list]
                 for rule in issue_rule_list:
-                    ir_id = rule.issue_rule_id if hasattr(rule, 'issue_rule_id') else rule.get("issue_rule_id", "")
+                    ir_id = getattr(rule, 'issue_rule_id', None) or (rule.get("issue_rule_id") if isinstance(rule, dict) else "")
                     if ir_id:
                         await IssueruleService.modify_issuerule_service(
                             auth=auth, institution_id=institution_id,