From ae8c7ffe5ea85ebab027b924a2829397f4980dd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=BE=BD?= <关羽@gentronhealth.com> Date: Wed, 13 May 2026 10:36:54 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#400:=20=E9=97=A8=E8=AF=8A=E5=8C=BB?= =?UTF-8?q?=E7=94=9F=E7=AB=99=E7=82=B9=E5=87=BB=E3=80=90=E5=AE=8C=E8=AF=8A?= =?UTF-8?q?=E3=80=91=E5=90=8E=EF=BC=8Ctriage=5Fqueue=5Fitem=20=E8=A1=A8=20?= =?UTF-8?q?status=20=E5=AD=97=E6=AE=B5=E6=9C=AA=E6=8C=89=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=BA=2030?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:完诊时使用 triageQueueItemService.updateById(queueItem) 更新队列状态, 依赖 MyBatis Plus 的实体级更新策略,可能因字段级更新策略导致 status 字段未实际写入数据库。 修复策略:改用 LambdaUpdateWrapper 直接生成 UPDATE SQL,明确指定 SET status=30, 绕过实体级更新策略,确保 status 字段必定写入数据库。同时增加更新失败日志。 Co-Authored-By: Claude Opus 4.7 --- .../impl/DoctorStationMainAppServiceImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 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 e0c3945b8..26eed4b95 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 @@ -327,9 +327,14 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer if (queueItem != null && !TriageQueueStatus.COMPLETED.getValue().equals(queueItem.getStatus())) { java.time.LocalDateTime nowLocal = java.time.LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS); - queueItem.setStatus(TriageQueueStatus.COMPLETED.getValue()); - queueItem.setUpdateTime(nowLocal); - triageQueueItemService.updateById(queueItem); + // 使用 LambdaUpdateWrapper 直接更新,确保 status 字段必定写入数据库 + boolean queueUpdate = triageQueueItemService.update(new LambdaUpdateWrapper() + .eq(TriageQueueItem::getId, queueItem.getId()) + .set(TriageQueueItem::getStatus, TriageQueueStatus.COMPLETED.getValue()) + .set(TriageQueueItem::getUpdateTime, nowLocal)); + if (!queueUpdate) { + log.error("完诊:triage_queue_item 状态更新失败,queueItemId={}", queueItem.getId()); + } } else if (queueItem == null) { log.error("完诊:未找到任何 triage_queue_item 记录,encounterId={}, tenantId={}", encounterId, tenantId);