From 810eb6e9b8bacbc1bbdab537c8f1f2081943946e Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期日, 01 九月 2024 10:12:22 +0800 Subject: [PATCH] update for bed close --- jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java | 132 ++++++++++++++++++++++++++++++------------- 1 files changed, 91 insertions(+), 41 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 ef629f5..bd58c2d 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 @@ -7,8 +7,10 @@ import javax.annotation.Resource; import cn.lihu.jh.module.ecg.Utils; +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; @@ -45,20 +47,14 @@ */ @Service @Validated +@Slf4j public class QueueServiceImpl implements QueueService { @Resource private ConfigApi configApi; @Resource - private ScheduledTaskRegistrar taskRegistrar; - - @Resource - private QueueService queueService; - - @Resource private RoomService roomService; - @Resource private queueMapper queueMapper; @@ -115,6 +111,7 @@ e.printStackTrace(); } + System.out.println("startBedOpen ========"); return ECG_INNER_ERROR; } @@ -131,6 +128,7 @@ e.printStackTrace(); } + System.out.println("startBedClose ========"); return ECG_INNER_ERROR; } @@ -149,6 +147,7 @@ e.printStackTrace(); } + System.out.println("startBedDoctorPause ========"); return ECG_INNER_ERROR; } @@ -167,6 +166,7 @@ e.printStackTrace(); } + System.out.println("startBedDoctorResume ========"); return ECG_INNER_ERROR; } @@ -185,6 +185,7 @@ e.printStackTrace(); } + System.out.println("startBedDoctorOn ========"); return ECG_INNER_ERROR; } @@ -203,6 +204,26 @@ e.printStackTrace(); } + System.out.println("startBedDoctorOff ========"); + return ECG_INNER_ERROR; + } + + @Override + public ErrorCode startNextPatient(Long roomId, String bedNo) { + Future<ErrorCode> future = singleThreadExecutor.submit( + new BedDoctorNextPatientCallable(this, roomId, bedNo) + ); + + try { + ErrorCode ret = future.get(); + return ret; + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + System.out.println("startNextPatient ========"); return ECG_INNER_ERROR; } @@ -233,7 +254,7 @@ bedQueueBO.setBedNo(bedNo); bedQueueBO.setMaxQueueNum(queueReadyMax); bedQueueBO.setQueueNum(new AtomicInteger(queueDOList.size())); - bedQueueBO.setStatusEnum(BedStatusEnum.OPENING); + bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus()); priorityQueue.offer(bedQueueBO); mapBedVsQueue.put(String.format("%09d%s", roomId, bedNo), bedQueueBO); return SUCCESS; @@ -245,11 +266,16 @@ if (null == bedQueueBO) return QUEUE_BED_ABNORMAL; - if (bedQueueBO.getQueueNum().get() >0) + // 闄や簡鍒ゆ柇 鍑嗗鍊欒瘖涓� 鐨勪汉鏁帮紝杩橀渶瑕� 鍒ゆ柇 杩囧彿鐨勪汉鏁� + //if (bedQueueBO.getQueueNum().get() >0) + // return QUEUE_HAVE_PATIENT; + List<Byte> queueStatusList = new ArrayList<>(); + queueStatusList.add(QueueStatusEnum.READY.getStatus()); + queueStatusList.add(QueueStatusEnum.PASSED.getStatus()); + queueStatusList.add(QueueStatusEnum.PASSED_RETURN.getStatus()); + List<QueueDO> queueDOList = queueMapper.getDoctorQueueByStatus(roomId, bedNo, queueStatusList); + if (queueDOList.size() > 0) return QUEUE_HAVE_PATIENT; - - mapBedVsQueue.remove(String.format("%09d%s", roomId, bedNo)); - priorityQueue.remove(bedQueueBO); // DB update List statusList = new ArrayList<BedStatusEnum>(); @@ -261,6 +287,8 @@ if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; + mapBedVsQueue.remove(String.format("%09d%s", roomId, bedNo)); + priorityQueue.remove(bedQueueBO); return SUCCESS; } @@ -273,6 +301,7 @@ RoomDO roomDO = roomMapper.getRoom(roomId, bedNo, docId); if (null == roomDO) { + System.out.println("getRoom ========"); return error(ECG_INNER_ERROR); } @@ -286,36 +315,39 @@ if (null == bedQueueBO) return QUEUE_BED_ABNORMAL; - bedQueueBO.setStatusEnum(BedStatusEnum.PAUSE); - priorityQueue.remove(bedQueueBO); - // DB update List statusList = new ArrayList<BedStatusEnum>(); statusList.add(BedStatusEnum.DOCTOR_ON); - Integer updateNum = roomMapper.setBedDoctorPause(roomId, bedNo, docId, docName, + Integer updateNum = roomMapper.setBedDoctorStatus(roomId, bedNo, docId, BedStatusEnum.PAUSE, statusList); if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; + bedQueueBO.setStatus(BedStatusEnum.PAUSE.getStatus()); + priorityQueue.remove(bedQueueBO); return SUCCESS; } @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.getStatus().equals(BedStatusEnum.PAUSE.getStatus())) return QUEUE_BED_ABNORMAL; - - bedQueueBO.setStatusEnum(BedStatusEnum.DOCTOR_ON); - priorityQueue.offer(bedQueueBO); // DB update List statusList = new ArrayList<BedStatusEnum>(); statusList.add(BedStatusEnum.PAUSE); - Integer updateNum = roomMapper.setBedDoctorPause(roomId, bedNo, docId, docName, + Integer updateNum = roomMapper.setBedDoctorStatus(roomId, bedNo, docId, BedStatusEnum.DOCTOR_ON, statusList); if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; + + bedQueueBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus()); + if (!priorityQueue.contains(bedQueueBO)) { + priorityQueue.offer(bedQueueBO); + } else { + log.error("bedDoctorResume HAVE EXCEPTION!"); + } hurryup(); return SUCCESS; @@ -335,7 +367,7 @@ if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; - bedQueueBO.setStatusEnum(BedStatusEnum.DOCTOR_ON); + bedQueueBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus()); return SUCCESS; } @@ -349,12 +381,12 @@ // DB update List statusList = new ArrayList<BedStatusEnum>(); statusList.add(BedStatusEnum.DOCTOR_ON); - Integer updateNum = roomMapper.setBedDoctorOff(roomId, bedNo, docId, docName, + Integer updateNum = roomMapper.setBedDoctorOff(roomId, bedNo, docId, BedStatusEnum.OPENING, statusList); if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; - bedQueueBO.setStatusEnum(BedStatusEnum.OPENING); + bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus()); return SUCCESS; } @@ -380,9 +412,13 @@ * 1. 姣忓ぉ寮�璇婂墠 浠嶥B鍚屾宸ヤ綅鐨勬偅鑰呴槦鍒楁暟鎹埌 宸ヤ綅浼樺厛闃熷垪 * 2. 鏈嶅姟杩愮淮閲嶅惎鏃� */ - public void initBedQueueAndSeqNumFromDB() { + @Override + public ErrorCode bedReload() { priorityQueue.clear(); mapBedVsQueue.clear(); + + // 娓呴櫎闈炲綋澶╃殑鎺掗槦浜哄憳 + queueMapper.clearQueue(); // 浠嶥B 鑾峰彇 宸ヤ綅鍒楄〃 List<BedStatusEnum> bedStatusEnumList = new ArrayList<BedStatusEnum>(); @@ -405,12 +441,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.getStatus()) { + priorityQueue.offer(item); + } }); Integer num = queueMapper.getMaxSeqNum(); curSeqNum = new AtomicInteger(null == num ? 0 : num); + + return SUCCESS; } /** @@ -420,6 +460,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()) { @@ -497,14 +541,15 @@ startHurryUp(); } - private void nextPatient(Long roomId, String bedNo) { + @Override + public ErrorCode nextPatient(Long roomId, String bedNo) { // 浠� DB 鎶� 搴忓彿鏈�灏忕殑 灏辫瘖鍑嗗涓殑浜� 璁剧疆涓哄氨璇婁腑 Integer updateNum = queueMapper.updateQueueStatus(roomId, bedNo, QueueStatusEnum.READY.getStatus(), QueueStatusEnum.ONSTAGE.getStatus()); // 璇ュ伐浣� 娌℃湁 灏辫瘖鍑嗗涓� 浜哄憳 if (null == updateNum || 0 == updateNum) { - return; + return QUEUE_NOT_READY_PATIENT; } // 浼樺厛闃熷垪涓� 璇ュ伐浣� 灏辫瘖鍑嗗涓汉鐨勬暟閲� 鍑忎竴 @@ -513,7 +558,8 @@ priorityQueue.remove(bo); priorityQueue.offer(bo); - startHurryUp(); + hurryup(); + return SUCCESS; } public void finishNextPatient(Long roomId, String bedNo) { @@ -521,7 +567,7 @@ Integer ret = queueMapper.updateQueueStatus(roomId, bedNo, QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.FINISH.getStatus()); - nextPatient(roomId, bedNo); + startNextPatient(roomId, bedNo); } public void passNextPatient(Long roomId, String bedNo) { @@ -529,7 +575,7 @@ Integer ret = queueMapper.updateQueueStatus(roomId, bedNo, QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.PASSED.getStatus()); - nextPatient(roomId, bedNo); + startNextPatient(roomId, bedNo); } public List<QueueDO> getDoctorQueueByStatus(Long roomId, String bedNo, List<Byte> statusList) { @@ -567,13 +613,8 @@ if (1 == openingFlag.get()) return; - // 娓呴櫎闈炲綋澶╃殑鎺掗槦浜哄憳 - queueMapper.clearQueue(); - - initBedQueueAndSeqNumFromDB(); - openingFlag.set(1); - hurryup(); + startBedReload(); } public void closeBiz() { @@ -582,8 +623,8 @@ @Override public void resetScheduler() { - Set<ScheduledTask> taskList = taskRegistrar.getScheduledTasks(); - taskList.forEach((task)->task.cancel()); + ScheduledTaskRegistrar taskRegistrar = DynamicSchedulingConfig.static_scheduledTaskRegistrar; + taskRegistrar.getScheduledTasks().forEach(ScheduledTask::cancel); String strOpenCloseTime = configApi.getConfigValueByKey(ECG_OPENING_TIME_KEY); List<LocalTime> list = Utils.parseOpeningTime(strOpenCloseTime); @@ -598,18 +639,20 @@ taskRegistrar.scheduleCronTask(new CronTask(() -> { System.out.println("Opening Task executed at: " + System.currentTimeMillis()); - queueService.startBiz(); + startBiz(); }, openCronExpression)); taskRegistrar.scheduleCronTask(new CronTask(() -> { System.out.println("Close Task executed at: " + System.currentTimeMillis()); - queueService.closeBiz(); + closeBiz(); }, closeCronExpression)); taskRegistrar.scheduleCronTask(new CronTask(() -> { System.out.println("Room Reset Task executed at: " + System.currentTimeMillis()); roomService.resetRoom(); }, roomResetCronExpression)); + + taskRegistrar.afterPropertiesSet(); } @Override @@ -633,4 +676,11 @@ }); } + private void startBedReload() { + singleThreadExecutor.execute( () -> { + bedReload(); + hurryup(); + }); + } + } -- Gitblit v1.9.3