From dc3cb5dea834cde14d1b527c22b35f1d5faebd5a Mon Sep 17 00:00:00 2001
From: zjh <1084500556@qq.com>
Date: 星期六, 15 二月 2025 19:26:55 +0800
Subject: [PATCH] zjh20250215

---
 ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAwareThreadPoolTaskExecutor.java |   28 +++++++
 ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysDeptController.java                     |    4 +
 ltkj-admin/src/main/java/com/ltkj/web/controller/service/TjSysAsyncServiceImpl.java                |   58 +++++++------
 ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsyncConfig.java                           |   20 +++++
 ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsynAspect.java                            |   42 +++------
 ltkj-admin/src/main/java/com/ltkj/web/config/timer/ThreadPoolConfiguration.java                    |   35 ++++++++
 6 files changed, 130 insertions(+), 57 deletions(-)

diff --git a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/ThreadPoolConfiguration.java b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/ThreadPoolConfiguration.java
index 5a6b099..396b908 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/ThreadPoolConfiguration.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/ThreadPoolConfiguration.java
@@ -2,7 +2,11 @@
 
 
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import com.ltkj.framework.aspectj.AsynAspect;
+import com.ltkj.framework.datasource.DynamicDataSourceContextHolder;
 import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -18,13 +22,38 @@
 @Configuration
 @Slf4j
 public class ThreadPoolConfiguration {
+    private static final Logger logger = LoggerFactory.getLogger(AsynAspect.class);
 
     @Bean(name = "async", destroyMethod = "shutdown")
     public ThreadPoolExecutor systemCheckPoolExecutorService() {
+        // 鑾峰彇褰撳墠绾跨▼鐨勬暟鎹簮
+        String dataSource = DynamicDataSourceContextHolder.getDataSourceType();
+        logger.info("寮傛浼犻�掔嚎绋嬪綋鍓嶇嚎绋嬫暟鎹簮: {}", dataSource);
 
         return new ThreadPoolExecutor(3, 10, 60, TimeUnit.SECONDS,
-                new LinkedBlockingQueue<Runnable>(10000),
+                new LinkedBlockingQueue<>(10000),
                 new ThreadFactoryBuilder().setNameFormat("default-executor-%d").build(),
-                (r, executor) -> log.error("system pool is full! "));
+                (r, executor) -> logger.error("system pool is full! ")) {
+
+            @Override
+            public void execute(Runnable task) {
+                // 鍖呰浠诲姟锛屽皢鏁版嵁婧愪紶閫掑埌寮傛绾跨▼
+                super.execute(new Runnable() {
+                    @Override
+                    public void run() {
+                        // 鍦ㄥ紓姝ョ嚎绋嬩腑璁剧疆鏁版嵁婧�
+                        String dataSource = DynamicDataSourceContextHolder.getDataSourceType();
+                        try {
+                            DynamicDataSourceContextHolder.setDataSourceType(dataSource);
+                            task.run();
+                        } finally {
+                            // 纭繚鍦ㄤ换鍔℃墽琛屽畬鎴愬悗娓呯悊鏁版嵁婧�
+                            DynamicDataSourceContextHolder.clearDataSourceType();
+                        }
+                    }
+                });
+            }
+        };
     }
-}
\ No newline at end of file
+
+}
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/service/TjSysAsyncServiceImpl.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/service/TjSysAsyncServiceImpl.java
index 3ccc8a5..6b65b14 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/controller/service/TjSysAsyncServiceImpl.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/service/TjSysAsyncServiceImpl.java
@@ -17,6 +17,7 @@
 import com.ltkj.common.utils.IdUtils;
 import com.ltkj.common.utils.StringUtils;
 import com.ltkj.framework.config.MatchUtils;
+import com.ltkj.framework.datasource.DynamicDataSourceContextHolder;
 import com.ltkj.hosp.domain.*;
 import com.ltkj.hosp.hisDto.*;
 import com.ltkj.hosp.mapper.TjSamplingMapper;
@@ -248,7 +249,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void ttextracted(TjOrder tjOrder, TjCustomer tjCustomer, SysUser sysUser, TjReservation tjReservation, TjFlowingWater tjFlowingWater) {
 
         tjAskMedicalHistoryService.updateTjAskMedicalHistoryByCusId(tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjCustomer.getCusId()));
