From e11257bc991e647b79c0a24108208c08797f9041 Mon Sep 17 00:00:00 2001 From: zjh <1084500556@qq.com> Date: 星期四, 13 二月 2025 15:02:06 +0800 Subject: [PATCH] zjh20250213 --- ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java | 105 ++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 84 insertions(+), 21 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java index 4d0a7f7..6346219 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java @@ -1,7 +1,12 @@ package com.ltkj.web.config.timer; import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ltkj.common.enums.DataSourceType; +import com.ltkj.db.DataSourceConfig; +import com.ltkj.db.DataSourceContextHolder; import com.ltkj.framework.datasource.DynamicDataSourceContextHolder; +import com.ltkj.hosp.domain.DictHosp; import com.ltkj.hosp.domain.TjJcycxm; import com.ltkj.hosp.mapper.TestMapper; import com.ltkj.hosp.service.*; @@ -16,16 +21,12 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.text.SimpleDateFormat; +import java.time.Instant; import java.time.LocalTime; import java.time.ZonedDateTime; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.concurrent.*; import java.util.concurrent.locks.ReentrantLock; /** @@ -59,36 +60,100 @@ private TjJcycxmService jcycxmService; @Autowired private AwsService awsService; + @Resource + private IDictHospService dictHospService; + @Autowired + private DataSourceConfig dataSourceConfig; private final ReentrantLock reentrantLock = new ReentrantLock(); + + private Set<String> set=new HashSet(); + private ScheduledExecutorService scheduledExecutorService; + private ScheduledExecutorService addscheduledExecutorService; private ScheduledFuture<?> scheduledFuture; + private ScheduledFuture<?> addscheduledFuture; private static final SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @PostConstruct private void init() { - scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); - scheduleNextTask(0); // 鍒濇鍚姩绔嬪嵆鎵ц + List<DictHosp> hospList = dictHospService.list(); + if(null !=hospList && !hospList.isEmpty()){ + for (DictHosp hosp : hospList) { + String code = hosp.getCode(); + if(StringUtil.isNotBlank(code)){ + set.add(code); + String dbName = hosp.getDbname(); + scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); + scheduleNextTask(0,dbName,hosp.getCode()); // 鍒濇鍚姩绔嬪嵆鎵ц + } + } + } + schedulePeriodicTaskCheck(0); + } - private void scheduleNextTask(long delayInMinutes) { + private void scheduleNextTask(long delayInMinutes,String dbName,String yqbm) { if (scheduledFuture != null) { scheduledFuture.cancel(false); } Date nextExecutionTime = new Date(System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(delayInMinutes)); - log.info("涓嬫鎵ц浠诲姟鏃堕棿 -> {}", dateTimeFormat.format(nextExecutionTime)); + log.info("浠诲姟涓嬫鎵ц浠诲姟鏃堕棿 -> {}", dateTimeFormat.format(nextExecutionTime)); - scheduledFuture = scheduledExecutorService.schedule(this::exec, delayInMinutes, TimeUnit.MINUTES); + scheduledFuture = scheduledExecutorService.schedule(() -> exec(dbName,yqbm), delayInMinutes, TimeUnit.MINUTES); } - private void exec() { + // 瀹氭椂妫�鏌ユ槸鍚︽湁鏂扮殑鐢ㄦ埛闇�瑕佹坊鍔犱换鍔� + private void schedulePeriodicTaskCheck(long delayInMinutes) { + + //鍒囦富搴� + dataSourceConfig.addDataSource(DataSourceType.MASTER.name()); + DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name()); + + if (addscheduledFuture != null) { + addscheduledFuture.cancel(false); + } + + Date nextExecutionTime = new Date(System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(delayInMinutes)); + log.info("娣诲姞绾跨▼姹犲畾鏃朵笅娆℃墽琛屼换鍔℃椂闂� -> {}", dateTimeFormat.format(nextExecutionTime)); + + addscheduledFuture = addscheduledExecutorService.schedule(this::checkAndAddNewTasks, delayInMinutes, TimeUnit.MINUTES); + checkAndAddNewTasks(); + } + + // 妫�鏌ュ苟娣诲姞鏂扮殑鐢ㄦ埛浠诲姟 + public void checkAndAddNewTasks() { + String dsrwsjjg = configService.selectConfigByKey("dsrwsjjg"); + List<DictHosp> hospList = dictHospService.list(); + if(null !=hospList && !hospList.isEmpty()){ + for (DictHosp hosp : hospList) { + if(null !=hosp && StringUtil.isNotBlank(hosp.getCode()) && !set.contains(hosp.getCode())){ + set.add(hosp.getCode()); + String dbName = hosp.getDbname(); + scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); + scheduleNextTask(0,dbName,hosp.getCode()); // 鍒濇鍚姩绔嬪嵆鎵ц + } + } + } + // 鍔ㄦ�佽幏鍙栦笅娆′换鍔$殑闂撮殧 + int minute = Integer.parseInt(dsrwsjjg); + if (minute < 5) minute = 5; + if (minute > 59) minute = 59; + schedulePeriodicTaskCheck(minute); + } + + private void exec(String dbName,String yqbm) { + //鍒囧簱 + + dataSourceConfig.addDataSource(dbName); + DataSourceContextHolder.setDataSourceKey(dbName); + String dsqkssj = configService.selectConfigByKey("dsqkssj"); String dsqjssj = configService.selectConfigByKey("dsqjssj"); - String yqbm = configService.selectConfigByKey("common_api_service_hospbm"); boolean panduandangqianshijian = panduandangqianshijian(dsqkssj, dsqjssj); log.info("瀹氭椂鍣ㄨ嚜鍔ㄥ悓姝ユ楠屾鏌ョ粨鏋�"); log.info("褰撳墠鏃堕棿鏄惁鍦� " + dsqkssj + " 鐐瑰埌 " + dsqjssj + " 鐐逛箣闂�: " + panduandangqianshijian); @@ -161,25 +226,23 @@ int minute = Integer.parseInt(dsrwsjjg); if (minute < 5) minute = 5; if (minute > 59) minute = 59; - scheduleNextTask(minute); + scheduleNextTask(minute,dbName,yqbm); }else { log.info("鎵ц瀛樺偍杩囩▼鍑哄弬澶辫触"); - scheduleNextTask(Long.parseLong(dsrwsjjg)); + scheduleNextTask(Long.parseLong(dsrwsjjg),dbName,yqbm); } } }else { log.info("涓嶅湪瀹氭椂鍣ㄦ墽琛屾椂闂磋寖鍥翠箣鍐�!!!"); - scheduleNextTask(Long.parseLong(dsrwsjjg)); + scheduleNextTask(Long.parseLong(dsrwsjjg),dbName,yqbm); } } catch (Exception e) { - scheduleNextTask(Long.parseLong(dsrwsjjg)); + scheduleNextTask(Long.parseLong(dsrwsjjg),dbName,yqbm); log.error("瀹氭椂鍣ㄦ墽琛屾姤閿�"); log.error(String.valueOf(e)); -// e.printStackTrace(); } finally { reentrantLock.unlock(); } - } private boolean panduandangqianshijian(String kssj, String jssj) { -- Gitblit v1.8.0