From 51a488a5cb7c1a3339af1bc0ed866bba353bcd95 Mon Sep 17 00:00:00 2001 From: Marsway Date: Thu, 30 Apr 2026 17:02:58 +0800 Subject: [PATCH] update --- extensions/sync_ehr_to_ad/README.md | 1 + extensions/sync_ehr_to_ad/job.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/extensions/sync_ehr_to_ad/README.md b/extensions/sync_ehr_to_ad/README.md index b20694b..e8ada69 100644 --- a/extensions/sync_ehr_to_ad/README.md +++ b/extensions/sync_ehr_to_ad/README.md @@ -65,6 +65,7 @@ - `ldap_verify_tls`: 是否校验证书,默认 `true`。 - `proxy_alias_domain`: 生成 `smtp:@domain` 别名时使用的域名。 - `department_code_ad_attribute`: 部门编码写入的 AD 属性,默认 `departmentNumber`。 +- `street_address_key`: 具体地址字段编码,默认 `extgzddxx_606508_618643707`,写入 AD 的 `streetAddress`。 - `default_company`: 固定公司名;不传时尝试取 EHR 根组织名称。 - `location_mappings`: 工作地点到 AD 国家、省、市字段的映射。 diff --git a/extensions/sync_ehr_to_ad/job.py b/extensions/sync_ehr_to_ad/job.py index 1131a79..ba7ca9a 100644 --- a/extensions/sync_ehr_to_ad/job.py +++ b/extensions/sync_ehr_to_ad/job.py @@ -42,6 +42,8 @@ def _scalar_value(raw: Any) -> str: if val is None or str(val).strip() == "": val = raw.get("showValue") return str(val or "").strip() + if isinstance(raw, (list, tuple, set)): + return "\n".join([str(x).strip() for x in raw if x is not None and str(x).strip() != ""]) return str(raw or "").strip() @@ -83,6 +85,18 @@ def _field_value(item: dict[str, Any], key: str) -> str: s = _custom_prop_value(node.get("customProperties"), key) if s: return s + for child in node.values(): + if not isinstance(child, dict): + continue + s = _scalar_value(child.get(key)) + if s: + return s + s = _translate_value(child, key) + if s: + return s + s = _custom_prop_value(child.get("customProperties"), key) + if s: + return s return "" @@ -540,6 +554,13 @@ class SyncEhrToAdUserJob(BaseJob): office = _field_translate_or_value(item, "Place") workplace_text = _field_translate_or_value(item, work_location_text_key) street_address = _field_value(item, street_address_key) + if verbose_trace: + logger.info( + "AD 地址字段解析:sam=%s street_address_key=%s streetAddress=%r", + sam, + street_address_key, + street_address, + ) company = default_company or _root_org_name(org, org_by_oid) location_attrs = _location_from_workplace(workplace_text or office, location_mappings)