eight
2025-04-09 b1b98bdda00a94cada2035293d6bcad10bec0578
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java
@@ -69,10 +69,10 @@
    AtomicInteger curSeqNum = new AtomicInteger(0);
    // 维护 开放的工位
    ConcurrentHashMap<String, BedQueueBO > mapOpeningBed = new ConcurrentHashMap<>();
    ConcurrentHashMap<String, BedBO> mapOpeningBed = new ConcurrentHashMap<>();
    // 装机工位..不进入分流队列
    Map<Integer, PriorityBlockingQueue<BedQueueBO>> mapCheckTypeRoutingQueue = new HashMap();
    Map<Integer, PriorityBlockingQueue<BedBO>> mapCheckTypeRoutingQueue = new HashMap();
    
    Map<Integer, CheckTypeDO> mapCheckTypeVsReadyMax = null;
@@ -83,8 +83,8 @@
     * @return
     */
    public ErrorCode bedOpen(Long roomId, String roomName, String bedNo) {
        BedQueueBO bedQueueBO2 = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null != bedQueueBO2) {
        BedBO bedBO2 = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null != bedBO2) {
            log.error("bedOpen mapBedVsQueue has existed. " + roomId + " " + bedNo);
            return QUEUE_BED_EXIST;
        }
@@ -105,23 +105,23 @@
        RoomDO roomDO = roomMapper.getRoom(roomId, bedNo);
        // 新增..工位队列
        BedQueueBO bedQueueBO = new BedQueueBO();
        bedQueueBO.setRoomId(roomId);
        bedQueueBO.setRoomName(roomName);
        bedQueueBO.setBedNo(bedNo);
        bedQueueBO.setMaxQueueNum(getBedReadyMax(roomId, bedNo));
        bedQueueBO.setQueueNum(new AtomicInteger(queueDOList.size()));
        bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus());
        bedQueueBO.setCheckTypes( roomDO.getCheckTypes() );
        bedQueueBO.setOpType( roomDO.getOpType() );
        mapOpeningBed.put( Utils.formatRoomBed(roomId, bedNo), bedQueueBO);
        BedBO bedBO = new BedBO();
        bedBO.setRoomId(roomId);
        bedBO.setRoomName(roomName);
        bedBO.setBedNo(bedNo);
        bedBO.setMaxReadyPatNum(getBedReadyMax(roomId, bedNo));
        bedBO.setReadyPatNum(new AtomicInteger(queueDOList.size()));
        bedBO.setStatus(BedStatusEnum.OPENING.getStatus());
        bedBO.setCheckTypes( roomDO.getCheckTypes() );
        bedBO.setOpType( roomDO.getOpType() );
        mapOpeningBed.put( Utils.formatRoomBed(roomId, bedNo), bedBO);
        return GlobalErrorCodeConstants.SUCCESS;
    }
    public ErrorCode bedClose(Long roomId, String bedNo) {
        BedQueueBO bedQueueBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == bedQueueBO) {
        BedBO bedBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == bedBO) {
            log.error("bedClose mapBedVsQueue DONOT existed. " + roomId + " " + bedNo);
            return QUEUE_BED_NOT_EXIST;
        }
@@ -145,7 +145,7 @@
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.OPENING);
        statusList.add(BedStatusEnum.DOCTOR_ON);
        statusList.add(BedStatusEnum.PAUSE);
        statusList.add(BedStatusEnum.DOCTOR_PAUSE);
        Integer updateNum = roomMapper.setBedOpeningClosed(roomId, bedNo,
                BedStatusEnum.CLOSED, statusList);
        if ( null==updateNum || 0 == updateNum ) {
@@ -154,13 +154,13 @@
        }
        mapOpeningBed.remove( Utils.formatRoomBed(roomId, bedNo) );
        removeRoutingQueue(bedQueueBO);
        removeRoutingQueue(bedBO);
        return GlobalErrorCodeConstants.SUCCESS;
    }
    public ErrorCode bedDoctorPause(Long roomId, String bedNo, Long docId, String docName) {
        BedQueueBO bedQueueBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == bedQueueBO) {
        BedBO bedBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == bedBO) {
            log.error("bedDoctorPause mapBedVsQueue DONOT existed. " + roomId + " " + bedNo);
            return QUEUE_BED_NOT_EXIST;
        }
