From 792e4d2e1cb8eb44ed9d4958858485c99dd0ba57 Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期六, 31 八月 2024 21:53:36 +0800 Subject: [PATCH] update --- jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java | 50 +++++++++++++++++++++++++++++++++++--------------- 1 files changed, 35 insertions(+), 15 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 5c80db5..d92b97c 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 @@ -10,6 +10,7 @@ import cn.lihu.jh.module.ecg.config.DynamicSchedulingConfig; import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO; import cn.lihu.jh.module.ecg.service.room.RoomService; +import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.config.CronTask; import org.springframework.scheduling.config.ScheduledTask; import org.springframework.scheduling.config.ScheduledTaskRegistrar; @@ -46,6 +47,7 @@ */ @Service @Validated +@Slf4j public class QueueServiceImpl implements QueueService { @Resource @@ -252,7 +254,7 @@ bedQueueBO.setBedNo(bedNo); bedQueueBO.setMaxQueueNum(queueReadyMax); bedQueueBO.setQueueNum(new AtomicInteger(queueDOList.size())); - bedQueueBO.setStatusEnum(BedStatusEnum.OPENING); + bedQueueBO.setBedStatus(BedStatusEnum.OPENING.getStatus()); priorityQueue.offer(bedQueueBO); mapBedVsQueue.put(String.format("%09d%s", roomId, bedNo), bedQueueBO); return SUCCESS; @@ -313,7 +315,7 @@ if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; - bedQueueBO.setStatusEnum(BedStatusEnum.PAUSE); + bedQueueBO.setBedStatus(BedStatusEnum.PAUSE.getStatus()); priorityQueue.remove(bedQueueBO); return SUCCESS; } @@ -321,7 +323,7 @@ @Override public ErrorCode bedDoctorResume(Long roomId, String bedNo, Long docId, String docName) { BedQueueBO bedQueueBO = mapBedVsQueue.get(String.format("%09d%s", roomId, bedNo)); - if (null == bedQueueBO) + if (null == bedQueueBO || !bedQueueBO.getBedStatus().equals(BedStatusEnum.PAUSE)) return QUEUE_BED_ABNORMAL; // DB update @@ -332,8 +334,12 @@ if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; - bedQueueBO.setStatusEnum(BedStatusEnum.DOCTOR_ON); - priorityQueue.offer(bedQueueBO); + bedQueueBO.setBedStatus(BedStatusEnum.DOCTOR_ON.getStatus()); + if (!priorityQueue.contains(bedQueueBO)) { + priorityQueue.offer(bedQueueBO); + } else { + log.error("bedDoctorResume HAVE EXCEPTION!"); + } hurryup(); return SUCCESS; @@ -353,7 +359,7 @@ if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; - bedQueueBO.setStatusEnum(BedStatusEnum.DOCTOR_ON); + bedQueueBO.setBedStatus(BedStatusEnum.DOCTOR_ON.getStatus()); return SUCCESS; } @@ -372,7 +378,7 @@ if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; - bedQueueBO.setStatusEnum(BedStatusEnum.OPENING); + bedQueueBO.setBedStatus(BedStatusEnum.OPENING.getStatus()); return SUCCESS; } @@ -398,9 +404,13 @@ * 1. 姣忓ぉ寮�璇婂墠 浠嶥B鍚屾宸ヤ綅鐨勬偅鑰呴槦鍒楁暟鎹埌 宸ヤ綅浼樺厛闃熷垪 * 2. 鏈嶅姟杩愮淮閲嶅惎鏃� */ - public void initBedQueueAndSeqNumFromDB() { + @Override + public ErrorCode bedReload() { priorityQueue.clear(); mapBedVsQueue.clear(); + + // 娓呴櫎闈炲綋澶╃殑鎺掗槦浜哄憳 + queueMapper.clearQueue(); // 浠嶥B 鑾峰彇 宸ヤ綅鍒楄〃 List<BedStatusEnum> bedStatusEnumList = new ArrayList<BedStatusEnum>(); @@ -423,12 +433,16 @@ 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); + if (BedStatusEnum.PAUSE.getStatus() != item.getBedStatus()) { + priorityQueue.offer(item); + } }); Integer num = queueMapper.getMaxSeqNum(); curSeqNum = new AtomicInteger(null == num ? 0 : num); + + return SUCCESS; } /** @@ -438,6 +452,10 @@ public void hurryup() { if (0 == openingFlag.get()) return; + + if (mapBedVsQueue.size() != priorityQueue.size()) { + log.error("map " + mapBedVsQueue.size() + " priority " + priorityQueue.size()); + } // 澶勭悊 杩囧彿-鍥炴潵 鐨勪汉 for (BedQueueBO bedQueueBO : mapBedVsQueue.values()) { @@ -587,13 +605,8 @@ if (1 == openingFlag.get()) return; - // 娓呴櫎闈炲綋澶╃殑鎺掗槦浜哄憳 - queueMapper.clearQueue(); - - initBedQueueAndSeqNumFromDB(); - openingFlag.set(1); - hurryup(); + startBedReload(); } public void closeBiz() { @@ -655,4 +668,11 @@ }); } + private void startBedReload() { + singleThreadExecutor.execute( () -> { + bedReload(); + hurryup(); + }); + } + } -- Gitblit v1.9.3