From c48f179be89343dc1620bfa147433bfe87d9bed3 Mon Sep 17 00:00:00 2001
From: eight <641137800@qq.com>
Date: 星期一, 11 十一月 2024 17:29:50 +0800
Subject: [PATCH] 检查项-亲和性处理

---
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java        |    7 +-
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java           |   18 +++++
 jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java                 |    3 
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java    |   62 +++++++++++++++++++-
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java |   40 ++++++++++++-
 5 files changed, 117 insertions(+), 13 deletions(-)

diff --git a/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java b/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java
index f6f998d..aa26b8d 100644
--- a/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java
+++ b/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java
@@ -19,7 +19,8 @@
     PASSED(5, "宸茶繃鍙�"),
     PASSED_INSTALL(7, "宸茶繃鍙�-瀹夎"),
     WAITING(10, "鎺掗槦涓�"),
-    AFFINITY_ALREADY(12, "宸蹭翰鍜�"),
+    AFFINITY_WAITING(12, "宸蹭翰鍜�-鎺掗槦涓�"),
+    AFFINITY_RECEIVED(13, "宸蹭翰鍜�-宸查鐢�"),
     RECALLED(15, "宸插彫鍥�"),
     RECALLED_INSTALL(17, "宸插彫鍥�-瀹夎"),
     READY(20, "鍊欒瘖涓�"),
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java
index f1a3728..95b1f73 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java
@@ -73,7 +73,18 @@
             " </foreach> )" +
             " and TO_DAYS(book_date) = TO_DAYS(NOW()) " +
             "</script>")
-    List<QueueDO> getCurPatGivenCheckItems(@Param("patId")String patId, @Param("checkTypeList")Integer[] arrCheckType);
+    List<QueueDO> getCurPatGivenCheckTypes(@Param("patId")String patId, @Param("checkTypeList")Integer[] arrCheckType);
+
+    @Select("<script>" +
+            "SELECT * FROM lihu.queue " +
+            "where pat_id = #{patId} and book_check_type in (" +
+            " <foreach collection='arrCheckType' separator=',' item='checkType'>" +
+            "   #{checkType} " +
+            " </foreach> ) " +
+            " and status = #{status} " +
+            " and TO_DAYS(book_date) = TO_DAYS(NOW()) " +
+            "</script>")
+    List<QueueDO> getCurPatGivenCheckTypesAndStatus(@Param("patId")String patId, @Param("checkTypeList")Integer[] arrCheckType, @Param("status")Integer status);
 
     @Select("<script>" +
             "SELECT * FROM lihu.queue " +
@@ -149,7 +160,10 @@
             "</script>")
     List<QueueDO> getBedQueueByStatus(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("statusList")List<Integer> statusList);
 
