This commit is contained in:
Marsway 2026-03-26 13:48:49 +08:00
parent 2e55fd43ca
commit 76a17f5274
1 changed files with 39 additions and 6 deletions

View File

@ -435,8 +435,9 @@ class SyncEhrToOaFormJob(BaseJob):
continue
member_id = str(best.get("id") or "").strip()
member_name = str(best.get("name") or best.get("loginName") or "").strip()
member_code = str(best.get("code") or code).strip()
if member_id:
code_to_member[code] = {"id": member_id, "name": member_name}
code_to_member[code] = {"id": member_id, "name": member_name, "code": member_code}
except Exception as e: # noqa: BLE001
logger.warning("OA 人员查询失败code=%s err=%r", code, e)
logger.info(
@ -665,6 +666,7 @@ class SyncEhrToOaFormJob(BaseJob):
data_list: list[dict[str, Any]] = []
not_found_in_oa = 0
unmatched_samples: list[str] = []
debug_rows = 0
for job_no, item in ehr_by_job_no.items():
oa_record_id = merged_id_by_job_no.get(job_no)
matched_by = "raw"
@ -725,6 +727,31 @@ 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 "")
debug_payload = {
"job_no": job_no,
"ehr_user_id": user_id,
"oa_record_id": oa_record_id,
"matched_by": matched_by,
"ehr_hrbp_user_id": hrbp_uid,
"ehr_hrbp_staff_code": hrbp_code,
"oa_hrbp_member": {
"id": str(hrbp_member.get("id") or ""),
"code": str(hrbp_member.get("code") or ""),
"name": str(hrbp_member.get("name") or ""),
},
"ehr_manager_user_id": manager_uid,
"ehr_manager_staff_code": manager_code,
"oa_manager_member": {
"id": str(manager_member.get("id") or ""),
"code": str(manager_member.get("code") or ""),
"name": str(manager_member.get("name") or ""),
},
"employeeInfo": emp,
"recordInfo": rec,
}
logger.info("DEBUG_EMPLOYEE_MAPPING %s", json.dumps(debug_payload, ensure_ascii=False, default=str))
debug_rows += 1
company = _prefer_non_empty(company, _cell_value(existing_field_map.get(display_to_code["所属公司"])))
name = _prefer_non_empty(name, _cell_value(existing_field_map.get(display_to_code["姓名"])))
rd_attr = _prefer_non_empty(rd_attr, _cell_value(existing_field_map.get(display_to_code["研发属性"])))
@ -788,11 +815,17 @@ class SyncEhrToOaFormJob(BaseJob):
len(data_list),
not_found_in_oa,
)
if not data_list:
raise RuntimeError(
"No updates prepared for OA batch-update (check jobNumber matching between EHR and OA, and form field mapping). "
f"unmatched_sample={unmatched_samples}"
)
logger.warning("DEBUG模式已停止 batch-update仅输出映射日志debug_rows=%s", debug_rows)
return {
"debug_only": True,
"ehr_total_rows": len(emp_rows),
"ehr_distinct_job_numbers": len(ehr_by_job_no),
"oa_existing_job_numbers": len(oa_id_by_job_no),
"prepared_updates": len(data_list),
"not_found_in_oa": not_found_in_oa,
"unmatched_sample": unmatched_samples[:50],
"debug_rows": debug_rows,
}
# 6) 分批执行 batch-update
success_count = 0