jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/config/MySpringEventListener.java
@@ -1,6 +1,7 @@ package cn.lihu.jh.module.ecg.config; import cn.lihu.jh.module.ecg.Utils; import cn.lihu.jh.module.ecg.service.config.EcgConfigService; import cn.lihu.jh.module.ecg.service.queue.QueueService; import cn.lihu.jh.module.infra.api.config.ConfigApi; import org.springframework.boot.context.event.ApplicationStartedEvent; @@ -21,7 +22,10 @@ private ConfigApi configApi; @Resource private QueueService queueService; private EcgConfigService ecgConfigService; @Resource QueueService queueService; @EventListener public void onApplicationEvent(ApplicationStartedEvent event) { @@ -45,6 +49,6 @@ queueService.startBiz(); } queueService.resetScheduler(); ecgConfigService.resetScheduler(); } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java
@@ -3,6 +3,8 @@ import cn.lihu.jh.framework.common.exception.ErrorCode; import cn.lihu.jh.framework.security.core.util.SecurityFrameworkUtils; import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO; import cn.lihu.jh.module.ecg.service.config.EcgConfigService; import cn.lihu.jh.module.ecg.service.config.EcgConfigServiceImpl; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; @@ -44,6 +46,9 @@ @Resource private QueueService queueService; @Resource private EcgConfigService ecgConfigService; @PostMapping("/create") @Operation(summary = "å建æé") @@ -154,7 +159,7 @@ @Operation(summary = "éç½®è°åº¦å¨") @PreAuthorize("@ss.hasPermission('ecg:queue:setting')") public CommonResult<Integer> resetScheduler() { queueService.resetScheduler(); ecgConfigService.resetScheduler(); return success(0); } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/config/EcgConfigService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ package cn.lihu.jh.module.ecg.service.config; public interface EcgConfigService { void resetScheduler(); } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/config/EcgConfigServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,70 @@ package cn.lihu.jh.module.ecg.service.config; import cn.lihu.jh.module.ecg.Utils; import cn.lihu.jh.module.ecg.config.DynamicSchedulingConfig; import cn.lihu.jh.module.ecg.service.queue.QueueService; import cn.lihu.jh.module.ecg.service.room.RoomService; import cn.lihu.jh.module.infra.api.config.ConfigApi; import lombok.extern.slf4j.Slf4j; 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 javax.annotation.Resource; import java.time.LocalTime; import java.util.List; 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; @Service @Validated @Slf4j public class EcgConfigServiceImpl implements EcgConfigService{ @Resource private ConfigApi configApi; @Resource private RoomService roomService; @Resource private QueueService queueService; @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()); queueService.startBiz(); }, openCronExpression)); taskRegistrar.scheduleCronTask(new CronTask(() -> { System.out.println("Close Task executed at: " + System.currentTimeMillis()); queueService.closeBiz(); }, closeCronExpression)); taskRegistrar.scheduleCronTask(new CronTask(() -> { System.out.println("Room Reset Task executed at: " + System.currentTimeMillis()); roomService.resetRoom(); }, roomResetCronExpression)); taskRegistrar.afterPropertiesSet(); } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java
@@ -22,7 +22,7 @@ void setQueueReadyMax(Integer max); void startBiz(); void closeBiz(); void resetScheduler(); /** * å建æé @@ -49,6 +49,9 @@ /** * */ void startHurryUp(); void startBedReload(); ErrorCode startBedOpen(Long roomId, String bedNo); ErrorCode startBedClose(Long roomId, String bedNo); ErrorCode startBedDoctorPause(Long roomId, String bedNo, Long docId, String docName); jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -51,12 +51,6 @@ public class QueueServiceImpl implements QueueService { @Resource private ConfigApi configApi; @Resource private RoomService roomService; @Resource private queueMapper queueMapper; @Resource @@ -227,6 +221,20 @@ return ECG_INNER_ERROR; } @Override public void startHurryUp() { singleThreadExecutor.execute( () -> { hurryup(); }); } @Override public void startBedReload() { singleThreadExecutor.execute( () -> { bedReload(); hurryup(); }); } /** * å·²å ³é æè å ³éä¸ï¼å¯ä»¥å¼éå·¥ä½ @@ -404,10 +412,21 @@ // DB update List statusList = new ArrayList<BedStatusEnum>(); statusList.add(BedStatusEnum.DOCTOR_ON); statusList.add(BedStatusEnum.PAUSE); Integer updateNum = roomMapper.setBedDoctorOff(roomId, bedNo, docId, BedStatusEnum.OPENING, statusList); if ( null==updateNum || 0 == updateNum ) { log.error("bedDoctorOff DB invalid status. " + roomId + " " + bedNo); return ROOM_INVALID_STATUS; } // 妿æ¯å¨ PAUSE ç¶æç¦»åº§çï¼éè¦éæ°å å ä¼å éå if (bedQueueBO.getStatus().equals(BedStatusEnum.PAUSE.getStatus())) { if (!priorityQueue.contains(bedQueueBO)) { priorityQueue.offer(bedQueueBO); } else { log.error("bedDoctorResume priorityQueue still exist!. " + roomId + " " + bedNo); return ECG_INNER_ERROR; } } bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus()); @@ -639,40 +658,6 @@ } @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.recallPassedPatient(roomId, bedNo, patId, QueueStatusEnum.PASSED.getStatus(), QueueStatusEnum.PASSED_RETURN.getStatus()); @@ -691,19 +676,6 @@ public void monitorInfo() { log.info("map " + mapBedVsQueue.size() + " priority " + priorityQueue.size() + " opening " + openingFlag.get()); } private void startHurryUp() { singleThreadExecutor.execute( () -> { hurryup(); }); } private void startBedReload() { singleThreadExecutor.execute( () -> { bedReload(); hurryup(); }); } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/room/RoomServiceImpl.java
@@ -6,6 +6,7 @@ import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO; import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO; import cn.lihu.jh.module.ecg.service.queue.QueueService; import cn.lihu.jh.module.system.api.oauth2.OAuth2TokenApi; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -34,6 +35,9 @@ @Resource private OAuth2TokenApi oAuth2TokenApi; @Resource QueueService queueService; @Override public Integer createRoom(RoomSaveReqVO createReqVO) { @@ -103,5 +107,7 @@ // List<Long> userIdList = roomDOList.stream().map(roomDO -> roomDO.getDocId()).toList(); oAuth2TokenApi.tick(userIdList); queueService.startBedReload(); } }