From dc352ace4aa75d73366f6ab11b7b1dbc95b678f0 Mon Sep 17 00:00:00 2001 From: chenqi Date: Sun, 21 Jun 2026 14:14:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(emr):=20=E4=BF=AE=E5=A4=8D=E5=85=A8?= =?UTF-8?q?=E8=A1=A8=E5=88=A0=E9=99=A4=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用JdbcTemplate执行TRUNCATE替代MyBatis-Plus的remove - 添加备用方案:查询所有ID后批量删除 --- .../web/emr/controller/EmrSyncController.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/controller/EmrSyncController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/controller/EmrSyncController.java index 0646a5156..edc28c872 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/controller/EmrSyncController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/emr/controller/EmrSyncController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.*; import java.util.*; @@ -29,6 +30,7 @@ public class EmrSyncController { private final IEmrService emrService; private final IEmrRevisionService emrRevisionService; private final IEmrSearchIndexService emrSearchIndexService; + private final JdbcTemplate jdbcTemplate; /** * 同步EMR数据 @@ -39,10 +41,25 @@ public class EmrSyncController { public R syncEmrData() { log.info("开始同步EMR数据..."); - // 1. 清空假数据 - emrRevisionService.remove(new LambdaQueryWrapper<>()); - emrSearchIndexService.remove(new LambdaQueryWrapper<>()); - log.info("已清空emr_revision和emr_search_index表"); + // 1. 清空假数据(使用原生SQL避免全表删除限制) + try { + jdbcTemplate.execute("TRUNCATE TABLE emr_revision CASCADE"); + jdbcTemplate.execute("TRUNCATE TABLE emr_search_index CASCADE"); + log.info("已清空emr_revision和emr_search_index表"); + } catch (Exception e) { + log.warn("TRUNCATE失败,尝试使用DELETE: {}", e.getMessage()); + // 备用方案:查询所有ID后删除 + List revisionIds = emrRevisionService.list(new LambdaQueryWrapper().select(EmrRevision::getId)) + .stream().map(EmrRevision::getId).toList(); + if (!revisionIds.isEmpty()) { + emrRevisionService.removeByIds(revisionIds); + } + List searchIndexIds = emrSearchIndexService.list(new LambdaQueryWrapper().select(EmrSearchIndex::getId)) + .stream().map(EmrSearchIndex::getId).toList(); + if (!searchIndexIds.isEmpty()) { + emrSearchIndexService.removeByIds(searchIndexIds); + } + } // 2. 从doc_emr获取所有病历 List emrList = emrService.list(new LambdaQueryWrapper()