@@ -168,27 +168,27 @@
        // DB update
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.DOCTOR_ON);
        Integer updateNum = roomMapper.setBedDoctorStatus(roomId, bedNo, docId, BedStatusEnum.PAUSE, statusList);
        Integer updateNum = roomMapper.setBedDoctorStatus(roomId, bedNo, docId, BedStatusEnum.DOCTOR_PAUSE, statusList);
        if ( null==updateNum || 0 == updateNum ) {
            log.error("bedDoctorPause DB invalid status. " + roomId + " " + bedNo);
            return ROOM_INVALID_STATUS;
        }
        bedQueueBO.setStatus(BedStatusEnum.PAUSE.getStatus());
        removeRoutingQueue(bedQueueBO);
        bedBO.setStatus(BedStatusEnum.DOCTOR_PAUSE.getStatus());
        removeRoutingQueue(bedBO);
        return GlobalErrorCodeConstants.SUCCESS;
    }
    public ErrorCode bedDoctorResume(Long roomId, String bedNo, Long docId, String docName) {
        BedQueueBO bedQueueBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == bedQueueBO || !bedQueueBO.getStatus().equals(BedStatusEnum.PAUSE.getStatus())) {
        BedBO bedBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == bedBO || !bedBO.getStatus().equals(BedStatusEnum.DOCTOR_PAUSE.getStatus())) {
            log.error("bedDoctorResume mapBedVsQueue DONOT existed OR NOT Paused. " + roomId + " " + bedNo);
            return QUEUE_BED_NOT_EXIST;
        }
        // DB update
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.PAUSE);
        statusList.add(BedStatusEnum.DOCTOR_PAUSE);
        Integer updateNum = roomMapper.setBedDoctorStatus(roomId, bedNo, docId,
                BedStatusEnum.DOCTOR_ON, statusList);
        if ( null==updateNum || 0 == updateNum ) {
@@ -196,14 +196,14 @@
            return ROOM_INVALID_STATUS;
        }
        bedQueueBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus());
        addRoutingQueue(bedQueueBO);
        bedBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus());
        addRoutingQueue(bedBO);
        return GlobalErrorCodeConstants.SUCCESS;
    }
    public ErrorCode bedDoctorOn(Long roomId, String bedNo, Long docId, String docName) {
        BedQueueBO bedQueueBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == bedQueueBO) {
        BedBO bedBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == bedBO) {
            log.error("bedDoctorOn mapBedVsQueue DONOT existed. " + roomId + " " + bedNo);
            return QUEUE_BED_NOT_EXIST;
        }
@@ -217,14 +217,14 @@
            return ROOM_INVALID_STATUS;
        }
        bedQueueBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus());
        addRoutingQueue(bedQueueBO);
        bedBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus());
        addRoutingQueue(bedBO);
        return GlobalErrorCodeConstants.SUCCESS;
    }
    public ErrorCode bedDoctorOff(Long roomId, String bedNo, Long docId, String docName) {
        BedQueueBO bedQueueBO = mapOpeningBed.get( Utils.formatRoomBed( roomId, bedNo ) );
        if (null == bedQueueBO) {
        BedBO bedBO = mapOpeningBed.get( Utils.formatRoomBed( roomId, bedNo ) );
        if (null == bedBO) {
            log.error("bedDoctorOff mapBedVsQueue DONOT existed. " + roomId + " " + bedNo);
            return QUEUE_BED_NOT_EXIST;
        }
@@ -232,16 +232,16 @@
        // DB update
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.DOCTOR_ON);
        statusList.add(BedStatusEnum.PAUSE);
        statusList.add(BedStatusEnum.DOCTOR_PAUSE);
        Integer updateNum = roomMapper.setBedDoctorOff(roomId, bedNo, docId, BedStatusEnum.OPENING, statusList);
        if ( null==updateNum || 0 == updateNum ) {
            log.error("bedDoctorOff DB invalid status. " + roomId + " " + bedNo);
            return ROOM_INVALID_STATUS;
        }
        removeRoutingQueue(bedQueueBO);
        removeRoutingQueue(bedBO);
        bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus());
        bedBO.setStatus(BedStatusEnum.OPENING.getStatus());
        return GlobalErrorCodeConstants.SUCCESS;
    }
