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()
|
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]]:
|
def _extract_oa_row_id_and_fields(row: dict[str, Any]) -> tuple[int | None, dict[str, Any]]:
|
||||||
"""
|
"""
|
||||||
兼容不同 OA export 返回结构,提取:
|
兼容不同 OA export 返回结构,提取:
|
||||||
|
|
@ -314,8 +331,7 @@ class SyncEhrToOaFormJob(BaseJob):
|
||||||
if not isinstance(rec, dict):
|
if not isinstance(rec, dict):
|
||||||
rec = {}
|
rec = {}
|
||||||
|
|
||||||
org_oid = str(rec.get("oIdOrganization") or rec.get("oIdDepartment") or "").strip()
|
org, company_source, company_source_oid = _resolve_org_for_company(rec, org_by_oid)
|
||||||
org = org_by_oid.get(org_oid, {})
|
|
||||||
company = str((org or {}).get("name") or "")
|
company = str((org or {}).get("name") or "")
|
||||||
name = str(emp.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(
|
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 "否"
|
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 "")
|
domain_account = _custom_prop_value(emp.get("customProperties"), domain_custom_key) or str(emp.get("_Name") or "")
|
||||||
logger.info(
|
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,
|
job_no,
|
||||||
company,
|
company,
|
||||||
|
company_source,
|
||||||
|
company_source_oid,
|
||||||
name,
|
name,
|
||||||
rd_attr,
|
rd_attr,
|
||||||
place,
|
place,
|
||||||
|
|
@ -532,8 +550,7 @@ class SyncEhrToOaFormJob(BaseJob):
|
||||||
if not isinstance(rec, dict):
|
if not isinstance(rec, dict):
|
||||||
rec = {}
|
rec = {}
|
||||||
|
|
||||||
org_oid = str(rec.get("oIdOrganization") or rec.get("oIdDepartment") or "").strip()
|
org, company_source, company_source_oid = _resolve_org_for_company(rec, org_by_oid)
|
||||||
org = org_by_oid.get(org_oid, {})
|
|
||||||
existing_field_map = oa_fields_by_job_no_norm.get(_normalize_job_no(job_no), {})
|
existing_field_map = oa_fields_by_job_no_norm.get(_normalize_job_no(job_no), {})
|
||||||
|
|
||||||
company = str((org or {}).get("name") or "")
|
company = str((org or {}).get("name") or "")
|
||||||
|
|
@ -577,7 +594,13 @@ class SyncEhrToOaFormJob(BaseJob):
|
||||||
{"name": display_to_code["域账号"], "value": domain_account, "showValue": domain_account},
|
{"name": display_to_code["域账号"], "value": domain_account, "showValue": domain_account},
|
||||||
]
|
]
|
||||||
if verbose_trace:
|
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:
|
for fld in fields_payload:
|
||||||
logger.info("字段映射明细:job_no=%s field=%s value=%s", job_no, fld["name"], fld["value"])
|
logger.info("字段映射明细:job_no=%s field=%s value=%s", job_no, fld["name"], fld["value"])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue