Fix Bug #400: 门诊医生站点击【完诊】后,triage_queue_item 表 status 字段未按规范更新为 30
根因:完诊时使用 triageQueueItemService.updateById(entity) 更新队列状态, 实体序列化过程中 status 字段为 Integer 类型但数据库列为 VARCHAR(50), 可能导致 MyBatis-Plus 的 UPDATE SQL 未正确包含 status 字段。 修复方案:改用 LambdaUpdateWrapper 直接构造 UPDATE SQL,确保 status 字段被正确更新为 30。 同时增加成功/失败日志,便于后续排查。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -319,15 +319,30 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果队列项存在且未完成,更新队列状态为已完成
|
// 如果队列项存在,更新队列状态为已完成
|
||||||
// 使用排除法而非白名单:只要不是"已完成"就可以完诊,覆盖跳过、等待等非标准流转状态
|
// 使用 LambdaUpdateWrapper 直接更新数据库,避免 updateById 实体序列化导致的类型映射问题
|
||||||
if (queueItem != null &&
|
if (queueItem != null) {
|
||||||
!TriageQueueStatus.COMPLETED.getValue().equals(queueItem.getStatus())) {
|
Integer targetStatus = TriageQueueStatus.COMPLETED.getValue();
|
||||||
java.time.LocalDateTime nowLocal = java.time.LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS);
|
// 排除法:只要不是"已完成"就执行更新,覆盖等待、叫号中、诊中、跳过等状态
|
||||||
queueItem.setStatus(TriageQueueStatus.COMPLETED.getValue());
|
if (!targetStatus.equals(queueItem.getStatus())) {
|
||||||
queueItem.setUpdateTime(nowLocal);
|
java.time.LocalDateTime nowLocal = java.time.LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS);
|
||||||
triageQueueItemService.updateById(queueItem);
|
boolean updated = triageQueueItemService.update(
|
||||||
} else if (queueItem == null) {
|
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 {
|
||||||
log.error("完诊:未找到任何 triage_queue_item 记录,encounterId={}, tenantId={}",
|
log.error("完诊:未找到任何 triage_queue_item 记录,encounterId={}, tenantId={}",
|
||||||
encounterId, tenantId);
|
encounterId, tenantId);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user