From e473e5159b0544c589023708af5505a6f7ff6f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=BE=BD?= <关羽@gentronhealth.com> Date: Sat, 16 May 2026 13:14:12 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#444:=20=E6=A0=B9=E5=9B=A0+?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=B9=E6=A1=88=E6=91=98=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 根因分析 门诊手术安排的"生成临时医嘱"界面中,"已引用计费药品"列表未正常显示药品名称。 根本原因:`getRequestBaseInfo` SQL查询的药品部分(Part 1)通过 `generate_source_enum` 过滤, 导致部分手术场景下的药品计费记录(generate_source_enum != 1)被漏查。 之前的修复(commit 97d0011)仅在前端添加了名称回退字段,未解决后端数据查询遗漏问题。 ## 修复方案 在 DoctorStationAdviceAppMapper.xml 中新增 Part 1b 查询段: - 直接从 adm_charge_item 表补充查询药品计费记录 - 通过 INNER JOIN med_medication_request → med_medication_definition 获取药品名称 - 使用 NOT EXISTS 排除 Part 1 已返回的记录,避免 UNION ALL 重复 - 不依赖 generate_source_enum 过滤,确保所有药品计费记录都能被查询 Co-Authored-By: Claude Opus 4.7 --- .../DoctorStationAdviceAppMapper.xml | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml index c8bbfdbdd..a6ce1d80d 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml @@ -539,6 +539,65 @@ AND T1.refund_medicine_id IS NULL ORDER BY T1.status_enum,T1.sort_number) UNION ALL + -- 🔧 Bug #444: 直接从计费项目表补充查询药品记录,用于覆盖med_medication_request有记录但generate_source_enum不匹配的场景 + (SELECT 1 AS advice_type, + T1.service_id AS request_id, + T1.service_id || '-ci-med' AS unique_key, + '' AS prescription_no, + T1.enterer_id AS requester_id, + T1.entered_date AS request_time, + CASE WHEN T1.enterer_id = #{practitionerId} THEN '1' ELSE '0' END AS biz_request_flag, + T2.content_json AS content_json, + NULL AS skin_test_flag, + NULL AS inject_flag, + NULL AS group_id, + T3.NAME AS advice_name, + T4.total_volume AS volume, + T2.lot_number AS lot_number, + T1.quantity_value AS quantity, + T1.quantity_unit AS unit_code, + T1.status_enum AS status_enum, + '' AS method_code, + '' AS rate_code, + NULL AS dose, + '' AS dose_unit_code, + T1.id AS charge_item_id, + T1.unit_price AS unit_price, + T1.total_price AS total_price, + T1.status_enum AS charge_status, + NULL AS position_id, + '' AS position_name, + NULL AS dispense_per_duration, + T3.part_percent AS part_percent, + '' AS condition_definition_name, + T2.sort_number AS sort_number, + NULL AS based_on_id, + NULL AS category_enum, + T1.encounter_id AS encounter_id, + T1.patient_id AS patient_id, + 'med_medication_definition' AS advice_table_name, + T3.ID AS advice_definition_id + FROM adm_charge_item AS T1 + INNER JOIN med_medication_request AS T2 ON T2.ID = T1.service_id AND T2.delete_flag = '0' + LEFT JOIN med_medication_definition AS T3 ON T3.ID = T2.medication_id AND T3.delete_flag = '0' + LEFT JOIN med_medication AS T4 ON T4.medication_def_id = T3.ID AND T4.delete_flag = '0' + WHERE T1.delete_flag = '0' + AND T1.service_table = #{MED_MEDICATION_REQUEST} + + AND T1.encounter_id = #{encounterId} + + + AND T1.patient_id = #{patientId} AND T1.encounter_id != #{encounterId} + + AND NOT EXISTS ( + SELECT 1 FROM med_medication_request T5 + WHERE T5.ID = T1.service_id AND T5.delete_flag = '0' + + AND T5.generate_source_enum = #{generateSourceEnum} + + ) + ORDER BY T1.entered_date) + UNION ALL -- 🔧 查询仅存在于 adm_charge_item 的"孤儿"耗材数据(DeviceRequest 缺失或 generate_source_enum 未设置) -- 正常 DeviceRequest(generate_source_enum 已赋值)由下方 Part 3 统一负责,此处不做重复覆盖避免 UNION ALL 重复行 (SELECT 2 AS advice_type,