eight
2024-08-22 2cb4f97e706193afbddf49e56fcf798e9dc8eb85
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -35,6 +35,14 @@
    final static Integer MAX_QUEUE_NUM = 3;
    @Resource
    private queueMapper queueMapper;
    @Resource
    private RoomMapper roomMapper;
    AtomicInteger openingFlag = new AtomicInteger(0);
    AtomicInteger curSeqNum = new AtomicInteger(0);
    PriorityBlockingQueue<BedQueueBO> priorityQueue = new PriorityBlockingQueue<>();
@@ -42,11 +50,6 @@
    ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
    @Resource
    private queueMapper queueMapper;
    @Resource
    private RoomMapper roomMapper;
    @Override
    public Integer createqueue(QueueSaveReqVO createReqVO) {
@@ -91,7 +94,7 @@
    }
    /**
     * 系统重启时,从DB同步队列数据到 工位优先队列
     * 系统重启时,从DB同步工位的患者队列数据到 工位优先队列
     */
    public void initQueue() {
        priorityQueue.clear();
@@ -145,7 +148,7 @@
     * 等到取下一个 排队中人员 的逻辑完成后,再回来不错
     */
    public void hurryup() {
        while (true) {
        while (1 == openingFlag.get()) {
            BedQueueBO bedQueueBO = priorityQueue.peek();
            if (null == bedQueueBO)
                return;
@@ -157,17 +160,29 @@
            if (curQueueNum == bedQueueBO.maxQueueNum)
                return;
            Integer updateNum = queueMapper.preemptPatient(
            // 查看 当前工位 是否有过号-回来的患者
            Integer updateNum = queueMapper.procPassedReturnPatient(
                    bedQueueBO.getRoomId(),
                    bedQueueBO.getRoomName(),
                    bedQueueBO.getBedNo(),
                    curSeqNum.get() + 1,
                    QueueStatusEnum.WAITING.getStatus(),
                    QueueStatusEnum.PASSED_RETURN.getStatus(),
                    QueueStatusEnum.READY.getStatus());
            // 没有抢到排队患者
            if (null == updateNum || 0 == updateNum) {
                return;
                // 查看 是否有排队中的患者
                 updateNum = queueMapper.preemptPatient(
                                bedQueueBO.getRoomId(),
                                bedQueueBO.getRoomName(),
                                bedQueueBO.getBedNo(),
                                curSeqNum.get() + 1,
                                QueueStatusEnum.WAITING.getStatus(),
                                QueueStatusEnum.READY.getStatus());
                // 没有抢到排队患者
                if (null == updateNum || 0 == updateNum) {
                    return;
                }
            }
            curSeqNum.getAndIncrement();
@@ -190,6 +205,9 @@
        queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //排队中
        QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class);
        queueMapper.insert(queue);
        if (0 == openingFlag.get())
            return;
        singleThreadExecutor.execute( () -> {
            hurryup();
@@ -259,4 +277,22 @@
        return patientStatisticVO;
    }
    public void startBiz() {
        openingFlag.set(1);
        hurryup();
    }
    @Override
    public Integer passedPatientReturn(Long roomId, String bedNo, String patId) {
        Integer updateNum = queueMapper.passedPatientReturn(roomId, bedNo, patId,
                QueueStatusEnum.PASSED.getStatus(), QueueStatusEnum.PASSED_RETURN.getStatus());
        return updateNum;
    }
    @Override
    public Integer queueJump(String patId, Byte jumped) {
        Integer updateNum = queueMapper.queueJump(patId, QueueStatusEnum.WAITING.getStatus(), jumped);
        return null;
    }
}