From e47d11017af9eff6581591d5d73c1e55676b0955 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期四, 05 六月 2025 09:16:24 +0800
Subject: [PATCH] 优化执行内存

---
 src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java |   71 ++++++++++++++++++++++++++++++++---
 1 files changed, 65 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java b/src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java
index 2da0e50..dd9f7e5 100644
--- a/src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java
+++ b/src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java
@@ -8,6 +8,9 @@
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
  * 閲囪喘璁㈠崟鍚屾瀹氭椂浠诲姟
@@ -18,20 +21,76 @@
     private static final Logger log = LoggerFactory.getLogger(PurchaseOrderSyncTask.class);
 
     private final PurchaseService purchaseService;
+    private final Executor purchaseTaskExecutor; // 娉ㄥ叆涓撶敤绾跨▼姹�
+
+    // 鐢ㄤ簬鏍囪浠诲姟鏄惁姝e湪鎵ц
+    private final AtomicBoolean isRunning = new AtomicBoolean(false);
 
     /**
      * 瀹氭椂鎵ц閲囪喘璁㈠崟鍚屾浠诲姟
      * 姣忓ぉ12鐐规暣鎵ц涓�娆�
      * 璁剧疆涓�12鐐�05鍒嗘墽琛岋紝閬垮厤涓庡叾浠栧畾鏃朵换鍔″啿绐�
+     * 浣跨敤寮傛鎵ц锛岄槻姝㈤樆濉炲叾浠栧畾鏃朵换鍔�
      */
     @Scheduled(cron = "0 5 12 * * ?")
     public void syncPurchaseOrders() {
-        log.info("銆恠yncPurchaseOrders銆戝紑濮嬫墽琛岄噰璐鍗曞悓姝ヤ换鍔�");
-        try {
-            purchaseService.syncPurchaseOrderDetails();
-            log.info("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屾垚鍔�");
-        } catch (IOException e) {
-            log.error("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屽紓甯�: {}", e.getMessage(), e);
+        // 濡傛灉浠诲姟宸茬粡鍦ㄨ繍琛岋紝鍒欒烦杩囨湰娆℃墽琛�
+        if (!isRunning.compareAndSet(false, true)) {
+            log.info("銆恠yncPurchaseOrders銆戜笂涓�娆′换鍔¤繕鍦ㄦ墽琛屼腑锛岃烦杩囨湰娆℃墽琛�");
+            return;
         }
+
+        log.info("銆恠yncPurchaseOrders銆戝紑濮嬫墽琛岄噰璐鍗曞悓姝ヤ换鍔�");
+
+        // 浣跨敤涓撶敤绾跨▼姹犳墽琛屽紓姝ヤ换鍔�
+        CompletableFuture.runAsync(() -> {
+            try {
+                log.info("銆恠yncPurchaseOrders銆戝紓姝ョ嚎绋嬪紑濮嬫墽琛岄噰璐鍗曞悓姝�");
+                purchaseService.syncPurchaseOrderDetails();
+                log.info("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屾垚鍔�");
+            } catch (IOException e) {
+                log.error("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屽紓甯�: {}", e.getMessage(), e);
+            } finally {
+                // 鏃犺鎴愬姛杩樻槸澶辫触锛岄兘灏嗚繍琛岀姸鎬侀噸缃�
+                isRunning.set(false);
+                log.info("銆恠yncPurchaseOrders銆戜换鍔$姸鎬佸凡閲嶇疆锛屽彲浠ユ帴鍙楁柊鐨勪换鍔�");
+            }
+        }, purchaseTaskExecutor);
+
+        // 涓嶇瓑寰呬换鍔″畬鎴愶紝绔嬪嵆杩斿洖锛岄伩鍏嶉樆濉炶皟搴︾嚎绋�
+        log.info("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔″凡鎻愪氦鍒板紓姝ョ嚎绋嬫墽琛�");
+    }
+
+    /**
+     * 鎵嬪姩瑙﹀彂閲囪喘璁㈠崟鍚屾浠诲姟
+     * 鐢ㄤ簬绯荤粺绠$悊鍛樻墜鍔ㄨЕ鍙戝悓姝�
+     *
+     * @return 浠诲姟鏄惁宸叉彁浜ゆ墽琛�
+     */
+    public boolean manualSyncPurchaseOrders() {
+        // 濡傛灉浠诲姟宸茬粡鍦ㄨ繍琛岋紝鍒欐嫆缁濇湰娆℃墽琛�
+        if (!isRunning.compareAndSet(false, true)) {
+            log.info("銆恗anualSyncPurchaseOrders銆戜笂涓�娆′换鍔¤繕鍦ㄦ墽琛屼腑锛屾嫆缁濇湰娆℃墽琛�");
+            return false;
+        }
+
+        log.info("銆恗anualSyncPurchaseOrders銆戞墜鍔ㄨЕ鍙戦噰璐鍗曞悓姝ヤ换鍔�");
+
+        // 浣跨敤涓撶敤绾跨▼姹犳墽琛屽紓姝ヤ换鍔�
+        CompletableFuture.runAsync(() -> {
+            try {
+                log.info("銆恗anualSyncPurchaseOrders銆戝紓姝ョ嚎绋嬪紑濮嬫墽琛岄噰璐鍗曞悓姝�");
+                purchaseService.syncPurchaseOrderDetails();
+                log.info("銆恗anualSyncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屾垚鍔�");
+            } catch (IOException e) {
+                log.error("銆恗anualSyncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屽紓甯�: {}", e.getMessage(), e);
+            } finally {
+                // 鏃犺鎴愬姛杩樻槸澶辫触锛岄兘灏嗚繍琛岀姸鎬侀噸缃�
+                isRunning.set(false);
+                log.info("銆恗anualSyncPurchaseOrders銆戜换鍔$姸鎬佸凡閲嶇疆锛屽彲浠ユ帴鍙楁柊鐨勪换鍔�");
+            }
+        }, purchaseTaskExecutor);
+
+        return true;
     }
 } 
\ No newline at end of file

--
Gitblit v1.9.3