From d0443c2b5d277377f22748be405d9a06dafe04e6 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期六, 21 六月 2025 23:13:58 +0800
Subject: [PATCH] 更改

---
 src/main/java/com/gs/xky/service/PurchaseService.java |   48 +++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 43 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/gs/xky/service/PurchaseService.java b/src/main/java/com/gs/xky/service/PurchaseService.java
index f2c5516..32ed2f1 100644
--- a/src/main/java/com/gs/xky/service/PurchaseService.java
+++ b/src/main/java/com/gs/xky/service/PurchaseService.java
@@ -10,6 +10,7 @@
 import com.gs.xky.entity.PurchaseOrderCompare;
 import com.gs.xky.entity.PurchaseOrderDetail;
 import com.gs.xky.mapper.PurchaseOrderCompareMapper;
+import com.gs.xky.mapper.PurchaseOrderDetailMapper;
 import lombok.RequiredArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,6 +31,7 @@
     private final MesRohInDataService mesRohInDataService;
     private final PurchaseOrderDetailService purchaseOrderDetailService;
     private final PurchaseOrderCompareMapper purchaseOrderCompareMapper;
+    private final PurchaseOrderDetailMapper purchaseOrderDetailMapper;
 
     /**
      * 鍚屾閲囪喘璁㈠崟鏄庣粏鏁版嵁
@@ -44,6 +46,10 @@
         long currentTimeMillis = System.currentTimeMillis();
         // 闄愬埗璇锋眰鏃堕棿鑼冨洿涓�24灏忔椂
         long startDate = currentTimeMillis - (24 * 60 * 60 * 1000L);
+
+        // 鍏堝垹闄ゅ凡鏈夋暟鎹紝閬垮厤閲嶅
+        purchaseOrderDetailMapper.deleteByPrimaryKey();
+        purchaseOrderCompareMapper.deleteByPrimaryKey();
 
         XkyCommonParam<PurchaseParam> param = XkyCommonParam.GetInit();
         PurchaseParam bodyParam = new PurchaseParam();
@@ -73,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) {
@@ -107,6 +140,10 @@
 
                 // 淇濆瓨SRM閲囪喘璁㈠崟鏄庣粏
                 savePurchaseOrderDetail(detail);
+
+                // 甯姪GC鍥炴敹涓嶅啀浣跨敤鐨勫璞�
+                wrapper = null;
+                erpData = null;
             } catch (Exception e) {
                 log.error("銆恠yncPurchaseOrderDetails 澶勭悊寮傚父銆戣鍗曞彿: {}, 椤规: {}, 寮傚父: {}",
                         detail.getPoErpNo(), detail.getLineNo(), e.getMessage(), e);
@@ -166,13 +203,14 @@
 
         // 璁$畻SRM寰呮敹鏁伴噺
         Integer srmPurchaseQty = detail.getTotalAnswerQty();
-        Integer srmReceivedQty = detail.getTotalReceiveQty();
+        Integer srmReceivedQty = detail.getPoWaitDeliveryQty() + detail.getReturnWaitDeliveryQty();
+        //poWaitDeliveryQty + returnWaitDeliveryQty
         Integer srmWaitReceiveQty = srmPurchaseQty - srmReceivedQty;
 
         // 璁剧疆SRM鏁版嵁
         compareData.setSrmPurchaseQty(srmPurchaseQty);
-        compareData.setSrmReceivedQty(srmReceivedQty);
-        compareData.setSrmWaitReceiveQty(srmWaitReceiveQty);
+        compareData.setSrmReceivedQty(srmWaitReceiveQty);
+        compareData.setSrmWaitReceiveQty(srmReceivedQty);
 
         // 璁剧疆ERP鏁版嵁鍜屽樊寮�
         if (erpData == null) {

--
Gitblit v1.9.3