diff --git a/backend/app/tasks/h5_ai_task.py b/backend/app/tasks/h5_ai_task.py index 1ac3ea4..cb13f2f 100644 --- a/backend/app/tasks/h5_ai_task.py +++ b/backend/app/tasks/h5_ai_task.py @@ -442,23 +442,31 @@ async def _persist_and_push_structured( extra_data["options"] = options # 为审批卡片注入标准化 card_data(替换原有的分散匹配逻辑) if action: - approval_type = action.get("approval_type") - title = action.get("title") - - # v3.0 重构:委托 ApprovalMatcher 统一完成模板匹配 + 卡片构建 - from app.services.approval_matcher import get_approval_matcher - matcher = get_approval_matcher() - matched_card = matcher.match_and_build_card(approval_type, title) - - if matched_card: - # 注入 URL 供 approve-direct-card 兼容路径使用 + # v3.2 修复:降级路径已构建好 card_data 时,跳过重复匹配(避免 approval_type=None 误报"匹配失败") + if action.get("card_data"): + matched_card = action["card_data"] options = matched_card.get("options", []) - if options: + if options and not action.get("url"): action["url"] = options[0].get("url", "") - action["card_data"] = matched_card - logger.info(f"[ApprovalMatcher] 匹配成功: {approval_type} -> card_type={matched_card.get('card_type')}") + logger.info(f"[ApprovalMatcher] 使用预构建 card_data: {matched_card.get('title')}") else: - logger.warning(f"[ApprovalMatcher] 匹配失败: approval_type={approval_type}, title={title}") + approval_type = action.get("approval_type") + title = action.get("title") + + # v3.0 重构:委托 ApprovalMatcher 统一完成模板匹配 + 卡片构建 + from app.services.approval_matcher import get_approval_matcher + matcher = get_approval_matcher() + matched_card = matcher.match_and_build_card(approval_type, title) + + if matched_card: + # 注入 URL 供 approve-direct-card 兼容路径使用 + options = matched_card.get("options", []) + if options: + action["url"] = options[0].get("url", "") + action["card_data"] = matched_card + logger.info(f"[ApprovalMatcher] 匹配成功: {approval_type} -> card_type={matched_card.get('card_type')}") + else: + logger.warning(f"[ApprovalMatcher] 匹配失败: approval_type={approval_type}, title={title}") extra_data["action"] = action