eight
2025-04-09 db1ad1b67a55f005baea15a6d640df370a6c74a9
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java
@@ -98,10 +98,6 @@
            return ROOM_INVALID_STATUS;
        }
        List<Integer> queueStatusList = new ArrayList<>();
        queueStatusList.add(QueueStatusEnum.READY.getStatus());
        List<QueueDO> queueDOList = queueMapper.getBedQueueByStatus(roomId, bedNo, queueStatusList);
        RoomDO roomDO = roomMapper.getRoom(roomId, bedNo);
        // 新增..工位队列
@@ -109,8 +105,6 @@
        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() );
@@ -334,19 +328,7 @@
        List<RoomDO> roomDOList = roomMapper.simpleRoomList(bedStatusEnumList);
        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);
        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.getMaxReadyPatNum() < queueNum )
                throw new RuntimeException("init: exceed max queue number!");
            item.setReadyPatNum( new AtomicInteger(queueNum) );
            mapOpeningBed.put( Utils.formatRoomBed(item.roomId, item.bedNo), item);
            if (BedStatusEnum.DOCTOR_ON.getStatus() == item.getStatus()) {
                addRoutingQueue(item);
@@ -582,12 +564,11 @@
        }
    }
    private Integer getBedReadyMax(Long roomId, String bedNo) {
        RoomDO roomDO = roomMapper.getRoom(roomId, bedNo);
        Integer[] checkTypes = roomDO.getCheckTypes();
        Integer ret = 0;
        for (int i=0; i<checkTypes.length; i++) {
            CheckTypeDO checkTypeDO = mapCheckTypeVsReadyMax.get(checkTypes[i]);
    private Integer getBedReadyMax(BedBO bedBO) {
        Integer[] checkTypes = bedBO.getCheckTypes();
        int ret = 0;
        for (Integer checkType : checkTypes) {
            CheckTypeDO checkTypeDO = mapCheckTypeVsReadyMax.get(checkType);
            Integer tmp = checkTypeDO.getReadyNum();
            ret = ret < tmp ? tmp : ret;  //【候诊中】数量 取大值
        }
@@ -596,8 +577,15 @@
    private void addRoutingQueue(BedBO bedBO) {
        // 装机工位 不进 分流队列,不接收 【排队中】患者分流
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedBO.getOpType())
        if (Objects.equals(BedOpTypeEnum.OP_INSTALL.getOpType(), bedBO.getOpType()))
            return;
        // 同步DB, 设置工位的分流控制信息
        List<Integer> queueStatusList = new ArrayList<>();
        queueStatusList.add(QueueStatusEnum.READY.getStatus()); //[候诊中]
        List<QueueDO> queueDOList = queueMapper.getBedQueueByStatus(bedBO.getRoomId(), bedBO.getBedNo(), queueStatusList);
        bedBO.setMaxReadyPatNum( getBedReadyMax(bedBO) );
        bedBO.setReadyPatNum(new AtomicInteger(queueDOList.size()));
        Integer[] checkTypes = bedBO.getCheckTypes();
        Arrays.stream(checkTypes).forEach(checkType -> {
@@ -618,7 +606,7 @@
    private void removeRoutingQueue(BedBO bedBO) {
        // 装机工位 不进 分流队列,不接收 【排队中】患者分流
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedBO.getOpType())
        if (Objects.equals(BedOpTypeEnum.OP_INSTALL.getOpType(), bedBO.getOpType()))
            return;
        Integer[] checkTypes = bedBO.getCheckTypes();
@@ -631,7 +619,7 @@
    private void refreshRoutingQueue(BedBO bedBO) {
        // 装机工位 不进 分流队列,不接收 【排队中】患者分流
        if (BedOpTypeEnum.OP_INSTALL.getOpType() == bedBO.getOpType())
        if (Objects.equals(BedOpTypeEnum.OP_INSTALL.getOpType(), bedBO.getOpType()))
            return;
        Integer[] checkTypes = bedBO.getCheckTypes();