eight
2025-04-08 1d2a7fa1aeddb40bb978bb1234178e0c9da04e38
just refactor - rename
已删除1个文件
已添加1个文件
已修改4个文件
243 ■■■■ 文件已修改
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/Utils.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/room/vo/MonitorInfoVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedQueueBO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java 178 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/RoutingBedBO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/Utils.java
@@ -1,8 +1,5 @@
package cn.lihu.jh.module.ecg;
import cn.lihu.jh.module.ecg.service.queue.BedQueueBO;
import jodd.typeconverter.impl.LocalTimeConverter;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Arrays;
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/room/vo/MonitorInfoVO.java
@@ -1,6 +1,6 @@
package cn.lihu.jh.module.ecg.controller.admin.room.vo;
import cn.lihu.jh.module.ecg.service.queue.BedQueueBO;
import cn.lihu.jh.module.ecg.service.queue.RoutingBedBO;
import lombok.Data;
import java.util.Map;
@@ -13,5 +13,5 @@
    private Integer routingBedNum;
    private Integer openingFlag;
    private Map<Integer, String> checkTypeBedInfo;
    private ConcurrentHashMap<String, BedQueueBO> mapBedVsQueue;
    private ConcurrentHashMap<String, RoutingBedBO> mapBedVsQueue;
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedQueueBO.java
ÎļþÒÑɾ³ý
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java
@@ -284,8 +284,8 @@
            return error(ROOM_NOT_SIT);
        }
        BedQueueBO bedQueueBO = queueServiceTxFunctions.getBedQueueBO(roomId, bedNo);
        if (null == bedQueueBO) {
        RoutingBedBO routingBedBO = queueServiceTxFunctions.getBedQueueBO(roomId, bedNo);
        if (null == routingBedBO) {
            log.error("getRoom mapBedVsQueue DONOT existed. " + roomId + " " + bedNo);
            return error(QUEUE_BED_NOT_EXIST);
        }
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, RoutingBedBO> mapOpeningBed = new ConcurrentHashMap<>();
    // è£…机工位..不进入分流队列
    Map<Integer, PriorityBlockingQueue<BedQueueBO>> mapCheckTypeRoutingQueue = new HashMap();
    Map<Integer, PriorityBlockingQueue<RoutingBedBO>> 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) {
        RoutingBedBO routingBedBO2 = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null != routingBedBO2) {
            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);
        RoutingBedBO routingBedBO = new RoutingBedBO();
        routingBedBO.setRoomId(roomId);
        routingBedBO.setRoomName(roomName);
        routingBedBO.setBedNo(bedNo);
        routingBedBO.setMaxReadyPatNum(getBedReadyMax(roomId, bedNo));
        routingBedBO.setReadyPatNum(new AtomicInteger(queueDOList.size()));
        routingBedBO.setStatus(BedStatusEnum.OPENING.getStatus());
        routingBedBO.setCheckTypes( roomDO.getCheckTypes() );
        routingBedBO.setOpType( roomDO.getOpType() );
        mapOpeningBed.put( Utils.formatRoomBed(roomId, bedNo), routingBedBO);
        return GlobalErrorCodeConstants.SUCCESS;
    }
    public ErrorCode bedClose(Long roomId, String bedNo) {
        BedQueueBO bedQueueBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == bedQueueBO) {
        RoutingBedBO routingBedBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == routingBedBO) {
            log.error("bedClose mapBedVsQueue DONOT existed. " + roomId + " " + bedNo);
            return QUEUE_BED_NOT_EXIST;
        }
@@ -154,13 +154,13 @@
        }
        mapOpeningBed.remove( Utils.formatRoomBed(roomId, bedNo) );
        removeRoutingQueue(bedQueueBO);
        removeRoutingQueue(routingBedBO);
        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) {
        RoutingBedBO routingBedBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == routingBedBO) {
            log.error("bedDoctorPause mapBedVsQueue DONOT existed. " + roomId + " " + bedNo);
            return QUEUE_BED_NOT_EXIST;
        }
@@ -174,14 +174,14 @@
            return ROOM_INVALID_STATUS;
        }
        bedQueueBO.setStatus(BedStatusEnum.PAUSE.getStatus());
        removeRoutingQueue(bedQueueBO);
        routingBedBO.setStatus(BedStatusEnum.PAUSE.getStatus());
        removeRoutingQueue(routingBedBO);
        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())) {
        RoutingBedBO routingBedBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == routingBedBO || !routingBedBO.getStatus().equals(BedStatusEnum.PAUSE.getStatus())) {
            log.error("bedDoctorResume mapBedVsQueue DONOT existed OR NOT Paused. " + roomId + " " + bedNo);
            return QUEUE_BED_NOT_EXIST;
        }
