From d1708b4b2bc6596f9c62354274f1af97be45401c Mon Sep 17 00:00:00 2001
From: eight <641137800@qq.com>
Date: 星期四, 28 十一月 2024 14:40:46 +0800
Subject: [PATCH] 按工位的多个检查项目 抢占 排队中 患者
---
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java | 10 ++++-
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java | 16 ++++++++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java | 37 +++++++++++++++++-
3 files changed, 59 insertions(+), 4 deletions(-)
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 a344533..b29be78 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
@@ -244,6 +244,22 @@
@Param("seqNum")Integer seqNum, @Param("curStatus")Integer curStatus, @Param("newStatus")Integer newStatus,
@Param("checkType")Integer checkType);
+ // 鏁翠釜绯荤粺鑼冨洿鍐� [鎺掗槦涓璢浜哄憳 [琚伐浣嶅尰鐢焆鎶㈠崰 鏍规嵁 澶氫釜妫�鏌ラ」鐩�
+ @Update("<script>" +
+ "update lihu.queue set status = #{newStatus}, room_id = #{roomId}, room_name = #{roomName}, \n" +
+ " bed_no = #{bedNo}, seq_num = #{seqNum} where id = \n" +
+ " (select a.id from \n" +
+ " (select id from lihu.queue where status = #{curStatus} " +
+ " and book_check_type in ( " +
+ " <foreach collection='checkTypeArray' separator=',' item='_checkType'>" +
+ " #{_checkType} " +
+ " </foreach> )" +
+ " order by jump_flag desc, book_timeslot, create_time limit 1) a) " +
+ "</script>")
+ Integer preemptWaitingPatientWithBedCheckTypes(@Param("roomId")Long roomId, @Param("roomName")String roomName, @Param("bedNo")String bedNo,
+ @Param("seqNum")Integer seqNum, @Param("curStatus")Integer curStatus, @Param("newStatus")Integer newStatus,
+ @Param("checkTypeArray")Integer[] checkTypeArray);
+
@Update("update lihu.queue set status = #{newStatus}, seq_num = #{seqNum} " +
" where id = " +
" (select a.id from \n" +
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 96a4c0f..cb90a2d 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
@@ -336,7 +336,7 @@
devRent.setCheckType( queueSaveReqVO.getBookCheckType() );
devRentMapper.insert(devRent);
- startHurryUpOneCheckType( queue.getBookCheckType() );
+ //startHurryUpOneCheckType( queue.getBookCheckType() );
}
@Override
@@ -545,12 +545,18 @@
return updateNum;
}
+ /**
+ * 鍔犳��
+ * @param patId
+ * @param jumped
+ * @return
+ */
@Override
public Integer patientJump(String patId, Byte jumped) {
Integer updateNum = queueMapper.queueJump(patId, QueueStatusEnum.WAITING.getStatus(), jumped);
QueueDO queueDO = queueMapper.getQueueByPatId(patId);
- startHurryUpOneCheckType(Integer.valueOf(queueDO.getBookCheckType()));
+ //startHurryUpOneCheckType(Integer.valueOf(queueDO.getBookCheckType()));
return updateNum;
}
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 5fcef0c..5ac7155 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
@@ -418,8 +418,41 @@
}
// 澶勭悊 鎺掗槦涓� 鎮h��
- Integer[] checkTypes = bedQueueBO.getCheckTypes();
- Arrays.stream(checkTypes).forEach(checkType -> hurryupOneCheckType(checkType));
+ hurryupOneBedCheckTypes( bedQueueBO );
+ }
+
+ public void hurryupOneBedCheckTypes(BedQueueBO bedQueueBO) {
+ while (bedQueueBO.queueNum.get() < bedQueueBO.maxQueueNum) {
+ // 鎶㈠崰 鏄惁鏈夋帓闃熶腑鐨勬偅鑰�
+ Integer updateNum = queueMapper.preemptWaitingPatientWithBedCheckTypes(
+ bedQueueBO.getRoomId(),
+ bedQueueBO.getRoomName(),
+ bedQueueBO.getBedNo(),
+ curSeqNum.get() + 1,
+ QueueStatusEnum.WAITING.getStatus(),
+ QueueStatusEnum.READY.getStatus(),
+ bedQueueBO.checkTypes);
+
+ // 娌℃湁鎶㈠埌鎺掗槦鎮h��
+ if (null == updateNum || 0 == updateNum) {
+ return;
+ }
+
+ QueueDO preemptQueueItem = queueMapper.getQueueItemBySeqNum(curSeqNum.get() + 1);
+ CheckTypeDO checkTypeDO = getCheckTypeItem( preemptQueueItem.getBookCheckType() );
+
+ // 鎶㈠埌鎺掗槦鎮h�呭悗锛屽鐞� 妫�鏌ラ」鐩�.浜插拰鎬� 閫昏緫
+ if ( checkTypeDO.getAffinityCheckTypes().length > 0) {
+ procAffinityWhenPreempt(preemptQueueItem, checkTypeDO.getAffinityCheckTypes());
+ }
+
+ curSeqNum.getAndIncrement();
+
+ bedQueueBO.queueNum.incrementAndGet();
+ }
+
+ // 鏀瑰彉浜嗕紭鍏堥槦鍒楅『搴�
+ refreshPriorityQueue(bedQueueBO);
}
public void hurryupOneCheckType(Integer checkType) {
--
Gitblit v1.9.3