From 9597821e57d4bad1ea4e984241f363be956dda8c Mon Sep 17 00:00:00 2001
From: zjh <1084500556@qq.com>
Date: 星期四, 03 七月 2025 18:21:33 +0800
Subject: [PATCH] zjh20250703

---
 ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java |  157 ++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 110 insertions(+), 47 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
index b1a9a57..04d5dba 100644
--- 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
@@ -1,7 +1,8 @@
 package com.ltkj.web.config.timer;
 
-import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ltkj.common.enums.DataSourceType;
 import com.ltkj.db.DataSourceConfig;
 import com.ltkj.db.DataSourceContextHolder;
@@ -12,10 +13,9 @@
 import com.ltkj.hosp.service.*;
 import com.ltkj.hosp.sqlDomain.*;
 import com.ltkj.system.service.ISysConfigService;
+import com.ltkj.web.controller.system.SysConfigController;
 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;
@@ -29,7 +29,7 @@
 import java.time.ZonedDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.ReentrantLock;
 
 @Slf4j
@@ -61,8 +61,10 @@
     private IDictHospService dictHospService;
     @Autowired
     private DataSourceConfig dataSourceConfig;
+    @Autowired
+    private SysConfigController configController;
 
-    private final ReentrantLock reentrantLock = new ReentrantLock();
+    private final Map<String, ReentrantLock> lockMap = new ConcurrentHashMap<>();
 
     // 鐢ㄦ潵璺熻釜宸茶皟搴︿换鍔$殑鐢ㄦ埛ID闆嗗悎锛岄伩鍏嶉噸澶嶆坊鍔犱换鍔�
     private final Set<String> scheduledTasks = new HashSet<>();
@@ -75,7 +77,9 @@
     public void init() {
         DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
         // 鑾峰彇鎵�鏈夐渶瑕佸悓姝ユ棩蹇楃殑鐢ㄦ埛鍒楄〃
-        List<DictHosp> hospList = dictHospService.list();
+        LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DictHosp::getIsAutoAsyncJg,1);
+        List<DictHosp> hospList = dictHospService.list(wrapper);
         hospList.forEach(this::createTask);  // 涓烘瘡涓敤鎴峰垱寤轰换鍔�
         // 瀹氭椂妫�鏌ユ槸鍚︽湁鏂扮殑鐢ㄦ埛闇�瑕佹坊鍔犱换鍔�
         schedulePeriodicTaskCheck();
