eight
2024-08-28 d14e741e49fb8f5fe2b825cb7dc1577c37cb6a66
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -8,6 +8,7 @@
import cn.lihu.jh.module.ecg.enums.BedStatusEnum;
import cn.lihu.jh.module.ecg.enums.ErrorCodeConstants;
import cn.lihu.jh.module.ecg.enums.QueueStatusEnum;
import cn.lihu.jh.module.infra.api.config.ConfigApi;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@@ -26,6 +27,8 @@
import static cn.lihu.jh.framework.common.exception.enums.GlobalErrorCodeConstants.SUCCESS;
import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.lihu.jh.module.ecg.Constants.ECG_OPENING_TIME_KEY;
import static cn.lihu.jh.module.ecg.Constants.ECG_QUEUE_READY_MAX_KEY;
import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
/**
@@ -38,13 +41,15 @@
public class QueueServiceImpl implements QueueService {
    @Resource
    private ConfigApi configApi;
    @Resource
    private queueMapper queueMapper;
    @Resource
    private RoomMapper roomMapper;
    AtomicInteger openingFlag = new AtomicInteger(0);
    AtomicInteger curSeqNum = new AtomicInteger(0);
    PriorityBlockingQueue<BedQueueBO> priorityQueue = new PriorityBlockingQueue<>();
@@ -52,6 +57,7 @@
    ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
    Integer queueReadyMax = 0;
    @Override
    public Integer createqueue(QueueSaveReqVO createReqVO) {
@@ -208,7 +214,7 @@
        BedQueueBO bedQueueBO = new BedQueueBO();
        bedQueueBO.setRoomId(roomId);
        bedQueueBO.setBedNo(bedNo);
        bedQueueBO.setMaxQueueNum(MAX_QUEUE_NUM);
        bedQueueBO.setMaxQueueNum(queueReadyMax);
        bedQueueBO.setQueueNum(new AtomicInteger(queueDOList.size()));
        bedQueueBO.setStatusEnum(BedStatusEnum.OPENING);
        priorityQueue.offer(bedQueueBO);
@@ -358,10 +364,10 @@
        List<QueueStatisticDO> queueStatisticDOList = queueMapper.queueStatistic(queueStatusList);
        bedQueueBOList.forEach(item -> {
            item.maxQueueNum = MAX_QUEUE_NUM;
            item.maxQueueNum = queueReadyMax;
            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 ( MAX_QUEUE_NUM < queueNum )
            if ( queueReadyMax < queueNum )
                throw new RuntimeException("init: exceed max queue number!");
            item.queueNum.set( queueNum );
@@ -521,6 +527,11 @@
        return patientStatisticVO;
    }
    @Override
    public void setQueueReadyMax(Integer max) {
        queueReadyMax = max;
    }
    public void startBiz() {
        if (1 == openingFlag.get())
            return;