@@ -196,14 +196,14 @@
            return ROOM_INVALID_STATUS;
        }
        bedQueueBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus());
        addRoutingQueue(bedQueueBO);
        routingBedBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus());
        addRoutingQueue(routingBedBO);
        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) {
        RoutingBedBO routingBedBO = mapOpeningBed.get( Utils.formatRoomBed(roomId, bedNo) );
        if (null == routingBedBO) {
            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);
        routingBedBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus());
        addRoutingQueue(routingBedBO);
        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) {
        RoutingBedBO routingBedBO = mapOpeningBed.get( Utils.formatRoomBed( roomId, bedNo ) );
        if (null == routingBedBO) {
            log.error("bedDoctorOff mapBedVsQueue DONOT existed. " + roomId + " " + bedNo);
            return QUEUE_BED_NOT_EXIST;
        }
@@ -239,9 +239,9 @@
            return ROOM_INVALID_STATUS;
        }
        removeRoutingQueue(bedQueueBO);
        removeRoutingQueue(routingBedBO);
        bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus());
        routingBedBO.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 ä¸­æ”¹å˜äº†å€¼
        RoutingBedBO bo = mapOpeningBed.get( Utils.formatRoomBed( roomId, bedNo ) );
        bo.readyPatNum.getAndDecrement(); // å¯èƒ½å·²ç»ã€å¹¶å‘的】在 hurry-up ä¸­æ”¹å˜äº†å€¼
        refreshRoutingQueue(bo);
        return GlobalErrorCodeConstants.SUCCESS;
@@ -332,21 +332,21 @@
        bedStatusEnumList.add(BedStatusEnum.DOCTOR_ON);
        bedStatusEnumList.add(BedStatusEnum.PAUSE);
        List<RoomDO> roomDOList = roomMapper.simpleRoomList(bedStatusEnumList);
        List<BedQueueBO> bedQueueBOList = roomDOList.stream().map(item -> BeanUtils.toBean(item, BedQueueBO.class)).toList();
        List<RoutingBedBO> routingBedBOList = roomDOList.stream().map(item -> BeanUtils.toBean(item, RoutingBedBO.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) );
        routingBedBOList.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);
