Fix Bug #475: 【住院医生工作站】开立检查申请单报错"请先配置当前时间段的执行科室"后,系统仍生成申请记录
合并验证逻辑:移除独立的"配置列表是否为空"检查,改为在遍历 activityList 时统一验证每个项目的执行科室配置。所有验证在任何数据库操作之前完成, 确保验证失败时不会产生脏数据。同时增加 activityList 为空时的明确提示。
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user