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/service/PurchaseService.java |   35 +++++++++++++++++++++++++++++++++--
 1 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/gs/xky/service/PurchaseService.java b/src/main/java/com/gs/xky/service/PurchaseService.java
index 5598796..32ed2f1 100644
--- a/src/main/java/com/gs/xky/service/PurchaseService.java
+++ b/src/main/java/com/gs/xky/service/PurchaseService.java
@@ -79,8 +79,35 @@
 
         log.info("銆恠yncPurchaseOrderDetails銆戣幏鍙栧埌{}鏉¢噰璐鍗曟暟鎹�", orderDetails.size());
 
-        // 澶勭悊閲囪喘璁㈠崟鏄庣粏鏁版嵁
-        orderDetails.forEach(detail -> {
+        // 鍒嗘壒澶勭悊鏁版嵁锛屽噺灏戝唴瀛樺崰鐢�
+        int batchSize = 100; // 姣忔壒澶勭悊100鏉℃暟鎹�
+        int totalSize = orderDetails.size();
+        int batchCount = (totalSize + batchSize - 1) / batchSize; // 鍚戜笂鍙栨暣璁$畻鎵规鏁�
+
+        for (int i = 0; i < batchCount; i++) {
+            int fromIndex = i * batchSize;
+            int toIndex = Math.min((i + 1) * batchSize, totalSize);
+
+            log.info("銆恠yncPurchaseOrderDetails銆戝鐞嗙{}鎵规暟鎹紝鑼冨洿锛歿}-{}", i + 1, fromIndex, toIndex);
+
+            // 鑾峰彇褰撳墠鎵规鐨勬暟鎹�
+            List<PurchaseOrderDetail> batchDetails = orderDetails.subList(fromIndex, toIndex);
+
+            // 澶勭悊褰撳墠鎵规鐨勬暟鎹�
+            processBatch(batchDetails);
+
+            // 鎵嬪姩瑙﹀彂GC锛岄噴鏀惧唴瀛橈紙璋ㄦ厧浣跨敤锛屼粎鍦ㄥ唴瀛樼揣寮犳椂鑰冭檻锛�
+            // System.gc();
+        }
+    }
+
+    /**
+     * 鎵归噺澶勭悊閲囪喘璁㈠崟鏄庣粏鏁版嵁
+     *
+     * @param batchDetails 褰撳墠鎵规鐨勯噰璐鍗曟槑缁嗘暟鎹�
+     */
+    private void processBatch(List<PurchaseOrderDetail> batchDetails) {
+        batchDetails.forEach(detail -> {
             try {
                 // 鏍规嵁鏈夋晥鏍囧織鍜岃鍗曠姸鎬佸鐞嗕笉鍚岀殑涓氬姟閫昏緫
                 if (detail.getValidFlag() != null && detail.getValidFlag() == 0) {
@@ -113,6 +140,10 @@
 
                 // 淇濆瓨SRM閲囪喘璁㈠崟鏄庣粏
                 savePurchaseOrderDetail(detail);
+
+                // 甯姪GC鍥炴敹涓嶅啀浣跨敤鐨勫璞�
+                wrapper = null;
+                erpData = null;
             } catch (Exception e) {
                 log.error("銆恠yncPurchaseOrderDetails 澶勭悊寮傚父銆戣鍗曞彿: {}, 椤规: {}, 寮傚父: {}",
                         detail.getPoErpNo(), detail.getLineNo(), e.getMessage(), e);

--
Gitblit v1.9.3