From b435de9e7b250203b7539515e447d620039e2d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=BE=BD?= <关羽@gentronhealth.com> Date: Thu, 14 May 2026 16:15:51 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#519:=20[=E9=97=A8=E8=AF=8A?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E7=AB=99-=E8=AF=8A=E6=96=AD-=E6=8A=A5?= =?UTF-8?q?=E5=8D=A1]=20=E5=B7=B2=E5=AE=8C=E6=88=90=E4=BC=A0=E6=9F=93?= =?UTF-8?q?=E7=97=85=E6=8A=A5=E5=8D=A1=E7=9A=84=E8=AF=8A=E6=96=AD=E5=9C=A8?= =?UTF-8?q?=E5=86=8D=E6=AC=A1=E7=82=B9=E4=BF=9D=E5=AD=98=E6=97=B6=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E5=BC=B9=E5=87=BA=E6=8A=A5=E5=8D=A1=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:handleInfectiousDiseaseReport() 仅根据诊断名称匹配传染病,未校验该诊断是否已有已提交的报卡记录。 修复方案: 1. 后端 DiagnosisQueryDto 新增 hasInfectiousReport 字段 2. getEncounterDiagnosis SQL 通过 EXISTS 子查询关联 infectious_card 表, 判断是否存在 status >= 1(已提交/已审核/已上报)的报卡记录 3. 前端 handleInfectiousDiseaseReport() 过滤掉 hasInfectiousReport === 1 的诊断,不再弹出报卡 Co-Authored-By: Claude Opus 4.7 --- .../web/doctorstation/dto/DiagnosisQueryDto.java | 5 +++++ .../doctorstation/DoctorStationDiagnosisAppMapper.xml | 6 +++++- .../doctorstation/components/diagnosis/diagnosis.vue | 10 ++++++---- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/DiagnosisQueryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/DiagnosisQueryDto.java index 9d0c94596..97dd2a175 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/DiagnosisQueryDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/DiagnosisQueryDto.java @@ -96,4 +96,9 @@ public class DiagnosisQueryDto { */ private String diagnosisDoctor; + /** + * 是否已有传染病报卡(0-无,1-有) + */ + private Integer hasInfectiousReport; + } diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationDiagnosisAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationDiagnosisAppMapper.xml index bad78f219..9289a857d 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationDiagnosisAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationDiagnosisAppMapper.xml @@ -134,7 +134,11 @@ T2.yb_no, T1.onset_date AS onsetDate, T1.diagnosis_time AS diagnosisTime, - T1.doctor AS diagnosisDoctor + T1.doctor AS diagnosisDoctor, + CASE WHEN EXISTS ( + SELECT 1 FROM infectious_card T4 + WHERE T4.diag_id = T2.id AND T4.delete_flag = '0' AND T4.status >= 1 + ) THEN 1 ELSE 0 END AS hasInfectiousReport FROM adm_encounter_diagnosis AS T1 LEFT JOIN cli_condition AS T2 ON T2.ID = T1.condition_id AND T2.delete_flag = '0' AND T2.tcm_flag = 0 diff --git a/openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue b/openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue index 13248f8a1..0365b8802 100755 --- a/openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue @@ -692,6 +692,7 @@ async function handleFoodDiseasesCheck() { /** * 传染病报告卡处理 * 通过诊断名称自动识别并勾选传染病报告卡中的疾病 + * 修复 Bug #519:跳过已有已提交报卡的诊断 */ function handleInfectiousDiseaseReport() { // 疾病名称到报卡编码的映射(根据传染病报告卡弹窗中的疾病列表) @@ -743,8 +744,9 @@ function handleInfectiousDiseaseReport() { '手足口病': '0311', }; - // 获取所有诊断名称对应的报卡编码 + // 获取所有诊断名称对应的报卡编码,但跳过已有已提交报卡的诊断 const allSelectedDiseases = form.value.diagnosisList + .filter(d => d.name && d.hasInfectiousReport !== 1) .map(d => diseaseNameToCode[d.name] || null) .filter(code => code); @@ -752,9 +754,9 @@ function handleInfectiousDiseaseReport() { return; } - // 优先使用主诊断 - const mainDiagnosis = form.value.diagnosisList.find(d => d.maindiseFlag === 1); - const firstDiagnosis = form.value.diagnosisList[0]; + // 优先使用主诊断(同样跳过已有报卡的) + const mainDiagnosis = form.value.diagnosisList.find(d => d.maindiseFlag === 1 && d.hasInfectiousReport !== 1); + const firstDiagnosis = form.value.diagnosisList.find(d => d.hasInfectiousReport !== 1) || form.value.diagnosisList[0]; const diagnosisToShow = { ...(mainDiagnosis || firstDiagnosis),