Fix Bug #489: 【医嘱闭环】医生站签发单条长期药品医嘱,护士校对界面生成重复(两条)待校对记录

根因:selectInpatientAdvicePage 查询中,med_medication (T3) 和 med_medication_dispense (mmd) 的 LEFT JOIN 在一对多关系下产生笛卡尔积,导致单条药品医嘱返回多行重复记录。

修复方案:
1. 将 T3.total_volume 改为关联子查询,避免同一药品定义多条库存记录导致行倍增
2. 将 mmd.dispense_status 改为关联子查询,避免同一医嘱请求多条发药记录导致行倍增
3. 移除对应的 LEFT JOIN

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
关羽
2026-05-10 16:04:04 +08:00
parent 905a609852
commit 7cac4701b9

View File

@@ -169,7 +169,7 @@
T1.performer_check_id,
T2."name" AS advice_name,
T2.id AS item_id,
T3.total_volume AS volume,
(SELECT mm.total_volume FROM med_medication mm WHERE mm.medication_def_id = T2.id AND mm.delete_flag = '0' LIMIT 1) AS volume,
T1.lot_number AS lot_number,
T1.quantity AS quantity,
T1.unit_code AS unit_code,
@@ -199,14 +199,11 @@
personal_account.balance_amount,
personal_account.id AS account_id,
T2.category_code,
mmd.status_enum AS dispense_status
(SELECT mmd.status_enum FROM med_medication_dispense mmd WHERE mmd.med_req_id = T1.id AND mmd.delete_flag = '0' LIMIT 1) AS dispense_status
FROM med_medication_request AS T1
LEFT JOIN med_medication_definition AS T2
ON T2.id = T1.medication_id
AND T2.delete_flag = '0'
LEFT JOIN med_medication AS T3
ON T3.medication_def_id = T2.ID
AND T3.delete_flag = '0'
LEFT JOIN adm_location AS al1
ON al1.id = T1.perform_location
AND al1.delete_flag = '0'
@@ -280,9 +277,6 @@
aa.balance_amount
) AS personal_account
ON personal_account.encounter_id = ae.id
LEFT JOIN med_medication_dispense mmd
ON mmd.med_req_id = T1.id
AND mmd.delete_flag = '0'
WHERE T1.delete_flag = '0'
AND T1.refund_medicine_id IS NULL
AND T1.generate_source_enum = #{doctorPrescription}