Fix Bug #475: 【住院医生工作站】开立检查申请单报错"请先配置当前时间段的执行科室"后,系统仍生成申请记录

合并验证逻辑:移除独立的"配置列表是否为空"检查,改为在遍历 activityList
时统一验证每个项目的执行科室配置。所有验证在任何数据库操作之前完成,
确保验证失败时不会产生脏数据。同时增加 activityList 为空时的明确提示。
This commit is contained in:
关羽
2026-05-14 22:07:57 +08:00
committed by 赵云
parent 6940c3861d
commit 1dbf7859ea

View File

@@ -81,20 +81,20 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
Long requestFormId = requestFormSaveDto.getRequestFormId(); Long requestFormId = requestFormSaveDto.getRequestFormId();
boolean isEdit = requestFormId != null && requestFormId != 0L; boolean isEdit = requestFormId != null && requestFormId != 0L;
// 诊疗执行科室配置校验(必须在任何数据库操作之前) // 校验所有activityList中的项目是否都配置了执行科室并收集positionId供后续使用
List<ActivityOrganizationConfigDto> activityOrganizationConfig = // 必须在任何数据库操作之前完成全部校验,避免部分保存后异常导致脏数据
requestFormManageAppMapper.getActivityOrganizationConfig(typeCode); List<ActivitySaveDto> activityList = requestFormSaveDto.getActivityList();
if (activityOrganizationConfig.isEmpty()) { if (activityList == null || activityList.isEmpty()) {
throw new ServiceException("先配置当前时间段的执行科室"); throw new ServiceException("选择检查项目");
} }
// 逐个校验activityList中的项目是否都配置了执行科室并收集positionId供后续使用 // 🔧 Bug #475: 查询诊疗执行科室配置
// 必须在任何数据库操作之前完成全部校验,避免部分保存后异常导致脏数据 List<ActivityOrganizationConfigDto> activityOrganizationConfig =
// 🔧 Bug #516: 优先使用前端传入的positionId用户手动选择的发往科室仅在未选择时使用配置的执行科室 requestFormManageAppMapper.getActivityOrganizationConfig(typeCode);
List<ActivitySaveDto> activityList = requestFormSaveDto.getActivityList();
// 缓存校验结果,避免主循环中重复查询和可能出现的数据不一致 // 缓存校验结果,先全部验证通过后再进行数据库操作
// 优先使用前端传入的positionId用户手动选择的发往科室仅在未选择时使用配置的执行科室
java.util.Map<Long, Long> activityIdToPositionIdMap = new java.util.HashMap<>(); java.util.Map<Long, Long> activityIdToPositionIdMap = new java.util.HashMap<>();
if (activityList != null && !activityList.isEmpty()) {
for (ActivitySaveDto activitySaveDto : activityList) { for (ActivitySaveDto activitySaveDto : activityList) {
// 优先使用前端传入的positionId用户手动选择的科室 // 优先使用前端传入的positionId用户手动选择的科室
Long frontendPositionId = activitySaveDto.getPositionId(); Long frontendPositionId = activitySaveDto.getPositionId();
@@ -111,7 +111,6 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
} }
activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), configPositionId); activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), configPositionId);
} }
}
// 诊疗处方号 // 诊疗处方号
String prescriptionNo; String prescriptionNo;