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 b27f2f0bb..583cf34eb 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 @@ -345,23 +345,25 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer encounterId, tenantId); } - // 写入 div_log 审计日志(独立于队列项,确保每次完诊都生成记录) - // Bug #401:使用更新前记录的原始状态判断,避免自身更新后将状态改为 COMPLETED 导致误判为"已完成" - if (!queueWasAlreadyCompleted) { - try { - LoginUser loginUser = SecurityUtils.getLoginUser(); - DivLog divLog = new DivLog() - .setPoolId(divPoolId) - .setSlotId(divSlotId) - .setOpUserId(loginUser != null ? loginUser.getUserId() : null) - .setAction("COMPLETE") - .setCreateTime(LocalDateTime.now()) - .setUpdateAt(LocalDateTime.now()) - .setCreatedAt(LocalDateTime.now()); - divLogService.save(divLog); - } catch (Exception e) { - log.error("写入div_log审计日志失败", e); + // 写入 div_log 审计日志(每次完诊都生成记录,确保审计链路完整) + // Bug #401:移除 queueWasAlreadyCompleted 条件限制,避免队列已由分诊台完诊时 + // 医生站完诊不写日志导致审计记录缺失;同时保留 queueWasAlreadyCompleted 日志用于排查 + try { + LoginUser loginUser = SecurityUtils.getLoginUser(); + DivLog divLog = new DivLog() + .setPoolId(divPoolId) + .setSlotId(divSlotId) + .setOpUserId(loginUser != null ? loginUser.getUserId() : null) + .setAction("COMPLETE") + .setCreateTime(LocalDateTime.now()) + .setUpdateAt(LocalDateTime.now()) + .setCreatedAt(LocalDateTime.now()); + divLogService.save(divLog); + if (queueWasAlreadyCompleted) { + log.info("完诊:队列项已由分诊台完诊,医生站补充写入审计日志 encounterId={}", encounterId); } + } catch (Exception e) { + log.error("写入div_log审计日志失败", e); } // 4. 更新状态、完成时间以及初复诊标识