jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/Utils.java
@@ -3,12 +3,14 @@ import jodd.typeconverter.impl.LocalTimeConverter; import java.time.LocalTime; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Utils { public static LocalTime parseOpeningTime(String strOpeningTime) { String regex = "(\\d+)[::](\\d+)"; public static List<LocalTime> parseOpeningTime(String strOpeningTime) { String regex = "(\\d+)[::](\\d+)~(\\d+)[::](\\d+)"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(strOpeningTime); @@ -19,12 +21,23 @@ String fullMatch = matcher.group(); // 获取第一个捕获组(小时) String strHour = matcher.group(1); String strOpenHour = matcher.group(1); // 获取第二个捕获组(分钟) String strMinute = matcher.group(2); String strOpenMinute = matcher.group(2); LocalTime localTime = LocalTime.of(Integer.valueOf(strHour), Integer.valueOf(strMinute)); return localTime; // 获取第一个捕获组(小时) String strCloseHour = matcher.group(3); // 获取第二个捕获组(分钟) String strCloseMinute = matcher.group(4); LocalTime localOpenTime = LocalTime.of(Integer.valueOf(strOpenHour), Integer.valueOf(strOpenMinute)); LocalTime localCloseTime = LocalTime.of(Integer.valueOf(strCloseHour), Integer.valueOf(strCloseMinute)); List openCloseTime = new ArrayList<LocalTime>(); openCloseTime.add(localOpenTime); openCloseTime.add(localCloseTime); return openCloseTime; } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/config/DynamicSchedulingConfig.java
@@ -11,6 +11,7 @@ import javax.annotation.Resource; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.concurrent.Executors; import static cn.lihu.jh.module.ecg.Constants.ECG_OPENING_TIME_KEY; @@ -29,15 +30,22 @@ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(Executors.newScheduledThreadPool(1)); String strOpeningTime = configApi.getConfigValueByKey(ECG_OPENING_TIME_KEY); LocalTime openingTime = Utils.parseOpeningTime(strOpeningTime); String cronExpression = String.format("0 %d %d * * ?", openingTime.getMinute(), openingTime.getHour()); System.out.println(cronExpression); 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()); taskRegistrar.addCronTask(() -> { System.out.println("Dynamic Task executed at: " + System.currentTimeMillis()); System.out.println("Opening Task executed at: " + System.currentTimeMillis()); queueService.startBiz(); }, cronExpression); }, openCronExpression); taskRegistrar.addCronTask(() -> { System.out.println("Close Task executed at: " + System.currentTimeMillis()); queueService.closeBiz(); }, closeCronExpression); } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/listener/MySpringEventListener.java
@@ -9,6 +9,7 @@ import javax.annotation.Resource; import java.time.LocalTime; import java.util.List; import static cn.lihu.jh.module.ecg.Constants.ECG_OPENING_TIME_KEY; @@ -25,19 +26,17 @@ public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println("应用启动完成,系统初始。。。"); queueService.initBedQueueAndSeqNumFromDB(); String strOpeningTime = configApi.getConfigValueByKey(ECG_OPENING_TIME_KEY); LocalTime openingTime = Utils.parseOpeningTime(strOpeningTime); String strOpenCloseTime = configApi.getConfigValueByKey(ECG_OPENING_TIME_KEY); List<LocalTime> list = Utils.parseOpeningTime(strOpenCloseTime); LocalTime openingTime = list.get(0); LocalTime closeTime = list.get(1); // 获取当前时间 LocalTime currentTime = LocalTime.now(); // 比较时间 if (currentTime.isBefore(openingTime)) { // NO OP } else if (currentTime.isAfter(openingTime)) { queueService.startBiz(); if (currentTime.isBefore(openingTime) || currentTime.isAfter(closeTime)) { queueService.closeBiz(); } else { queueService.startBiz(); } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java
@@ -15,6 +15,7 @@ public interface QueueService { void startBiz(); void closeBiz(); /** * 创建排队 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -276,6 +276,9 @@ } public void startBiz() { if (1 == openingFlag.get()) return; // 清除非当天的排队人员 queueMapper.clearQueue(); @@ -285,6 +288,10 @@ hurryup(); } public void closeBiz() { openingFlag.set(0); } @Override public Integer recallPatient(Long roomId, String bedNo, String patId) { Integer updateNum = queueMapper.passedPatientReturn(roomId, bedNo, patId,