eight
2024-08-22 59d4417527fe88299c90de9b21ff42efa690ee9c
update
已修改1个文件
44 ■■■■ 文件已修改
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -148,7 +148,36 @@
     * 等到取下一个 排队中人员 的逻辑完成后,再回来不错
     */
    public void hurryup() {
        while (1 == openingFlag.get()) {
        if (0 == openingFlag.get())
            return;
        // 处理 过号-回来 的人
        for (BedQueueBO bedQueueBO : mapBedVsQueue.values()) {
            while (bedQueueBO.queueNum.get() < bedQueueBO.maxQueueNum) {
                // 查看 当前工位 是否有过号-回来的患者
                Integer updateNum = queueMapper.procPassedReturnPatient(
                        bedQueueBO.getRoomId(),
                        bedQueueBO.getRoomName(),
                        bedQueueBO.getBedNo(),
                        curSeqNum.get() + 1,
                        QueueStatusEnum.PASSED_RETURN.getStatus(),
                        QueueStatusEnum.READY.getStatus());
                if (null == updateNum || 0 == updateNum)
                    break;
                curSeqNum.getAndIncrement();
                // 可能已经【并发的】在 nextPatient 中改变了值
                bedQueueBO.queueNum.incrementAndGet();
                // 可能已经【并发的】在 nextPatient 中改变了优先队列顺序
                priorityQueue.remove(bedQueueBO);
                priorityQueue.offer(bedQueueBO);
            }
        }
        // 处理 排队中 患者
        while (true) {
            BedQueueBO bedQueueBO = priorityQueue.peek();
            if (null == bedQueueBO)
                return;
@@ -160,18 +189,8 @@
            if (curQueueNum == bedQueueBO.maxQueueNum)
                return;
            // 查看 当前工位 是否有过号-回来的患者
            Integer updateNum = queueMapper.procPassedReturnPatient(
                    bedQueueBO.getRoomId(),
                    bedQueueBO.getRoomName(),
                    bedQueueBO.getBedNo(),
                    curSeqNum.get() + 1,
                    QueueStatusEnum.PASSED_RETURN.getStatus(),
                    QueueStatusEnum.READY.getStatus());
            if (null == updateNum || 0 == updateNum) {
                // 查看 是否有排队中的患者
                 updateNum = queueMapper.preemptPatient(
            Integer updateNum = queueMapper.preemptPatient(
                                bedQueueBO.getRoomId(),
                                bedQueueBO.getRoomName(),
                                bedQueueBO.getBedNo(),
@@ -182,7 +201,6 @@
                // 没有抢到排队患者
                if (null == updateNum || 0 == updateNum) {
                    return;
                }
            }
            curSeqNum.getAndIncrement();