@@ -388,15 +388,15 @@
        if (0 == openingFlag.get())
            return;
        BedQueueBO bedQueueBO = getBedQueueBO(roomId, bedNo);
        RoutingBedBO routingBedBO = getBedQueueBO(roomId, bedNo);
        // å¤„理 è¿‡å·-回来 çš„人
        while (bedQueueBO.queueNum.get() < bedQueueBO.maxQueueNum) {
        while (routingBedBO.readyPatNum.get() < routingBedBO.maxReadyPatNum) {
            // æŸ¥çœ‹ å½“前工位 æ˜¯å¦æœ‰è¿‡å·-回来的患者
            Integer updateNum = queueMapper.queueRecalledPatient(
                    bedQueueBO.getRoomId(),
                    bedQueueBO.getRoomName(),
                    bedQueueBO.getBedNo(),
                    routingBedBO.getRoomId(),
                    routingBedBO.getRoomName(),
                    routingBedBO.getBedNo(),
                    curSeqNum.get() + 1,  // è¿‡å·å›žæ¥ï¼ŒæŽ’到当前的下一位
                    QueueStatusEnum.RECALLED.getStatus(), // ä¸éœ€è¦å¤„理 [安装召回], åŽŸå› : å®‰è£…工位 ä¸è¿›å…¥åˆ†æµé˜Ÿåˆ—
                    QueueStatusEnum.READY.getStatus());
@@ -414,14 +414,14 @@
            curSeqNum.getAndIncrement();
            // å¯èƒ½å·²ç»ã€å¹¶å‘的】在 nextPatient ä¸­æ”¹å˜äº†å€¼
            bedQueueBO.queueNum.incrementAndGet();
            routingBedBO.readyPatNum.incrementAndGet();
            // å¯èƒ½å·²ç»ã€å¹¶å‘的】在 nextPatient ä¸­æ”¹å˜äº†åˆ†æµé˜Ÿåˆ—顺序
            refreshRoutingQueue(bedQueueBO);
            refreshRoutingQueue(routingBedBO);
        }
        // å¤„理 æŽ’队中 æ‚£è€…
        hurryupOneBedCheckTypeList( bedQueueBO );
        hurryupOneBedCheckTypeList(routingBedBO);
    }
    /**
@@ -433,31 +433,31 @@
     */
    public void hurryupOneCheckType(Integer checkType) {
        PriorityBlockingQueue<BedQueueBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
        PriorityBlockingQueue<RoutingBedBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
        if (null == routingQueue)
            return;
        while (true) {
            BedQueueBO bedQueueBO = routingQueue.peek();
            if (null == bedQueueBO)
            RoutingBedBO routingBedBO = routingQueue.peek();
            if (null == routingBedBO)
                return;
            int curQueueNum = bedQueueBO.queueNum.get();
            if (curQueueNum > bedQueueBO.maxQueueNum)
            int curQueueNum = routingBedBO.readyPatNum.get();
            if (curQueueNum > routingBedBO.maxReadyPatNum)
                throw new RuntimeException("hurryupOneCheckType: exceed max queue number!");
            if (curQueueNum == bedQueueBO.maxQueueNum)
            if (curQueueNum == routingBedBO.maxReadyPatNum)
                return;
            // æŸ¥çœ‹ æ˜¯å¦æœ‰æŽ’队中的患者
            Integer updateNum = queueMapper.preemptWaitingPatientWithBedCheckTypes(
                    bedQueueBO.getRoomId(),
                    bedQueueBO.getRoomName(),
                    bedQueueBO.getBedNo(),
                    routingBedBO.getRoomId(),
                    routingBedBO.getRoomName(),
                    routingBedBO.getBedNo(),
                    curSeqNum.get() + 1,
                    QueueStatusEnum.WAITING.getStatus(),
                    QueueStatusEnum.READY.getStatus(),
                    bedQueueBO.checkTypes);  //关键点 å…³é”®ç‚¹ å…³é”®ç‚¹ checkType
                    routingBedBO.checkTypes);  //关键点 å…³é”®ç‚¹ å…³é”®ç‚¹ checkType
            // æ²¡æœ‰æŠ¢åˆ°æŽ’队患者
            if (null == updateNum || 0 == updateNum) {
@@ -475,10 +475,10 @@
            curSeqNum.getAndIncrement();
            // å¯èƒ½å·²ç»ã€å¹¶å‘的】在 nextPatient ä¸­æ”¹å˜äº†å€¼
            bedQueueBO.queueNum.incrementAndGet();
            routingBedBO.readyPatNum.incrementAndGet();
            // å¯èƒ½å·²ç»ã€å¹¶å‘的】在 nextPatient ä¸­æ”¹å˜äº†åˆ†æµé˜Ÿåˆ—顺序
            refreshRoutingQueue(bedQueueBO);
            refreshRoutingQueue(routingBedBO);
        }
    }
