From 2a0303d0e67476ef52a7877d3513d0671a717304 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 09:32:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(regdoctorstation):=20RegPrescriptionUtils?= =?UTF-8?q?=20groupingBy=20null=20key=E4=BF=9D=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug #674: 住院签发长期医嘱时 conditionDefinitionId/pharmacologyCategoryCode/therapyEnum 为 null 导致 Collectors.groupingBy 抛出 NPE 'element cannot be mapped to a null key' 修复:对齐门诊版 PrescriptionUtils 的 null 处理逻辑 - getConditionDefinitionId null -> 默认 0L - getPharmacologyCategoryCode null -> 默认 '0' - getTherapyEnum null -> 默认 0 - generatePrescriptionNo null/空 -> 走普通处方号 --- .../utils/RegPrescriptionUtils.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/utils/RegPrescriptionUtils.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/utils/RegPrescriptionUtils.java index 1a5dcae06..83a499a85 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/utils/RegPrescriptionUtils.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/utils/RegPrescriptionUtils.java @@ -26,9 +26,11 @@ public class RegPrescriptionUtils { if (medicineList == null || medicineList.isEmpty()) { return; } - // 1. 按诊断ID分组(不同诊断必须分开) + // 1. 按诊断ID分组(不同诊断必须分开,null值归为一组) Map> diagnosisGroups = - medicineList.stream().collect(Collectors.groupingBy(RegAdviceSaveDto::getConditionDefinitionId)); + medicineList.stream().collect(Collectors.groupingBy(dto -> + dto.getConditionDefinitionId() != null ? dto.getConditionDefinitionId() : 0L + )); // 2. 处理每个诊断组 diagnosisGroups.values().forEach(this::processDiagnosisGroup); } @@ -40,14 +42,18 @@ public class RegPrescriptionUtils { if (diagnosisGroup.isEmpty()) { return; } - // 1. 按药品性质分组 + // 1. 按药品性质分组(null值归为普通药品) Map> pharmacologyGroups = - diagnosisGroup.stream().collect(Collectors.groupingBy(RegAdviceSaveDto::getPharmacologyCategoryCode)); + diagnosisGroup.stream().collect(Collectors.groupingBy(dto -> + dto.getPharmacologyCategoryCode() != null ? dto.getPharmacologyCategoryCode() : "0" + )); // 2. 处理每个药品性质组 pharmacologyGroups.values().forEach(pharmaGroup -> { // 2.1 按治疗类型分组 Map> therapyGroups = - pharmaGroup.stream().collect(Collectors.groupingBy(RegAdviceSaveDto::getTherapyEnum)); + pharmaGroup.stream().collect(Collectors.groupingBy(dto -> + dto.getTherapyEnum() != null ? dto.getTherapyEnum() : 0 + )); // 2.2 为每组治疗类型生成唯一处方号 therapyGroups.forEach((therapyEnum, group) -> { String prescriptionNo = generatePrescriptionNo(pharmaGroup.get(0).getPharmacologyCategoryCode()); @@ -60,6 +66,9 @@ public class RegPrescriptionUtils { * 根据药品性质生成处方号(前缀规则与原工具类一致) */ private String generatePrescriptionNo(String pharmacologyCategoryCode) { + if (pharmacologyCategoryCode == null || pharmacologyCategoryCode.isEmpty()) { + return assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_COMMON_NO.getPrefix(), 8); + } switch (pharmacologyCategoryCode) { case "2": // 麻醉药品 return assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_NARCOTIC_NO.getPrefix(), 8); @@ -74,4 +83,4 @@ public class RegPrescriptionUtils { } } -} +} \ No newline at end of file