Browse Source

导入历史数据异步处理更新

Zhangbw 1 month ago
parent
commit
603503e2c6

+ 2 - 0
ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java

@@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
@@ -12,6 +13,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
  *
  * @author Lion Li
  */
+@EnableAsync
 @EnableScheduling
 @SpringBootApplication
 @ComponentScan(basePackages = {"org.dromara", "com.yingpai"})

+ 43 - 26
ruoyi-modules/yp-stock/src/main/java/com/yingpai/stock/service/impl/StockPoolHistoryServiceImpl.java

@@ -22,6 +22,7 @@ import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.satoken.utils.LoginHelper;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -452,32 +453,8 @@ public class StockPoolHistoryServiceImpl implements IStockPoolHistoryService {
         log.info("[强势池] 开始将排名前十的股票加入强势池,导入日期: {}", parsedRecordDate);
         addTopTenToStrongPool(parsedRecordDate);
 
-        // 调用数据补全功能,将历史数据补全到stock_pool表
-        try {
-            log.info("[数据补全] 开始补全历史数据到stock_pool表,导入日期: {}", parsedRecordDate);
-            String completeResult = stockPoolService.completeHistoryData(parsedRecordDate);
-            log.info("[数据补全] 补全结果: {}", completeResult);
-        } catch (Exception e) {
-            log.error("[数据补全] 补全历史数据失败: {}", e.getMessage(), e);
-        }
-
-        // 更新强势池10天最高涨幅
-        try {
-            log.info("[强势池10天涨幅] 开始更新强势池10天最高涨幅,导入日期: {}", parsedRecordDate);
-            String gainResult = stockPoolService.updateStrongPoolTenDayGain(parsedRecordDate);
-            log.info("[强势池10天涨幅] 更新结果: {}", gainResult);
-        } catch (Exception e) {
-            log.error("[强势池10天涨幅] 更新失败: {}", e.getMessage(), e);
-        }
-
-        // 回溯更新过去10天内所有记录的high_trend
-        try {
-            log.info("[回溯更新high_trend] 开始回溯更新,导入日期: {}", parsedRecordDate);
-            String updateResult = updatePastTenDaysHighTrend(parsedRecordDate);
-            log.info("[回溯更新high_trend] 更新结果: {}", updateResult);
-        } catch (Exception e) {
-            log.error("[回溯更新high_trend] 更新失败: {}", e.getMessage(), e);
-        }
+        // 异步执行耗时的后续操作(数据补全、更新涨幅、回溯更新)
+        asyncProcessAfterImport(parsedRecordDate);
 
         if (failureNum > 0) {
             String message = String.format("导入完成!成功 %d 条(其中更新 %d 条),失败 %d 条。详细错误信息请查看服务器日志。",
@@ -601,6 +578,46 @@ public class StockPoolHistoryServiceImpl implements IStockPoolHistoryService {
         }
     }
 
+    /**
+     * 异步执行导入后的耗时操作
+     * 包括:数据补全、更新强势池10天涨幅、回溯更新high_trend
+     *
+     * @param importDate 导入日期
+     */
+    @Async
+    public void asyncProcessAfterImport(LocalDate importDate) {
+        log.info("[异步处理] 开始执行导入后的耗时操作,导入日期: {}", importDate);
+
+        // 调用数据补全功能,将历史数据补全到stock_pool表
+        try {
+            log.info("[数据补全] 开始补全历史数据到stock_pool表,导入日期: {}", importDate);
+            String completeResult = stockPoolService.completeHistoryData(importDate);
+            log.info("[数据补全] 补全结果: {}", completeResult);
+        } catch (Exception e) {
+            log.error("[数据补全] 补全历史数据失败: {}", e.getMessage(), e);
+        }
+
+        // 更新强势池10天最高涨幅
+        try {
+            log.info("[强势池10天涨幅] 开始更新强势池10天最高涨幅,导入日期: {}", importDate);
+            String gainResult = stockPoolService.updateStrongPoolTenDayGain(importDate);
+            log.info("[强势池10天涨幅] 更新结果: {}", gainResult);
+        } catch (Exception e) {
+            log.error("[强势池10天涨幅] 更新失败: {}", e.getMessage(), e);
+        }
+
+        // 回溯更新过去10天内所有记录的high_trend
+        try {
+            log.info("[回溯更新high_trend] 开始回溯更新,导入日期: {}", importDate);
+            String updateResult = updatePastTenDaysHighTrend(importDate);
+            log.info("[回溯更新high_trend] 更新结果: {}", updateResult);
+        } catch (Exception e) {
+            log.error("[回溯更新high_trend] 更新失败: {}", e.getMessage(), e);
+        }
+
+        log.info("[异步处理] 导入后的耗时操作全部完成,导入日期: {}", importDate);
+    }
+
 
     /**
      * 从 Map 中获取字符串值