-    @Update("update lihu.queue set status = #{newStatus} where seq_num = \n" +
+    @Select("SELECT * from lihu.queue where room_id = #{roomId} and bed_no = #{bedNo} and status = #{curStatus} order by seq_num limit 1")
+    QueueDO getFirstItemByBedAndStatus(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("curStatus")Integer curStatus);
+
+    @Update("update lihu.queue set status = #{newStatus} where status = #{curStatus} and seq_num = \n" +
             "(select a.min_seq_num from \n" +
             " (select min(seq_num) as min_seq_num from lihu.queue where room_id = #{roomId} and bed_no = #{bedNo} and status = #{curStatus}) a )")
     Integer updateBedQueueStatus(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("curStatus")Integer curStatus, @Param("newStatus")Integer newStatus);
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java
index 4d11472..278c4cc 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java
@@ -3,14 +3,17 @@
 import cn.lihu.jh.framework.common.pojo.CommonResult;
 import cn.lihu.jh.framework.security.core.util.SecurityFrameworkUtils;
 import cn.lihu.jh.module.ecg.controller.admin.jobrecord.vo.JobRecordSaveReqVO;
+import cn.lihu.jh.module.ecg.dal.dataobject.checktype.CheckTypeDO;
 import cn.lihu.jh.module.ecg.dal.dataobject.devmanage.DeviceDO;
 import cn.lihu.jh.module.ecg.dal.dataobject.jobrecord.JobRecordDO;
+import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO;
 import cn.lihu.jh.module.ecg.dal.mysql.devmanage.DeviceMapper;
 import cn.lihu.jh.module.ecg.dal.mysql.jobrecord.JobRecordMapper;
 import cn.lihu.jh.module.ecg.dal.mysql.queue.QueueMapper;
 import cn.lihu.jh.module.ecg.enums.DevRentStateEnum;
 import cn.lihu.jh.module.ecg.enums.DevStateEnum;
 import cn.lihu.jh.module.ecg.enums.QueueStatusEnum;
+import cn.lihu.jh.module.ecg.service.queue.QueueServiceTxFunctions;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.transaction.annotation.Transactional;
@@ -40,6 +43,9 @@
 @Service
 @Validated
 public class DevRentServiceImpl implements DevRentService {
+
+    @Resource
+    QueueServiceTxFunctions queueServiceTxFunctions;
 
     @Resource
     private DevRentMapper devRentMapper;
@@ -183,8 +189,39 @@
         }
 
         // 鏇存柊..闃熷垪鐘舵��
-        queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(),
-                QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.RECEIVED.getStatus());
+        //queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(),
+        //        QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.RECEIVED.getStatus());
+
+        QueueDO firstOnStageQueueItem = queueMapper.getFirstItemByBedAndStatus(createReqVO.getRoomId(), createReqVO.getBedNo(), QueueStatusEnum.ONSTAGE.getStatus());
+        CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( firstOnStageQueueItem.getBookCheckType() );
+
+        // QueueStatusEnum.ONSTAGE  =>  QueueStatusEnum.RECEIVED
+        firstOnStageQueueItem.setStatus(QueueStatusEnum.RECEIVED.getStatus());  // 榛樿鐘舵�� 璁剧疆
+        // 妫�鏌ラ」鐩�.浜插拰鎬� 澶勭悊閫昏緫
+        if (checkTypeDO.getAffinityCheckTypes().length > 0) {
+            List<QueueDO> affinityInstallingItems = queueMapper.getCurPatGivenCheckTypesAndStatus(firstOnStageQueueItem.getPatId(), checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.INSTALLING.getStatus());
+            if (!affinityInstallingItems.isEmpty()) {
+                firstOnStageQueueItem.setStatus(QueueStatusEnum.AFFINITY_RECEIVED.getStatus());
+            }
+        }
+        queueMapper.updateById( firstOnStageQueueItem );
+
+        // 妫�鏌ラ」鐩�.浜插拰鎬� 澶勭悊閫昏緫
+        if (checkTypeDO.getAffinityCheckTypes().length > 0) {
+            List<QueueDO> affinityReadyItems = queueMapper.getCurPatGivenCheckTypesAndStatus(firstOnStageQueueItem.getPatId(), checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.READY.getStatus());
+            if (!affinityReadyItems.isEmpty()) {
+                QueueDO tmpQueueDO = affinityReadyItems.get(0);
+                tmpQueueDO.setStatus(QueueStatusEnum.ONSTAGE.getStatus());
+                queueMapper.updateById(tmpQueueDO);
+            } else {
+                List<QueueDO> affinityAffinityWaitingItems = queueMapper.getCurPatGivenCheckTypesAndStatus(firstOnStageQueueItem.getPatId(), checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.AFFINITY_WAITING.getStatus());
+                if (!affinityAffinityWaitingItems.isEmpty()) {
+                    QueueDO tmpQueueDO = affinityAffinityWaitingItems.get(0);
+                    tmpQueueDO.setStatus(QueueStatusEnum.ONSTAGE.getStatus());
+                    queueMapper.updateById(tmpQueueDO);
+                }
+            }
+        }
 
         return CommonResult.success(rent_id);
     }
@@ -257,8 +294,25 @@
         }
 
         // 鏇存柊..闃熷垪鐘舵��
