From cc3faac61fdb5c8bd299c49680a39cf8e0d2a036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=BE=BD?= <关羽@gentronhealth.com> Date: Sat, 16 May 2026 15:11:10 +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. 列位置回归问题 — commit 718e7a90 已将"申请单状态"列移至"申请单号"之后, 但后续 commit e65f1212 合并时意外恢复为"申请单号→申请者→申请单状态"的错误顺序。 2. SQL 状态计算冗余 — Mapper XML 使用复杂的 CASE + MIN(wsr.status_enum) 聚合表达式 从 wor_service_request 计算状态,但 doc_request_form 表已有 status 字段直接存储状态值。 CASE 表达式在 MIN=0 时返回 NULL(虽然当前枚举没有 0 值),且聚合逻辑在多条 ServiceRequest 记录场景下可能不准确。 修复: - 前端:恢复"申请单号→申请单状态→申请者→操作"的列顺序 - 后端:简化 SQL 为直接使用 drf.status 字段,删除 CASE 表达式及 WHERE 中的聚合过滤 Co-Authored-By: Claude Opus 4.7 --- .../RequestFormManageAppMapper.xml | 24 +++---------------- .../applicationShow/examineApplication.vue | 2 +- 2 files changed, 4 insertions(+), 22 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 ec834bd46..0b0351431 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 @@ -19,16 +19,7 @@ drf.requester_id, drf.create_time, ap.NAME AS patient_name, - 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 + drf.status FROM doc_request_form AS drf LEFT JOIN adm_encounter AS ae ON ae.ID = drf.encounter_id AND ae.delete_flag = '0' @@ -46,16 +37,7 @@ AND drf.create_time <= (#{endDate}::date + INTERVAL '1 day' - INTERVAL '1 second') - 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 + AND drf.status = #{status}::integer AND (drf.prescription_no ILIKE '%' || #{keyword} || '%' @@ -71,7 +53,7 @@ )) GROUP BY drf.id, drf.encounter_id, drf.prescription_no, drf.name, drf.desc_json, - drf.requester_id, drf.create_time, ap.name + drf.requester_id, drf.create_time, ap.name, drf.status