fix(regdoctorstation): RegPrescriptionUtils groupingBy null key保护

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/空 -> 走普通处方号
This commit is contained in:
2026-06-17 09:32:19 +08:00
parent 81d5c99a35
commit 2a0303d0e6

View File

@@ -26,9 +26,11 @@ public class RegPrescriptionUtils {
if (medicineList == null || medicineList.isEmpty()) {
return;
}
// 1. 按诊断ID分组不同诊断必须分开
// 1. 按诊断ID分组不同诊断必须分开null值归为一组
Map<Long, List<RegAdviceSaveDto>> 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<String, List<RegAdviceSaveDto>> 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<Integer, List<RegAdviceSaveDto>> 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 {
}
}
}
}