From 76a17f5274f75bd45be987c62d1bff4daeda92bc Mon Sep 17 00:00:00 2001 From: Marsway Date: Thu, 26 Mar 2026 13:48:49 +0800 Subject: [PATCH] update --- extensions/sync_ehr_to_oa/job.py | 45 +++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/extensions/sync_ehr_to_oa/job.py b/extensions/sync_ehr_to_oa/job.py index 2fc13fd..bacc148 100644 --- a/extensions/sync_ehr_to_oa/job.py +++ b/extensions/sync_ehr_to_oa/job.py @@ -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