diff --git a/apps/jingrow/jingrow/__init__.py b/apps/jingrow/jingrow/__init__.py index 8bd2b97..34eeb6a 100644 --- a/apps/jingrow/jingrow/__init__.py +++ b/apps/jingrow/jingrow/__init__.py @@ -106,6 +106,45 @@ def get_meta(pagetype: str): """获取 pagetype 的元数据,返回后端适配器的原始结果结构。""" return Page(pagetype).get_meta() + +def get_field_mapping_from_jingrow(pagetype: str): + """获取字段的label到fieldname的映射,返回 {label: fieldname} 的映射字典。""" + return Page(pagetype).get_field_mapping_from_jingrow() + + +def get_field_value_from_jingrow(pagetype: str, name: str, fieldname: str): + """从Jingrow获取字段的当前值,返回字段的当前值,如果为空则返回None。""" + return Page(pagetype).get_field_value_from_jingrow(name, fieldname) + + +def map_fields_by_labels(field_map: list, ai_outputs: dict, label_to_fieldname: dict) -> dict: + """ + 根据 field_map 将 ai_outputs 映射为记录字段数据。 + - field_map: [{ 'from': '来源字段', 'to': '目标label或字段名' }] + - ai_outputs: 上游节点聚合的输出 + - label_to_fieldname: 来自 Jingrow 的 label 到字段名映射 + 返回: dict 记录字段数据 + """ + record_data = {} + fieldname_set = set(label_to_fieldname.values()) + for mapping in field_map or []: + source_key = mapping.get('from') + to_raw = mapping.get('to') + if not source_key or to_raw is None: + continue + value = ai_outputs.get(source_key) + if value is None: + continue + # 目标字段既支持label也支持字段名 + to_field = label_to_fieldname.get(str(to_raw).strip()) + if not to_field and str(to_raw).strip() in fieldname_set: + to_field = str(to_raw).strip() + if not to_field: + continue + record_data[to_field] = value + return record_data + + def _ensure_logging_configured() -> None: # 统一在 root logger 上配置输出与格式,这样通过名为 "jingrow" 的 logger 打印时, diff --git a/apps/jingrow/jingrow/model/page.py b/apps/jingrow/jingrow/model/page.py index 44684bb..d1cab24 100644 --- a/apps/jingrow/jingrow/model/page.py +++ b/apps/jingrow/jingrow/model/page.py @@ -106,5 +106,11 @@ class Page: def get_single(self) -> Dict[str, Any]: return self.adapter.get_single_pagetype(self.pagetype) + def get_field_mapping_from_jingrow(self) -> Dict[str, str]: + return self.adapter.get_field_mapping_from_jingrow(self.pagetype) + + def get_field_value_from_jingrow(self, name: str, fieldname: str) -> Optional[Any]: + return self.adapter.get_field_value_from_jingrow(self.pagetype, name, fieldname) +