From 138f8ba5ca8427f111aa64e1c58c15c82b9efecc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=80=E5=BD=A7?= <荀彧@gentronhealth.com> Date: Wed, 13 May 2026 10:15:08 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#401:=20=E9=97=A8=E8=AF=8A=E5=AE=8C?= =?UTF-8?q?=E8=AF=8A=E5=AE=A1=E8=AE=A1=E6=97=A5=E5=BF=97=E9=94=99=E8=AF=AF?= =?UTF-8?q?=EF=BC=9Adiv=5Flog=20=E8=A1=A8=E4=B8=AD=20pool=5Fid=20=E4=B8=8E?= =?UTF-8?q?=20slot=5Fid=20=E5=AD=98=E5=80=BC=E4=B8=8E=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E4=B8=8D=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整完诊时 div_log 的 pool_id/slot_id 获取优先级:优先使用 triage_queue_item (挂号时录入的号源信息,为权威来源),队列项不存在或值缺失时回退使用 encounter → order → slot → pool 链路 Co-Authored-By: Claude Opus 4.7 --- .../impl/DoctorStationMainAppServiceImpl.java | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java index 844daa744..e0c3945b8 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java @@ -274,27 +274,8 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer return R.fail("非就诊中患者不能完诊"); } - // 2. 获取 pool_id 和 slot_id:从 encounter → order_main → adm_schedule_slot 链路获取 - // 确保 div_log 中的值与排班主表一致,不依赖 triage_queue_item(队列项可能不存在或值错误) + // 2. 查找队列项(限定当天,避免复诊患者匹配到历史队列记录) Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); - Long divPoolId = null; - Long divSlotId = null; - if (encounter.getOrderId() != null) { - try { - Order order = iOrderService.getById(encounter.getOrderId()); - if (order != null && order.getSlotId() != null) { - divSlotId = order.getSlotId(); - ScheduleSlot slot = scheduleSlotMapper.selectById(divSlotId); - if (slot != null) { - divPoolId = slot.getPoolId(); - } - } - } catch (Exception e) { - log.warn("获取完诊div_log的pool_id/slot_id失败,encounterId={}", encounterId, e); - } - } - - // 3. 查找队列项(限定当天,避免复诊患者匹配到历史队列记录) TriageQueueItem queueItem = triageQueueItemService.getOne( new LambdaQueryWrapper() .eq(TriageQueueItem::getTenantId, tenantId) @@ -319,6 +300,28 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer } } + // 3. 获取 pool_id 和 slot_id:优先使用 triage_queue_item(挂号时录入的号源信息,为权威来源) + // 队列项不存在或值缺失时,回退使用 encounter → order_main → adm_schedule_slot 链路 + Long divPoolId = null; + Long divSlotId = null; + if (queueItem != null && queueItem.getPoolId() != null && queueItem.getSlotId() != null) { + divPoolId = queueItem.getPoolId(); + divSlotId = queueItem.getSlotId(); + } else if (encounter.getOrderId() != null) { + try { + Order order = iOrderService.getById(encounter.getOrderId()); + if (order != null && order.getSlotId() != null) { + divSlotId = order.getSlotId(); + ScheduleSlot slot = scheduleSlotMapper.selectById(divSlotId); + if (slot != null) { + divPoolId = slot.getPoolId(); + } + } + } catch (Exception e) { + log.warn("回退获取完诊div_log的pool_id/slot_id失败,encounterId={}", encounterId, e); + } + } + // 如果队列项存在且未完成,更新队列状态为已完成 // 使用排除法而非白名单:只要不是"已完成"就可以完诊,覆盖跳过、等待等非标准流转状态 if (queueItem != null &&