eight
2024-11-13 cac7f142c909d712d6d49c45b0d4efbdef673e48
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java
@@ -401,11 +401,15 @@
                    bedQueueBO.getRoomId(),
                    bedQueueBO.getRoomName(),
                    bedQueueBO.getBedNo(),
                    curSeqNum.get() + 1,
                    curSeqNum.get() + 1,  // 过号回来,排到当前的下一位
                    QueueStatusEnum.RECALLED.getStatus(), // 不需要处理 [安装召回], 原因: 安装工位 没有优先队列
                    QueueStatusEnum.READY.getStatus());
            if (null == updateNum || 0 == updateNum)
                break;
            // 召回 [过号] 患者后,处理 检查项目.亲和性 逻辑
            QueueDO recalledQueueItem = queueMapper.getQueueItemBySeqNum(curSeqNum.get() + 1);
            updateAffinityItemsWhenRecalled( recalledQueueItem );
            curSeqNum.getAndIncrement();
@@ -455,21 +459,8 @@
            }
            // 抢到排队患者后,处理 检查项目.亲和性 逻辑
            QueueDO queueDO = queueMapper.getQueueItemBySeqNum(curSeqNum.get() + 1);
            CheckTypeDO checkTypeDO = getCheckTypeItem( queueDO.getBookCheckType() );
            if ( checkTypeDO.getAffinityCheckTypes().length > 0) {
                List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus(queueDO.getPatId(),
                        checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.WAITING.getStatus());
                for (int i = 0; i < affinityItems.size(); i++) {
                    QueueDO queueItem = affinityItems.get(i);
                    queueItem.setStatus(QueueStatusEnum.AFFINITY_WAITING.getStatus()); //改变 排队状态
                    queueItem.setRoomId(queueDO.getRoomId());
                    queueItem.setRoomName(queueDO.getRoomName());
                    queueItem.setBedNo(queueDO.getBedNo());
                    queueItem.setSeqNum(curSeqNum.get() + 1);  // 使用同一个 内部序号
                    queueMapper.updateById(queueItem);
                }
            }
            QueueDO preemptQueueItem = queueMapper.getQueueItemBySeqNum(curSeqNum.get() + 1);
            updateAffinityItemsWhenPreempt( preemptQueueItem );
            curSeqNum.getAndIncrement();
@@ -516,6 +507,36 @@
        log.info(" opening " + openingFlag.get() + " " + monitorInfoVO.getQueueNum() + " " + monitorInfoVO.getActiveQueueNum() + " " + monitorInfoVO.getCheckTypeBedInfo().toString() );
    }
    private void updateAffinityItemsWhenPreempt(QueueDO preemptQueueItem) {
        CheckTypeDO checkTypeDO = getCheckTypeItem( preemptQueueItem.getBookCheckType() );
        if ( checkTypeDO.getAffinityCheckTypes().length > 0) {
            List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus(preemptQueueItem.getPatId(),
                    checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.WAITING.getStatus());
            for (int i = 0; i < affinityItems.size(); i++) {
                QueueDO queueItem = affinityItems.get(i);
                queueItem.setStatus(QueueStatusEnum.AFFINITY_WAITING.getStatus()); //改变 排队状态
                queueItem.setRoomId(preemptQueueItem.getRoomId());
                queueItem.setRoomName(preemptQueueItem.getRoomName());
                queueItem.setBedNo(preemptQueueItem.getBedNo());
                queueItem.setSeqNum( preemptQueueItem.getSeqNum());  // 使用同一个 内部序号
                queueMapper.updateById(queueItem);
            }
        }
    }
    private void updateAffinityItemsWhenRecalled(QueueDO recalledQueueItem) {
        CheckTypeDO checkTypeDO = getCheckTypeItem( recalledQueueItem.getBookCheckType() );
        if ( checkTypeDO.getAffinityCheckTypes().length > 0) {
            List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus(recalledQueueItem.getPatId(),
                    checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.AFFINITY_WAITING.getStatus());
            for (int i = 0; i < affinityItems.size(); i++) {
                QueueDO queueItem = affinityItems.get(i);
                queueItem.setSeqNum( recalledQueueItem.getSeqNum() );  // 召回后,原内部序号更新
                queueMapper.updateById(queueItem);
            }
        }
    }
    private Integer getBedReadyMax(Long roomId, String bedNo) {
        RoomDO roomDO = roomMapper.getRoom(roomId, bedNo);
        Integer[] checkTypes = roomDO.getCheckTypes();