diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java index ad87b75c4..3c8974e9b 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java @@ -87,8 +87,11 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer throw new ServiceException("请先配置当前时间段的执行科室"); } - // 逐个校验activityList中的项目是否都配置了执行科室,避免部分通过后在循环中抛异常导致事务复杂化 + // 逐个校验activityList中的项目是否都配置了执行科室,并收集positionId供后续使用 + // 必须在任何数据库操作之前完成全部校验,避免部分保存后异常导致脏数据 List activityList = requestFormSaveDto.getActivityList(); + // 缓存校验结果,避免主循环中重复查询和可能出现的数据不一致 + java.util.Map activityIdToPositionIdMap = new java.util.HashMap<>(); if (activityList != null && !activityList.isEmpty()) { for (ActivitySaveDto activitySaveDto : activityList) { Long positionId = activityOrganizationConfig.stream() @@ -97,6 +100,7 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer if (positionId == null) { throw new ServiceException(activitySaveDto.getAdviceDefinitionName() + "未配置当前时间段的执行科室"); } + activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), positionId); } } @@ -179,9 +183,7 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer serviceRequest.setEncounterId(encounterId); // 就诊id serviceRequest.setAuthoredTime(curDate); // 请求签发时间 - Long positionId = activityOrganizationConfig.stream() - .filter(dto -> activitySaveDto.getAdviceDefinitionId().equals(dto.getActivityDefinitionId())) - .map(ActivityOrganizationConfigDto::getOrganizationId).findFirst().orElse(null); + Long positionId = activityIdToPositionIdMap.get(activitySaveDto.getAdviceDefinitionId()); if (positionId == null) { throw new ServiceException(activitySaveDto.getAdviceDefinitionName() + "未配置当前时间段的执行科室"); }