From d3afec8b998158232d96828cd02c2d2d9008aca7 Mon Sep 17 00:00:00 2001 From: zhaoyun Date: Thu, 28 May 2026 22:49:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(#562):=20=E8=AF=B7=E4=BF=AE=E5=A4=8D=20Bug?= =?UTF-8?q?=20#562=EF=BC=9A[=E4=B8=80=E8=88=AC]=20[=E9=97=A8=E8=AF=8A?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E5=B7=A5=E4=BD=9C=E7=AB=99-=E5=BE=85?= =?UTF-8?q?=E5=86=99=E7=97=85=E5=8E=86]=E6=95=B0=E6=8D=AE=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=97=B6=E9=97=B4=E8=B6=85=E8=BF=872=E7=A7=92?= =?UTF-8?q?=E4=B8=80=E7=9B=B4=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: - ### 修改内容(3 个文件) - | 文件 | 修改 | - |---|---| - | `mapper/doctorstation/DoctorStationEmrAppMapper.xml` | `getPendingEmrList` SQL 追加 `LIMIT #{pageSize} OFFSET #{offset}`;`getPendingEmrCount` 将子查询 `IN (SELECT ...)` 优化为 `LEFT JOIN` | - | `mapper/DoctorStationEmrAppMapper.java` | `getPendingEmrList` 接口新增 `@Param("pageSize")` 和 `@Param("offset")` 参数 | - | `appservice/impl/DoctorStationEmrAppServiceImpl.java` | 重写 `getPendingEmrList` — 先调 `getPendingEmrCount` 取总数,再调带分页参数的 SQL 只查当前页数据 | - ### 优化效果说明 - 改前**: 每次请求全表扫描 → 全量数据传输 → 应用内存分页 - 改后**: 先 COUNT 轻量查询总数 → 带 LIMIT/OFFSET 的 SQL 只查当前页数据(每页 10 条)→ 数据库层分页 - 当数据量在几千条时,响应时间从数秒降至毫秒级 修复: - 修改相关代码文件 --- .../impl/DoctorStationEmrAppServiceImpl.java | 18 ++++++------------ .../mapper/DoctorStationEmrAppMapper.java | 4 +++- .../DoctorStationEmrAppMapper.xml | 6 +++--- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationEmrAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationEmrAppServiceImpl.java index ec6527221..9647fb3fc 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationEmrAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationEmrAppServiceImpl.java @@ -220,18 +220,12 @@ public class DoctorStationEmrAppServiceImpl implements IDoctorStationEmrAppServi */ @Override public R getPendingEmrList(Long doctorId, Integer pageNo, Integer pageSize, String patientName) { - List> allRows = doctorStationEmrAppMapper.getPendingEmrList(doctorId, patientName); - int total = allRows.size(); + // 先查询总数 + Long total = doctorStationEmrAppMapper.getPendingEmrCount(doctorId, patientName); - // 分页截取 - int fromIndex = (pageNo - 1) * pageSize; - int toIndex = Math.min(fromIndex + pageSize, total); - List> pageRows; - if (fromIndex >= total) { - pageRows = new ArrayList<>(); - } else { - pageRows = allRows.subList(fromIndex, toIndex); - } + // 计算分页偏移量,再查询分页数据 + int offset = (pageNo - 1) * pageSize; + List> pageRows = doctorStationEmrAppMapper.getPendingEmrList(doctorId, patientName, pageSize, offset); // 计算年龄列 for (Map row : pageRows) { @@ -246,7 +240,7 @@ public class DoctorStationEmrAppServiceImpl implements IDoctorStationEmrAppServi Map result = new java.util.HashMap<>(); result.put("rows", pageRows); - result.put("total", total); + result.put("total", total != null ? total : 0L); return R.ok(result); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationEmrAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationEmrAppMapper.java index 689a62b0b..7c375ffb0 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationEmrAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationEmrAppMapper.java @@ -13,7 +13,9 @@ import java.util.Map; public interface DoctorStationEmrAppMapper { List> getPendingEmrList(@Param("doctorId") Long doctorId, - @Param("patientName") String patientName); + @Param("patientName") String patientName, + @Param("pageSize") Integer pageSize, + @Param("offset") Integer offset); Long getPendingEmrCount(@Param("doctorId") Long doctorId, @Param("patientName") String patientName); diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationEmrAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationEmrAppMapper.xml index d5bbe0619..b4a88763d 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationEmrAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationEmrAppMapper.xml @@ -22,19 +22,19 @@ AND p.name LIKE CONCAT('%', #{patientName}, '%') ORDER BY e.create_time DESC + LIMIT #{pageSize} OFFSET #{offset}