From a7b5ec90a38f93bc1da2f48676c16bb757cb05f7 Mon Sep 17 00:00:00 2001
From: eight <641137800@qq.com>
Date: 星期四, 22 八月 2024 10:14:17 +0800
Subject: [PATCH] update

---
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java |   54 +++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 43 insertions(+), 11 deletions(-)

diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
index ceb0e55..b280271 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -1,5 +1,6 @@
 package cn.lihu.jh.module.ecg.service.queue;
 
+import cn.lihu.jh.module.ecg.dal.dataobject.queue.BedQueueStatisticDO;
 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.mysql.room.RoomMapper;
@@ -32,7 +33,7 @@
 @Validated
 public class QueueServiceImpl implements QueueService {
 
-    final static Integer MAX_QUEUE_NUM = 2;
+    final static Integer MAX_QUEUE_NUM = 3;
 
     AtomicInteger curSeqNum = new AtomicInteger(0);
 
@@ -89,11 +90,9 @@
         return queueMapper.selectPage(pageReqVO);
     }
 
-    @Override
-    public List<QueueStatisticDO> queueStatistics(List<Byte> statusList) {
-        return queueMapper.queueStatistic(statusList);
-    }
-
+    /**
+     * 绯荤粺閲嶅惎鏃讹紝浠嶥B鍚屾闃熷垪鏁版嵁鍒� 宸ヤ綅浼樺厛闃熷垪
+     */
     public void initQueue() {
         priorityQueue.clear();
         mapBedVsQueue.clear();
@@ -110,7 +109,11 @@
         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.set( queueStatisticDOOptional.isPresent() ? queueStatisticDOOptional.get().getTotalInStatus() : 0 );
+            int queueNum = queueStatisticDOOptional.isPresent() ? queueStatisticDOOptional.get().getTotalInStatus() : 0;
+            if ( MAX_QUEUE_NUM < queueNum )
+                throw new RuntimeException("init: exceed max queue number!");
+
+            item.queueNum.set( queueNum );
             priorityQueue.offer(item);
             mapBedVsQueue.put(String.format("%09d%s", item.roomId, item.bedNo), item);
         });
@@ -119,6 +122,9 @@
         curSeqNum = new AtomicInteger(null == num ? 0 : num);
     }
 
+    /**
+     * 杩欎釜閫昏緫 涓嶉渶瑕佷簡
+     */
     public void reorderQueue() {
         // 鏍规嵁棰勭害鍓嶅悗锛屼粠DB 鑾峰彇 闃熷垪涓� 灏辫瘖鍑嗗涓汉鍛� 鍒楄〃
         List<Byte> queueStatusList = new ArrayList<>();
@@ -146,7 +152,7 @@
 
             int curQueueNum = bedQueueBO.queueNum.get();
             if (curQueueNum > bedQueueBO.maxQueueNum)
-                throw new RuntimeException("exceed max queue number!");
+                throw new RuntimeException("hurryup: exceed max queue number!");
 
             if (curQueueNum == bedQueueBO.maxQueueNum)
                 return;
@@ -185,15 +191,20 @@
         QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class);
         queueMapper.insert(queue);
 
-        singleThreadExecutor.submit( () -> {
+        singleThreadExecutor.execute( () -> {
             hurryup();
         });
     }
 
     private void nextPatient(Long roomId, String bedNo) {
         // 浠� DB 鎶� 搴忓彿鏈�灏忕殑 灏辫瘖鍑嗗涓殑浜� 璁剧疆涓哄氨璇婁腑
-        queueMapper.updateQueueStatus(roomId, bedNo,
+        Integer updateNum = queueMapper.updateQueueStatus(roomId, bedNo,
                 QueueStatusEnum.READY.getStatus(), QueueStatusEnum.ONSTAGE.getStatus());
+
+        // 璇ュ伐浣� 娌℃湁 灏辫瘖鍑嗗涓� 浜哄憳
+        if (null == updateNum || 0 == updateNum) {
+            return;
+        }
 
         // 浼樺厛闃熷垪涓� 璇ュ伐浣� 灏辫瘖鍑嗗涓汉鐨勬暟閲� 鍑忎竴
         BedQueueBO bo = mapBedVsQueue.get(String.format("%09d%s", roomId, bedNo));
@@ -201,7 +212,7 @@
         priorityQueue.remove(bo);
         priorityQueue.offer(bo);
 
-        singleThreadExecutor.submit( () -> {
+        singleThreadExecutor.execute( () -> {
             hurryup();
         });
     }
@@ -227,4 +238,25 @@
         return queueDOList;
     }
 
+    public PatientStatisticVO getPatientStatistic(Long roomId, String bedNo) {
+        PatientStatisticVO patientStatisticVO = new PatientStatisticVO();
+        List<BedQueueStatisticDO> bedQueueStatisticDOList = queueMapper.bedQueueStatistic(roomId, bedNo);
+        bedQueueStatisticDOList.forEach(item -> {
+            if (QueueStatusEnum.READY.getStatus() == item.getStatus()) {
+                patientStatisticVO.setReadyNum(item.getTotalInStatus());
+            } else if (QueueStatusEnum.FINISH.getStatus() == item.getStatus()) {
+                patientStatisticVO.setFinishedNum(item.getTotalInStatus());
+            } else if (QueueStatusEnum.PASSED.getStatus() == item.getStatus()) {
+                patientStatisticVO.setPassedNum(item.getTotalInStatus());
+            }
+        });
+
+        List<Byte> statusList = new ArrayList<>();
+        statusList.add(QueueStatusEnum.WAITING.getStatus());
+        Integer num = queueMapper.statusStatistic(statusList);
+        patientStatisticVO.setQueuingNum(num);
+
+        return patientStatisticVO;
+    }
+
 }

--
Gitblit v1.9.3