2.3 KiB
2.3 KiB
Bug #547 分析报告
Bug 描述
在"系统管理-执行科室配置"页面,选择科室(如检验科)后添加新项目并保存,显示"与未知科室时间冲突"错误。
根因定位
核心问题在 OrganizationLocationAppServiceImpl.java:161-174
时间冲突检测的查询逻辑存在两个缺陷:
缺陷1:查询范围过窄
// 只查同一科室 + 同一诊疗的记录
getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getOrganizationId(), orgLoc.getActivityDefinitionId());
只查询同一科室的记录。如果同一诊疗项目在其他科室已有配置且时间重叠,不会被当前查询检测到。但系统本应阻止同一诊疗在多个科室同时段执行。
缺陷2:"未知科室"错误提示
当冲突记录关联的科室被软删除(delete_flag='1')时,organizationService.getById() 受 @TableLogic 注解影响查不到该科室,返回 null,错误提示变成"与未知科室时间冲突"。
数据库验证发现确实存在软删除科室的组织位置记录(内科门诊、上海学校医院、信息科等,共9条)。
数据流
- 前端选择科室 → 点击"添加新项目" → 填写诊疗和时间 → 点击"保存"
- 后端
addOrEditOrgLoc()接收请求 - 查询现有冲突记录(当前只查同科室)
- 对冲突记录检查时间重叠
- 查找冲突科室名称 → 若科室被软删除则返回 null → "未知科室"
修复方案
- 修改冲突检测范围:查询同一
activityDefinitionId的所有记录(跨科室检测),而非仅限当前科室 - 优雅处理"未知科室":当
getById返回 null 时,使用 "已删除科室( ID )" 替代 "未知科室",提供更有用的信息 - 新增 Service 方法:
getOrgLocListByActivityDefinitionId(Long activityDefinitionId)用于按诊疗定义查询所有记录
涉及文件
openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.javaopenhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationLocationService.javaopenhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java