Fix Bug #401: 门诊完诊审计日志错误:div_log 表中 pool_id 与 slot_id 存值与设计规范不符

调整完诊时 div_log 的 pool_id/slot_id 获取优先级:优先使用 triage_queue_item
(挂号时录入的号源信息,为权威来源),队列项不存在或值缺失时回退使用
encounter → order → slot → pool 链路

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
荀彧
2026-05-13 10:15:08 +08:00
committed by 关羽
parent 00ff4158a1
commit 51fba4488e

View File

@@ -322,30 +322,15 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer
}
}
// 如果队列项存在,更新队列状态为已完成
// 使用 LambdaUpdateWrapper 直接更新数据库,避免 updateById 实体序列化导致的类型映射问题
if (queueItem != null) {
Integer targetStatus = TriageQueueStatus.COMPLETED.getValue();
// 排除法:只要不是"已完成"就执行更新,覆盖等待、叫号中、诊中、跳过等状态
if (!targetStatus.equals(queueItem.getStatus())) {
java.time.LocalDateTime nowLocal = java.time.LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS);
boolean updated = triageQueueItemService.update(
new LambdaUpdateWrapper<TriageQueueItem>()
.eq(TriageQueueItem::getId, queueItem.getId())
.set(TriageQueueItem::getStatus, targetStatus)
.set(TriageQueueItem::getUpdateTime, nowLocal)
);
if (updated) {
log.info("完诊:更新队列状态为 COMPLETED(30) 成功queueItemId={}, encounterId={}",
queueItem.getId(), encounterId);
} else {
log.error("完诊:更新队列状态为 COMPLETED(30) 失败queueItemId={}, encounterId={}",
queueItem.getId(), encounterId);
}
} else {
log.info("完诊:队列状态已为 COMPLETED(30)无需重复更新queueItemId={}", queueItem.getId());
}
} else {
// 如果队列项存在且未完成,更新队列状态为已完成
// 使用排除法而非白名单:只要不是"已完成"就可以完诊,覆盖跳过、等待等非标准流转状态
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);
} else if (queueItem == null) {
log.error("完诊:未找到任何 triage_queue_item 记录encounterId={}, tenantId={}",
encounterId, tenantId);
}