From 22b0761897d0959d0a3dc34c68efc27705b17526 Mon Sep 17 00:00:00 2001
From: eight <641137800@qq.com>
Date: 星期三, 09 十月 2024 17:10:00 +0800
Subject: [PATCH] 1. 根据检查类型,配置 准备中 人数  2. 医生入座,才允许 患者 进入 准备中

---
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java |   55 ++++++++++++++++++++++++++-----------------------------
 1 files changed, 26 insertions(+), 29 deletions(-)

diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java
index e378814..15bfd80 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java
@@ -2,16 +2,8 @@
 
 import cn.lihu.jh.framework.common.exception.ErrorCode;
 import cn.lihu.jh.framework.common.exception.enums.GlobalErrorCodeConstants;
-import cn.lihu.jh.framework.common.pojo.CommonResult;
-import cn.lihu.jh.framework.common.pojo.PageResult;
 import cn.lihu.jh.framework.common.util.object.BeanUtils;
-import cn.lihu.jh.module.ecg.controller.admin.queue.vo.PatientStatisticVO;
-import cn.lihu.jh.module.ecg.controller.admin.queue.vo.QueuePageReqVO;
-import cn.lihu.jh.module.ecg.controller.admin.queue.vo.QueueSaveReqVO;
 import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO;
-import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO;
-import cn.lihu.jh.module.ecg.dal.dataobject.devrent.DevRentDO;
-import cn.lihu.jh.module.ecg.dal.dataobject.queue.BedQueueStatisticDO;
 import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO;
 import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueStatisticDO;
 import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO;
@@ -20,25 +12,22 @@
 import cn.lihu.jh.module.ecg.dal.mysql.queue.queueMapper;
 import cn.lihu.jh.module.ecg.dal.mysql.room.RoomMapper;
 import cn.lihu.jh.module.ecg.enums.BedStatusEnum;
-import cn.lihu.jh.module.ecg.enums.DevRentStateEnum;
 import cn.lihu.jh.module.ecg.enums.QueueStatusEnum;
 import cn.lihu.jh.module.system.api.oauth2.OAuth2TokenApi;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.lihu.jh.framework.common.pojo.CommonResult.error;
-import static cn.lihu.jh.framework.common.pojo.CommonResult.success;
 import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
 
 /**
@@ -72,7 +61,7 @@
     PriorityBlockingQueue<BedQueueBO> priorityQueue = new PriorityBlockingQueue<>();
     ConcurrentHashMap<String, BedQueueBO > mapBedVsQueue = new ConcurrentHashMap<>();
 
-    Integer queueReadyMax = 0;
+    Map<Integer, Integer> mapCheckTypeVsReadyMax = null;
 
     /**
      * 宸插叧闂� 鎴栬�� 鍏抽棴涓紝鍙互寮�閫氬伐浣�
@@ -105,10 +94,9 @@
         bedQueueBO.setRoomId(roomId);
         bedQueueBO.setRoomName(roomName);
         bedQueueBO.setBedNo(bedNo);
-        bedQueueBO.setMaxQueueNum(queueReadyMax);
+        bedQueueBO.setMaxQueueNum(getBedReadyMax(roomId, bedNo));
         bedQueueBO.setQueueNum(new AtomicInteger(queueDOList.size()));
         bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus());
-        priorityQueue.offer(bedQueueBO);
         mapBedVsQueue.put(String.format("%09d%s", roomId, bedNo), bedQueueBO);
 
         return GlobalErrorCodeConstants.SUCCESS;
@@ -215,6 +203,13 @@
         }
 
         bedQueueBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus());
+        if (!priorityQueue.contains(bedQueueBO)) {
+            priorityQueue.offer(bedQueueBO);
+        } else {
+            log.error("bedDoctorOn priorityQueue still exist!. " + roomId + " " + bedNo);
+            return ECG_INNER_ERROR;
+        }
+
         return GlobalErrorCodeConstants.SUCCESS;
     }
 
@@ -235,15 +230,7 @@
             return ROOM_INVALID_STATUS;
         }
 
-        // 濡傛灉鏄湪 PAUSE 鐘舵�佺搴х殑锛岄渶瑕侀噸鏂板姞鍥� 浼樺厛闃熷垪
-        if (bedQueueBO.getStatus().equals(BedStatusEnum.PAUSE.getStatus())) {
-            if (!priorityQueue.contains(bedQueueBO)) {
-                priorityQueue.offer(bedQueueBO);
-            } else {
-                log.error("bedDoctorResume priorityQueue still exist!. " + roomId + " " + bedNo);
-                return ECG_INNER_ERROR;
-            }
-        }
+        priorityQueue.remove(bedQueueBO);
 
         bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus());
         return GlobalErrorCodeConstants.SUCCESS;
@@ -294,15 +281,15 @@
         List<QueueStatisticDO> queueStatisticDOList = queueMapper.queueStatistic(queueStatusList);
 
         bedQueueBOList.forEach(item -> {
-            item.maxQueueNum = queueReadyMax;
+            item.maxQueueNum = getBedReadyMax(item.roomId, item.bedNo);
             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 ( queueReadyMax < queueNum )
+            if ( item.maxQueueNum < queueNum )
                 throw new RuntimeException("init: exceed max queue number!");
 
             item.queueNum.set( queueNum );
             mapBedVsQueue.put(String.format("%09d%s", item.roomId, item.bedNo), item);
-            if (BedStatusEnum.PAUSE.getStatus() != item.getStatus()) {
+            if (BedStatusEnum.DOCTOR_ON.getStatus() == item.getStatus()) {
                 priorityQueue.offer(item);
             }
         });
@@ -406,8 +393,8 @@
         openingFlag.set(flag);
     }
 
-    public void setQueueReadyMax(Integer max) {
-        queueReadyMax = max;
+    public void setCheckTypeReadyMax(Map<Integer, Integer> max) {
+        mapCheckTypeVsReadyMax = max;
     }
 
     public BedQueueBO getBedQueueBO(Long roomId, String bedNo) {
@@ -427,4 +414,14 @@
                 + " opening " + openingFlag.get());
     }
 
+    private Integer getBedReadyMax(Long roomId, String bedNo) {
+        RoomDO roomDO = roomMapper.getRoom(roomId, bedNo);
+        Integer[] checkTypes = roomDO.getCheckTypes();
+        Integer ret = 0;
+        for (int i=0; i<checkTypes.length; i++) {
+            Integer tmp = mapCheckTypeVsReadyMax.get(checkTypes[i]);
+            ret = ret < tmp ? tmp : ret;  //鍙栧ぇ鍊�
+        }
+        return ret;
+    }
 }

--
Gitblit v1.9.3