| | |
| | | } |
| | | |
| | | /** |
| | | * 【周期兜底专用】只给**有医生在座(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) { |