From 480d4f9f5c31d8169d449241b1efea9936eb238f Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期三, 08 四月 2026 09:13:33 +0800
Subject: [PATCH] #

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderPressureSchedules.java |   80 ++++++++++++++++++++++-----------------
 1 files changed, 45 insertions(+), 35 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderPressureSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderPressureSchedules.java
index 8c187c6..2262b15 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderPressureSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderPressureSchedules.java
@@ -23,6 +23,7 @@
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
  * ASN 鍗曟嵁鍘嬫祴鏁版嵁瀹氭椂鐢熸垚鍣ㄣ��
@@ -37,6 +38,7 @@
     private static final Integer TENANT_ID = 1;
     private static final Long USER_ID = 51L;
     private static final String MEMO = "ASN_PRESSURE_TEST";
+    private final AtomicBoolean running = new AtomicBoolean(false);
 
     @Autowired
     private AsnOrderService asnOrderService;
@@ -59,48 +61,56 @@
 
     @Scheduled(cron = "${pressure.asn-order.cron:0/10 * * * * ?}")
     @Transactional(rollbackFor = Exception.class)
-    public synchronized void insertPressureOrders() {
+    public void insertPressureOrders() {
         if (!enabled) {
             return;
         }
-        if (orderCountPerRun <= 0 || itemCountPerOrder <= 0 || itemQty <= 0) {
-            log.warn("ASN鍘嬫祴浠诲姟閰嶇疆鏃犳晥锛岃烦杩囨墽琛�: orderCountPerRun={}, itemCountPerOrder={}, itemQty={}",
-                    orderCountPerRun, itemCountPerOrder, itemQty);
+        if (!running.compareAndSet(false, true)) {
+            log.warn("ASN鍘嬫祴浠诲姟浠嶅湪鎵ц涓紝鏈疆璺宠繃");
             return;
         }
-
-        List<Matnr> matnrs = loadMatnrs();
-        if (matnrs.isEmpty()) {
-            log.warn("ASN鍘嬫祴浠诲姟鏈幏鍙栧埌鍙敤鐗╂枡锛岃烦杩囨墽琛�");
-            return;
-        }
-        Collections.shuffle(matnrs);
-
-        Date now = new Date();
-        LocalDateTime nowTime = LocalDateTime.now();
-        double totalQty = itemCountPerOrder * itemQty;
-
-        List<WkOrder> orders = new ArrayList<>(orderCountPerRun);
-        for (int i = 0; i < orderCountPerRun; i++) {
-            orders.add(buildOrder(now, nowTime, totalQty, i));
-        }
-        if (!asnOrderService.saveBatch(orders, 200)) {
-            throw new CoolException("ASN鍘嬫祴涓诲崟鎻掑叆澶辫触");
-        }
-
-        List<WkOrderItem> items = new ArrayList<>(orderCountPerRun * itemCountPerOrder);
-        for (int orderIndex = 0; orderIndex < orders.size(); orderIndex++) {
-            WkOrder order = orders.get(orderIndex);
-            for (int itemIndex = 0; itemIndex < itemCountPerOrder; itemIndex++) {
-                Matnr matnr = matnrs.get((orderIndex * itemCountPerOrder + itemIndex) % matnrs.size());
-                items.add(buildOrderItem(order, matnr, now, orderIndex, itemIndex));
+        try {
+            if (orderCountPerRun <= 0 || itemCountPerOrder <= 0 || itemQty <= 0) {
+                log.warn("ASN鍘嬫祴浠诲姟閰嶇疆鏃犳晥锛岃烦杩囨墽琛�: orderCountPerRun={}, itemCountPerOrder={}, itemQty={}",
+                        orderCountPerRun, itemCountPerOrder, itemQty);
+                return;
             }
-        }
-        if (!asnOrderItemService.saveBatch(items, 500)) {
-            throw new CoolException("ASN鍘嬫祴鏄庣粏鎻掑叆澶辫触");
-        }
 
-        log.info("ASN鍘嬫祴浠诲姟鎵ц瀹屾垚锛屾湰娆℃彃鍏ヤ富鍗� {} 鏉★紝鏄庣粏 {} 鏉�", orders.size(), items.size());
+            List<Matnr> matnrs = loadMatnrs();
+            if (matnrs.isEmpty()) {
+                log.warn("ASN鍘嬫祴浠诲姟鏈幏鍙栧埌鍙敤鐗╂枡锛岃烦杩囨墽琛�");
+                return;
+            }
+            Collections.shuffle(matnrs);
+
+            Date now = new Date();
+            LocalDateTime nowTime = LocalDateTime.now();
+            double totalQty = itemCountPerOrder * itemQty;
+
+            List<WkOrder> orders = new ArrayList<>(orderCountPerRun);
+            for (int i = 0; i < orderCountPerRun; i++) {
+                orders.add(buildOrder(now, nowTime, totalQty, i));
+            }
+            if (!asnOrderService.saveBatch(orders, 200)) {
+                throw new CoolException("ASN鍘嬫祴涓诲崟鎻掑叆澶辫触");
+            }
+
+            List<WkOrderItem> items = new ArrayList<>(orderCountPerRun * itemCountPerOrder);
+            for (int orderIndex = 0; orderIndex < orders.size(); orderIndex++) {
+                WkOrder order = orders.get(orderIndex);
+                for (int itemIndex = 0; itemIndex < itemCountPerOrder; itemIndex++) {
+                    Matnr matnr = matnrs.get((orderIndex * itemCountPerOrder + itemIndex) % matnrs.size());
+                    items.add(buildOrderItem(order, matnr, now, orderIndex, itemIndex));
+                }
+            }
+            if (!asnOrderItemService.saveBatch(items, 500)) {
+                throw new CoolException("ASN鍘嬫祴鏄庣粏鎻掑叆澶辫触");
+            }
+
+            log.info("ASN鍘嬫祴浠诲姟鎵ц瀹屾垚锛屾湰娆℃彃鍏ヤ富鍗� {} 鏉★紝鏄庣粏 {} 鏉�", orders.size(), items.size());
+        } finally {
+            running.set(false);
+        }
     }
 
     private List<Matnr> loadMatnrs() {

--
Gitblit v1.9.1