From bb767d9be029935ee73b4a8e67b370a153f39c74 Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期六, 31 八月 2024 09:58:06 +0800 Subject: [PATCH] update --- jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java | 148 ++++++++++++++++++++++++++++++++++++------------- 1 files changed, 108 insertions(+), 40 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 537c778..5c80db5 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 @@ -1,35 +1,42 @@ package cn.lihu.jh.module.ecg.service.queue; +import java.time.LocalTime; +import java.util.*; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicInteger; +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 org.springframework.scheduling.config.CronTask; +import org.springframework.scheduling.config.ScheduledTask; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + import cn.lihu.jh.framework.common.exception.ErrorCode; import cn.lihu.jh.framework.common.pojo.CommonResult; import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO; import cn.lihu.jh.module.ecg.dal.dataobject.queue.BedQueueStatisticDO; import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueStatisticDO; -import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomResVO; import cn.lihu.jh.module.ecg.dal.mysql.room.RoomMapper; import cn.lihu.jh.module.ecg.enums.BedStatusEnum; import cn.lihu.jh.module.ecg.enums.QueueStatusEnum; import cn.lihu.jh.module.infra.api.config.ConfigApi; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - import cn.lihu.jh.module.ecg.controller.admin.queue.vo.*; import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO; import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.framework.common.util.object.BeanUtils; - import cn.lihu.jh.module.ecg.dal.mysql.queue.queueMapper; - -import javax.annotation.Resource; - -import java.util.*; -import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicInteger; import static cn.lihu.jh.framework.common.exception.enums.GlobalErrorCodeConstants.SUCCESS; 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.framework.common.pojo.CommonResult.success; +import static cn.lihu.jh.module.ecg.Constants.ECG_OPENING_TIME_KEY; +import static cn.lihu.jh.module.ecg.Constants.ECG_ROOM_RESET_TIME_KEY; import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*; /** @@ -43,6 +50,9 @@ @Resource private ConfigApi configApi; + + @Resource + private RoomService roomService; @Resource private queueMapper queueMapper; @@ -99,6 +109,7 @@ e.printStackTrace(); } + System.out.println("startBedOpen ========"); return ECG_INNER_ERROR; } @@ -115,6 +126,7 @@ e.printStackTrace(); } + System.out.println("startBedClose ========"); return ECG_INNER_ERROR; } @@ -133,6 +145,7 @@ e.printStackTrace(); } + System.out.println("startBedDoctorPause ========"); return ECG_INNER_ERROR; } @@ -151,6 +164,7 @@ e.printStackTrace(); } + System.out.println("startBedDoctorResume ========"); return ECG_INNER_ERROR; } @@ -169,6 +183,7 @@ e.printStackTrace(); } + System.out.println("startBedDoctorOn ========"); return ECG_INNER_ERROR; } @@ -187,6 +202,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; } @@ -202,7 +237,7 @@ // DB update List statusList = new ArrayList<BedStatusEnum>(); statusList.add(BedStatusEnum.CLOSED); - Integer updateNum = roomMapper.setBedStatus(roomId, bedNo, + Integer updateNum = roomMapper.setBedOpeningClosed(roomId, bedNo, BedStatusEnum.OPENING, statusList); if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; @@ -232,19 +267,18 @@ if (bedQueueBO.getQueueNum().get() >0) return QUEUE_HAVE_PATIENT; - BedStatusEnum destStatusEnum = destStatusEnum = BedStatusEnum.CLOSED; - mapBedVsQueue.remove(String.format("%09d%s", roomId, bedNo)); - priorityQueue.remove(bedQueueBO); - // DB update List statusList = new ArrayList<BedStatusEnum>(); statusList.add(BedStatusEnum.OPENING); statusList.add(BedStatusEnum.DOCTOR_ON); statusList.add(BedStatusEnum.PAUSE); - Integer updateNum = roomMapper.setBedStatus(roomId, bedNo, destStatusEnum, statusList); + Integer updateNum = roomMapper.setBedOpeningClosed(roomId, bedNo, + BedStatusEnum.CLOSED, statusList); if ( null==updateNum || 0 == updateNum ) return ROOM_INVALID_STATUS; + mapBedVsQueue.remove(String.format("%09d%s", roomId, bedNo)); + priorityQueue.remove(bedQueueBO); return SUCCESS; } @@ -255,12 +289,13 @@ return error(QUEUE_BED_ABNORMAL); } - RoomResVO roomResVO = roomMapper.getRoom(roomId, bedNo, docId); - if (null == roomResVO) { + RoomDO roomDO = roomMapper.getRoom(roomId, bedNo, docId); + if (null == roomDO) { + System.out.println("getRoom ========"); return error(ECG_INNER_ERROR); } - RoomRespVO roomRespVO = BeanUtils.toBean(roomResVO, RoomRespVO.class); + RoomRespVO roomRespVO = BeanUtils.toBean(roomDO, RoomRespVO.class); return success(roomRespVO); } @@ -270,17 +305,16 @@ 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.setStatusEnum(BedStatusEnum.PAUSE); + priorityQueue.remove(bedQueueBO); return SUCCESS; } @@ -290,17 +324,18 @@ if (null == bedQueueBO) 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.setStatusEnum(BedStatusEnum.DOCTOR_ON); + priorityQueue.offer(bedQueueBO); + + hurryup(); return SUCCESS; } @@ -332,7 +367,7 @@ // 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; @@ -372,7 +407,7 @@ bedStatusEnumList.add(BedStatusEnum.OPENING); bedStatusEnumList.add(BedStatusEnum.DOCTOR_ON); bedStatusEnumList.add(BedStatusEnum.PAUSE); - List<RoomResVO> roomDOList = roomMapper.simpleRoomList(bedStatusEnumList); + List<RoomDO> roomDOList = roomMapper.simpleRoomList(bedStatusEnumList); List<BedQueueBO> bedQueueBOList = roomDOList.stream().map(item -> BeanUtils.toBean(item, BedQueueBO.class)).toList(); // 浠嶥B 鑾峰彇 闃熷垪涓� 灏辫瘖鍑嗗涓汉鍛樼粺璁� 鍒楄〃 @@ -408,7 +443,7 @@ for (BedQueueBO bedQueueBO : mapBedVsQueue.values()) { while (bedQueueBO.queueNum.get() < bedQueueBO.maxQueueNum) { // 鏌ョ湅 褰撳墠宸ヤ綅 鏄惁鏈夎繃鍙�-鍥炴潵鐨勬偅鑰� - Integer updateNum = queueMapper.procPassedReturnPatient( + Integer updateNum = queueMapper.queuePassedReturnPatient( bedQueueBO.getRoomId(), bedQueueBO.getRoomName(), bedQueueBO.getBedNo(), @@ -477,20 +512,18 @@ QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class); queueMapper.insert(queue); - if (0 == openingFlag.get()) - return; - 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; } // 浼樺厛闃熷垪涓� 璇ュ伐浣� 灏辫瘖鍑嗗涓汉鐨勬暟閲� 鍑忎竴 @@ -499,7 +532,8 @@ priorityQueue.remove(bo); priorityQueue.offer(bo); - startHurryUp(); + hurryup(); + return SUCCESS; } public void finishNextPatient(Long roomId, String bedNo) { @@ -507,7 +541,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) { @@ -515,7 +549,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,8 +601,42 @@ } @Override + public void resetScheduler() { + ScheduledTaskRegistrar taskRegistrar = DynamicSchedulingConfig.static_scheduledTaskRegistrar; + taskRegistrar.getScheduledTasks().forEach(ScheduledTask::cancel); + + String strOpenCloseTime = configApi.getConfigValueByKey(ECG_OPENING_TIME_KEY); + List<LocalTime> list = Utils.parseOpeningTime(strOpenCloseTime); + LocalTime openingTime = list.get(0); + LocalTime closeTime = list.get(1); + String openCronExpression = String.format("0 %d %d * * ?", openingTime.getMinute(), openingTime.getHour()); + String closeCronExpression = String.format("0 %d %d * * ?", closeTime.getMinute(), closeTime.getHour()); + + String strRoomResetTime = configApi.getConfigValueByKey(ECG_ROOM_RESET_TIME_KEY); + LocalTime roomResetTime = Utils.parseTime(strRoomResetTime); + String roomResetCronExpression = String.format("0 %d %d * * ?", roomResetTime.getMinute(), roomResetTime.getHour()); + + taskRegistrar.scheduleCronTask(new CronTask(() -> { + System.out.println("Opening Task executed at: " + System.currentTimeMillis()); + startBiz(); + }, openCronExpression)); + + taskRegistrar.scheduleCronTask(new CronTask(() -> { + System.out.println("Close Task executed at: " + System.currentTimeMillis()); + closeBiz(); + }, closeCronExpression)); + + taskRegistrar.scheduleCronTask(new CronTask(() -> { + System.out.println("Room Reset Task executed at: " + System.currentTimeMillis()); + roomService.resetRoom(); + }, roomResetCronExpression)); + + taskRegistrar.afterPropertiesSet(); + } + + @Override public Integer recallPatient(Long roomId, String bedNo, String patId) { - Integer updateNum = queueMapper.passedPatientReturn(roomId, bedNo, patId, + Integer updateNum = queueMapper.recallPassedPatient(roomId, bedNo, patId, QueueStatusEnum.PASSED.getStatus(), QueueStatusEnum.PASSED_RETURN.getStatus()); startHurryUp(); return updateNum; -- Gitblit v1.9.3