From f08dd93e49e8461f362c8f45f17fe10e0fbdebec Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期一, 12 一月 2026 18:54:58 +0800
Subject: [PATCH] #新增和得码入库流程,渝程进仓后续下发货主转换

---
 src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java |  194 ++++++++++++++++++++++++++++--------------------
 1 files changed, 112 insertions(+), 82 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java b/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java
index 84226e9..8712902 100644
--- a/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.task.kingdee.handler;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
@@ -44,105 +45,134 @@
 
     @Transactional(rollbackFor = Exception.class)
     public ReturnT<String> start(OrderPakin order) {
-        // 鑾峰彇璇ヨ鍗曚笅鐨勬墍鏈夋槑缁�
-        List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(
-                new EntityWrapper<OrderDetlPakin>().eq("order_no", order.getOrderNo()));
+        JSONObject logData = new JSONObject();
+        String responseMsg = "";
+        boolean success = false;
 
-        // 閬嶅巻姣忎釜璁㈠崟鏄庣粏杩涜搴撳瓨杞崲
-        for (OrderDetlPakin orderDetlPakin : orderDetlPakins) {
-            double orderQuantity = orderDetlPakin.getAnfme(); // 鏈槑缁嗛渶瑕佽浆鎹㈢殑鏁伴噺
-            double remainingQuantity = orderQuantity;        // 鍓╀綑鏈弧瓒崇殑鏁伴噺
-            double convertedQuantity = 0.0;                  // 宸叉垚鍔熻浆鎹㈢殑鏁伴噺
+        try {
+            logData.put("orderNo", order.getOrderNo());
+            logData.put("docType", order.getDocType());
+            logData.put("settle", order.getSettle());
+            logData.put("startTime", System.currentTimeMillis());
 
-            log.info("寮�濮嬪鐞嗚鍗曟槑缁�: 璁㈠崟鍙� = {}, 鐗╂枡鍙� = {}, 闇�瑕佽浆鎹㈡暟閲� = {}",
-                    order.getOrderNo(), orderDetlPakin.getMatnr(), orderQuantity);
+            // 鑾峰彇璇ヨ鍗曚笅鐨勬墍鏈夋槑缁�
+            List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(
+                    new EntityWrapper<OrderDetlPakin>().eq("order_no", order.getOrderNo()));
 
-            // 鏌ヨ绗﹀悎鏉′欢鐨勫彲鐢ㄥ簱瀛橈細鍚屼竴鐗╂枡 + box_type3 浠� HDU25 寮�澶�
-            List<LocDetl> locDetls = locDetlService.selectList(
-                    new EntityWrapper<LocDetl>()
-                            .eq("matnr", orderDetlPakin.getMatnr())
-                            .like("box_type3", "HDU25%")
-                            .orderBy("anfme") // 鍙牴鎹笟鍔¤皟鏁存帓搴忥紙濡傚厛杩涘厛鍑猴級
-            );
-
-            if (locDetls.isEmpty()) {
-                log.error("鏃犵鍚堟潯浠剁殑搴撳瓨: 璁㈠崟 {} 鐗╂枡 {}", order.getOrderNo(), orderDetlPakin.getMatnr());
-                throw new IllegalArgumentException("鏃犵鍚堟潯浠剁殑搴撳瓨婊¤冻璁㈠崟 " + order.getOrderNo() +
-                        " 鐨勭墿鏂� " + orderDetlPakin.getMatnr());
+            if (orderDetlPakins.isEmpty()) {
+                throw new IllegalArgumentException("璁㈠崟 " + order.getOrderNo() + " 鏃犱换浣曟槑缁嗭紝鏃犳硶杞崲");
             }
 
-            // 閫愭潯娑堣�楀簱瀛�
-            for (LocDetl locDetl : locDetls) {
-                if (remainingQuantity <= 0) {
-                    break; // 宸插畬鍏ㄦ弧瓒抽渶姹�
+            // 閬嶅巻姣忎釜璁㈠崟鏄庣粏杩涜搴撳瓨杞崲锛堝師閫昏緫淇濇寔涓嶅彉锛�
+            for (OrderDetlPakin orderDetlPakin : orderDetlPakins) {
+                double orderQuantity = orderDetlPakin.getAnfme();
+                double remainingQuantity = orderQuantity;
+                double convertedQuantity = 0.0;
+
+                log.info("寮�濮嬪鐞嗚鍗曟槑缁�: 璁㈠崟鍙�={}, 鐗╂枡鍙�={}, 闇�瑕佽浆鎹㈡暟閲�={}",
+                        order.getOrderNo(), orderDetlPakin.getMatnr(), orderQuantity);
+
+                List<LocDetl> locDetls = locDetlService.selectList(
+                        new EntityWrapper<LocDetl>()
+                                .eq("matnr", orderDetlPakin.getMatnr())
+                                .like("box_type3", "HDU%")
+                                .orderBy("anfme")
+                );
+
+                if (locDetls.isEmpty()) {
+                    throw new IllegalArgumentException("鏃犵鍚堟潯浠剁殑搴撳瓨: 璁㈠崟 " + order.getOrderNo() +
+                            " 鐗╂枡 " + orderDetlPakin.getMatnr());
                 }
 
-                double stockQty = locDetl.getAnfme();
-                if (stockQty <= 0) {
-                    continue; // 璺宠繃绌哄簱瀛�
+                for (LocDetl locDetl : locDetls) {
+                    if (remainingQuantity <= 0) break;
+                    double stockQty = locDetl.getAnfme();
+                    if (stockQty <= 0) continue;
+
+                    double consumeQty = Math.min(stockQty, remainingQuantity);
+
+                    // 鍒涘缓鍒嗛厤璁板綍...
+                    LocDetl allocated = new LocDetl();
+                    BeanUtils.copyProperties(locDetl, allocated);
+                    allocated.setAnfme(consumeQty);
+                    allocated.setStandby1(orderDetlPakin.getStandby1());
+                    allocated.setStandby2(orderDetlPakin.getStandby2());
+                    allocated.setStandby3(orderDetlPakin.getStandby3());
+                    allocated.setBoxType1(orderDetlPakin.getBoxType1());
+                    allocated.setBoxType2(orderDetlPakin.getBoxType2());
+                    allocated.setBoxType3(orderDetlPakin.getBoxType3());
+                    allocated.setOrderNo(orderDetlPakin.getOrderNo());
+
+                    locDetlService.insert(allocated);
+
+                    // 鎵e噺鍘熷簱瀛�...
+                    double remainingStock = stockQty - consumeQty;
+                    if (remainingStock <= 0) {
+                        locDetlService.delete(new EntityWrapper<LocDetl>()
+                                .eq("loc_no", locDetl.getLocNo())
+                                .eq("matnr", locDetl.getMatnr())
+                                .eq("box_type3", locDetl.getBoxType3()));
+                    } else {
+                        locDetl.setAnfme(remainingStock);
+                        locDetlService.update(locDetl, new EntityWrapper<LocDetl>()
+                                .eq("loc_no", locDetl.getLocNo())
+                                .eq("matnr", locDetl.getMatnr())
+                                .eq("box_type3", locDetl.getBoxType3()));
+                    }
+
+                    convertedQuantity += consumeQty;
+                    remainingQuantity -= consumeQty;
                 }
 
-                // 鏈瀹為檯娑堣�楃殑鏁伴噺
-                double consumeQty = Math.min(stockQty, remainingQuantity);
-
-                // 鍒涘缓涓�鏉℃柊鐨勨�滃凡鍒嗛厤缁欒鍗曗�濈殑搴撳瓨璁板綍锛堝畬鏁村鍒跺師璁板綍锛�
-                LocDetl allocated = new LocDetl();
-                BeanUtils.copyProperties(locDetl, allocated);
-
-                // 璁剧疆鍒嗛厤鏁伴噺 + 瑕嗙洊鎸囧畾瀛楁
-                allocated.setAnfme(consumeQty);
-                allocated.setStandby1(orderDetlPakin.getStandby1());
-                allocated.setStandby2(orderDetlPakin.getStandby2());
-                allocated.setStandby3(orderDetlPakin.getStandby3());
-                allocated.setBoxType1(orderDetlPakin.getBoxType1());
-                allocated.setBoxType2(orderDetlPakin.getBoxType2());
-                allocated.setBoxType3(orderDetlPakin.getBoxType3());
-                allocated.setOrderNo(orderDetlPakin.getOrderNo());
-
-                // 鎻掑叆宸插垎閰嶈褰�
-                locDetlService.insert(allocated);
-                log.info("宸插垎閰嶅簱瀛樿褰�: 浣嶇疆={}, 鏁伴噺={}, 鍓╀綑闇�姹�={}",
-                        locDetl.getLocNo(), consumeQty, remainingQuantity - consumeQty);
-
-                // 澶勭悊鍘熷簱瀛樿褰曪細鎵e噺鍚庢暟閲忎负0鍒欏垹闄わ紝鍚﹀垯鏇存柊鍓╀綑鏁伴噺
-                double remainingStock = stockQty - consumeQty;
-                if (remainingStock <= 0) {
-                    // 鏁伴噺姝eソ鑰楀敖鎴栧凡涓�0锛岀洿鎺ュ垹闄ゅ師璁板綍
-                    locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no",locDetl.getLocNo()).eq("matnr",locDetl.getMatnr()).eq("box_type3",locDetl.getBoxType3()));
-                    log.info("鍘熷簱瀛樺凡鑰楀敖锛屽垹闄よ褰�: 浣嶇疆={}, 鍘熸暟閲�={}", locDetl.getLocNo(), stockQty);
-                } else {
-                    // 浠嶆湁鍓╀綑锛屾洿鏂版暟閲�
-                    locDetl.setAnfme(remainingStock);
-                    locDetlService.update(locDetl,new EntityWrapper<LocDetl>().eq("loc_no",locDetl.getLocNo()).eq("matnr",locDetl.getMatnr()).eq("box_type3",locDetl.getBoxType3()));
-                    log.info("鍘熷簱瀛橀儴鍒嗘秷鑰楋紝鏇存柊鍓╀綑鏁伴噺: 浣嶇疆={}, 鍓╀綑={}", locDetl.getLocNo(), remainingStock);
+                if (remainingQuantity > 0) {
+                    throw new IllegalArgumentException("搴撳瓨涓嶈冻: 璁㈠崟 " + order.getOrderNo() +
+                            " 鐗╂枡 " + orderDetlPakin.getMatnr() + " 缂哄皯 " + remainingQuantity);
                 }
 
-                // 鏇存柊缁熻閲�
-                convertedQuantity += consumeQty;
-                remainingQuantity -= consumeQty;
+                orderDetlPakin.setQty(convertedQuantity);
+                orderDetlPakinService.updateById(orderDetlPakin);
             }
 
-            // 妫�鏌ユ槸鍚﹀畬鍏ㄦ弧瓒宠鏄庣粏鐨勯渶姹�
-            if (remainingQuantity > 0) {
-                log.error("搴撳瓨涓嶈冻: 璁㈠崟 {} 鐗╂枡 {} 闇�姹� {}锛屼粎杞崲 {}锛岀己灏� {}",
-                        order.getOrderNo(), orderDetlPakin.getMatnr(), orderQuantity, convertedQuantity, remainingQuantity);
-                throw new IllegalArgumentException("搴撳瓨涓嶈冻浠ユ弧瓒宠鍗� " + order.getOrderNo() +
-                        " 鐨勭墿鏂� " + orderDetlPakin.getMatnr() + " 闇�姹傦紝缂哄皯 " + remainingQuantity);
-            }
+            // 鍏ㄩ儴鎴愬姛
+            order.setSettle(67L);
+            orderPakinServiceImpl.updateById(order);
 
-            // 鏇存柊璁㈠崟鏄庣粏宸茶浆鎹㈡暟閲�
-            orderDetlPakin.setQty(convertedQuantity);
-            orderDetlPakinService.updateById(orderDetlPakin);
+            success = true;
+            responseMsg = "搴撳瓨杞崲鎴愬姛锛岃鍗曞彿: " + order.getOrderNo() + "锛屽凡璁剧疆 settle=67";
+            log.info(responseMsg);
 
-            log.info("璁㈠崟鏄庣粏杞崲瀹屾垚: 璁㈠崟鍙� = {}, 鐗╂枡鍙� = {}, 杞崲鏁伴噺 = {}",
-                    order.getOrderNo(), orderDetlPakin.getMatnr(), convertedQuantity);
+        } catch (Exception e) {
+            success = false;
+            responseMsg = "搴撳瓨杞崲澶辫触: " + e.getMessage();
+            log.error("鑷姩杞崲澶辫触锛岃鍗曞彿: {}, 鍘熷洜: {}", order.getOrderNo(), e.getMessage(), e);
+
+            throw e;  // 璁� @Transactional 鍥炴粴
+        } finally {
+            // 鏃犺鎴愬姛澶辫触锛岄兘璁板綍鏃ュ織
+            logData.put("endTime", System.currentTimeMillis());
+            logData.put("durationMs", logData.getLongValue("endTime") - logData.getLongValue("startTime"));
+            logData.put("success", success);
+            logData.put("message", responseMsg);
+
+            saveApiLog(logData, responseMsg, success);
         }
 
-        // 鎵�鏈夋槑缁嗗潎澶勭悊瀹屾垚锛岃缃鍗� settle = 67
-        order.setSettle(67L);
-        orderPakinServiceImpl.updateById(order);
-        log.info("璁㈠崟鍏ㄩ儴鏄庣粏杞崲瀹屾垚锛岃缃� settle = 67锛岃鍗曞彿 = {}", order.getOrderNo());
+        return success ? SUCCESS : FAIL;
+    }
 
-        return SUCCESS;
+    private void saveApiLog(JSONObject add, String response, boolean success) {
+        try {
+            apiLogService.save(
+                    "璐т富杞崲",
+                    "AutoTransferHandler",
+                    null,
+                    "127.0.0.1",
+                    add.toJSONString(),
+                    response,
+                    success
+            );
+        } catch (Exception e) {
+            log.error("鎺ュ彛鏃ュ織淇濆瓨澶辫触", e);
+        }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.1