添加根因分析报告,确认修复已在历史 commit (eaac1676,982e9059) 中完成。 所有 NPE 防护已到位:organizationId 前置校验、activityDefinition 判空、 organization 判空降级、stream null 过滤。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2.3 KiB
2.3 KiB
Bug #491 分析报告
Bug 信息
- Title: 【执行科室配置】保存配置时系统报错
- Severity: 3 | Priority: 3 | Type: codeerror
- Status: resolved (已被修复)
错误信息
Cannot invoke "com.openhis.administration.domain.Organization.getName()" because
the return value of "com.openhis.administration.service.impl.OrganizationServiceImpl.getById(...)" is null
根因分析
在 OrganizationLocationAppServiceImpl.addOrEditOrgLoc() 方法中,存在多处 organizationService.getById() 和 activityDefinitionMapper.selectById() 的返回值未做 null 检查就直接调用 .getName() 的情况:
- 时间冲突检查:当数据库中某条执行科室配置关联的
organizationId对应的科室记录已被删除时,organizationService.getById()返回 null,直接调用.getName()导致 NPE。 - activityDefinition 查询:
activityDefinitionMapper.selectById()可能返回 null,直接调用.getName()导致 NPE。 - organizationLocationInit():stream 中未过滤 name 为 null 的 Organization 记录。
- 缺少 organizationId 前置校验:传入空 organizationId 时未提前拦截。
修复内容(已在以下 commit 中完成)
eaac1676 (关羽): 修复时间冲突检查中的 organization NPE
- 将
organizationService.getById().getName()改为先赋值再判空
982e9059 (刘备): 补充其余 NPE 防护
- 第74行:stream 中增加
.filter(organization -> organization != null && organization.getName() != null) - 第149-151行:增加
organizationId == null前置校验,返回"请选择执行科室" - 第157-159行:将
activityDefinitionMapper.selectById().getName()改为先赋值再判空
当前代码状态确认
当前 HEAD (ede95be8) 已包含上述所有修复,具体代码位置:
OrganizationLocationAppServiceImpl.java:149- organizationId null 校验OrganizationLocationAppServiceImpl.java:157-159- activityDefinition null 安全OrganizationLocationAppServiceImpl.java:171-172- organization null 安全OrganizationLocationAppServiceImpl.java:74- stream null 过滤
结论
Bug #491 已修复。所有相关的 NPE 防护均已到位,工作目录与 HEAD 一致,无待提交变更。
修复结果:✅ 已完成(历史 commit)