From adb4da3c83649d550b8674feb1eb0926fbace30e Mon Sep 17 00:00:00 2001
From: eight <641137800@qq.com>
Date: 星期一, 11 十一月 2024 13:45:12 +0800
Subject: [PATCH] 排队&抢人时 亲和检查项目处理

---
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java               |   11 ++++-
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/QueueSaveReqVO.java   |    8 +++
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java             |   24 +++++++++++
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java                |   13 ++++++
 jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java                      |    1 
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java      |   18 +++++++++
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java |    3 +
 7 files changed, 74 insertions(+), 4 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 cc41642..f6f998d 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,6 +19,7 @@
     PASSED(5, "宸茶繃鍙�"),
     PASSED_INSTALL(7, "宸茶繃鍙�-瀹夎"),
     WAITING(10, "鎺掗槦涓�"),
+    AFFINITY_ALREADY(12, "宸蹭翰鍜�"),
     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/controller/admin/queue/vo/QueueSaveReqVO.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/QueueSaveReqVO.java
index e8b7809..219c1a9 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/QueueSaveReqVO.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/QueueSaveReqVO.java
@@ -1,11 +1,14 @@
 package cn.lihu.jh.module.ecg.controller.admin.queue.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.time.LocalDate;
+import java.util.List;
 
 
 @Schema(description = "绠$悊鍚庡彴 - 鎺掗槦鏂板/淇敼 Request VO")
@@ -73,4 +76,7 @@
     @Schema(description = "璇婄枟搴婄紪鍙�")
     private String bedNo;
 
-}
\ No newline at end of file
+    @Schema(description = "浜插拰鐨勬鏌ラ」")
+    private List<Integer> affinityItems;
+}
+
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java
index 3fde382..527bf28 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java
@@ -1,17 +1,19 @@
 package cn.lihu.jh.module.ecg.dal.dataobject.queue;
 
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import lombok.*;
 import com.baomidou.mybatisplus.annotation.*;
 import cn.lihu.jh.framework.mybatis.core.dataobject.BaseDO;
 
 import java.time.LocalDate;
+import java.util.List;
 
 /**
  * 鎺掗槦 DO
  *
  * @author 鑺嬮亾婧愮爜
  */
-@TableName("queue")
+@TableName( value="queue", autoResultMap = true )
 @KeySequence("queue_seq") // 鐢ㄤ簬 Oracle銆丳ostgreSQL銆並ingbase銆丏B2銆丠2 鏁版嵁搴撶殑涓婚敭鑷銆傚鏋滄槸 MySQL 绛夋暟鎹簱锛屽彲涓嶅啓銆�
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -94,5 +96,10 @@
      * 璇婄枟搴婄紪鍙�
      */
     private String bedNo;
