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