This commit is contained in:
Marsway 2026-03-27 14:57:15 +08:00
parent 3e4cd2a58a
commit a9114c6a45
1 changed files with 53 additions and 2 deletions

View File

@ -167,6 +167,46 @@ def _extract_staff_code(staff_profile: dict[str, Any]) -> str:
return ""
def _extract_mobile_phone(emp_info: dict[str, Any]) -> str:
if not isinstance(emp_info, dict):
return ""
candidate_keys = (
"mobile",
"mobilePhone",
"phone",
"phoneNumber",
"tel",
"telephone",
"cellphone",
"cellPhone",
"Mobile",
"MobilePhone",
"Phone",
"PhoneNumber",
"Tel",
"Telephone",
"Cellphone",
"CellPhone",
)
for key in candidate_keys:
raw = emp_info.get(key)
if isinstance(raw, dict):
val = raw.get("value")
if val is None or str(val).strip() == "":
val = raw.get("showValue")
raw = val
s = str(raw or "").strip()
if s:
return s
translate = emp_info.get("translateProperties")
if isinstance(translate, dict):
for key in candidate_keys:
s = str(translate.get(key) or "").strip()
if s:
return s
return ""
def _pick_best_member_by_code(members: list[dict[str, Any]]) -> dict[str, Any] | None:
if not members:
return None
@ -262,7 +302,7 @@ class SyncEhrToOaFormJob(BaseJob):
同步字段
- 工号作为唯一对应关系不写入
- 所属公司姓名研发属性工作地点入职日期离职日期身份证号HRBP汇报人在离职域账号
- 所属公司姓名研发属性工作地点入职日期离职日期身份证号手机号HRBP汇报人在离职域账号
"""
job_id = "sync_ehr_to_oa.sync_form"
@ -306,6 +346,7 @@ class SyncEhrToOaFormJob(BaseJob):
raise ValueError("secret_cfg.app_key and secret_cfg.app_secret are required")
domain_custom_key = str(params.get("domain_account_custom_key") or "").strip() or None
mobile_custom_key = str(params.get("mobile_phone_custom_key") or "").strip() or None
verbose_trace = _to_bool_or_none(params.get("verbose_trace"))
if verbose_trace is None:
verbose_trace = True
@ -506,6 +547,9 @@ class SyncEhrToOaFormJob(BaseJob):
entry_date = _date_only(rec.get("entryDate"))
leave_date = _date_only(rec.get("lastWorkDate"))
id_number = str(emp.get("iDNumber") or "")
mobile_phone = _extract_mobile_phone(emp)
if not mobile_phone and mobile_custom_key:
mobile_phone = _custom_prop_value(emp.get("customProperties"), mobile_custom_key)
hrbp_uid = _to_int_safe(rec.get(_EHR_HRBP_ID_KEY) or _custom_prop_value(rec.get("customProperties"), _EHR_HRBP_ID_KEY))
hrbp_code = str(user_id_to_staff_code.get(hrbp_uid) or "")
hrbp_member = code_to_member.get(hrbp_code, {})
@ -521,7 +565,7 @@ 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_id=%s hrbp_show=%s manager_id=%s manager_show=%s is_leaving=%s domain_account=%s",
"EHR 字段预览job_no=%s company=%s name=%s rd_attr=%s place=%s entry_date=%s leave_date=%s id_number=%s mobile_phone=%s hrbp_id=%s hrbp_show=%s manager_id=%s manager_show=%s is_leaving=%s domain_account=%s",
job_no,
company,
name,
@ -530,6 +574,7 @@ class SyncEhrToOaFormJob(BaseJob):
entry_date,
leave_date,
id_number,
mobile_phone,
hrbp,
hrbp_show,
manager,
@ -596,6 +641,7 @@ class SyncEhrToOaFormJob(BaseJob):
"入职日期",
"离职日期",
"身份证号",
"手机号",
"HRBP",
"汇报人",
"在离职",
@ -746,6 +792,9 @@ class SyncEhrToOaFormJob(BaseJob):
entry_date = _date_only(rec.get("entryDate"))
leave_date = _date_only(rec.get("lastWorkDate"))
id_number = str(emp.get("iDNumber") or "")
mobile_phone = _extract_mobile_phone(emp)
if not mobile_phone and mobile_custom_key:
mobile_phone = _custom_prop_value(emp.get("customProperties"), mobile_custom_key)
hrbp_uid = _to_int_safe(rec.get(_EHR_HRBP_ID_KEY) or _custom_prop_value(rec.get("customProperties"), _EHR_HRBP_ID_KEY))
hrbp_code = str(user_id_to_staff_code.get(hrbp_uid) or "")
hrbp_member = code_to_member.get(hrbp_code, {})
@ -803,6 +852,7 @@ class SyncEhrToOaFormJob(BaseJob):
# 未离职不填离职日期(保持空),不再回填旧值。
leave_date = str(leave_date or "").strip()
id_number = _prefer_non_empty(id_number, _cell_value(existing_field_map.get(display_to_code["身份证号"])))
mobile_phone = _prefer_non_empty(mobile_phone, _cell_value(existing_field_map.get(display_to_code["手机号"])))
hrbp = _prefer_non_empty(hrbp, _cell_value(existing_field_map.get(display_to_code["HRBP"])))
manager = _prefer_non_empty(manager, _cell_value(existing_field_map.get(display_to_code["汇报人"])))
hrbp_show = _prefer_non_empty(hrbp_show, _cell_show_value(existing_field_map.get(display_to_code["HRBP"])))
@ -830,6 +880,7 @@ class SyncEhrToOaFormJob(BaseJob):
{"name": display_to_code["入职日期"], "value": entry_date, "showValue": entry_date},
{"name": display_to_code["离职日期"], "value": leave_date, "showValue": leave_date},
{"name": display_to_code["身份证号"], "value": id_number, "showValue": id_number},
{"name": display_to_code["手机号"], "value": mobile_phone, "showValue": mobile_phone},
{"name": display_to_code["HRBP"], "value": hrbp, "showValue": hrbp_show},
{"name": display_to_code["汇报人"], "value": manager, "showValue": manager_show},
{"name": display_to_code["在离职"], "value": is_leaving, "showValue": is_leaving},