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/Impl/DeliveryNoticeServiceImpl.java | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 53 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java b/src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java
index 01c0d13..3b53c96 100644
--- a/src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java
+++ b/src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java
@@ -16,6 +16,9 @@
import com.gs.xky.service.DeliveryNoticeService;
import com.gs.xky.service.MesInvItemArnService;
import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -34,10 +37,9 @@
public class DeliveryNoticeServiceImpl extends ServiceImpl<DeliveryNoticeMapper, DeliveryNotice>
implements DeliveryNoticeService {
+ private static final Logger log = LoggerFactory.getLogger(DeliveryNoticeServiceImpl.class);
private final DeliveryNoticeDetailService detailService;
-
private final MesInvItemArnService invItemArnService;
-
@Override
public boolean saveDeliveryNotice(XkyDetail xkyDetail) {
@@ -114,15 +116,59 @@
@Override
public void processMesInvItemArnStatusAsync(List<MesInvItemArn> itemArnMinus) {
+ if (itemArnMinus == null || itemArnMinus.isEmpty()) {
+ return;
+ }
+
+ // 璁板綍寮�濮嬪鐞嗙殑鏃ュ織
+ log.info("銆恜rocessMesInvItemArnStatusAsync銆戝紑濮嬪鐞唟}鏉℃暟鎹�", itemArnMinus.size());
+
+ // 鍒嗘壒澶勭悊锛屾瘡鎵规渶澶氬鐞�20鏉℃暟鎹�
+ int batchSize = 20;
+ int totalSize = itemArnMinus.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);
+ List<MesInvItemArn> batchItems = itemArnMinus.subList(fromIndex, toIndex);
+
+ log.info("銆恜rocessMesInvItemArnStatusAsync銆戝鐞嗙{}鎵规暟鎹紝鑼冨洿锛歿}-{}", i + 1, fromIndex, toIndex);
+
+ // 寮傛澶勭悊姣忔壒鏁版嵁
+ processAsyncBatch(batchItems);
+ }
+
+ log.info("銆恜rocessMesInvItemArnStatusAsync銆戝叏閮ㄦ暟鎹鐞嗘彁浜ゅ畬鎴�");
+ }
+
+ /**
+ * 寮傛澶勭悊涓�鎵筂esInvItemArn鏁版嵁
+ *
+ * @param batchItems 褰撳墠鎵规鐨勬暟鎹�
+ */
+ @Async("taskExecutor")
+ public void processAsyncBatch(List<MesInvItemArn> batchItems) {
+ log.info("銆恜rocessAsyncBatch銆戝紓姝ュ鐞唟}鏉℃暟鎹紑濮�", batchItems.size());
+ processBatch(batchItems);
+ log.info("銆恜rocessAsyncBatch銆戝紓姝ュ鐞唟}鏉℃暟鎹畬鎴�", batchItems.size());
+ }
+
+ /**
+ * 鎵归噺澶勭悊MesInvItemArn鏁版嵁
+ *
+ * @param batchItems 褰撳墠鎵规鐨勬暟鎹�
+ */
+ private void processBatch(List<MesInvItemArn> batchItems) {
// 閬嶅巻姣忎釜 itemArn
- itemArnMinus.forEach(itemArn -> {
+ batchItems.forEach(itemArn -> {
try {
// 澶勭悊姣忎釜 itemArn
- processMesInvItemArnStatus("1000", "1000", "PL017", itemArn.getId());
+ Integer result = processMesInvItemArnStatus("1000", "1000", "PL017", itemArn.getId());
+ log.info("銆恜rocessBatch銆戝鐞唅temArn: {}, 缁撴灉: {}", itemArn.getId(), result);
} catch (Exception e) {
- // 澶勭悊寮傚父锛屼緥濡傝褰曟棩蹇�
- System.err.println("Error processing itemArn: " + itemArn.getId());
- e.printStackTrace();
+ // 澶勭悊寮傚父锛岃褰曡缁嗘棩蹇�
+ log.error("銆恜rocessBatch銆戝鐞唅temArn: {} 寮傚父: {}", itemArn.getId(), e.getMessage(), e);
}
});
}
--
Gitblit v1.9.3