yxh
2 天以前 1f23e7dfc186c65434eda46fd6756d41fd01e867
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java
@@ -665,6 +665,34 @@
    }
    /**
     * 【周期兜底专用】只给**有医生在座(DOCTOR_ON)**的工位补人。
     *
     * <p>为什么不能直接用 {@link #hurryupAllBed()}:它遍历的是 `mapOpeningBed`
     * (含「已开通但没人」的工位),会把排队患者推进**没有医生**的工位候诊区 ——
     * 同一检查项目有多个工位时(如常规心电图 116/117/118),患者可能被"分配"到
     * 一个没人看的工位,真正在座的医生反而看不到。该方法原本只在开诊/重启时跑一次,
     * 若改成每分钟跑一遍,这个副作用会被放大。因此周期兜底只补在座工位,
     * 与自动分流队列({@code addBedToRoutingQueue} 只收 DOCTOR_ON)的口径保持一致。
     */
    public void hurryupAllSeatedBeds() {
        if (0 == openingFlag.get())
            return;
        mapOpeningBed.values().forEach(bedQueueBO -> {
            // 只补「有医生在座」的工位
            if (!Objects.equals(BedStatusEnum.DOCTOR_ON.getStatus(), bedQueueBO.getStatus())) {
                return;
            }
            // 「停止候诊」的工位直接跳过:hurryupOneBed 内部本来也会跳过,
            // 这里提前判断是为了避免每分钟刷一条 "[补人] 工位处于【停止候诊】" 的 WARN。
            if (Boolean.TRUE.equals(bedQueueBO.getStopReady())) {
                return;
            }
            hurryupOneBed(bedQueueBO.roomId, bedQueueBO.bedNo);
        });
    }
    /**
     * 把医生候诊的队列塞满
     */
    public void hurryupOneBed(Long roomId, String bedNo) {