From c285c1ba5e1a3a9b4f46383a196e44a2d08bee4a Mon Sep 17 00:00:00 2001 From: chenqi Date: Sun, 21 Jun 2026 09:23:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(emr):=20=E6=B7=BB=E5=8A=A0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E8=BF=81=E7=A7=BB=E8=84=9A=E6=9C=AC=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E8=80=81=E7=97=85=E5=8E=86=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 自动清空假数据 - 从doc_emr同步修订历史(每条病历创建初始修订记录) - 从doc_emr同步搜索索引(提取患者、诊断、医生等信息) - 应用启动时自动执行 --- .../V100__sync_existing_emr_data.sql | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V100__sync_existing_emr_data.sql diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V100__sync_existing_emr_data.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V100__sync_existing_emr_data.sql new file mode 100644 index 000000000..4a0faef2d --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V100__sync_existing_emr_data.sql @@ -0,0 +1,78 @@ +-- V100__sync_existing_emr_data.sql +-- 同步已有的门诊/住院病历到修订历史和搜索索引 + +-- 1. 清空假数据 +TRUNCATE TABLE emr_revision CASCADE; +TRUNCATE TABLE emr_search_index CASCADE; + +-- 2. 从doc_emr同步修订历史(为每条病历创建初始修订记录) +INSERT INTO emr_revision ( + id, emr_id, encounter_id, revision_number, + operator_id, operator_name, operation_type, + diff_content, snapshot_content, create_time +) +SELECT + nextval('emr_revision_id_seq'), + e.id, + e.encounter_id, + 1, + COALESCE(e.record_id, 1), + '系统同步', + 'CREATE', + '初始创建 - 从历史病历同步', + e.context_json, + COALESCE(e.create_time, NOW()) +FROM doc_emr e +WHERE e.id IS NOT NULL + AND NOT EXISTS ( + SELECT 1 FROM emr_revision r WHERE r.emr_id = e.id + ); + +-- 3. 从doc_emr同步搜索索引 +INSERT INTO emr_search_index ( + id, emr_id, encounter_id, patient_id, patient_name, + emr_type, emr_title, diagnosis_text, + doctor_name, department_name, create_time, update_time +) +SELECT + nextval('emr_search_index_id_seq'), + e.id, + e.encounter_id, + e.patient_id, + COALESCE(p.name, '患者' || e.patient_id), + CASE + WHEN e.class_enum = 1 THEN 'OUTPATIENT' + WHEN e.class_enum = 2 THEN 'INPATIENT' + ELSE 'OTHER' + END, + COALESCE( + NULLIF(TRIM(BOTH '"' FROM + SPLIT_PART( + SPLIT_PART(e.context_json, '"chiefComplaint"', 2), + ':', 2 + ) + ), ''), + '未命名病历' + ), + COALESCE( + NULLIF(TRIM(BOTH '"' FROM + SPLIT_PART( + SPLIT_PART(e.context_json, '"diagnosis"', 2), + ':', 2 + ) + ), ''), + '' + ), + COALESCE(u.name, '医生' || e.record_id), + COALESCE(o.name, '未知科室'), + COALESCE(e.create_time, NOW()), + COALESCE(e.update_time, NOW()) +FROM doc_emr e +LEFT JOIN patient p ON e.patient_id = p.id +LEFT JOIN sys_user u ON e.record_id = u.user_id +LEFT JOIN adm_encounter enc ON e.encounter_id = enc.id +LEFT JOIN sys_organization o ON enc.organization_id = o.id +WHERE e.id IS NOT NULL + AND NOT EXISTS ( + SELECT 1 FROM emr_search_index si WHERE si.emr_id = e.id + );