From 4a6f0e61d4982cd57588b953592a2bc3f24ed5cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=A4=87?= <刘备@gentronhealth.com> Date: Wed, 13 May 2026 00:12:31 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#491:=20=E3=80=90=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E7=A7=91=E5=AE=A4=E9=85=8D=E7=BD=AE=E3=80=91=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=97=B6=E7=B3=BB=E7=BB=9F=E6=8A=A5=E9=94=99?= =?UTF-8?q?=20-=20=E4=BF=AE=E5=A4=8DOrganization.getName()=E7=A9=BA?= =?UTF-8?q?=E6=8C=87=E9=92=88=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因分析: 1. organizationLocationInit() 中 Organization.getName() 未做空值过滤,若数据库存在name为null的科室记录会NPE 2. addOrEditOrgLoc() 中 activityDefinitionMapper.selectById().getName() 未对selectById返回null做防护 3. addOrEditOrgLoc() 缺少organizationId前置校验,空值传入可能导致后续流程异常 修复内容: - 第74行:stream中增加 .filter(organization -> organization != null && organization.getName() != null) - 第136-138行:增加organizationId为null时的校验,返回友好错误提示 - 第145-147行:将activityDefinitionMapper.selectById结果先赋值再判空,避免NPE Co-Authored-By: Claude Opus 4.7 --- .../impl/OrganizationLocationAppServiceImpl.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java index c84f11c9d..5dfa1c295 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java @@ -7,6 +7,7 @@ import com.core.common.utils.MessageUtils; import com.openhis.administration.domain.Location; import com.openhis.administration.domain.Organization; import com.openhis.administration.domain.OrganizationLocation; +import com.openhis.workflow.domain.ActivityDefinition; import com.openhis.administration.mapper.OrganizationLocationMapper; import com.openhis.administration.service.ILocationService; import com.openhis.administration.service.IOrganizationLocationService; @@ -70,6 +71,7 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation // 获取科室下拉选列表 List organizationList = organizationService.getList(OrganizationType.DEPARTMENT.getValue(), null); List organizationOptions = organizationList.stream() + .filter(organization -> organization != null && organization.getName() != null) .map(organization -> new OrgLocInitDto.departmentOption(organization.getId(), organization.getName())) .collect(Collectors.toList()); initDto.setLocationFormOptions(chargeItemStatusOptions).setDepartmentOptions(organizationOptions); @@ -131,12 +133,18 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation @Override public R addOrEditOrgLoc(OrgLocQueryDto orgLocQueryDto) { + // Validate required fields before processing + if (orgLocQueryDto.getOrganizationId() == null) { + return R.fail("请选择执行科室"); + } + OrganizationLocation orgLoc = new OrganizationLocation(); BeanUtils.copyProperties(orgLocQueryDto, orgLoc); Long activityDefinitionId = orgLoc.getActivityDefinitionId(); - String activityName = activityDefinitionId != null - ? activityDefinitionMapper.selectById(activityDefinitionId).getName() : ""; + ActivityDefinition activityDef = activityDefinitionId != null + ? activityDefinitionMapper.selectById(activityDefinitionId) : null; + String activityName = activityDef != null ? activityDef.getName() : ""; List organizationLocationList = organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getActivityDefinitionId());