eight
2024-08-16 f797d207370d22e4c1e0a918522be3bff56b1927
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -1,5 +1,12 @@
package cn.lihu.jh.module.ecg.service.queue;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueStatisticDO;
import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO;
import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomStatisticsDO;
import cn.lihu.jh.module.ecg.dal.mysql.room.RoomMapper;
import cn.lihu.jh.module.ecg.enums.QueueStatusEnum;
import lombok.Data;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@@ -10,7 +17,10 @@
import cn.lihu.jh.module.ecg.dal.mysql.queue.queueMapper;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.*;
import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
@@ -24,8 +34,17 @@
@Validated
public class QueueServiceImpl implements QueueService {
    final static Integer MAX_QUEUE_NUM = 2;
    Integer  curSeqNum = 0;
    PriorityQueue<BedQueueBO> priorityQueue = new PriorityQueue<>();
    @Resource
    private queueMapper queueMapper;
    @Resource
    private RoomMapper roomMapper;
    @Override
    public Integer createqueue(QueueSaveReqVO createReqVO) {
@@ -69,4 +88,65 @@
        return queueMapper.selectPage(pageReqVO);
    }
}
    @Override
    public List<QueueStatisticDO> queueStatistics(List<Byte> statusList) {
        return queueMapper.queueStatistic(statusList);
    }
    @Override
    public void queue(QueueSaveReqVO queueSaveReqVO) {
        BedQueueBO bedQueueBO = priorityQueue.peek();
        if (null == bedQueueBO)
            return;
        if (bedQueueBO.queueNum == bedQueueBO.maxQueueNum) {
            queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //排队中
            QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class);
            queueMapper.insert(queue);  // queue.getId();
        } else if (bedQueueBO.queueNum < bedQueueBO.maxQueueNum) {
            queueSaveReqVO.setStatus(QueueStatusEnum.READY.getStatus()); //候诊准备中
            queueSaveReqVO.setRoomId(bedQueueBO.getRoomId());
            queueSaveReqVO.setRoomName(bedQueueBO.getRoomName());
            queueSaveReqVO.setBedNo(bedQueueBO.getBedNo());
            queueSaveReqVO.setSeqNum(curSeqNum);
            QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class);
            queueMapper.insert(queue);  // queue.getId();
            curSeqNum++;
            bedQueueBO.queueNum++;
            BedQueueBO bedQueueBO2 = priorityQueue.poll();
            priorityQueue.offer(bedQueueBO2);
        }
    }
    @PostConstruct
    public void initQueue() {
        priorityQueue.clear();
        List<RoomDO> roomDOList = roomMapper.simpleRoomList();
        List<BedQueueBO> bedQueueBOList = roomDOList.stream().map(item -> BeanUtils.toBean(item, BedQueueBO.class)).toList();
        List<Byte> queueStatusList = new ArrayList<>();
        queueStatusList.add(QueueStatusEnum.READY.getStatus());
        List<QueueStatisticDO> queueStatisticDOList = queueMapper.queueStatistic(queueStatusList);
        bedQueueBOList.forEach(item -> {
            item.maxQueueNum = MAX_QUEUE_NUM;
            Optional<QueueStatisticDO> queueStatisticDOOptional = queueStatisticDOList.stream().filter(it->it.getRoomId()==item.roomId && it.getBedNo().equals(item.getBedNo())).findFirst();
            item.queueNum = queueStatisticDOOptional.isPresent() ? queueStatisticDOOptional.get().getTotalInStatus() : 0;
            priorityQueue.offer(item);
        });
        curSeqNum = queueMapper.getMaxSeqNum();
        curSeqNum = null == curSeqNum ? 1 : ++curSeqNum;
    }
    /**
     * TODO 新开队列时,需要把排队中的人 转到 就诊准备 状态
     * 等到取下一个 排队中人员 的逻辑完成后,再回来不错
     */
    public void hurryup() {
    }
}