diff --git a/bug547_analysis.md b/bug547_analysis.md index 1c525ccf..e71e5a3e 100644 --- a/bug547_analysis.md +++ b/bug547_analysis.md @@ -5,37 +5,37 @@ ## 根因定位 -**核心问题在 `OrganizationLocationAppServiceImpl.java:161-174`** +**核心问题在 `OrganizationLocationAppServiceImpl.java:161-177`** -时间冲突检测的查询逻辑存在两个缺陷: +时间冲突检测的查询范围过大: -### 缺陷1:查询范围过窄 +### 缺陷:跨科室冲突检测导致误报 ```java -// 只查同一科室 + 同一诊疗的记录 -getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getOrganizationId(), orgLoc.getActivityDefinitionId()); +// 查询同一 activityDefinitionId 的所有记录(跨科室) +organizationLocationService.getOrgLocListByActivityDefinitionId(orgLoc.getActivityDefinitionId()); ``` -只查询**同一科室**的记录。如果同一诊疗项目在其他科室已有配置且时间重叠,不会被当前查询检测到。但系统本应阻止同一诊疗在多个科室同时段执行。 +该查询返回**所有科室**中同一诊疗项目的配置记录。当其他科室(非当前操作科室)已配置了相同诊疗且时间重叠时,会被误判为冲突。 -### 缺陷2:"未知科室"错误提示 -当冲突记录关联的科室被软删除(`delete_flag='1'`)时,`organizationService.getById()` 受 `@TableLogic` 注解影响查不到该科室,返回 null,错误提示变成"与未知科室时间冲突"。 +"执行科室配置"的业务语义是:为某个科室配置它可执行的诊疗项目及时段。不同科室配置同一诊疗的不同时段是完全合理的(如检验科 08:00-12:00,放射科 14:00-18:00)。跨科室时间重叠不应视为冲突。 -数据库验证发现确实存在软删除科室的组织位置记录(内科门诊、上海学校医院、信息科等,共9条)。 - -### 数据流 - -1. 前端选择科室 → 点击"添加新项目" → 填写诊疗和时间 → 点击"保存" -2. 后端 `addOrEditOrgLoc()` 接收请求 -3. 查询现有冲突记录(**当前只查同科室**) -4. 对冲突记录检查时间重叠 -5. 查找冲突科室名称 → 若科室被软删除则返回 null → "未知科室" +### 附带缺陷:"未知科室"错误提示 +当冲突记录关联的科室被软删除(`delete_flag='1'`)时,`organizationService.getById()` 受 `@TableLogic` 注解影响查不到该科室,返回 null,之前的代码 `continue` 跳过了,但跨科室检测的根本问题未解决。 ## 修复方案 -1. **修改冲突检测范围**:查询同一 `activityDefinitionId` 的所有记录(跨科室检测),而非仅限当前科室 -2. **优雅处理"未知科室"**:当 `getById` 返回 null 时,使用 "已删除科室( ID )" 替代 "未知科室",提供更有用的信息 -3. **新增 Service 方法**:`getOrgLocListByActivityDefinitionId(Long activityDefinitionId)` 用于按诊疗定义查询所有记录 +**修改冲突检测范围**:将 `getOrgLocListByActivityDefinitionId` 改为 `getOrgLocListByOrgIdAndActivityDefinitionId`,仅检测**同一科室内**的时间冲突。 -## 涉及文件 -- `openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java` -- `openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationLocationService.java` -- `openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java` +## 修复结果 + +**修复状态**: ✅ 成功 + +**提交**: `7c6e35dc` Fix Bug #547: 冲突检测改为同科室范围 + +**改动行数**: +3/-1(`OrganizationLocationAppServiceImpl.java`) + +**变更内容**: +```diff +-organizationLocationService.getOrgLocListByActivityDefinitionId(orgLoc.getActivityDefinitionId()); ++organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getOrganizationId(), ++ orgLoc.getActivityDefinitionId()); +```