@@ -499,7 +499,7 @@
        return mapCheckTypeVsReadyMax.get( checkType );
    }
    public BedQueueBO getBedQueueBO(Long roomId, String bedNo) {
    public RoutingBedBO 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(RoutingBedBO routingBedBO) {
        while (routingBedBO.readyPatNum.get() < routingBedBO.maxReadyPatNum) {
            // æŠ¢å  æ˜¯å¦æœ‰æŽ’队中的患者
            Integer updateNum = queueMapper.preemptWaitingPatientWithBedCheckTypes(
                    bedQueueBO.getRoomId(),
                    bedQueueBO.getRoomName(),
                    bedQueueBO.getBedNo(),
                    routingBedBO.getRoomId(),
                    routingBedBO.getRoomName(),
                    routingBedBO.getBedNo(),
                    curSeqNum.get() + 1,
                    QueueStatusEnum.WAITING.getStatus(),
                    QueueStatusEnum.READY.getStatus(),
                    bedQueueBO.checkTypes);
                    routingBedBO.checkTypes);
            // æ²¡æœ‰æŠ¢åˆ°æŽ’队患者
            if (null == updateNum || 0 == updateNum) {
@@ -544,11 +544,11 @@
            curSeqNum.getAndIncrement();
            bedQueueBO.queueNum.incrementAndGet();
            routingBedBO.readyPatNum.incrementAndGet();
        }
        // æ”¹å˜äº†åˆ†æµé˜Ÿåˆ—顺序
        refreshRoutingQueue(bedQueueBO);
        refreshRoutingQueue(routingBedBO);
    }
    /**
@@ -594,51 +594,51 @@
        return ret;
    }
    private void addRoutingQueue(BedQueueBO bedQueueBO) {
    private void addRoutingQueue(RoutingBedBO routingBedBO) {
        // è£…机工位 ä¸è¿› åˆ†æµé˜Ÿåˆ—,不接收 ã€æŽ’队中】患者分流
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedQueueBO.getOpType())
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == routingBedBO.getOpType())
            return;
        Integer[] checkTypes = bedQueueBO.getCheckTypes();
        Integer[] checkTypes = routingBedBO.getCheckTypes();
        Arrays.stream(checkTypes).forEach(checkType -> {
            CheckTypeDO checkTypeDO = mapCheckTypeVsReadyMax.get(checkType);
            PriorityBlockingQueue<BedQueueBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            PriorityBlockingQueue<RoutingBedBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            if (null == routingQueue) {
                routingQueue = new PriorityBlockingQueue<BedQueueBO>();
                routingQueue = new PriorityBlockingQueue<RoutingBedBO>();
                mapCheckTypeRoutingQueue.put( checkType, routingQueue );
            }
            if (!routingQueue.contains(bedQueueBO)) {
                routingQueue.offer(bedQueueBO);
            if (!routingQueue.contains(routingBedBO)) {
                routingQueue.offer(routingBedBO);
            } else {
                log.error("bedDoctorResume routingQueue still exist!. " + bedQueueBO.getRoomId() + " " + bedQueueBO.getBedNo());
                log.error("bedDoctorResume routingQueue still exist!. " + routingBedBO.getRoomId() + " " + routingBedBO.getBedNo());
            }
        });
    }
    private void removeRoutingQueue(BedQueueBO bedQueueBO) {
    private void removeRoutingQueue(RoutingBedBO routingBedBO) {
        // è£…机工位 ä¸è¿› åˆ†æµé˜Ÿåˆ—,不接收 ã€æŽ’队中】患者分流
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedQueueBO.getOpType())
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == routingBedBO.getOpType())
            return;
        Integer[] checkTypes = bedQueueBO.getCheckTypes();
        Integer[] checkTypes = routingBedBO.getCheckTypes();
        Arrays.stream(checkTypes).forEach(checkType -> {
            PriorityBlockingQueue<BedQueueBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            PriorityBlockingQueue<RoutingBedBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            if (null != routingQueue)
                routingQueue.remove(bedQueueBO);
                routingQueue.remove(routingBedBO);
        });
    }
    private void refreshRoutingQueue(BedQueueBO bedQueueBO) {
    private void refreshRoutingQueue(RoutingBedBO routingBedBO) {
        // è£…机工位 ä¸è¿› åˆ†æµé˜Ÿåˆ—,不接收 ã€æŽ’队中】患者分流
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedQueueBO.getOpType())
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == routingBedBO.getOpType())
            return;
        Integer[] checkTypes = bedQueueBO.getCheckTypes();
        Integer[] checkTypes = routingBedBO.getCheckTypes();
        Arrays.stream(checkTypes).forEach(checkType -> {
            PriorityBlockingQueue<BedQueueBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            routingQueue.remove(bedQueueBO);
            routingQueue.offer(bedQueueBO);
            PriorityBlockingQueue<RoutingBedBO> routingQueue = mapCheckTypeRoutingQueue.get(checkType);
            routingQueue.remove(routingBedBO);
            routingQueue.offer(routingBedBO);
        });
    }
@@ -688,7 +688,7 @@
        });
        // æŽ¥æ”¶..排队中患者..的分流队列
        HashSet<BedQueueBO> hashSetOperatingBedQueue = new HashSet<>();
        HashSet<RoutingBedBO> hashSetOperatingBedQueue = new HashSet<>();
        mapCheckTypeRoutingQueue.values().forEach(routingQueue->{
            routingQueue.stream().forEach(bedQueueBO -> hashSetOperatingBedQueue.add(bedQueueBO));
        });
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/RoutingBedBO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package cn.lihu.jh.module.ecg.service.queue;
import lombok.Data;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.atomic.AtomicInteger;
@Data
public class RoutingBedBO implements Comparable<RoutingBedBO> {
    String bedNo;
    Long roomId;
    String roomName;
    AtomicInteger readyPatNum = new AtomicInteger(0);
    Integer maxReadyPatNum;
    /**
     * @see cn.lihu.jh.module.ecg.enums.BedStatusEnum
      */
    Integer status;
    Integer[] checkTypes;
    Integer opType;
    @Override
    public int compareTo(@NotNull RoutingBedBO o) {
        return Integer.compare(this.readyPatNum.get(), o.readyPatNum.get());
    }
}