This commit is contained in:
Marsway 2026-05-08 17:57:45 +08:00
parent bc83d4ccfc
commit 042dc392fe
2 changed files with 3 additions and 31 deletions

View File

@ -15,6 +15,7 @@
- 默认写入后立即回读校验;如果 LDAP 返回成功但字段未落地Job 会报失败并记录未生效字段。 - 默认写入后立即回读校验;如果 LDAP 返回成功但字段未落地Job 会报失败并记录未生效字段。
- EHR 目标值为空时不会清空 AD 字段。 - EHR 目标值为空时不会清空 AD 字段。
- 如果配置了 `target_sam_accounts`,只对列表中的 AD 账号执行同步。 - 如果配置了 `target_sam_accounts`,只对列表中的 AD 账号执行同步。
- 不同步 AD `title` 字段,不再往 AD 写入职务。
- `displayName``employeeInfo.customProperties.extDDNIC_606508_303466862` - `displayName``employeeInfo.customProperties.extDDNIC_606508_303466862`
- `department` 写入“EHR 部门编码 + EHR 部门名称”,例如 `V000076 IT` - `department` 写入“EHR 部门编码 + EHR 部门名称”,例如 `V000076 IT`
- `streetAddress` 默认取 `translateProperties.extgzddxx1_606508_892394263Text` - `streetAddress` 默认取 `translateProperties.extgzddxx1_606508_892394263Text`

View File

@ -427,14 +427,6 @@ def _is_current_employee(item: dict[str, Any], current_status_values: set[str])
return True return True
def _job_post_name(job_post: dict[str, Any]) -> str:
for key in ("name", "Name", "jobPostName", "JobPostName"):
s = str(job_post.get(key) or "").strip()
if s:
return s
return ""
def _parse_target_sam_accounts(params: dict[str, Any]) -> set[str]: def _parse_target_sam_accounts(params: dict[str, Any]) -> set[str]:
raw = params.get("target_sam_accounts") raw = params.get("target_sam_accounts")
if raw is None: if raw is None:
@ -538,16 +530,9 @@ class SyncEhrToAdUserJob(BaseJob):
with_disabled=False, with_disabled=False,
is_with_deleted=False, is_with_deleted=False,
) )
job_post_res = ehr.get_all_job_posts_by_time_window(
stop_time=stop_time,
capacity=capacity,
with_disabled=False,
is_with_deleted=False,
)
emp_rows = emp_res.get("data") or [] emp_rows = emp_res.get("data") or []
org_rows = org_res.get("data") or [] org_rows = org_res.get("data") or []
job_post_rows = job_post_res.get("data") or [] if not isinstance(emp_rows, list) or not isinstance(org_rows, list):
if not isinstance(emp_rows, list) or not isinstance(org_rows, list) or not isinstance(job_post_rows, list):
raise RuntimeError("EHR result invalid: data is not list") raise RuntimeError("EHR result invalid: data is not list")
org_by_oid: dict[str, dict[str, Any]] = {} org_by_oid: dict[str, dict[str, Any]] = {}
@ -558,14 +543,6 @@ class SyncEhrToAdUserJob(BaseJob):
if oid: if oid:
org_by_oid[oid] = org org_by_oid[oid] = org
job_post_by_oid: dict[str, dict[str, Any]] = {}
for job_post in job_post_rows:
if not isinstance(job_post, dict):
continue
oid = str(job_post.get("oId") or job_post.get("oid") or job_post.get("id") or "").strip()
if oid:
job_post_by_oid[oid] = job_post
users_by_sam: dict[str, dict[str, Any]] = {} users_by_sam: dict[str, dict[str, Any]] = {}
user_id_to_sam: dict[int, str] = {} user_id_to_sam: dict[int, str] = {}
for item in emp_rows: for item in emp_rows:
@ -586,11 +563,10 @@ class SyncEhrToAdUserJob(BaseJob):
break break
logger.info( logger.info(
"EHR 当前用户准备完成employee_rows=%s current_with_ad_account=%s org_rows=%s job_post_rows=%s target_sam_accounts=%s", "EHR 当前用户准备完成employee_rows=%s current_with_ad_account=%s org_rows=%s target_sam_accounts=%s",
len(emp_rows), len(emp_rows),
len(users_by_sam), len(users_by_sam),
len(org_rows), len(org_rows),
len(job_post_rows),
len(target_sam_accounts), len(target_sam_accounts),
) )
@ -605,7 +581,6 @@ class SyncEhrToAdUserJob(BaseJob):
"sAMAccountName", "sAMAccountName",
"givenName", "givenName",
"sn", "sn",
"title",
"department", "department",
"manager", "manager",
"proxyAddresses", "proxyAddresses",
@ -650,13 +625,10 @@ class SyncEhrToAdUserJob(BaseJob):
org_oid = str(rec.get("oIdDepartment") or rec.get("OIdDepartment") or "").strip() org_oid = str(rec.get("oIdDepartment") or rec.get("OIdDepartment") or "").strip()
org = org_by_oid.get(org_oid, {}) org = org_by_oid.get(org_oid, {})
job_post_oid = str(rec.get("oIdJobPost") or rec.get("OIdJobPost") or "").strip()
job_post = job_post_by_oid.get(job_post_oid, {})
given_name = _field_value(item, "PhoneticOfMing") given_name = _field_value(item, "PhoneticOfMing")
surname = _field_value(item, "PhoneticOfXing") surname = _field_value(item, "PhoneticOfXing")
name = str(emp.get("name") or emp.get("Name") or "").strip() name = str(emp.get("name") or emp.get("Name") or "").strip()
title = _field_translate_or_value(item, "OIdJobPost") or _job_post_name(job_post)
department_code = _org_code(org) department_code = _org_code(org)
department_name = _field_translate_or_value(item, "OIdDepartment") or _org_name(org) department_name = _field_translate_or_value(item, "OIdDepartment") or _org_name(org)
department = _department_value(department_code, department_name) department = _department_value(department_code, department_name)
@ -716,7 +688,6 @@ class SyncEhrToAdUserJob(BaseJob):
"sAMAccountName": sam, "sAMAccountName": sam,
"givenName": given_name, "givenName": given_name,
"sn": surname, "sn": surname,
"title": title,
"department": department, "department": department,
"manager": manager_dn, "manager": manager_dn,
"proxyAddresses": _proxy_addresses(email, sam, proxy_alias_domain), "proxyAddresses": _proxy_addresses(email, sam, proxy_alias_domain),