Files
his/bug547_analysis.md

1.9 KiB
Raw Blame History

Bug #547 分析报告

Bug 描述

在"系统管理-执行科室配置"页面,选择科室(如检验科)后添加新项目并保存,显示"与未知科室时间冲突"错误。

根因定位

核心问题在 OrganizationLocationAppServiceImpl.java:161-162

时间冲突检测使用了 getOrgLocListByActivityDefinitionId() 跨科室查询同一诊疗定义下的所有科室配置记录。

缺陷:跨科室误报冲突

// 修复前:查询同一诊疗的所有科室配置(跨科室)
organizationLocationService.getOrgLocListByActivityDefinitionId(orgLoc.getActivityDefinitionId());

该查询返回所有科室中同一诊疗项目的配置记录。当其他科室(非当前操作科室)已配置了相同诊疗且时间重叠时,会被误判为冲突。

"执行科室配置"的业务语义是:为某个科室配置它可执行的诊疗项目及时段。不同科室配置同一诊疗的不同时段是完全合理的(如检验科 08:00-12:00放射科 14:00-18:00。跨科室时间重叠不应视为冲突。

附带缺陷:"未知科室"错误提示

当冲突记录关联的科室被软删除(delete_flag='1')时,organizationService.getById()@TableLogic 注解影响查不到该科室,返回 null错误提示变成"与未知科室时间冲突"。

修复方案

修改冲突检测范围:将 getOrgLocListByActivityDefinitionId 改为 getOrgLocListByOrgIdAndActivityDefinitionId,仅检测同一科室内的时间冲突。

修复结果

修复状态: 成功

改动行数: +3/-1OrganizationLocationAppServiceImpl.java

变更内容:

-organizationLocationService.getOrgLocListByActivityDefinitionId(orgLoc.getActivityDefinitionId());
+organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getOrganizationId(),
+    orgLoc.getActivityDefinitionId());

编译验证通过。