@@ -360,7 +361,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void collectFees(TjOrder order, List<TjConsumables> list2, List<TbTransition> tbTransitionList, SysUser sysUser, String discount) {
 //        orderRemarkService.deletedOrderRemarkByTjNum(order.getTjNumber());
 //        redisCache.deleteObject("getOrderDetailByProParentId" + order.getTjNumber());
@@ -543,7 +544,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void abandonCheck(String tjNumber, TjOrder tjOrder, List<TjOrderDetail> list, SysUser sysUser) {
         for (TjOrderDetail tjOrderDetail : list) {
             LambdaQueryWrapper<TjProject> wq1 = new LambdaQueryWrapper<>();
@@ -584,8 +585,11 @@
     }
 
     @Override
-//    @Async("async")
+    //@Async("async")
     public void updateOrdeltile(List<TjOrderDetail> tjOrderDetailList, SysUser sysUser, TjOrder order,TjOrderRemark orderRemark) {
+        String currentDataSource = DynamicDataSourceContextHolder.getDataSourceType();
+        log.info("寮傛绾跨▼涓殑鏁版嵁婧�: {}", currentDataSource);
+
         String deptname="";
         TjProject tjProject = projectService.getById(orderRemark.getProId());
         if(null !=tjProject){
@@ -651,7 +655,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void updateOrdeltile2(TjOrderDetail detail, SysUser sysUser) {
 //        for (TjOrderDetail detail : tjOrderDetailList) {
         detail.setTjStatus(1L);
@@ -666,7 +670,7 @@
     }
 
     @Override
-//    @Async("async")
+//    //@Async("async")
 //    @Transactional
     public Boolean iundividualCharges(TjFlowingWater tjFlowingWater, TjOrder order, TjCustomer customer, SysUser sysUser,String jxbz) {
         Date dates = new Date();
@@ -2254,7 +2258,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void dockerSetCustomerLisByRedis(List<Long> ksproList, String ksId) {
 
         List<TjCustomer> yjAjaxResult = getYjAjaxResult(ksproList);
@@ -2264,14 +2268,14 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void dockerSetYjCustomerByRedis(Long orderId, Long ksId) {
         //宸叉(鍗曚釜瀛樺叆)0鏈,1宸叉
         getDgYjAjaxResult(orderId, ksId);
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void dockerSetWjCustomerByRedis(Long orderId, Long ksId) {
 
         //鏈(鍗曚釜瀛樺叆)0鏈,1宸叉
@@ -2279,7 +2283,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void checkSetCustomerLisByRedis(String config) {
         List<TjCustomer> wsResult = getWsResult(config);
         List<TjCustomer> ysResult = getYsResult(config);
@@ -2289,7 +2293,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void wCScheckSetCustomerLisByRedis(List<TjOrder> orderList) {
         List<TjCustomer> customerList = new ArrayList<>();
         if (null != orderList && orderList.size() > 0) {
@@ -2324,7 +2328,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void yCScheckSetCustomerLisByRedis(List<TjOrder> orderList) {
         List<TjCustomer> customerList = new ArrayList<>();
         if (null != orderList && orderList.size() > 0) {
@@ -2360,7 +2364,7 @@
 
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void tjRefund(List<TjProject> refundPros, String tjNum) {
         for (TjProject refundPro : refundPros) {
             LambdaQueryWrapper<TjProject> wq0 = new LambdaQueryWrapper<>();
@@ -2381,14 +2385,14 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void saveSampling() {
         redisCache.setCacheMapValue("sampling", "yqs", getYWqsResult(0));
         redisCache.setCacheMapValue("sampling", "wqs", getYWqsResult(1));
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void tjGoutAsync(List<QjDomainVo> domainVos, SysUser sysUser, Set<String> list) {
         Integer day = 0;
         for (QjDomainVo domainVo : domainVos) {
@@ -2470,7 +2474,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void addRedisTransitionPac(String cusId, Long pacId, List<TjPackageProject> ppList) {
         for (TjPackageProject tjPackageProject : ppList) {
             TjProject project = projectService.getById(tjPackageProject.getProId());
@@ -2509,7 +2513,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void saveRedisTransitionByPacId(String cusId,String cardId, Long pacId, List<Long> proIds) {
         if (null != pacId) {
             transitionService.saveRedisTransitionByPacId(cusId,cardId ,pacId);
@@ -2520,7 +2524,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void addRedisTransitionPro(String cusId, List<Long> proIds) {
         for (Long proId : proIds) {
             if (null != transitionService.getTbTransitionListByCusIdAndPacIdAndProId(cusId, String.valueOf(proId)) && transitionService.getTbTransitionListByCusIdAndPacIdAndProId(cusId, String.valueOf(proId)).size() > 0) {
@@ -2562,7 +2566,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void getTjPackageList() {
 
         //鐢蜂汉
@@ -2576,7 +2580,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void addNewReservationConfirm(List<TjReservation> rightList) {
         if (null != rightList && rightList.size() > 0) {
             for (TjReservation reservation : rightList) {
@@ -2611,7 +2615,7 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void saveNewReservationConfirm(List<TjReservation> rightList) {
         if (null != rightList && rightList.size() > 0) {
             //鍒涘缓绾跨▼姹�
@@ -2638,14 +2642,14 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void updateCheckType(String tjNum) {
         redisCache.setCacheMapValue("updateCheckType" + tjNum, tjNum, getAjaxResult(tjNum));
         redisCache.setHashKeyExpireTime("updateCheckType" + tjNum, 7L, TimeUnit.DAYS);
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void getPrintOrderList(List<TjOrder> list) {
 
         redisCache.setCacheMapValue("getPrintOrderList", "0", extracted(0, list));
@@ -2654,14 +2658,14 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void getDictSfxms() {
         List<DictSfxm> dictSfxm = getDictSfxm();
         redisCache.setCacheObject("getDictSfxms", dictSfxm);
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void getOrderDetailByProParentId(String tjNumber, Map<String, Object> map, String proParentId) {
         if (null != map && !map.isEmpty()) {
             redisCache.setCacheMapValue("getOrderDetailByProParentId" + tjNumber, proParentId, map);
@@ -2673,13 +2677,13 @@
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void getLineChart() {
         redisCache.setCacheObject("getLineChart", getLineCharts());
     }
 
     @Override
-    @Async("async")
+    //@Async("async")
     public void getPieChart() {
         redisCache.setCacheObject("getPieChart", getPieCharts());
     }
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysDeptController.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysDeptController.java
index 57154e3..7e7046a 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysDeptController.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysDeptController.java
@@ -25,7 +25,9 @@
 import com.ltkj.common.core.text.Convert;
 import com.ltkj.common.utils.SecurityUtils;
 import com.ltkj.common.utils.bean.BeanUtils;
+import com.ltkj.db.DataSourceContextHolder;
 import com.ltkj.framework.config.MatchUtils;
+import com.ltkj.framework.datasource.DynamicDataSourceContextHolder;
 import com.ltkj.hosp.domain.*;
 import com.ltkj.hosp.mapper.TestMapper;
 import com.ltkj.hosp.service.*;
@@ -1382,6 +1384,8 @@
 //                        }
 //                    }
 //                }
+                logger.info("鎺ュ彛 DataSourceContextHolder ->{}", DataSourceContextHolder.getDataSourceKey());
+                logger.info("鎺ュ彛 DynamicDataSourceContextHolder ->{}", DynamicDataSourceContextHolder.getDataSourceType());
                 asyncService.updateOrdeltile(tjOrderDetailList, sysUser, order,orderRemark);
                 LambdaQueryWrapper<TjOrderDetail> qww = new LambdaQueryWrapper<>();
                 qww.eq(TjOrderDetail::getOrderId, order.getOrderId());
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsynAspect.java b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsynAspect.java
index 1993ebf..0e11b1f 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsynAspect.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsynAspect.java
@@ -1,62 +1,50 @@
 package com.ltkj.framework.aspectj;
 
-import com.ltkj.common.annotation.DataSource;
-import com.ltkj.common.utils.StringUtils;
 import com.ltkj.db.DataSourceContextHolder;
 import com.ltkj.framework.datasource.DynamicDataSourceContextHolder;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.core.annotation.AnnotationUtils;
-import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
-
-import java.util.Objects;
 
 /**
  * ClassName: AsynAspect <br/>
- * Description: <br/>
+ * Description: 鍦ㄥ紓姝ユ柟娉曟墽琛屾椂锛岃幏鍙栧苟浼犻�掑綋鍓嶇嚎绋嬬殑鏁版嵁婧愩��<br/>
  * date: 2025/2/15 18:07<br/>
  *
  * @author zjh<br />
  */
 @Aspect
-@Order(2)
 @Component
 public class AsynAspect {
 
-    protected Logger logger = LoggerFactory.getLogger(getClass());
+    private static final Logger logger = LoggerFactory.getLogger(AsynAspect.class);
 
-    @Pointcut("@annotation(org.springframework.scheduling.annotation.Async)"
-            + "|| @within(org.springframework.scheduling.annotation.Async)")
-    public void dsPointCut() {
-
+    @Pointcut("@annotation(org.springframework.scheduling.annotation.Async) || @within(org.springframework.scheduling.annotation.Async)")
+    public void asyncPointCut() {
+        // 寮傛鏂规硶鍒囧叆鐐�
     }
 
-    @Around("dsPointCut()")
+    @Around("asyncPointCut()")
     public Object around(ProceedingJoinPoint point) throws Throwable {
-        String key = DataSourceContextHolder.getDataSourceKey();
-        logger.info("鎵ц涔嬪墠");
-        logger.info("DataSourceContextHolder ->{}",key);
-        logger.info("DynamicDataSourceContextHolder ->{}", DynamicDataSourceContextHolder.getDataSourceType());
+        // 鑾峰彇褰撳墠绾跨▼鐨� DataSource
+        String currentDataSource = DataSourceContextHolder.getDataSourceKey();
 
-        DynamicDataSourceContextHolder.setDataSourceType(key);
+        logger.info("褰撳墠绾跨▼鏁版嵁婧�: {}", currentDataSource);
+
+        // 鍦ㄥ紓姝ユ柟娉曟墽琛屽墠锛岃缃暟鎹簮鍒� DynamicDataSourceContextHolder
+        DynamicDataSourceContextHolder.setDataSourceType(currentDataSource);
 
         try {
+            // 鎵ц寮傛鏂规硶
             return point.proceed();
         } finally {
-            logger.info("鎵ц涔嬪悗");
-            logger.info("DataSourceContextHolder ->{}",key);
-            logger.info("DynamicDataSourceContextHolder ->{}",DynamicDataSourceContextHolder.getDataSourceType());
-            // 閿�姣佹暟鎹簮 鍦ㄦ墽琛屾柟娉曚箣鍚�
+            // 鎵ц瀹屾瘯鍚庢竻鐞嗘暟鎹簮
             DynamicDataSourceContextHolder.clearDataSourceType();
-            logger.info("鎵ц涔嬪悗 clear涔嬪悗");
-            logger.info("DataSourceContextHolder ->{}",key);
-            logger.info("DynamicDataSourceContextHolder ->{}",DynamicDataSourceContextHolder.getDataSourceType());
+            logger.info("娓呯悊鏁版嵁婧愶紝鎭㈠榛樿鏁版嵁婧�");
         }
     }
 }
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsyncConfig.java b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsyncConfig.java
new file mode 100644
index 0000000..6e79d8c
--- /dev/null
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsyncConfig.java
@@ -0,0 +1,20 @@
+//package com.ltkj.framework.aspectj;
+//
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import java.util.concurrent.Executor;
+//
+//@Configuration
+//public class AsyncConfig {
+//
+//    @Bean(name = "async")
+//    public Executor taskExecutor() {
+//        DataSourceAwareThreadPoolTaskExecutor executor = new DataSourceAwareThreadPoolTaskExecutor();
+//        executor.setCorePoolSize(10);
+//        executor.setMaxPoolSize(20);
+//        executor.setQueueCapacity(25);
+//        executor.setThreadNamePrefix("Async-");
+//        executor.initialize();
+//        return executor;
+//    }
+//}
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAwareThreadPoolTaskExecutor.java b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAwareThreadPoolTaskExecutor.java
new file mode 100644
index 0000000..48fea03
--- /dev/null
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAwareThreadPoolTaskExecutor.java
@@ -0,0 +1,28 @@
+//package com.ltkj.framework.aspectj;
+//
+//import com.ltkj.framework.datasource.DynamicDataSourceContextHolder;
+//import lombok.extern.slf4j.Slf4j;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+//
+////@Slf4j
+//public class DataSourceAwareThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
+//    private static final Logger logger = LoggerFactory.getLogger(AsynAspect.class);
+//    @Override
+//    public void execute(Runnable task) {
+//        String dataSource = DynamicDataSourceContextHolder.getDataSourceType();
+//        logger.info("寮傛浼犻�掔嚎绋嬪綋鍓嶇嚎绋嬫暟鎹簮: {}", dataSource);
+//        Runnable wrappedTask = () -> {
+//            try {
+//                // 灏嗗綋鍓嶆暟鎹簮浼犻�掑埌寮傛绾跨▼
+//                DynamicDataSourceContextHolder.setDataSourceType(dataSource);
+//                task.run();
+//            } finally {
+//                // 鎵ц瀹屾瘯鍚庢竻鐞嗘暟鎹簮
+//                DynamicDataSourceContextHolder.clearDataSourceType();
+//            }
+//        };
+//        super.execute(wrappedTask);
+//    }
+//}

--
Gitblit v1.8.0