update
This commit is contained in:
parent
64a9f582cc
commit
4a91cd9520
|
|
@ -103,6 +103,23 @@ def _prefer_non_empty(new_val: Any, old_val: Any) -> str:
|
|||
return str(old_val or "").strip()
|
||||
|
||||
|
||||
def _resolve_org_for_company(record_info: dict[str, Any], org_by_oid: dict[str, dict[str, Any]]) -> tuple[dict[str, Any], str, str]:
|
||||
"""
|
||||
解析“所属公司”使用的组织对象。
|
||||
经验上 oIdOrganization 可能是公司根(导致全员同值),优先尝试 oIdDepartment。
|
||||
返回:(org_obj, source_field, source_oid)
|
||||
"""
|
||||
dept_oid = str(record_info.get("oIdDepartment") or "").strip()
|
||||
org_oid = str(record_info.get("oIdOrganization") or "").strip()
|
||||
for source, oid in (("oIdDepartment", dept_oid), ("oIdOrganization", org_oid)):
|
||||
if not oid:
|
||||
continue
|
||||
org = org_by_oid.get(oid) or {}
|
||||
if isinstance(org, dict) and str(org.get("name") or "").strip():
|
||||
return org, source, oid
|
||||
return {}, "", ""
|
||||
|
||||
|
||||
def _extract_oa_row_id_and_fields(row: dict[str, Any]) -> tuple[int | None, dict[str, Any]]:
|
||||
"""
|
||||
兼容不同 OA export 返回结构,提取:
|
||||
|
|
@ -314,8 +331,7 @@ class SyncEhrToOaFormJob(BaseJob):
|
|||
if not isinstance(rec, dict):
|
||||
rec = {}
|
||||
|
||||
org_oid = str(rec.get("oIdOrganization") or rec.get("oIdDepartment") or "").strip()
|
||||
org = org_by_oid.get(org_oid, {})
|
||||
org, company_source, company_source_oid = _resolve_org_for_company(rec, org_by_oid)
|
||||
company = str((org or {}).get("name") or "")
|
||||
name = str(emp.get("name") or "")
|
||||
rd_attr = _custom_prop_value(rec.get("customProperties"), rd_attr_custom_key) or _custom_prop_value(
|
||||
|
|
@ -330,9 +346,11 @@ class SyncEhrToOaFormJob(BaseJob):
|
|||
is_leaving = "是" if _date_only(rec.get("lastWorkDate")) else "否"
|
||||
domain_account = _custom_prop_value(emp.get("customProperties"), domain_custom_key) or str(emp.get("_Name") or "")
|
||||
logger.info(
|
||||
"EHR 字段预览:job_no=%s company=%s name=%s rd_attr=%s place=%s entry_date=%s leave_date=%s id_number=%s hrbp=%s manager=%s is_leaving=%s domain_account=%s",
|
||||
"EHR 字段预览:job_no=%s company=%s company_source=%s company_source_oid=%s name=%s rd_attr=%s place=%s entry_date=%s leave_date=%s id_number=%s hrbp=%s manager=%s is_leaving=%s domain_account=%s",
|
||||
job_no,
|
||||
company,
|
||||
company_source,
|
||||
company_source_oid,
|
||||
name,
|
||||
rd_attr,
|
||||
place,
|
||||
|
|
@ -532,8 +550,7 @@ class SyncEhrToOaFormJob(BaseJob):
|
|||
if not isinstance(rec, dict):
|
||||
rec = {}
|
||||
|
||||
org_oid = str(rec.get("oIdOrganization") or rec.get("oIdDepartment") or "").strip()
|
||||
org = org_by_oid.get(org_oid, {})
|
||||
org, company_source, company_source_oid = _resolve_org_for_company(rec, org_by_oid)
|
||||
existing_field_map = oa_fields_by_job_no_norm.get(_normalize_job_no(job_no), {})
|
||||
|
||||
company = str((org or {}).get("name") or "")
|
||||
|
|
@ -577,7 +594,13 @@ class SyncEhrToOaFormJob(BaseJob):
|
|||
{"name": display_to_code["域账号"], "value": domain_account, "showValue": domain_account},
|
||||
]
|
||||
if verbose_trace:
|
||||
logger.info("字段映射:job_no=%s row_id=%s", job_no, oa_record_id)
|
||||
logger.info(
|
||||
"字段映射:job_no=%s row_id=%s company_source=%s company_source_oid=%s",
|
||||
job_no,
|
||||
oa_record_id,
|
||||
company_source,
|
||||
company_source_oid,
|
||||
)
|
||||
for fld in fields_payload:
|
||||
logger.info("字段映射明细:job_no=%s field=%s value=%s", job_no, fld["name"], fld["value"])
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue