This commit is contained in:
Marsway 2026-03-26 13:40:41 +08:00
parent e3dfec1b4b
commit 2e55fd43ca
1 changed files with 31 additions and 15 deletions

View File

@ -146,14 +146,25 @@ def _extract_reporting_user_id(staff_profile: dict[str, Any]) -> int:
def _extract_staff_code(staff_profile: dict[str, Any]) -> str:
if not isinstance(staff_profile, dict):
return ""
return str(
staff_profile.get("staffCode")
or staff_profile.get("StaffCode")
or staff_profile.get("code")
or staff_profile.get("Code")
or staff_profile.get("employeeNo")
or ""
).strip()
for key in (
"staffCode",
"StaffCode",
"code",
"Code",
"jobNumber",
"JobNumber",
"employeeNo",
"EmployeeNo",
):
val = str(staff_profile.get(key) or "").strip()
if val:
return val
lower_map = {str(k).lower(): v for k, v in staff_profile.items()}
for key in ("staffcode", "code", "jobnumber", "employeeno"):
val = str(lower_map.get(key) or "").strip()
if val:
return val
return ""
def _pick_best_member_by_code(members: list[dict[str, Any]]) -> dict[str, Any] | None:
@ -470,6 +481,8 @@ class SyncEhrToOaFormJob(BaseJob):
hrbp = str(hrbp_member.get("id") or "")
hrbp_show = str(hrbp_member.get("name") or hrbp_code)
manager_uid = _extract_reporting_user_id(staff_profile_by_user_id.get(user_id, {}))
if manager_uid <= 0:
manager_uid = _to_int_safe(rec.get("pOIdEmpAdmin"))
manager_code = str(user_id_to_staff_code.get(manager_uid) or "")
manager_member = code_to_member.get(manager_code, {})
manager = str(manager_member.get("id") or "")
@ -703,6 +716,8 @@ class SyncEhrToOaFormJob(BaseJob):
hrbp = str(hrbp_member.get("id") or "")
hrbp_show = str(hrbp_member.get("name") or hrbp_code)
manager_uid = _extract_reporting_user_id(staff_profile_by_user_id.get(user_id, {}))
if manager_uid <= 0:
manager_uid = _to_int_safe(rec.get("pOIdEmpAdmin"))
manager_code = str(user_id_to_staff_code.get(manager_uid) or "")
manager_member = code_to_member.get(manager_code, {})
manager = str(manager_member.get("id") or "")
@ -722,16 +737,17 @@ class SyncEhrToOaFormJob(BaseJob):
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"])))
manager_show = _prefer_non_empty(manager_show, _cell_show_value(existing_field_map.get(display_to_code["汇报人"])))
# HRBP/汇报人强制走“EHR userId -> 工号 -> OA memberId”链路
# 不再回退旧值,避免把历史错误的 EHR userId 继续写回 OA 成员字段
# HRBP/汇报人优先走“EHR userId -> 工号 -> OA memberId”
# 若无法映射,保留 OA 现有值,避免写空
if not hrbp and verbose_trace:
logger.warning("HRBP 映射为空job_no=%s hrbp_uid=%s hrbp_code=%s", job_no, hrbp_uid, hrbp_code)
if not manager and verbose_trace:
logger.warning("汇报人映射为空job_no=%s manager_uid=%s manager_code=%s", job_no, manager_uid, manager_code)
# 重新覆盖,取消上面的旧值回退效果
if str(hrbp_member.get("id") or "").strip():
hrbp = str(hrbp_member.get("id") or "")
manager = str(manager_member.get("id") or "")
hrbp_show = str(hrbp_member.get("name") or hrbp_code)
if str(manager_member.get("id") or "").strip():
manager = str(manager_member.get("id") or "")
manager_show = str(manager_member.get("name") or manager_code)
is_leaving = _prefer_non_empty(is_leaving, _cell_value(existing_field_map.get(display_to_code["在离职"])))
domain_account = _prefer_non_empty(domain_account, _cell_value(existing_field_map.get(display_to_code["域账号"])))