Fix Bug #444: 根因+修复方案摘要
## 根因分析 门诊手术安排的"生成临时医嘱"界面中,"已引用计费药品"列表未正常显示药品名称。 根本原因:`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 <noreply@anthropic.com>
This commit is contained in:
@@ -539,6 +539,65 @@
|
|||||||
AND T1.refund_medicine_id IS NULL
|
AND T1.refund_medicine_id IS NULL
|
||||||
ORDER BY T1.status_enum,T1.sort_number)
|
ORDER BY T1.status_enum,T1.sort_number)
|
||||||
UNION ALL
|
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}
|
||||||
|
<if test="historyFlag == '0'.toString()">
|
||||||
|
AND T1.encounter_id = #{encounterId}
|
||||||
|
</if>
|
||||||
|
<if test="historyFlag == '1'.toString()">
|
||||||
|
AND T1.patient_id = #{patientId} AND T1.encounter_id != #{encounterId}
|
||||||
|
</if>
|
||||||
|
AND NOT EXISTS (
|
||||||
|
SELECT 1 FROM med_medication_request T5
|
||||||
|
WHERE T5.ID = T1.service_id AND T5.delete_flag = '0'
|
||||||
|
<if test="generateSourceEnum != null">
|
||||||
|
AND T5.generate_source_enum = #{generateSourceEnum}
|
||||||
|
</if>
|
||||||
|
)
|
||||||
|
ORDER BY T1.entered_date)
|
||||||
|
UNION ALL
|
||||||
-- 🔧 查询仅存在于 adm_charge_item 的"孤儿"耗材数据(DeviceRequest 缺失或 generate_source_enum 未设置)
|
-- 🔧 查询仅存在于 adm_charge_item 的"孤儿"耗材数据(DeviceRequest 缺失或 generate_source_enum 未设置)
|
||||||
-- 正常 DeviceRequest(generate_source_enum 已赋值)由下方 Part 3 统一负责,此处不做重复覆盖避免 UNION ALL 重复行
|
-- 正常 DeviceRequest(generate_source_enum 已赋值)由下方 Part 3 统一负责,此处不做重复覆盖避免 UNION ALL 重复行
|
||||||
(SELECT 2 AS advice_type,
|
(SELECT 2 AS advice_type,
|
||||||
|
|||||||
Reference in New Issue
Block a user