@@ -85,6 +89,8 @@
 
     // 鍒涘缓瀹氭椂浠诲姟鐨勬柟娉曪紝鐢ㄦ埛ID涓嶅瓨鍦ㄤ换鍔℃椂鎵嶄細娣诲姞
     public void createTask(DictHosp dictHosp) {
+        log.info("杩涘叆鍒涘缓浠诲姟鏂规硶 ->{}",dictHosp.getCode());
+        log.info("宸叉湁浠诲姟闆嗗悎 ->{}", scheduledTasks);
         // 濡傛灉浠诲姟宸茬粡瀛樺湪锛屽垯涓嶉噸澶嶆坊鍔�
         if (scheduledTasks.contains(dictHosp.getCode())) {
             return;
@@ -92,59 +98,67 @@
         // 灏嗚鐢ㄦ埛ID娣诲姞鍒板凡璋冨害浠诲姟闆嗗悎涓�
         scheduledTasks.add(dictHosp.getCode());
         // 鍒涘缓瀹氭椂浠诲姟锛屼换鍔″皢鍦�15鍒嗛挓鍚庢墽琛�
-        taskScheduler.schedule(() -> {
+/*        taskScheduler.schedule(() -> {
             try {
-                // 鎵ц浠诲姟鐨勮秴鏃舵帶鍒�
-                taskScheduler.schedule(() -> {
-                    executeTask(dictHosp);
-                }, Instant.now());
+
             } catch (Exception e) {
                 log.error("鍒涘缓浠诲姟鏃跺彂鐢熷紓甯革細{}", e.getMessage());
             }
+        }, Instant.now().plus(15, ChronoUnit.MINUTES));*/
+        log.info("浠诲姟鍒涘缓鎴愬姛 ->{}",dictHosp.getCode());
+        // 鎵ц浠诲姟鐨勮秴鏃舵帶鍒�
+        taskScheduler.schedule(() -> {
+            executeTask(dictHosp);
         }, Instant.now().plus(15, ChronoUnit.MINUTES));
+    }
+
+    private ReentrantLock getLock(String id) {
+        return lockMap.computeIfAbsent(id, k -> new ReentrantLock());
     }
 
     // 鎵ц鏃ュ織鍚屾浠诲姟鐨勬柟娉�
     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);
-
+        log.info("{}鎵ц缁撴灉鍚屾鍔犻攣鍓�",JSONUtil.toJsonStr(dictHosp));
+        ReentrantLock reentrantLock = getLock(dictHosp.getCode());
         boolean lock = reentrantLock.tryLock();
         try {
+            log.info("{}鎵ц缁撴灉鍚屾鍔犻攣鍚�",JSONUtil.toJsonStr(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);
             if (!panduandangqianshijian) {
                 if (lock) {
-                    log.info("浠诲姟寮�濮嬫墽琛屾椂闂� -> {}", dateTimeFormat.format(new Date()));
+                    log.info("{}浠诲姟寮�濮嬫墽琛屾椂闂� -> {}",dictHosp.getCode(), dateTimeFormat.format(new Date()));
                     long start = System.currentTimeMillis();
                     // 鏌ヨ浠诲姟鏁版嵁
-                    log.info("寮�濮嬫墽琛屽悓姝� 鎵ц鏁伴噺->{}", 0);
+                    log.info("寮�濮嬫墽琛屽悓姝� 鎵ц闄㈠尯->{}", dictHosp.getCode());
                     List<String> jy = orderService.getDingShiTongBuJianYanTjNum();
 
                     List<String> jc = orderService.getDingShiTongBuJianChaTjNum();
 
 
                     if (null != jy && !jy.isEmpty()) {
-                        log.info("鍚屾妫�楠屼汉鍛� 鎵ц鏁伴噺->{}", jy.size());
+                        log.info("{}鍚屾妫�楠屼汉鍛� 鎵ц鏁伴噺->{}{}",dictHosp.getCode(), jy.size(),JSONUtil.toJsonStr(jy));
                         for (String s : jy) {
-                            extractedjianyan(s);
+                            extractedjianyan(s,dictHosp.getCode());
                         }
                     }
 
 
                     if (null != jc && !jc.isEmpty()) {
-                        log.info("鍚屾妫�鏌ヤ汉鍛� 鎵ц鏁伴噺->{}", jc.size());
+                        log.info("{}鍚屾妫�鏌ヤ汉鍛� 鎵ц鏁伴噺->{}{}",dictHosp.getCode(), jc.size(),JSONUtil.toJsonStr(jc));
                         for (String s : jc) {
-                            extractedjiancha(s);
+                            extractedjiancha(s,dictHosp.getCode());
                         }
                     }
                     Map<String, Object> map = new HashMap<>();
                     testMapper.tjplUpdateDetatilByVi(map);
                     Integer object = (Integer) map.get("total");
-                    log.info("鎵ц瀛樺偍杩囩▼鍚庡嚭鍙�->{}", object);
+                    log.info("{}鎵ц瀛樺偍杩囩▼鍚庡嚭鍙�->{}",dictHosp.getCode(), object);
                     if (null != object && object.equals(1)) {
                         if (null != jc && !jc.isEmpty()) {
                             for (String s : jc) {
@@ -152,10 +166,24 @@
                                 List<LtkjExamJcsqd> list = jcsqdService.getLtkjJcsqdByTjh(s);
                                 if(null !=list && !list.isEmpty()){
                                     for (LtkjExamJcsqd jcsqd : list) {
-                                        if(jcsqd.getJgzt().contains("銆�") || jcsqd.getJgzt().contains("锛�") || jcsqd.getJgzt().contains(";")){
-                                            String[] split = jcsqd.getJgzt().replaceAll("\n", "").split("銆倈锛泑;");
+                                        if(StringUtil.isNotBlank(jcsqd.getJgzt())){
+                                            String regex = configService.selectConfigByKey("jcycxmzz");
+                                            if(StringUtil.isBlank(regex)) regex= "銆倈锛泑;|,|锛�";
+                                            String[] split = jcsqd.getJgzt().replaceAll("\n", "").split(regex);
                                             for (String jg : split) {
-                                                if(StringUtil.isNotBlank(jg) && !jg.contains("鏈寮傚父")
+                                                boolean b = configController.apiJcycpdgjz(jg);
+                                                if(!b){
+                                                    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);
+                                                }
+                                       /*         if(StringUtil.isNotBlank(jg) && !jg.contains("鏈寮傚父")
                                                         && !jg.contains("鏈鏄庢樉寮傚父") && !jg.contains("鏈鍗犱綅") && !jg.contains("鏈")
                                                         && !jg.contains("鏈鏄庢樉")&& !jg.contains("姝e父")&& !jg.contains("鍙屼晶妞庨棿瀛旀棤鐙獎")&& !jg.contains("鏃犳畩")){
                                                     TjJcycxm jcycxm=new TjJcycxm();
@@ -167,7 +195,7 @@
                                                     jcycxm.setCreateTime(new Date());
                                                     jcycxm.setJcjg(jg);
                                                     jcycxmService.save(jcycxm);
-                                                }
+                                                }*/
                                             }
                                         }
                                     }
@@ -175,7 +203,7 @@
                             }
                         }
                         long end = System.currentTimeMillis();
-                        log.info("鍚屾缁撴潫 鑰楁椂锛歿}绉�", (end - start) / 1000);
+                        log.info("{}鍚屾缁撴潫 鑰楁椂锛歿}绉�",dictHosp.getCode(), (end - start) / 1000);
                     }else {
                         log.info("鎵ц瀛樺偍杩囩▼鍑哄弬澶辫触");
                     }
@@ -187,13 +215,11 @@
             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();
-
+            reentrantLock.unlock();
+            scheduledTasks.remove(dictHosp.getCode());
+//            DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
+//            DataSourceContextHolder.clear();
+            log.info("浠诲姟{}宸查噴鏀鹃攣",dictHosp.getCode());
         }
     }
 
@@ -210,13 +236,17 @@
 
     // 妫�鏌ュ苟娣诲姞鏂扮殑鐢ㄦ埛浠诲姟
     public void checkAndAddNewTasks() {
+        DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
         // 鑾峰彇鎵�鏈夐渶瑕佸悓姝ユ棩蹇楃殑鐢ㄦ埛鍒楄〃
-        List<DictHosp> hospList = dictHospService.list();
+        LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DictHosp::getIsAutoAsyncJg,1);
+        List<DictHosp> hospList = dictHospService.list(wrapper);
+        log.info("妫�鏌ュ苟娣诲姞闇�瑕佸悓姝ョ殑鍖婚櫌鍒楄〃:{}", JSONUtil.toJsonStr(hospList));
         hospList.forEach(this::createTask);
         taskScheduler.schedule(this::checkAndAddNewTasks, Instant.now().plus(2, ChronoUnit.MINUTES));
     }
 
-    private void extractedjianyan(String s) {
+    private void extractedjianyan(String s,String hospId) {
         try {
             List<Aws> awsList = testMapper.getWsxmLtkjHysqdByLisViBySLAVEWS(s);
             if(null !=awsList && !awsList.isEmpty()){
@@ -226,9 +256,40 @@
                 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 !=wssq && !wssq.isEmpty()){
+                for (LtkjHysqd hysqd : wssq) {
+                    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> wsbg = testMapper.getWsxmLtkjHybgdByLisVi(s);
+                        ltkjHybgdService.saveBatch(wsbg);
+                    }
+                }
+            }
+
+            String isWsByView = configService.selectConfigByKey("is_ws_by_view");
+            if (StrUtil.isNotBlank(isWsByView) && isWsByView.equals("Y")){
+                List<LtkjHysqd> sqd = testMapper.getWsHySqdByView(s);
+                if (sqd != null && !sqd.isEmpty()){
+                    for (LtkjHysqd hysqd : sqd) {
+                        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> wsbg = testMapper.getWsHyBgdByView(hysqd.getTmh());
+                            ltkjHybgdService.saveBatch(wsbg);
+                        }
+                    }
+                }
+            }
+
+            List<LtkjHysqd> hysqdList = testMapper.getCcXZxYyLtkjHysqdByLisVi(s,hospId);
             if (null != hysqdList && !hysqdList.isEmpty()) {
                 for (LtkjHysqd hysqd : hysqdList) {
                     LtkjHysqd jybgid = ltkjHysqdService.getLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh());
@@ -238,8 +299,8 @@
                     }
                     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);
+//                        List<LtkjHybgd> wsbg = testMapper.getWsxmLtkjHybgdByLisVi(s);
+//                        if(null !=wsbg && !wsbg.isEmpty())hybgdList.addAll(wsbg);
                         ltkjHybgdService.saveBatch(hybgdList);
                     }
                 }
@@ -254,17 +315,19 @@
     }
 
 
-    private void extractedjiancha(String s) {
+    private void extractedjiancha(String s,String hospId) {
 
         try {
-            List<LtkjExamJcsqd> jcsqdList = testMapper.getCcXZxYyPacsLtkjExamJcsqd(s);
+            List<LtkjExamJcsqd> jcsqdList = testMapper.getCcXZxYyPacsLtkjExamJcsqd(s,hospId);
+            log.info("{}鑷姩鍚屾妫�鏌ョ敵璇峰崟鏁版嵁:{}",hospId,JSONUtil.toJsonStr(jcsqdList));
             if (null != jcsqdList && !jcsqdList.isEmpty()) {
                 DynamicDataSourceContextHolder.clearDataSourceType();
                 jcsqdService.deletedLtkjJcsqdByTjhAndTmh(s);
                 jcbgdService.deletedLtkjJcbgdByTjhAndTmh(s);
                 jcsqdService.saveBatch(jcsqdList);
-                List<LtkjExamJcbgd> jcbgdList = testMapper.getCcXZxYyPacsLtkjExamJcbgd(s);
-                DynamicDataSourceContextHolder.clearDataSourceType();
+                List<LtkjExamJcbgd> jcbgdList = testMapper.getCcXZxYyPacsLtkjExamJcbgd(s,hospId);
+//                DynamicDataSourceContextHolder.clearDataSourceType();
+                log.info("{}鑷姩鍚屾妫�鏌ユ姤鍛婂崟鏁版嵁:{}",hospId,JSONUtil.toJsonStr(jcbgdList));
                 if (null != jcbgdList && !jcbgdList.isEmpty()) jcbgdService.saveBatch(jcbgdList);
                 DynamicDataSourceContextHolder.clearDataSourceType();
             }

--
Gitblit v1.8.0