From cb7f1e42cdd1ccb09239f01114838163e489c0d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=8E=E4=BD=97?= <华佗@gentronhealth.com> Date: Sat, 9 May 2026 18:58:57 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#457:=20=E9=97=A8=E8=AF=8A=E6=94=B6?= =?UTF-8?q?=E8=B4=B9=EF=BC=9A=E5=B7=B2=E7=AD=BE=E5=8F=91=E7=9A=84=E6=89=8B?= =?UTF-8?q?=E6=9C=AF=E7=B1=BB=E5=8C=BB=E5=98=B1=E5=9C=A8=E9=97=A8=E8=AF=8A?= =?UTF-8?q?=E6=94=B6=E8=B4=B9=E5=88=97=E8=A1=A8=E4=B8=AD=E4=B8=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=A1=B9=E7=9B=AE=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因分析:手术类收费项的 context_enum = 6 (SURGERY),但 SQL 查询的 CASE 语句 只匹配 context_enum = #{activity} (值=3),导致手术类医嘱无法匹配任何 CASE 分支, item_name 返回 NULL。 修复方案:在 selectEncounterPatientPrescription 和 selectEncounterPatientPrescriptionWithPrice 两个查询的 item_name/yb_no/item_id CASE 语句中增加 context_enum = 6 (手术) 的匹配分支: - product_table = 'cli_surgery' 时从 cli_surgery 表获取手术名称 - product_id = 0 且 service_table = 'wor_service_request' 时从 content_json 获取医嘱名称 - 其他情况从 wor_activity_definition 获取名称 Co-Authored-By: Claude Opus 4.7 --- .../chargemanage/OutpatientChargeAppMapper.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml index 3a6ddc45..6899f247 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml @@ -96,6 +96,9 @@ T8.contract_name, CASE WHEN T1.context_enum = #{activity} AND T1.product_table = 'cli_surgery' THEN T9.surgery_name + WHEN T1.context_enum = 6 AND T1.product_table = 'cli_surgery' THEN T9.surgery_name + WHEN T1.context_enum = 6 AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN COALESCE(wsr.content_json::json->>'adviceName', T2."name") + WHEN T1.context_enum = 6 THEN T2."name" WHEN T1.context_enum = #{activity} AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN COALESCE(wsr.content_json::json->>'adviceName', T2."name") WHEN T1.context_enum = #{activity} THEN T2."name" WHEN T1.context_enum = #{medication} THEN T3."name" @@ -103,6 +106,9 @@ END AS item_name, CASE WHEN T1.context_enum = #{activity} AND T1.product_table = 'cli_surgery' THEN NULL + WHEN T1.context_enum = 6 AND T1.product_table = 'cli_surgery' THEN NULL + WHEN T1.context_enum = 6 AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN NULL + WHEN T1.context_enum = 6 THEN T2.yb_no WHEN T1.context_enum = #{activity} AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN NULL WHEN T1.context_enum = #{activity} THEN T2.yb_no WHEN T1.context_enum = #{medication} THEN T3.yb_no @@ -110,6 +116,9 @@ END AS yb_no, CASE WHEN T1.context_enum = #{activity} AND T1.product_table = 'cli_surgery' THEN T9.id + WHEN T1.context_enum = 6 AND T1.product_table = 'cli_surgery' THEN T9.id + WHEN T1.context_enum = 6 AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN 0 + WHEN T1.context_enum = 6 THEN T2.id WHEN T1.context_enum = #{activity} AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN 0 WHEN T1.context_enum = #{activity} THEN T2.id WHEN T1.context_enum = #{medication} THEN T3.id @@ -212,6 +221,9 @@ T8.contract_name, CASE WHEN T1.context_enum = #{activity} AND T1.product_table = 'cli_surgery' THEN T9.surgery_name + WHEN T1.context_enum = 6 AND T1.product_table = 'cli_surgery' THEN T9.surgery_name + WHEN T1.context_enum = 6 AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN COALESCE(wsr.content_json::json->>'adviceName', T2."name") + WHEN T1.context_enum = 6 THEN T2."name" WHEN T1.context_enum = #{activity} AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN COALESCE(wsr.content_json::json->>'adviceName', T2."name") WHEN T1.context_enum = #{activity} THEN T2."name" WHEN T1.context_enum = #{medication} THEN T3."name" @@ -219,6 +231,9 @@ END AS item_name, CASE WHEN T1.context_enum = #{activity} AND T1.product_table = 'cli_surgery' THEN NULL + WHEN T1.context_enum = 6 AND T1.product_table = 'cli_surgery' THEN NULL + WHEN T1.context_enum = 6 AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN NULL + WHEN T1.context_enum = 6 THEN T2.yb_no WHEN T1.context_enum = #{activity} AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN NULL WHEN T1.context_enum = #{activity} THEN T2.yb_no WHEN T1.context_enum = #{medication} THEN T3.yb_no @@ -226,6 +241,9 @@ END AS yb_no, CASE WHEN T1.context_enum = #{activity} AND T1.product_table = 'cli_surgery' THEN T9.id + WHEN T1.context_enum = 6 AND T1.product_table = 'cli_surgery' THEN T9.id + WHEN T1.context_enum = 6 AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN 0 + WHEN T1.context_enum = 6 THEN T2.id WHEN T1.context_enum = #{activity} AND T1.product_id = 0 AND T1.service_table = 'wor_service_request' THEN 0 WHEN T1.context_enum = #{activity} THEN T2.id WHEN T1.context_enum = #{medication} THEN T3.id