+    /**
+     * 浜插拰椤�
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<Integer> affinityItems;
+}
 
-}
\ No newline at end of file
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 be4e8d3..f1a3728 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
@@ -39,6 +39,9 @@
     @Select("SELECT max(seq_num) FROM lihu.queue")
     Integer getMaxSeqNum();
 
+    @Select("SELECT * FROM lihu.queue where seq_num = #{seqNum}")
+    QueueDO getQueueItemBySeqNum(@Param("seqNum")Integer seqNum);
+
     @Select("SELECT * FROM lihu.queue where pat_id = #{patId}")
     QueueDO getQueueByPatId(@Param("patId")String patId);
 
@@ -64,6 +67,16 @@
 
     @Select("<script>" +
             "SELECT * FROM lihu.queue " +
+            "where pat_id = #{patId} and book_check_type in (" +
+            " <foreach collection='arrCheckType' separator=',' item='checkType'>" +
+            "   #{checkType} " +
+            " </foreach> )" +
+            " and TO_DAYS(book_date) = TO_DAYS(NOW()) " +
+            "</script>")
+    List<QueueDO> getCurPatGivenCheckItems(@Param("patId")String patId, @Param("checkTypeList")Integer[] arrCheckType);
+
+    @Select("<script>" +
+            "SELECT * FROM lihu.queue " +
             "where id >= #{from} and status in (" +
             " <foreach collection='statusList' separator=',' item='status'>" +
             "  #{status} " +
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java
index 3dedf51..a374f68 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java
@@ -3,12 +3,14 @@
 import cn.lihu.jh.framework.common.util.date.DateUtils;
 import cn.lihu.jh.framework.common.util.date.LocalDateTimeUtils;
 import cn.lihu.jh.module.ecg.controller.admin.queue.vo.QueueSaveReqVO;
+import cn.lihu.jh.module.ecg.dal.dataobject.checktype.CheckTypeDO;
 import cn.lihu.jh.module.ecg.feign.RemoteDataService;
 import cn.lihu.jh.module.ecg.feign.RestApiReqBodyVo;
 import cn.lihu.jh.module.ecg.feign.RestApiResult;
 import cn.lihu.jh.module.ecg.feign.dto.AppointmentExternal;
 import cn.lihu.jh.module.ecg.service.config.EcgConfigService;
 import cn.lihu.jh.module.ecg.service.queue.QueueService;
+import cn.lihu.jh.module.ecg.service.queue.QueueServiceTxFunctions;
 import cn.lihu.jh.module.ecg.service.queuesequence.QueueSequenceService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.dao.DuplicateKeyException;
@@ -211,6 +213,7 @@
         if (null == appointment)
             throw exception(PATIENT_NOT_EXISTS);
 
+        // 鎵嬪姩棰勭害锛岀洿鎺ヨ缃绾︽棩鏈熶负褰撳ぉ
         if (confirmReqVO.getIsVip() == 1) {
             appointment.setBookDate( LocalDate.now() );
         }
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 521e266..477871b 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
@@ -6,6 +6,7 @@
 
 import cn.lihu.jh.module.ecg.Utils;
 import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO;
+import cn.lihu.jh.module.ecg.dal.dataobject.checktype.CheckTypeDO;
 import cn.lihu.jh.module.ecg.dal.dataobject.devrent.DevRentDO;
 import cn.lihu.jh.module.ecg.dal.mysql.call.CallMapper;
 import cn.lihu.jh.module.ecg.dal.mysql.devrent.DevRentMapper;
@@ -317,7 +318,28 @@
     @Override
     @Transactional
     public void queue(QueueSaveReqVO queueSaveReqVO) {
-        queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //鎺掗槦涓�
+        queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //榛樿鐘舵��: 鎺掗槦涓�
+
+        // 澶勭悊 妫�鏌ラ」鐩�.浜插拰鎬� 閫昏緫
+        CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( queueSaveReqVO.getBookCheckType() );
+        if ( checkTypeDO.getAffinityCheckTypes().length > 0) {
+            List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckItems(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()); //鏀瑰彉 鎺掗槦鐘舵��
+                    queueSaveReqVO.setRoomId(queueItem.getRoomId());
+                    queueSaveReqVO.setRoomName(queueItem.getRoomName());
+                    queueSaveReqVO.setBedNo(queueItem.getBedNo());
+                    break;
+                }
+            }
+        }
+
         QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class);
         queueMapper.insert(queue);
 
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 86f8b28..7fede40 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,6 +418,20 @@
                 return;
             }
 
+            // 鎶㈠埌鎺掗槦鎮h�呭悗锛屽鐞� 妫�鏌ラ」鐩�.浜插拰鎬� 閫昏緫
+            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());
+                for (int i = 0; i < affinityItems.size(); i++) {
+                    QueueDO queueItem = affinityItems.get(i);
+                    queueItem.setStatus(QueueStatusEnum.AFFINITY_ALREADY.getStatus()); //鏀瑰彉 鎺掗槦鐘舵��
+                    queueItem.setRoomId(queueItem.getRoomId());
+                    queueItem.setRoomName(queueItem.getRoomName());
+                    queueItem.setBedNo(queueItem.getBedNo());
+                }
+            }
+
             curSeqNum.getAndIncrement();
 
             // 鍙兘宸茬粡銆愬苟鍙戠殑銆戝湪 nextPatient 涓敼鍙樹簡鍊�
@@ -441,6 +455,10 @@
         mapCheckTypeVsReadyMax = checkTypeDOList.stream().collect(Collectors.toMap(CheckTypeDO::getValue, checkType -> checkType));
     }
 
+    public CheckTypeDO getCheckTypeItem(Integer checkType) {
+        return mapCheckTypeVsReadyMax.get( checkType );
+    }
+
     public BedQueueBO getBedQueueBO(Long roomId, String bedNo) {
         return mapBedVsQueue.get( Utils.formatRoomBed(roomId, bedNo) );
     }

--
Gitblit v1.9.3