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 + );