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 |   68 ++++++++++++++++++++++++++++++++++
 1 files changed, 68 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/SaleOrderController.java b/src/main/java/com/zy/asrs/controller/SaleOrderController.java
index 1c96798..a0e80fc 100644
--- a/src/main/java/com/zy/asrs/controller/SaleOrderController.java
+++ b/src/main/java/com/zy/asrs/controller/SaleOrderController.java
@@ -7,7 +7,9 @@
 import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.DateUtils;
 import com.zy.asrs.entity.SaleOrder;
+import com.zy.asrs.entity.WaitPakin;
 import com.zy.asrs.service.SaleOrderService;
+import com.zy.asrs.service.WaitPakinService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
@@ -16,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;
 
@@ -31,8 +36,12 @@
 @RestController
 public class SaleOrderController extends BaseController {
 
+    private static final Logger logger = LoggerFactory.getLogger(SaleOrderController.class);
+
     @Autowired
     private SaleOrderService saleOrderService;
+    @Autowired
+    private WaitPakinService waitPakinService;
 
     @RequestMapping(value = "/saleOrder/{id}/auth")
     @ManagerAuth
@@ -314,6 +323,8 @@
                 // 淇濆瓨鎴栨洿鏂�
                 if (isUpdate) {
                     saleOrderService.updateById(saleOrder);
+                    // 閿�鍞鍗曟洿鏂板悗锛岄『甯︽洿鏂� xtyasrs 搴� cust_wait_pakin 鐨勬暟閲忥紙mobile/bill/query 鐨� count 鍙栬嚜 anfme锛夛紝浠呮洿鏂般�佷笉鎻掑叆锛屽け璐ヤ笉褰卞搷涓绘祦绋�
+                    updateWaitPakinQuantity(data);
                 } else {
                     saleOrderService.insert(saleOrder);
                 }
@@ -351,6 +362,63 @@
         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) {
+        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;
+            }
+        }
+    }
+
     @RequestMapping(value = "/saleOrder/update/auth")
     @ManagerAuth
     public R update(SaleOrder saleOrder) {

--
Gitblit v1.9.1