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