From 9450b481614c7a4f191475d63cfa5c5a3f87141e Mon Sep 17 00:00:00 2001
From: zhaowenxuan <chacca165@163.com>
Date: 星期六, 15 二月 2025 20:40:07 +0800
Subject: [PATCH] 20250215

---
 ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java       |  277 ++++++++++++++++++++++++++++++++++++++++++++++
 ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java      |    4 
 ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java |    6 
 ltkj-admin/src/main/java/com/ltkj/web/config/timer/TaskSchedulerConfig.java   |   18 +++
 ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java          |    5 
 5 files changed, 304 insertions(+), 6 deletions(-)

diff --git a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java
new file mode 100644
index 0000000..f67a7c3
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java
@@ -0,0 +1,277 @@
+package com.ltkj.web.config.timer;
+
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.json.JSONUtil;
+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.*;
+import com.ltkj.hosp.sqlDomain.*;
+import com.ltkj.system.service.ISysConfigService;
+import jodd.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Profile;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.stereotype.Component;
+
+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.time.temporal.ChronoUnit;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Slf4j
+@Profile("!dev & !test")
+@Component
+public class AsyncResultTask {
+
+    @Autowired
+    private TaskScheduler taskScheduler; // 瀹氭椂浠诲姟璋冨害鍣�
+    @Resource
+    private ITjOrderService orderService;
+    @Autowired
+    private ISysConfigService configService;
+    @Resource
+    private LtkjExamJcbgdService jcbgdService;
+    @Resource
+    private LtkjExamJcsqdService jcsqdService;
+    @Resource
+    private LtkjHybgdService ltkjHybgdService;
+    @Resource
+    private LtkjHysqdService ltkjHysqdService;
+    @Resource
+    private TestMapper testMapper;
+    @Autowired
+    private TjJcycxmService jcycxmService;
+    @Autowired
+    private AwsService awsService;
+    @Resource
+    private IDictHospService dictHospService;
+    @Autowired
+    private DataSourceConfig dataSourceConfig;
+
+    private final ReentrantLock reentrantLock = new ReentrantLock();
+
+    // 鐢ㄦ潵璺熻釜宸茶皟搴︿换鍔$殑鐢ㄦ埛ID闆嗗悎锛岄伩鍏嶉噸澶嶆坊鍔犱换鍔�
+    private final Set<String> scheduledTasks = new HashSet<>();
+
+    private static final SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+
+    // 鍒濆鍖栨柟娉曪紝鍚姩鏃惰皟鐢紝鑾峰彇鎵�鏈夌敤鎴峰苟鍒涘缓浠诲姟
+    @PostConstruct
+    public void init() {
+        DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
+        // 鑾峰彇鎵�鏈夐渶瑕佸悓姝ユ棩蹇楃殑鐢ㄦ埛鍒楄〃
+        List<DictHosp> hospList = dictHospService.list();
+        hospList.forEach(this::createTask);  // 涓烘瘡涓敤鎴峰垱寤轰换鍔�
+        // 瀹氭椂妫�鏌ユ槸鍚︽湁鏂扮殑鐢ㄦ埛闇�瑕佹坊鍔犱换鍔�
+        schedulePeriodicTaskCheck();
+    }
+
+    // 鏃ュ織鏂囦欢鍚嶇О鍒楄〃
+
+    // 鍒涘缓瀹氭椂浠诲姟鐨勬柟娉曪紝鐢ㄦ埛ID涓嶅瓨鍦ㄤ换鍔℃椂鎵嶄細娣诲姞
+    public void createTask(DictHosp dictHosp) {
+        // 濡傛灉浠诲姟宸茬粡瀛樺湪锛屽垯涓嶉噸澶嶆坊鍔�
+        if (scheduledTasks.contains(dictHosp.getCode())) {
+            return;
+        }
+        // 灏嗚鐢ㄦ埛ID娣诲姞鍒板凡璋冨害浠诲姟闆嗗悎涓�
+        scheduledTasks.add(dictHosp.getCode());
+        // 鍒涘缓瀹氭椂浠诲姟锛屼换鍔″皢鍦�15鍒嗛挓鍚庢墽琛�
+        taskScheduler.schedule(() -> {
+            try {
+                // 鎵ц浠诲姟鐨勮秴鏃舵帶鍒�
+                taskScheduler.schedule(() -> {
+                    executeTask(dictHosp);
+                }, Instant.now());
+            } catch (Exception e) {
+                log.error("鍒涘缓浠诲姟鏃跺彂鐢熷紓甯革細{}", e.getMessage());
+            }
+        }, Instant.now().plus(15, ChronoUnit.MINUTES));
+    }
+
+    // 鎵ц鏃ュ織鍚屾浠诲姟鐨勬柟娉�
+    public void executeTask(DictHosp dictHosp) {
+        // 鑾峰彇閿侊紝纭繚鍚屼竴鏃堕棿鍙湁涓�涓换鍔℃墽琛�
+        log.info("{}鎵ц缁撴灉鍚屾", dictHosp.getCode());
+        dataSourceConfig.addDataSource(dictHosp.getDbname());
+        DataSourceContextHolder.setDataSourceKey(dictHosp.getDbname());
+        String dsqkssj = configService.selectConfigByKey("dsqkssj");
+        String dsqjssj = configService.selectConfigByKey("dsqjssj");
+        boolean panduandangqianshijian = panduandangqianshijian(dsqkssj, dsqjssj);
+
+        boolean lock = reentrantLock.tryLock();
+        try {
+            if (!panduandangqianshijian) {
+                if (lock) {
+                    log.info("浠诲姟寮�濮嬫墽琛屾椂闂� -> {}", dateTimeFormat.format(new Date()));
+                    long start = System.currentTimeMillis();
+                    // 鏌ヨ浠诲姟鏁版嵁
+                    log.info("寮�濮嬫墽琛屽悓姝� 鎵ц鏁伴噺->{}", 0);
+                    List<String> jy = orderService.getDingShiTongBuJianYanTjNum();
+
+                    List<String> jc = orderService.getDingShiTongBuJianChaTjNum();
+
+
+                    if (null != jy && !jy.isEmpty()) {
+                        log.info("鍚屾妫�楠屼汉鍛� 鎵ц鏁伴噺->{}", jy.size());
+                        for (String s : jy) {
+                            extractedjianyan(s);
+                        }
+                    }
+
+
+                    if (null != jc && !jc.isEmpty()) {
+                        log.info("鍚屾妫�鏌ヤ汉鍛� 鎵ц鏁伴噺->{}", jc.size());
+                        for (String s : jc) {
+                            extractedjiancha(s);
+                        }
+                    }
+                    Map<String, Object> map = new HashMap<>();
+                    testMapper.tjplUpdateDetatilByVi(map);
+                    Integer object = (Integer) map.get("total");
+                    log.info("鎵ц瀛樺偍杩囩▼鍚庡嚭鍙�->{}", object);
+                    if (null != object && object.equals(1)) {
+                        if (null != jc && !jc.isEmpty()) {
+                            for (String s : jc) {
+                                jcycxmService.deletedByTjh(s);
+                                List<LtkjExamJcsqd> list = jcsqdService.getLtkjJcsqdByTjh(s);
+                                if(null !=list && !list.isEmpty()){
+                                    for (LtkjExamJcsqd jcsqd : list) {
+                                        if(jcsqd.getJgbx().contains("銆�")){
+                                            String[] split = jcsqd.getJgzt().split("銆�");
+                                            for (String jg : split) {
+                                                if(StringUtil.isNotBlank(jg) && !jg.contains("鏈寮傚父")
+                                                        && !jg.contains("鏈鏄庢樉寮傚父") && !jg.contains("鏈鍗犱綅")
+                                                        && !jg.contains("鏈鏄庢樉")&& !jg.contains("姝e父")&& !jg.contains("鍙屼晶妞庨棿瀛旀棤鐙獎")){
+                                                    TjJcycxm jcycxm=new TjJcycxm();
+                                                    jcycxm.setTjh(s);
+                                                    jcycxm.setYqid(dictHosp.getCode());
+                                                    String[] split1 = jcsqd.getJcxmid().split(";");
+                                                    jcycxm.setProId(split1[0]);
+                                                    jcycxm.setProName(jcsqd.getJcxmmc());
+                                                    jcycxm.setCreateTime(new Date());
+                                                    jcycxm.setJcjg(jg);
+                                                    jcycxmService.save(jcycxm);
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        long end = System.currentTimeMillis();
+                        log.info("鍚屾缁撴潫 鑰楁椂锛歿}绉�", (end - start) / 1000);
+                    }else {
+                        log.info("鎵ц瀛樺偍杩囩▼鍑哄弬澶辫触");
+                    }
+                }
+            }else {
+                log.info("涓嶅湪瀹氭椂鍣ㄦ墽琛屾椂闂磋寖鍥翠箣鍐�!!!");
+            }
+        } catch (Exception e) {
+            log.error("瀹氭椂鍣ㄦ墽琛屾姤閿�");
+            log.error(String.valueOf(e),e.getMessage());
+        } finally {
+            if (reentrantLock.isLocked()) {
+                scheduledTasks.remove(dictHosp.getCode());
+                reentrantLock.unlock();
+            }
+            DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
+            DataSourceContextHolder.clear();
+
+        }
+    }
+
+    private boolean panduandangqianshijian(String kssj, String jssj) {
+        ZonedDateTime now = ZonedDateTime.now();
+        LocalTime time = now.toLocalTime();
+        return time.isAfter(LocalTime.of(Integer.parseInt(kssj), 0)) && time.isBefore(LocalTime.of(Integer.parseInt(jssj), 0));
+    }
+
+    // 瀹氭椂妫�鏌ユ槸鍚︽湁鏂扮殑鐢ㄦ埛闇�瑕佹坊鍔犱换鍔�
+    private void schedulePeriodicTaskCheck() {
+        checkAndAddNewTasks();
+    }
+
+    // 妫�鏌ュ苟娣诲姞鏂扮殑鐢ㄦ埛浠诲姟
+    public void checkAndAddNewTasks() {
+        // 鑾峰彇鎵�鏈夐渶瑕佸悓姝ユ棩蹇楃殑鐢ㄦ埛鍒楄〃
+        List<DictHosp> hospList = dictHospService.list();
+        hospList.forEach(this::createTask);
+        taskScheduler.schedule(this::checkAndAddNewTasks, Instant.now().plus(2, ChronoUnit.MINUTES));
+    }
+
+    private void extractedjianyan(String s) {
+        try {
+            List<Aws> awsList = testMapper.getWsxmLtkjHysqdByLisViBySLAVEWS(s);
+            if(null !=awsList && !awsList.isEmpty()){
+                log.info(awsList.toString());
+                testMapper.delWsxmjg(s);
+                log.info("鍒犻櫎澶栭�侀」鐩垚鍔�");
+                awsService.saveBatch(awsList);
+                log.info("淇濆瓨澶栭�侀」鐩垚鍔�");
+            }
+            List<LtkjHysqd> hysqdList = testMapper.getCcXZxYyLtkjHysqdByLisVi(s);
+            List<LtkjHysqd> wssq = testMapper.getWsxmLtkjHysqdByLisVi(s);
+            if(null !=wssq && !wssq.isEmpty())hysqdList.addAll(wssq);
+            if (null != hysqdList && !hysqdList.isEmpty()) {
+                for (LtkjHysqd hysqd : hysqdList) {
+                    LtkjHysqd jybgid = ltkjHysqdService.getLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh());
+                    if (null != jybgid) {
+                        ltkjHysqdService.deletedLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh());
+                        ltkjHybgdService.deletedLtkjHybgdByTjhAndTmh(hysqd.getTmh());
+                    }
+                    if (ltkjHysqdService.save(hysqd)) {
+                        List<LtkjHybgd> hybgdList = testMapper.getCcXZxYyLtkjHybgdByLisVi(hysqd.getTmh());
+                        List<LtkjHybgd> wsbg = testMapper.getWsxmLtkjHybgdByLisVi(s);
+                        if(null !=wsbg && !wsbg.isEmpty())hybgdList.addAll(wsbg);
+                        ltkjHybgdService.saveBatch(hybgdList);
+                    }
+                }
+                DynamicDataSourceContextHolder.clearDataSourceType();
+            }
+        } catch (Exception e) {
+            log.info("鍚屾妫�楠屾暟鎹け璐�");
+//            throw new RuntimeException(e);
+            log.error(String.valueOf(e));
+        }
+
+    }
+
+
+    private void extractedjiancha(String s) {
+
+        try {
+            List<LtkjExamJcsqd> jcsqdList = testMapper.getCcXZxYyPacsLtkjExamJcsqd(s);
+            if (null != jcsqdList && !jcsqdList.isEmpty()) {
+                DynamicDataSourceContextHolder.clearDataSourceType();
+                jcsqdService.deletedLtkjJcsqdByTjhAndTmh(s);
+                jcbgdService.deletedLtkjJcbgdByTjhAndTmh(s);
+                jcsqdService.saveBatch(jcsqdList);
+                List<LtkjExamJcbgd> jcbgdList = testMapper.getCcXZxYyPacsLtkjExamJcbgd(s);
+                DynamicDataSourceContextHolder.clearDataSourceType();
+                if (null != jcbgdList && !jcbgdList.isEmpty()) jcbgdService.saveBatch(jcbgdList);
+                DynamicDataSourceContextHolder.clearDataSourceType();
+            }
+        } catch (Exception e) {
+            log.info("鍚屾妫�鏌ユ暟鎹け璐�");
+//            throw new RuntimeException(e);
+            log.error(String.valueOf(e));
+        }
+    }
+}
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 55b217a..f846cee 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
@@ -35,8 +35,8 @@
  * @Date: 2024/7/25 15:05
  */
 @Slf4j
-@Component
-@Profile("!dev & !test")
+//@Component
+//@Profile("!prod & !test")
 public class DefaultScheduled {
 
 
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/TaskSchedulerConfig.java b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/TaskSchedulerConfig.java
new file mode 100644
index 0000000..c08afdf
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/TaskSchedulerConfig.java
@@ -0,0 +1,18 @@
+package com.ltkj.web.config.timer;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+@Configuration
+public class TaskSchedulerConfig {
+
+    @Bean
+    public TaskScheduler taskScheduler() {
+        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
+        taskScheduler.setPoolSize(50);
+        taskScheduler.setThreadNamePrefix("scheduled-task-");
+        return taskScheduler;
+    }
+}
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java
index 5377e42..f3bddbf 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java
@@ -1538,7 +1538,10 @@
 
         tableQz.addCell(cell);
 
-        File file = new File(value + File.separator + "yinzhang.png");
+        String keyId = DataSourceContextHolder.getDataSourceKey();
+        keyId = keyId.replace("ltkjpeis10_","");
+
+        File file = new File(value + File.separator + keyId + File.separator + "yinzhang.png");
         cell = new PdfPCell();
         cell.setBorder(Rectangle.NO_BORDER);
         cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java
index 71e06a4..08102c4 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java
@@ -44,6 +44,7 @@
 
         if (StringUtils.isNotNull(dataSource)) {
             DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name());
+            DataSourceContextHolder.setDataSourceKey(dataSource.value().name());
         }
 
         try {
@@ -53,9 +54,8 @@
             logger.info("DataSourceContextHolder ->{}",key);
             logger.info("DynamicDataSourceContextHolder ->{}",DynamicDataSourceContextHolder.getDataSourceType());
             // 閿�姣佹暟鎹簮 鍦ㄦ墽琛屾柟娉曚箣鍚�
-            DynamicDataSourceContextHolder.clearDataSourceType();
-//            DataSourceContextHolder.setDataSourceKey(key);
-//            DynamicDataSourceContextHolder.setDataSourceType(key);
+            DataSourceContextHolder.setDataSourceKey(key);
+            DynamicDataSourceContextHolder.setDataSourceType(key);
             logger.info("鎵ц涔嬪悗 clear涔嬪悗");
             logger.info("DataSourceContextHolder ->{}",key);
             logger.info("DynamicDataSourceContextHolder ->{}",DynamicDataSourceContextHolder.getDataSourceType());

--
Gitblit v1.8.0