From 9a665b7cafe4bfd9029bb9b32abdf50b4e0326bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=BE=BD?= <关羽@gentronhealth.com> Date: Thu, 14 May 2026 16:29:50 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#516:=20[=E4=BD=8F=E9=99=A2?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E7=AB=99-=E4=B8=B4=E5=BA=8A=E5=8C=BB?= =?UTF-8?q?=E5=98=B1-=E6=A3=80=E9=AA=8C=E7=94=B3=E8=AF=B7]=20=E6=A3=80?= =?UTF-8?q?=E9=AA=8C=E7=94=B3=E8=AF=B7=E5=8D=95=E6=89=8B=E5=8A=A8=E5=A1=AB?= =?UTF-8?q?=E5=86=99=E7=9A=84"=E5=8F=91=E5=BE=80=E7=A7=91=E5=AE=A4"?= =?UTF-8?q?=E4=B8=8E=E7=94=9F=E6=88=90=E7=9A=84=E5=8C=BB=E5=98=B1=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E7=A7=91=E5=AE=A4=E4=B8=8D=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:后端 RequestFormManageAppServiceImpl.saveRequestForm() 完全忽略了前端传入的 positionId(用户手动选择的发往科室), 始终从 activityOrganizationConfig 配置表中查询执行科室,导致用户手动选择的科室被默认配置覆盖。 修复:在收集执行科室时优先使用 activitySaveDto.getPositionId()(前端传入的用户选择), 仅在前端未传入时 fallback 到配置表中的执行科室。 **后端开发重点**:优先搜索 Java/Spring 后端代码。 关键词:Controller, Service, Mapper, API, 接口, 数据查询 搜索目录:openhis-server-new/src/, his-repo/src/ Co-Authored-By: Claude Opus 4.7 --- .../impl/RequestFormManageAppServiceImpl.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) 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 6948cd48d..2e09c86bc 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 @@ -90,18 +90,26 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer // 逐个校验activityList中的项目是否都配置了执行科室,并收集positionId供后续使用 // 必须在任何数据库操作之前完成全部校验,避免部分保存后异常导致脏数据 + // 🔧 Bug #516: 优先使用前端传入的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() + // 优先使用前端传入的positionId(用户手动选择的科室) + Long frontendPositionId = activitySaveDto.getPositionId(); + if (frontendPositionId != null) { + activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), frontendPositionId); + continue; + } + // 前端未传入时,使用配置的执行科室 + Long configPositionId = activityOrganizationConfig.stream() .filter(dto -> activitySaveDto.getAdviceDefinitionId().equals(dto.getActivityDefinitionId())) .map(ActivityOrganizationConfigDto::getOrganizationId).findFirst().orElse(null); - if (positionId == null) { + if (configPositionId == null) { throw new ServiceException(activitySaveDto.getAdviceDefinitionName() + "未配置当前时间段的执行科室"); } - activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), positionId); + activityIdToPositionIdMap.put(activitySaveDto.getAdviceDefinitionId(), configPositionId); } }