From b47369fbc73269f0661ba169c6387e04fb037e87 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期一, 16 三月 2026 14:26:23 +0800
Subject: [PATCH] 发货通知单打印日志

---
 src/main/java/com/zy/asrs/controller/SaleOrderController.java |   70 ++++++++++++++++++++++++++---------
 1 files changed, 52 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/SaleOrderController.java b/src/main/java/com/zy/asrs/controller/SaleOrderController.java
index 8c634d6..a0e80fc 100644
--- a/src/main/java/com/zy/asrs/controller/SaleOrderController.java
+++ b/src/main/java/com/zy/asrs/controller/SaleOrderController.java
@@ -18,7 +18,10 @@
 import com.zy.common.web.BaseController;
 
 import org.apache.poi.xssf.usermodel.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DeadlockLoserDataAccessException;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -32,6 +35,8 @@
 
 @RestController
 public class SaleOrderController extends BaseController {
+
+    private static final Logger logger = LoggerFactory.getLogger(SaleOrderController.class);
 
     @Autowired
     private SaleOrderService saleOrderService;
@@ -357,31 +362,60 @@
         return Math.abs(d1 - d2) < 0.0001;
     }
 
+    /** 姝婚攣閲嶈瘯娆℃暟 */
+    private static final int CUST_WAIT_PAKIN_DEADLOCK_RETRIES = 2;
+    /** 姝婚攣閲嶈瘯闂撮殧锛堟绉掞級 */
+    private static final int CUST_WAIT_PAKIN_RETRY_DELAY_MS = 80;
+
     /**
      * 閿�鍞鍗曟暟閲忔洿鏂板悗锛岄『甯︽洿鏂� cust_wait_pakin 鐨� anfme/nqty锛坢obile/bill/query 鐨� count 鍙栬嚜 anfme锛夈��
      * 浠呮寜 matnr+mnemonic 鏇存柊锛屼笉鎻掑叆锛涙棤鍖归厤鎴栧紓甯镐笉褰卞搷涓绘祦绋嬨��
+     * 鍙戠敓姝婚攣鏃惰嚜鍔ㄩ噸璇曪紝鍑忓皯骞跺彂鏇存柊瀵艰嚧鐨勬閿佺壓鐗层��
      */
     private void updateWaitPakinQuantity(Map<String, Object> data) {
-        try {
-            String invCode = data.get("invCode") != null ? String.valueOf(data.get("invCode")).trim() : null;
-            String orderCode = data.get("orderCode") != null ? String.valueOf(data.get("orderCode")).trim() : null;
-            if (Cools.isEmpty(invCode) || Cools.isEmpty(orderCode)) {
+        String invCode = data.get("invCode") != null ? String.valueOf(data.get("invCode")).trim() : null;
+        String orderCode = data.get("orderCode") != null ? String.valueOf(data.get("orderCode")).trim() : null;
+        if (Cools.isEmpty(invCode) || Cools.isEmpty(orderCode)) {
+            logger.debug("cust_wait_pakin 璺宠繃鏇存柊锛氳鍗曞彿鎴栫墿鏂欑紪鐮佷负绌猴紝orderCode={}锛宨nvCode={}", orderCode, invCode);
+            return;
+        }
+        Double productQty = parseDoubleSafely(data.get("productQty"));
+        if (productQty == null) {
+            productQty = parseDoubleSafely(data.get("orderQty"));
+        }
+        logger.info("cust_wait_pakin 寮�濮嬫洿鏂帮細璁㈠崟鍙�={}锛岀墿鏂欑紪鐮�={}锛屾暟閲�={}", orderCode, invCode, productQty);
+        String invName = data.get("invName") != null ? String.valueOf(data.get("invName")) : null;
+        WaitPakin updateEntity = new WaitPakin();
+        updateEntity.setMaktx(invName);
+        updateEntity.setAnfme(productQty);
+        updateEntity.setNqty(productQty);
+        updateEntity.setModiTime(new Date());
+        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>().eq("matnr", invCode).eq("mnemonic", orderCode);
+
+        for (int attempt = 0; attempt <= CUST_WAIT_PAKIN_DEADLOCK_RETRIES; attempt++) {
+            try {
+                boolean updated = waitPakinService.update(updateEntity, wrapper);
+                if (updated) {
+                    logger.info("cust_wait_pakin 鏇存柊鎴愬姛锛氳鍗曞彿={}锛岀墿鏂欑紪鐮�={}锛屾暟閲�={}", orderCode, invCode, productQty);
+                } else {
+                    logger.warn("cust_wait_pakin 鏇存柊鏈奖鍝嶈锛堝彲鑳芥棤鍖归厤璁板綍锛夛細璁㈠崟鍙�={}锛岀墿鏂欑紪鐮�={}", orderCode, invCode);
+                }
+                return;
+            } catch (Exception e) {
+                if (e instanceof DeadlockLoserDataAccessException || (e.getCause() != null && e.getCause().getClass().getSimpleName().contains("Deadlock"))) {
+                    if (attempt < CUST_WAIT_PAKIN_DEADLOCK_RETRIES) {
+                        try {
+                            Thread.sleep(CUST_WAIT_PAKIN_RETRY_DELAY_MS);
+                        } catch (InterruptedException ie) {
+                            Thread.currentThread().interrupt();
+                        }
+                        logger.warn("cust_wait_pakin 鏇存柊姝婚攣锛岀{}娆¢噸璇曪細璁㈠崟鍙�={}锛岀墿鏂欑紪鐮�={}", attempt + 1, orderCode, invCode);
+                        continue;
+                    }
+                }
+                logger.error("cust_wait_pakin 鏇存柊寮傚父锛歰rderCode={}锛宨nvCode={}锛宔rror={}", data.get("orderCode"), data.get("invCode"), e.getMessage(), e);
                 return;
             }
-            Double productQty = parseDoubleSafely(data.get("productQty"));
-            if (productQty == null) {
-                productQty = parseDoubleSafely(data.get("orderQty"));
-            }
-            String invName = data.get("invName") != null ? String.valueOf(data.get("invName")) : null;
-            WaitPakin updateEntity = new WaitPakin();
-            updateEntity.setMaktx(invName);
-            updateEntity.setAnfme(productQty);
-            updateEntity.setNqty(productQty);
-            updateEntity.setModiTime(new Date());
-            Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>().eq("matnr", invCode).eq("mnemonic", orderCode);
-            waitPakinService.update(updateEntity, wrapper);
-        } catch (Exception e) {
-            // 涓嶆姏寮傚父锛岄伩鍏嶅奖鍝嶉攢鍞鍗曚繚瀛�
         }
     }
 

--
Gitblit v1.9.1