From ae6d323ff87817ac6a291f3a4a31e2a5038313b9 Mon Sep 17 00:00:00 2001 From: Marsway Date: Wed, 25 Mar 2026 10:23:12 +0800 Subject: [PATCH] update --- extensions/sync_ehr_to_oa/job.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/extensions/sync_ehr_to_oa/job.py b/extensions/sync_ehr_to_oa/job.py index a0d6056..f00549a 100644 --- a/extensions/sync_ehr_to_oa/job.py +++ b/extensions/sync_ehr_to_oa/job.py @@ -611,19 +611,40 @@ class SyncEhrToOaFormJob(BaseJob): raise RuntimeError(f"OA batch-update failed code={code} message={rj.get('message')!r}") data = rj.get("data") or {} + message = str(rj.get("message") or "") success_count += int(data.get("successCount", 0) or 0) failed_count += int(data.get("failedCount", 0) or 0) fd = data.get("failedData") or {} if isinstance(fd, dict): for k, v in fd.items(): failed_data[str(k)] = str(v) + else: + fd = {} + + # 打印失败原因样本,避免只有计数没有原因。 + if fd: + sample_items = list(fd.items())[:20] + logger.warning( + "OA batch-update failedData sample chunk=%s size=%s message=%s sample=%s", + i // batch_size + 1, + len(chunk), + message, + sample_items, + ) logger.info( - "OA batch-update chunk done chunk_size=%s success=%s failed=%s", + "OA batch-update chunk done chunk_size=%s success=%s failed=%s message=%s", len(chunk), int(data.get("successCount", 0) or 0), int(data.get("failedCount", 0) or 0), + message, ) + # 若整批 100% 失败,立即抛错终止并返回样本,避免任务表面继续执行。 + if int(data.get("successCount", 0) or 0) == 0 and int(data.get("failedCount", 0) or 0) == len(chunk): + raise RuntimeError( + "OA batch-update chunk all failed; " + f"message={message!r}; failed_sample={list(fd.items())[:20] if isinstance(fd, dict) else fd!r}" + ) return { "ehr_total_rows": len(emp_rows),