-        queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(),
-                QueueStatusEnum.INSTALLING.getStatus(), QueueStatusEnum.FINISH.getStatus());
+        //queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(),
+        //        QueueStatusEnum.INSTALLING.getStatus(), QueueStatusEnum.FINISH.getStatus());
+
+        QueueDO firstInstallingQueueItem = queueMapper.getFirstItemByBedAndStatus(createReqVO.getRoomId(),
+                                                    createReqVO.getBedNo(), QueueStatusEnum.INSTALLING.getStatus());
+        // QueueStatusEnum.INSTALLING  =>  QueueStatusEnum.FINISH
+        firstInstallingQueueItem.setStatus(QueueStatusEnum.FINISH.getStatus());  // 榛樿鐘舵�� 璁剧疆
+        queueMapper.updateById( firstInstallingQueueItem );
+
+        // 妫�鏌ラ」鐩�.浜插拰鎬� 澶勭悊閫昏緫
+        CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( firstInstallingQueueItem.getBookCheckType() );
+        if (checkTypeDO.getAffinityCheckTypes().length > 0) {
+            List<QueueDO> affinityAffinityReceivedItems = queueMapper.getCurPatGivenCheckTypesAndStatus(firstInstallingQueueItem.getPatId(), checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.AFFINITY_RECEIVED.getStatus());
+            if (!affinityAffinityReceivedItems.isEmpty()) {
+                QueueDO tmpQueueDO = affinityAffinityReceivedItems.get(0);
+                tmpQueueDO.setStatus(QueueStatusEnum.INSTALLING.getStatus());
+                queueMapper.updateById(tmpQueueDO);
+            }
+        }
 
         return CommonResult.success(rent_id);
     }
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 66cc52d..89b3411 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
@@ -323,18 +323,19 @@
         // 澶勭悊 妫�鏌ラ」鐩�.浜插拰鎬� 閫昏緫
         CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( queueSaveReqVO.getBookCheckType() );
         if ( checkTypeDO.getAffinityCheckTypes().length > 0) {
-            List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckItems(queueSaveReqVO.getPatId(), checkTypeDO.getAffinityCheckTypes());
+            List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypes(queueSaveReqVO.getPatId(), checkTypeDO.getAffinityCheckTypes());
             //List<Integer> affinityItemIDs = affinityItems.stream().map(queueItem -> queueItem.getId()).toList();
             //queueSaveReqVO.setAffinityItems(affinityItemIDs);
 
             for (int i=0; i < affinityItems.size(); i++) {
                 QueueDO queueItem = affinityItems.get(i);
                 if (QueueStatusEnum.READY.getStatus() == queueItem.getStatus()
-                        || QueueStatusEnum.ONSTAGE.getStatus() == queueItem.getStatus()) {
-                    queueSaveReqVO.setStatus(QueueStatusEnum.AFFINITY_ALREADY.getStatus()); //鏀瑰彉 鎺掗槦鐘舵��
+                    || QueueStatusEnum.ONSTAGE.getStatus() == queueItem.getStatus()) {
+                    queueSaveReqVO.setStatus(QueueStatusEnum.AFFINITY_WAITING.getStatus()); //鏀瑰彉 鎺掗槦鐘舵��
                     queueSaveReqVO.setRoomId(queueItem.getRoomId());
                     queueSaveReqVO.setRoomName(queueItem.getRoomName());
                     queueSaveReqVO.setBedNo(queueItem.getBedNo());
+                    queueSaveReqVO.setSeqNum(queueItem.getSeqNum());
                     break;
                 }
             }
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 93a8719..166034f 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
@@ -30,7 +30,6 @@
 
 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.module.ecg.Constants.*;
 import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
 
 /**
@@ -243,6 +242,7 @@
         return GlobalErrorCodeConstants.SUCCESS;
     }
 
+    /* 2024.11.11
     // 甯歌 鎴栬�� 棰嗙敤 鏃� 鍖荤敓 鍙栦笅涓�浣嶆偅鑰�
     public ErrorCode nextPatient(Long roomId, String bedNo) {
         // 浠� DB 鎶婅宸ヤ綅.搴忓彿鏈�灏忕殑 [灏辫瘖鍑嗗涓璢 鐨勪汉 璁剧疆涓� [灏辫瘖涓璢 (鎴栭鐢ㄤ腑)
@@ -251,6 +251,39 @@
         // 璇ュ伐浣� 娌℃湁 [灏辫瘖鍑嗗涓璢 浜哄憳
         if (null == updateNum || 0 == updateNum) {
             return QUEUE_NOT_READY_PATIENT;
+        }
+
+        // 浼樺厛闃熷垪涓� 璇ュ伐浣� 灏辫瘖鍑嗗涓汉鐨勬暟閲� 鍑忎竴
+        BedQueueBO bo = mapBedVsQueue.get( Utils.formatRoomBed( roomId, bedNo ) );
+        bo.queueNum.getAndDecrement(); // 鍙兘宸茬粡銆愬苟鍙戠殑銆戝湪 hurry-up 涓敼鍙樹簡鍊�
+
+        refreshPriorityQueue(bo);
+        return GlobalErrorCodeConstants.SUCCESS;
+    }
+    */
+
+    // 甯歌 鎴栬�� 棰嗙敤 鏃� 鍖荤敓 鍙栦笅涓�浣嶆偅鑰�
+    public ErrorCode nextPatient(Long roomId, String bedNo) {
+        QueueDO firstReadyQueueItem = queueMapper.getFirstItemByBedAndStatus(roomId, bedNo, QueueStatusEnum.READY.getStatus());
+        // 璇ュ伐浣� 娌℃湁 [灏辫瘖鍑嗗涓璢 浜哄憳
+        if (null == firstReadyQueueItem) {
+            return QUEUE_NOT_READY_PATIENT;
+        }
+
+        // QueueStatusEnum.READY  =>  QueueStatusEnum.ONSTAGE
+        firstReadyQueueItem.setStatus(QueueStatusEnum.ONSTAGE.getStatus());
+        queueMapper.updateById( firstReadyQueueItem );
+
+        // 妫�鏌ラ」鐩�.浜插拰鎬� 澶勭悊閫昏緫
+        CheckTypeDO checkTypeDO = getCheckTypeItem( firstReadyQueueItem.getBookCheckType() );
+        if (checkTypeDO.getAffinityCheckTypes().length > 0) {
+            List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus(firstReadyQueueItem.getPatId(), checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.AFFINITY_WAITING.getStatus());
+            if (!affinityItems.isEmpty()) {
+                QueueDO tmpQueueDO = affinityItems.get(0);
+                tmpQueueDO.setStatus( QueueStatusEnum.READY.getStatus() );
+                queueMapper.updateById( tmpQueueDO );
+                return GlobalErrorCodeConstants.SUCCESS;   // 鍑嗗涓� 鏁伴噺娌℃湁鍙樺寲锛屾晠鐩存帴杩斿洖
+            }
         }
 
         // 浼樺厛闃熷垪涓� 璇ュ伐浣� 灏辫瘖鍑嗗涓汉鐨勬暟閲� 鍑忎竴
@@ -422,10 +455,11 @@
             QueueDO queueDO = queueMapper.getQueueItemBySeqNum(curSeqNum.get() + 1);
             CheckTypeDO checkTypeDO = getCheckTypeItem( queueDO.getBookCheckType() );
             if ( checkTypeDO.getAffinityCheckTypes().length > 0) {
-                List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckItems(queueDO.getPatId(), checkTypeDO.getAffinityCheckTypes());
+                List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus(queueDO.getPatId(),
+                        checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.WAITING.getStatus());
                 for (int i = 0; i < affinityItems.size(); i++) {
                     QueueDO queueItem = affinityItems.get(i);
-                    queueItem.setStatus(QueueStatusEnum.AFFINITY_ALREADY.getStatus()); //鏀瑰彉 鎺掗槦鐘舵��
+                    queueItem.setStatus(QueueStatusEnum.AFFINITY_WAITING.getStatus()); //鏀瑰彉 鎺掗槦鐘舵��
                     queueItem.setRoomId(queueItem.getRoomId());
                     queueItem.setRoomName(queueItem.getRoomName());
                     queueItem.setBedNo(queueItem.getBedNo());

--
Gitblit v1.9.3