From cfa073bdba1d4b679616e631961cc99a2d34f5cf Mon Sep 17 00:00:00 2001 From: zhaoyun Date: Wed, 20 May 2026 12:07:01 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#547:=20=E6=89=A7=E8=A1=8C=E7=A7=91?= =?UTF-8?q?=E5=AE=A4=E9=85=8D=E7=BD=AE=E4=BF=9D=E5=AD=98=E6=97=B6=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=86=B2=E7=AA=81=E6=A3=80=E6=B5=8B=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E9=94=99=E8=AF=AF=20=E2=80=94=20=E6=A0=B9=E5=9B=A0=EF=BC=9Aadd?= =?UTF-8?q?OrEditOrgLoc=20=E6=96=B9=E6=B3=95=E4=BD=BF=E7=94=A8=20getOrgLoc?= =?UTF-8?q?ListByActivityDefinitionId=20=E8=B7=A8=E7=A7=91=E5=AE=A4?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=90=8C=E4=B8=80=E8=AF=8A=E7=96=97=E7=9A=84?= =?UTF-8?q?=E6=89=80=E6=9C=89=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E7=A7=91=E5=AE=A4=E9=97=B4=E7=9A=84=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=E6=97=B6=E9=97=B4=E9=87=8D=E5=8F=A0=E8=A2=AB=E8=AF=AF?= =?UTF-8?q?=E5=88=A4=E4=B8=BA=E5=86=B2=E7=AA=81=EF=BC=9B=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=EF=BC=9A=E6=94=B9=E4=B8=BA=20getOrgLocListByOrgIdAndActivityDe?= =?UTF-8?q?finitionId(orgId,=20activityDefId)=20=E9=99=90=E5=AE=9A?= =?UTF-8?q?=E5=90=8C=E7=A7=91=E5=AE=A4=E8=8C=83=E5=9B=B4=EF=BC=9B=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E4=BC=98=E5=8C=96=E8=BD=AF=E5=88=A0=E9=99=A4=E7=A7=91?= =?UTF-8?q?=E5=AE=A4=E5=A4=84=E7=90=86=EF=BC=8C=E5=BD=93=E5=86=B2=E7=AA=81?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=85=B3=E8=81=94=E7=9A=84=E7=A7=91=E5=AE=A4?= =?UTF-8?q?=E5=B7=B2=E8=A2=AB=E5=88=A0=E9=99=A4=E6=97=B6=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E7=94=A8"=E7=A7=91=E5=AE=A4[ID]=E5=B7=B2=E5=88=A0=E9=99=A4"?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=E9=9D=99=E9=BB=98=E8=B7=B3=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- bug547_analysis.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/bug547_analysis.md b/bug547_analysis.md index e71e5a3e..895d4aee 100644 --- a/bug547_analysis.md +++ b/bug547_analysis.md @@ -5,21 +5,23 @@ ## 根因定位 -**核心问题在 `OrganizationLocationAppServiceImpl.java:161-177`** +**核心问题在 `OrganizationLocationAppServiceImpl.java:161-162`** -时间冲突检测的查询范围过大: +时间冲突检测使用了 `getOrgLocListByActivityDefinitionId()` 跨科室查询同一诊疗定义下的**所有**科室配置记录。 + +### 缺陷:跨科室误报冲突 -### 缺陷:跨科室冲突检测导致误报 ```java -// 查询同一 activityDefinitionId 的所有记录(跨科室) +// 修复前:查询同一诊疗的所有科室配置(跨科室) organizationLocationService.getOrgLocListByActivityDefinitionId(orgLoc.getActivityDefinitionId()); ``` + 该查询返回**所有科室**中同一诊疗项目的配置记录。当其他科室(非当前操作科室)已配置了相同诊疗且时间重叠时,会被误判为冲突。 "执行科室配置"的业务语义是:为某个科室配置它可执行的诊疗项目及时段。不同科室配置同一诊疗的不同时段是完全合理的(如检验科 08:00-12:00,放射科 14:00-18:00)。跨科室时间重叠不应视为冲突。 ### 附带缺陷:"未知科室"错误提示 -当冲突记录关联的科室被软删除(`delete_flag='1'`)时,`organizationService.getById()` 受 `@TableLogic` 注解影响查不到该科室,返回 null,之前的代码 `continue` 跳过了,但跨科室检测的根本问题未解决。 +当冲突记录关联的科室被软删除(`delete_flag='1'`)时,`organizationService.getById()` 受 `@TableLogic` 注解影响查不到该科室,返回 null,错误提示变成"与未知科室时间冲突"。 ## 修复方案 @@ -29,8 +31,6 @@ organizationLocationService.getOrgLocListByActivityDefinitionId(orgLoc.getActivi **修复状态**: ✅ 成功 -**提交**: `7c6e35dc` Fix Bug #547: 冲突检测改为同科室范围 - **改动行数**: +3/-1(`OrganizationLocationAppServiceImpl.java`) **变更内容**: @@ -39,3 +39,5 @@ organizationLocationService.getOrgLocListByActivityDefinitionId(orgLoc.getActivi +organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getOrganizationId(), + orgLoc.getActivityDefinitionId()); ``` + +编译验证通过。