@@ -278,8 +278,8 @@
        queueMapper.updateById( firstReadyQueueItem );
        // 分流队列中 该工位 候诊中中人的数量 减一
        BedQueueBO bo = mapOpeningBed.get( Utils.formatRoomBed( roomId, bedNo ) );
        bo.queueNum.getAndDecrement(); // 可能已经【并发的】在 hurry-up 中改变了值
        BedBO bo = mapOpeningBed.get( Utils.formatRoomBed( roomId, bedNo ) );
        bo.readyPatNum.getAndDecrement(); // 可能已经【并发的】在 hurry-up 中改变了值
        refreshRoutingQueue(bo);
        return GlobalErrorCodeConstants.SUCCESS;
@@ -330,23 +330,23 @@
        List<BedStatusEnum> bedStatusEnumList = new ArrayList<BedStatusEnum>();
        bedStatusEnumList.add(BedStatusEnum.OPENING);
        bedStatusEnumList.add(BedStatusEnum.DOCTOR_ON);
        bedStatusEnumList.add(BedStatusEnum.PAUSE);
        bedStatusEnumList.add(BedStatusEnum.DOCTOR_PAUSE);
        List<RoomDO> roomDOList = roomMapper.simpleRoomList(bedStatusEnumList);
        List<BedQueueBO> bedQueueBOList = roomDOList.stream().map(item -> BeanUtils.toBean(item, BedQueueBO.class)).toList();
        List<BedBO> bedBOList = roomDOList.stream().map(item -> BeanUtils.toBean(item, BedBO.class)).toList();
        // 从DB 获取 队列中 【候诊中】人员统计 列表
        List<Integer> queueStatusList = new ArrayList<>();
        queueStatusList.add(QueueStatusEnum.READY.getStatus());
        List<QueueStatisticDO> queueStatisticDOList = queueMapper.queueStatistic(queueStatusList);
        bedQueueBOList.forEach(item -> {
            item.setMaxQueueNum( getBedReadyMax(item.roomId, item.bedNo) );
        bedBOList.forEach(item -> {
            item.setMaxReadyPatNum( getBedReadyMax(item.roomId, item.bedNo) );
            Optional<QueueStatisticDO> queueStatisticDOOptional = queueStatisticDOList.stream().filter(it->it.getRoomId()==item.roomId && it.getBedNo().equals(item.getBedNo())).findFirst();
            int queueNum = queueStatisticDOOptional.isPresent() ? queueStatisticDOOptional.get().getTotalInStatus() : 0;
            if ( item.getMaxQueueNum() < queueNum )
            if ( item.getMaxReadyPatNum() < queueNum )
                throw new RuntimeException("init: exceed max queue number!");
            item.setQueueNum( new AtomicInteger(queueNum) );
            item.setReadyPatNum( new AtomicInteger(queueNum) );
            mapOpeningBed.put( Utils.formatRoomBed(item.roomId, item.bedNo), item);
            if (BedStatusEnum.DOCTOR_ON.getStatus() == item.getStatus()) {
                addRoutingQueue(item);
@@ -364,7 +364,7 @@
            // 踢出在座的医生
            List<BedStatusEnum> bedStatusEnumList = new ArrayList<BedStatusEnum>();
            bedStatusEnumList.add(BedStatusEnum.DOCTOR_ON);
            bedStatusEnumList.add(BedStatusEnum.PAUSE);
            bedStatusEnumList.add(BedStatusEnum.DOCTOR_PAUSE);
            List<RoomDO> roomDOList = roomMapper.simpleRoomList(bedStatusEnumList);
            List<Long> userIdList = roomDOList.stream().map(roomDO -> roomDO.getDocId()).toList();
            oAuth2TokenApi.tick(userIdList);
@@ -388,15 +388,15 @@
        if (0 == openingFlag.get())
            return;
        BedQueueBO bedQueueBO = getBedQueueBO(roomId, bedNo);
        BedBO bedBO = getBedQueueBO(roomId, bedNo);
        // 处理 过号-回来 的人
        while (bedQueueBO.queueNum.get() < bedQueueBO.maxQueueNum) {
        while (bedBO.readyPatNum.get() < bedBO.maxReadyPatNum) {
            // 查看 当前工位 是否有过号-回来的患者
            Integer updateNum = queueMapper.queueRecalledPatient(
                    bedQueueBO.getRoomId(),
                    bedQueueBO.getRoomName(),
                    bedQueueBO.getBedNo(),
                    bedBO.getRoomId(),
                    bedBO.getRoomName(),
                    bedBO.getBedNo(),
                    curSeqNum.get() + 1,  // 过号回来,排到当前的下一位
                    QueueStatusEnum.RECALLED.getStatus(), // 不需要处理 [安装召回], 原因: 安装工位 不进入分流队列
                    QueueStatusEnum.READY.getStatus());
@@ -414,14 +414,14 @@
            curSeqNum.getAndIncrement();
            // 可能已经【并发的】在 nextPatient 中改变了值
            bedQueueBO.queueNum.incrementAndGet();
            bedBO.readyPatNum.incrementAndGet();
            // 可能已经【并发的】在 nextPatient 中改变了分流队列顺序
            refreshRoutingQueue(bedQueueBO);
            refreshRoutingQueue(bedBO);
        }
        // 处理 排队中 患者
        hurryupOneBedCheckTypeList( bedQueueBO );
        hurryupOneBedCheckTypeList(bedBO);
    }
    /**
@@ -433,31 +433,31 @@
     */
    public void hurryupOneCheckType(Integer checkType) {
        PriorityBlockingQueue<BedQueueBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
        PriorityBlockingQueue<BedBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
        if (null == routingQueue)
            return;
        while (true) {
            BedQueueBO bedQueueBO = routingQueue.peek();
            if (null == bedQueueBO)
            BedBO bedBO = routingQueue.peek();
            if (null == bedBO)
                return;
            int curQueueNum = bedQueueBO.queueNum.get();
            if (curQueueNum > bedQueueBO.maxQueueNum)
            int curQueueNum = bedBO.readyPatNum.get();
            if (curQueueNum > bedBO.maxReadyPatNum)
                throw new RuntimeException("hurryupOneCheckType: exceed max queue number!");
            if (curQueueNum == bedQueueBO.maxQueueNum)
            if (curQueueNum == bedBO.maxReadyPatNum)
                return;
            // 查看 是否有排队中的患者
            Integer updateNum = queueMapper.preemptWaitingPatientWithBedCheckTypes(
                    bedQueueBO.getRoomId(),
                    bedQueueBO.getRoomName(),
                    bedQueueBO.getBedNo(),
                    bedBO.getRoomId(),
                    bedBO.getRoomName(),
                    bedBO.getBedNo(),
                    curSeqNum.get() + 1,
                    QueueStatusEnum.WAITING.getStatus(),
                    QueueStatusEnum.READY.getStatus(),
                    bedQueueBO.checkTypes);  //关键点 关键点 关键点 checkType
                    bedBO.checkTypes);  //关键点 关键点 关键点 checkType
            // 没有抢到排队患者
            if (null == updateNum || 0 == updateNum) {
@@ -475,10 +475,10 @@
            curSeqNum.getAndIncrement();
            // 可能已经【并发的】在 nextPatient 中改变了值
            bedQueueBO.queueNum.incrementAndGet();
            bedBO.readyPatNum.incrementAndGet();
            // 可能已经【并发的】在 nextPatient 中改变了分流队列顺序
            refreshRoutingQueue(bedQueueBO);
            refreshRoutingQueue(bedBO);
        }
    }
@@ -499,7 +499,7 @@
        return mapCheckTypeVsReadyMax.get( checkType );
    }
    public BedQueueBO getBedQueueBO(Long roomId, String bedNo) {
    public BedBO getBedQueueBO(Long roomId, String bedNo) {
        return mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
    }
@@ -517,17 +517,17 @@
        log.info(" opening " + openingFlag.get() + " " + monitorInfoVO.getOpeningBedNum() + " " + monitorInfoVO.getDocBedNum() + " " + monitorInfoVO.getCheckTypeBedInfo().toString() );
    }
    private void hurryupOneBedCheckTypeList(BedQueueBO bedQueueBO) {
        while (bedQueueBO.queueNum.get() < bedQueueBO.maxQueueNum) {
    private void hurryupOneBedCheckTypeList(BedBO bedBO) {
        while (bedBO.readyPatNum.get() < bedBO.maxReadyPatNum) {
            // 抢占 是否有排队中的患者
            Integer updateNum = queueMapper.preemptWaitingPatientWithBedCheckTypes(
                    bedQueueBO.getRoomId(),
                    bedQueueBO.getRoomName(),
                    bedQueueBO.getBedNo(),
                    bedBO.getRoomId(),
                    bedBO.getRoomName(),
                    bedBO.getBedNo(),
                    curSeqNum.get() + 1,
                    QueueStatusEnum.WAITING.getStatus(),
                    QueueStatusEnum.READY.getStatus(),
                    bedQueueBO.checkTypes);
                    bedBO.checkTypes);
            // 没有抢到排队患者
            if (null == updateNum || 0 == updateNum) {
@@ -544,11 +544,11 @@
            curSeqNum.getAndIncrement();
            bedQueueBO.queueNum.incrementAndGet();
            bedBO.readyPatNum.incrementAndGet();
        }
        // 改变了分流队列顺序
        refreshRoutingQueue(bedQueueBO);
        refreshRoutingQueue(bedBO);
    }
    /**
@@ -594,51 +594,51 @@
        return ret;
    }
    private void addRoutingQueue(BedQueueBO bedQueueBO) {
    private void addRoutingQueue(BedBO bedBO) {
        // 装机工位 不进 分流队列,不接收 【排队中】患者分流
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedQueueBO.getOpType())
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedBO.getOpType())
            return;
        Integer[] checkTypes = bedQueueBO.getCheckTypes();
        Integer[] checkTypes = bedBO.getCheckTypes();
        Arrays.stream(checkTypes).forEach(checkType -> {
            CheckTypeDO checkTypeDO = mapCheckTypeVsReadyMax.get(checkType);
            PriorityBlockingQueue<BedQueueBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            PriorityBlockingQueue<BedBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            if (null == routingQueue) {
                routingQueue = new PriorityBlockingQueue<BedQueueBO>();
                routingQueue = new PriorityBlockingQueue<BedBO>();
                mapCheckTypeRoutingQueue.put( checkType, routingQueue );
            }
            if (!routingQueue.contains(bedQueueBO)) {
                routingQueue.offer(bedQueueBO);
            if (!routingQueue.contains(bedBO)) {
                routingQueue.offer(bedBO);
            } else {
                log.error("bedDoctorResume routingQueue still exist!. " + bedQueueBO.getRoomId() + " " + bedQueueBO.getBedNo());
                log.error("bedDoctorResume routingQueue still exist!. " + bedBO.getRoomId() + " " + bedBO.getBedNo());
            }
        });
    }
    private void removeRoutingQueue(BedQueueBO bedQueueBO) {
    private void removeRoutingQueue(BedBO bedBO) {
        // 装机工位 不进 分流队列,不接收 【排队中】患者分流
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedQueueBO.getOpType())
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedBO.getOpType())
            return;
        Integer[] checkTypes = bedQueueBO.getCheckTypes();
        Integer[] checkTypes = bedBO.getCheckTypes();
        Arrays.stream(checkTypes).forEach(checkType -> {
            PriorityBlockingQueue<BedQueueBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            PriorityBlockingQueue<BedBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            if (null != routingQueue)
                routingQueue.remove(bedQueueBO);
                routingQueue.remove(bedBO);
        });
    }
    private void refreshRoutingQueue(BedQueueBO bedQueueBO) {
    private void refreshRoutingQueue(BedBO bedBO) {
        // 装机工位 不进 分流队列,不接收 【排队中】患者分流
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedQueueBO.getOpType())
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedBO.getOpType())
            return;
        Integer[] checkTypes = bedQueueBO.getCheckTypes();
        Integer[] checkTypes = bedBO.getCheckTypes();
        Arrays.stream(checkTypes).forEach(checkType -> {
            PriorityBlockingQueue<BedQueueBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            routingQueue.remove(bedQueueBO);
            routingQueue.offer(bedQueueBO);
            PriorityBlockingQueue<BedBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            routingQueue.remove(bedBO);
            routingQueue.offer(bedBO);
        });
    }
@@ -660,13 +660,13 @@
    private void roomBedStatistic(MonitorInfoVO monitorInfoVO) {
        Map<Integer, Integer>  mapOpeningCheckBedStatInfo = new HashMap<>();
        Map<Integer, Integer>  mapOpeningInstallBedStatInfo = new HashMap<>();
        Map<Integer, Integer>  mapOperatingCheckBedStatInfo = new HashMap<>();
        Map<Integer, Integer>  mapOperatingInstallBedStatInfo = new HashMap<>();
        Map<Integer, Integer>  mapDocCheckBedStatInfo = new HashMap<>();
        Map<Integer, Integer>  mapDocInstallBedStatInfo = new HashMap<>();
        mapCheckTypeVsReadyMax.keySet().forEach( checkType -> {
            mapOpeningCheckBedStatInfo.put(checkType, 0);
            mapOpeningInstallBedStatInfo.put(checkType, 0);
            mapOperatingCheckBedStatInfo.put(checkType, 0);
            mapOperatingInstallBedStatInfo.put(checkType, 0);
            mapDocCheckBedStatInfo.put(checkType, 0);
            mapDocInstallBedStatInfo.put(checkType, 0);
        });
        //开通的 和 运营中 的工位统计
@@ -678,17 +678,18 @@
                else
                    mapOpeningInstallBedStatInfo.put(checkType, mapOpeningInstallBedStatInfo.get(checkType) + 1 );
                if (bedQueueBO.getStatus() == BedStatusEnum.DOCTOR_ON.getStatus()) {
                if (bedQueueBO.getStatus() == BedStatusEnum.DOCTOR_ON.getStatus() ||
                        bedQueueBO.getStatus() == BedStatusEnum.DOCTOR_PAUSE.getStatus()) {
                    if (bedQueueBO.opType == 0 || bedQueueBO.opType == 1)
                        mapOperatingCheckBedStatInfo.put(checkType, mapOperatingCheckBedStatInfo.get(checkType) + 1);
                        mapDocCheckBedStatInfo.put(checkType, mapDocCheckBedStatInfo.get(checkType) + 1);
                    else
                        mapOperatingInstallBedStatInfo.put(checkType, mapOperatingInstallBedStatInfo.get(checkType) + 1);
                        mapDocInstallBedStatInfo.put(checkType, mapDocInstallBedStatInfo.get(checkType) + 1);
                }
            });
        });
        // 接收..排队中患者..的分流队列
        HashSet<BedQueueBO> hashSetOperatingBedQueue = new HashSet<>();
        HashSet<BedBO> hashSetOperatingBedQueue = new HashSet<>();
        mapCheckTypeRoutingQueue.values().forEach(routingQueue->{
            routingQueue.stream().forEach(bedQueueBO -> hashSetOperatingBedQueue.add(bedQueueBO));
        });
@@ -698,8 +699,8 @@
        mapCheckTypeVsReadyMax.keySet().forEach( checkType -> {
           String str = mapOpeningCheckBedStatInfo.get(checkType) + " " +
                        mapOpeningInstallBedStatInfo.get(checkType) + " " +
                        mapOperatingCheckBedStatInfo.get(checkType) + " " +
                        mapOperatingInstallBedStatInfo.get(checkType) + " ";
                        mapDocCheckBedStatInfo.get(checkType) + " " +
                        mapDocInstallBedStatInfo.get(checkType) + " ";
            mapCheckTypeBedInfo.put( checkType, str);
        });
@@ -707,7 +708,7 @@
        monitorInfoVO.setOpeningBedNum(mapOpeningBed.size());
        monitorInfoVO.setDocBedNum((int) mapOpeningBed.values().stream().filter(item ->
                item.getStatus() == BedStatusEnum.DOCTOR_ON.getStatus() ||
                item.getStatus() == BedStatusEnum.PAUSE.getStatus())
                item.getStatus() == BedStatusEnum.DOCTOR_PAUSE.getStatus())
            .count());
        monitorInfoVO.setRoutingBedNum( hashSetOperatingBedQueue.size() );
        monitorInfoVO.setMapBedVsQueue(mapOpeningBed);