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