From f4aa45be890b39f57b7c1b3e5bf0eb3183fa5bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=BE=BD?= <关羽@gentronhealth.com> Date: Thu, 14 May 2026 14:26:12 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#497:=20=E3=80=90=E4=BD=8F=E9=99=A2?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E5=B7=A5=E4=BD=9C=E7=AB=99-=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E7=94=B3=E8=AF=B7=E3=80=91=E6=A3=80=E6=9F=A5=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=88=97=E8=A1=A8=E7=BC=BA=E5=A4=B1"=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=8D=95=E7=8A=B6=E6=80=81"=E5=88=97=E5=8F=8A?= =?UTF-8?q?=E5=85=A8=E6=B5=81=E7=A8=8B=E9=97=AD=E7=8E=AF=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因分析: 1. SQL CASE 映射不完整:status_enum=3(COMPLETED) 直接映射为应用状态 4(已接收), 跳过了 2(已校对) 和 3(待接收) 2. status_enum=8 在数据中存在但枚举类中缺失定义 3. 前端已完整实现状态列和交互逻辑,问题在后端返回的状态值不正确 修复内容: - RequestFormManageAppMapper.xml: 重构 SQL CASE 语句 - status_enum=3 + performer_check_id 有值 → 2(已校对),利用护士校对标记区分 - status_enum=3 + performer_check_id 为空 → 4(已接收) - status_enum=4(ON_HOLD) → 3(待接收) - status_enum=5/6/7 → 7(已作废) - status_enum=8 → 6(已出报告) - RequestStatus.java: 补充 COMPLETED_REPORT(8) 枚举值 Co-Authored-By: Claude Opus 4.7 --- .../RequestFormManageAppMapper.xml | 34 +++++++++---------- .../openhis/common/enums/RequestStatus.java | 5 +++ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml index d6318fb6b..4ebf576f8 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml @@ -13,15 +13,14 @@ drf.requester_id, drf.create_time, ap.NAME AS patient_name, - CASE MIN(wsr.status_enum) - WHEN 1 THEN 0 - WHEN 2 THEN 1 - WHEN 3 THEN 4 - WHEN 4 THEN 4 - WHEN 5 THEN 5 - WHEN 6 THEN 5 - WHEN 7 THEN 5 - WHEN 8 THEN 6 + CASE + WHEN MIN(wsr.status_enum) = 1 THEN 0 + WHEN MIN(wsr.status_enum) = 2 THEN 1 + WHEN MIN(wsr.status_enum) = 3 AND MAX(CASE WHEN wsr.performer_check_id IS NOT NULL THEN 1 ELSE 0 END) = 1 THEN 2 + WHEN MIN(wsr.status_enum) = 3 THEN 4 + WHEN MIN(wsr.status_enum) = 4 THEN 3 + WHEN MIN(wsr.status_enum) = 5 OR MIN(wsr.status_enum) = 6 OR MIN(wsr.status_enum) = 7 THEN 7 + WHEN MIN(wsr.status_enum) = 8 THEN 6 ELSE NULL END AS status FROM doc_request_form AS drf @@ -41,15 +40,14 @@ AND drf.create_time <= (#{endDate}::date + INTERVAL '1 day' - INTERVAL '1 second') - AND CASE MIN(wsr.status_enum) - WHEN 1 THEN 0 - WHEN 2 THEN 1 - WHEN 3 THEN 4 - WHEN 4 THEN 4 - WHEN 5 THEN 5 - WHEN 6 THEN 5 - WHEN 7 THEN 5 - WHEN 8 THEN 6 + AND CASE + WHEN MIN(wsr.status_enum) = 1 THEN 0 + WHEN MIN(wsr.status_enum) = 2 THEN 1 + WHEN MIN(wsr.status_enum) = 3 AND MAX(CASE WHEN wsr.performer_check_id IS NOT NULL THEN 1 ELSE 0 END) = 1 THEN 2 + WHEN MIN(wsr.status_enum) = 3 THEN 4 + WHEN MIN(wsr.status_enum) = 4 THEN 3 + WHEN MIN(wsr.status_enum) = 5 OR MIN(wsr.status_enum) = 6 OR MIN(wsr.status_enum) = 7 THEN 7 + WHEN MIN(wsr.status_enum) = 8 THEN 6 ELSE NULL END = #{status}::integer diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java index 20689eaa7..501082d13 100755 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java @@ -49,6 +49,11 @@ public enum RequestStatus implements HisEnumInterface { */ ENDED(7, "ended", "不执行"), + /** + * 已出报告 + */ + COMPLETED_REPORT(8, "completed_report", "已出报告"), + /** * 未知 */