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/webapp/views/orderPakin/order.html                                |    9 
 src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java    |  194 +++++++++++--------
 src/main/java/com/zy/asrs/controller/OrderPakinController.java             |   18 +
 src/main/java/com/zy/asrs/entity/OrderDetl.java                            |   53 +++++
 src/main/resources/mapper/OrderPakinMapper.xml                             |    8 
 src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java          |    5 
 src/main/java/com/zy/asrs/entity/Order.java                                |   40 ++++
 src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java          |    4 
 src/main/java/com/zy/asrs/service/OrderPakinService.java                   |    1 
 src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferOutHandler.java |  146 ++++++++++++++
 src/main/java/com/zy/asrs/mapper/OrderPakinMapper.java                     |    1 
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java              |    2 
 src/main/webapp/static/js/orderPakin/order.js                              |   40 ++++
 src/main/java/com/zy/asrs/task/kingdee/AutoTransferScheduler.java          |   20 +
 src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java    |    2 
 15 files changed, 453 insertions(+), 90 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OrderPakinController.java b/src/main/java/com/zy/asrs/controller/OrderPakinController.java
index 277a5c0..e3222c9 100644
--- a/src/main/java/com/zy/asrs/controller/OrderPakinController.java
+++ b/src/main/java/com/zy/asrs/controller/OrderPakinController.java
@@ -44,6 +44,8 @@
     private WrkMastLogService wrkMastLogService;
     @Autowired
     private LocOwnerService locOwnerService;
+    @Autowired
+    private OrderDetlPakinService orderDetlPakinService;
 
     @RequestMapping(value = "/order/nav/list/auth")
     @ManagerAuth
@@ -389,7 +391,21 @@
                 throw new CoolException("瀛樺湪浣滀笟涓暟鎹紝涓嶈兘瀹岀粨銆傝妫�鏌ュ叆搴撻�氱煡妗e拰宸ヤ綔妗�");
             }
         }
-
+        if(order.getSettle() == 66){
+            List<OrderDetlPakin> lists = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>().eq("order_no",order.getOrderNo()));
+            for (OrderDetlPakin orderDetlPakin : lists) {
+                String boxType3 = orderDetlPakin.getBoxType3();
+                if (boxType3 == null || !boxType3.contains("HDU")) {
+                    throw new CoolException(
+                            String.format("璁㈠崟 %s 鐨勬槑缁嗕腑涓嶅瓨鍦ㄥ寘鍚獺DU鐨勭墿鏂欐槑缁�: %s (鐗╂枡: %s)",
+                                    order.getOrderNo(),
+                                    boxType3,
+                                    orderDetlPakin.getMatnr() != null ? orderDetlPakin.getMatnr() : "鏈煡鐗╂枡"
+                            )
+                    );
+                }
+            }
+        }
         order.setUpdateBy(getUserId());
         order.setUpdateTime(new Date());
         if (!orderService.updateById(order)) {
diff --git a/src/main/java/com/zy/asrs/entity/Order.java b/src/main/java/com/zy/asrs/entity/Order.java
index 08190ad..e971ecf 100644
--- a/src/main/java/com/zy/asrs/entity/Order.java
+++ b/src/main/java/com/zy/asrs/entity/Order.java
@@ -393,6 +393,46 @@
         this.pakinPakoutStatus = order.getPakinPakoutStatus();
     }
 
+
+    public Order(OrderPakin order) {
+        this.uuid = order.getUuid();
+        this.orderNo = order.getOrderNo();
+        this.orderTime = order.getOrderTime();
+        this.docType = order.getDocType();
+        this.itemId = order.getItemId();
+        this.itemName = order.getItemName();
+        this.allotItemId = order.getAllotItemId();
+        this.defNumber = order.getDefNumber();
+        this.number = order.getNumber();
+        this.cstmr = order.getCstmr();
+        this.cstmrName = order.getCstmrName();
+        this.tel = order.getTel();
+        this.operMemb = order.getOperMemb();
+        this.totalFee = order.getTotalFee();
+        this.discount = order.getDiscount();
+        this.discountFee = order.getDiscountFee();
+        this.otherFee = order.getOtherFee();
+        this.actFee = order.getActFee();
+        this.payType = order.getPayType();
+        this.salesman = order.getSalesman();
+        this.accountDay = order.getAccountDay();
+        this.postFeeType = order.getPostFeeType();
+        this.postFee = order.getPostFee();
+        this.payTime = order.getPayTime();
+        this.sendTime = order.getSendTime();
+        this.shipName = order.getShipName();
+        this.shipCode = order.getShipCode();
+        this.settle = order.getSettle();
+        this.status = order.getStatus();
+        this.createBy = order.getCreateBy();
+        this.createTime = order.getCreateTime();
+        this.updateBy = order.getUpdateBy();
+        this.updateTime = order.getUpdateTime();
+        this.memo = order.getMemo();
+        this.moveStatus = order.getMoveStatus();
+        this.pakinPakoutStatus = order.getPakinPakoutStatus();
+    }
+
 //    Order order = new Order(
 //            null,    // 缂栧彿[闈炵┖]
 //            null,    // 璁㈠崟缂栧彿
diff --git a/src/main/java/com/zy/asrs/entity/OrderDetl.java b/src/main/java/com/zy/asrs/entity/OrderDetl.java
index 4ae57c5..922bd30 100644
--- a/src/main/java/com/zy/asrs/entity/OrderDetl.java
+++ b/src/main/java/com/zy/asrs/entity/OrderDetl.java
@@ -477,6 +477,59 @@
         this.height = orderDetl.getHeight();
     }
 
+    public OrderDetl(OrderDetlPakin orderDetl) {
+        this.orderId = orderDetl.getOrderId();
+        this.orderNo = orderDetl.getOrderNo();
+        this.anfme = orderDetl.getAnfme();
+        this.qty = orderDetl.getQty();
+        this.matnr = orderDetl.getMatnr();
+        this.maktx = orderDetl.getMaktx();
+        this.batch = orderDetl.getBatch();
+        this.specs = orderDetl.getSpecs();
+        this.model = orderDetl.getModel();
+        this.color = orderDetl.getColor();
+        this.brand = orderDetl.getBrand();
+        this.unit = orderDetl.getUnit();
+        this.price = orderDetl.getPrice();
+        this.sku = orderDetl.getSku();
+        this.units = orderDetl.getUnits();
+        this.barcode = orderDetl.getBarcode();
+        this.origin = orderDetl.getOrigin();
+        this.manu = orderDetl.getManu();
+        this.manuDate = orderDetl.getManuDate();
+        this.itemNum = orderDetl.getItemNum();
+        this.safeQty = orderDetl.getSafeQty();
+        this.weight = orderDetl.getWeight();
+        this.manLength = orderDetl.getManLength();
+        this.volume = orderDetl.getVolume();
+        this.threeCode = orderDetl.getThreeCode();
+        this.supp = orderDetl.getSupp();
+        this.suppCode = orderDetl.getSuppCode();
+        this.beBatch = orderDetl.getBeBatch();
+        this.deadTime = orderDetl.getDeadTime();
+        this.deadWarn = orderDetl.getDeadWarn();
+        this.source = orderDetl.getSource();
+        this.inspect = orderDetl.getInspect();
+        this.danger = orderDetl.getDanger();
+        this.status = orderDetl.getStatus();
+        this.createBy = orderDetl.getCreateBy();
+        this.createTime = orderDetl.getCreateTime();
+        this.updateBy = orderDetl.getUpdateBy();
+        this.updateTime = orderDetl.getUpdateTime();
+        this.memo = orderDetl.getMemo();
+        this.pakinPakoutStatus = orderDetl.getPakinPakoutStatus();
+        this.lineNumber = orderDetl.getLineNumber();
+        this.standby1 = orderDetl.getStandby1();
+        this.standby2 = orderDetl.getStandby2();
+        this.standby3 = orderDetl.getStandby3();
+        this.boxType1 = orderDetl.getBoxType1();
+        this.boxType2 = orderDetl.getBoxType2();
+        this.boxType3 = orderDetl.getBoxType3();
+        this.erpAnfme = orderDetl.getErpAnfme();
+        this.width = orderDetl.getWidth();
+        this.height = orderDetl.getHeight();
+    }
+
 
     public String getOrderId$(){
         OrderService service = SpringUtils.getBean(OrderService.class);
diff --git a/src/main/java/com/zy/asrs/mapper/OrderPakinMapper.java b/src/main/java/com/zy/asrs/mapper/OrderPakinMapper.java
index 41a5af3..66ee546 100644
--- a/src/main/java/com/zy/asrs/mapper/OrderPakinMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/OrderPakinMapper.java
@@ -20,6 +20,7 @@
     List<OrderPakin> selectComplete9();
     List<OrderPakin> selectComplete10();
     List<OrderPakin> selectComplete66();
+    List<OrderPakin> selectComplete67();
 
     int addToLogTable(OrderPakin order);
 
diff --git a/src/main/java/com/zy/asrs/service/OrderPakinService.java b/src/main/java/com/zy/asrs/service/OrderPakinService.java
index 159763a..a5f1dea 100644
--- a/src/main/java/com/zy/asrs/service/OrderPakinService.java
+++ b/src/main/java/com/zy/asrs/service/OrderPakinService.java
@@ -30,6 +30,7 @@
     List<OrderPakin> selectComplete9();
     List<OrderPakin> selectComplete10();
     List<OrderPakin> selectComplete66();
+    List<OrderPakin> selectComplete67();
 
     boolean addToLogTable(OrderPakin order);
 
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 8121973..dfe6818 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -937,7 +937,7 @@
             List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
                     .eq("matnr", combMat.getMatnr()).eq("box_type3", combMat.getOrderNo())
                     .eq("standby1", combMat.getStandby1()).eq("standby2", combMat.getStandby2())
-                    .eq("standby3", combMat.getStandby3()).eq("box_type2","shyucheng.test"));
+                    .eq("standby3", combMat.getStandby3()));
             if (orderDetlPakins.size() > 0) {
                 orderNo = orderDetlPakins.get(0).getOrderNo();
                 combMat.setBoxType1(orderDetlPakins.get(0).getBoxType1());
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
index beb6b31..61b67a5 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
@@ -191,7 +191,10 @@
     public List<OrderPakin> selectComplete66() {
         return this.baseMapper.selectComplete66();
     }
-
+    @Override
+    public List<OrderPakin> selectComplete67() {
+        return this.baseMapper.selectComplete67();
+    }
 
     @Override
     public List<OrderPakin> selectComplete8() {
diff --git a/src/main/java/com/zy/asrs/task/kingdee/AutoTransferScheduler.java b/src/main/java/com/zy/asrs/task/kingdee/AutoTransferScheduler.java
index 966e9b0..31f92b6 100644
--- a/src/main/java/com/zy/asrs/task/kingdee/AutoTransferScheduler.java
+++ b/src/main/java/com/zy/asrs/task/kingdee/AutoTransferScheduler.java
@@ -8,6 +8,7 @@
 import com.zy.asrs.service.OrderService;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.task.kingdee.handler.AutoTransferHandler;
+import com.zy.asrs.task.kingdee.handler.AutoTransferOutHandler;
 import com.zy.asrs.task.kingdee.handler.SaveOrderSyncHandler;
 import com.zy.common.entity.Parameter;
 import lombok.extern.slf4j.Slf4j;
@@ -35,10 +36,11 @@
     private boolean ReviewOrderSwitch;
     @Autowired
     private AutoTransferHandler autoTransferHandler;
-
+    @Autowired
+    private AutoTransferOutHandler autoTransferOutHandler;
     @Scheduled(cron = "0/30 * * * * ? ")
     @Async("orderThreadPool")
-    public void completeAndReport(){
+    public void completeAndReport(){   //搴撳唴搴撳瓨杞崲锛屽嚭搴撳搴旂墿鏂欏強鏁伴噺锛屾洿鏂板簱瀛樻槑缁�
         List<OrderPakin> orders = orderPakinService.selectComplete66();
         if(orders.size() > 0){
             for (OrderPakin order : orders) {
@@ -50,4 +52,18 @@
         }
     }
 
+    @Scheduled(cron = "0/30 * * * * ? ")
+    @Async("orderThreadPool")
+    public void completeAndReportHD(){   ///鍜屽緱鍑哄簱娓濈▼涓婃姤
+        List<OrderPakin> orders = orderPakinService.selectComplete67();
+        if(orders.size() > 0){
+            for (OrderPakin order : orders) {
+                ReturnT<String> result = autoTransferOutHandler.start(order);//
+                if (!result.isSuccess()) {
+                    log.error("鍗曟嵁[orderNo={}]杞崲鍑哄簱涓婃姤澶辫触", order.getOrderNo());
+                }
+            }
+        }
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java b/src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
index 4f9befc..e404fa7 100644
--- a/src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
+++ b/src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
@@ -27,8 +27,8 @@
         inboundOrderHandler.syncMaterialData(); // 鍚屾鐗╂枡妗f
     }
 
-    @Scheduled(cron = "0 */6 * * * ?")
-//    @Scheduled(cron = "0/5 * * * * ?")
+    //    @Scheduled(cron = "0 */6 * * * ?")
+    @Scheduled(cron = "0/5 * * * * ?")
     void login(){
         if(!InboundOrderSwitch){
             return;
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
diff --git a/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferOutHandler.java b/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferOutHandler.java
new file mode 100644
index 0000000..bd74ddf
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferOutHandler.java
@@ -0,0 +1,146 @@
+package com.zy.asrs.task.kingdee.handler;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.toolkit.CollectionUtils;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.entity.OrderDetlPakin;
+import com.zy.asrs.entity.OrderPakin;
+import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.ErpSecretServiceImpl;
+import com.zy.asrs.service.impl.OrderDetlPakinServiceImpl;
+import com.zy.asrs.service.impl.OrderDetlServiceImpl;
+import com.zy.asrs.service.impl.OrderPakinServiceImpl;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Service
+public class AutoTransferOutHandler extends AbstractHandler<String> {
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private ApiLogService apiLogService;
+    @Autowired
+    private DocTypeService docTypeService;
+    @Autowired
+    private LoginAuthenticationHandler loginAuthenticationHandler;
+    @Autowired
+    private ErpSecretServiceImpl erpSecretService;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private MatService matService;
+    @Autowired
+    private OrderDetlPakinServiceImpl orderDetlPakinService;
+    @Autowired
+    private OrderDetlServiceImpl orderDetlService;
+    @Autowired
+    private OrderPakinServiceImpl orderPakinServiceImpl;
+    @Autowired
+    private OrderPakinServiceImpl orderPakinService;
+
+    @Transactional(rollbackFor = Exception.class)
+    public ReturnT<String> start(OrderPakin orderPakin) {
+        JSONObject logData = new JSONObject();
+        String responseMsg = "";
+        boolean apiSuccess = false;
+        Order orderNew = null;
+        try {
+            logData.put("orderNo", orderPakin.getOrderNo());
+            logData.put("operation", "鐢熸垚鍑哄簱鍗�");
+            logData.put("source", "鍏ュ簱鍗曡浆鍑哄簱鍗�");
+            logData.put("startTime", System.currentTimeMillis());
+
+            orderNew = new Order(orderPakin);
+            orderNew.setDocType(23L);
+            orderNew.setOrderNo(orderPakin.getOrderNo() + "ZHCK");
+            orderNew.setSettle(65L);
+
+            // 鎻掑叆鍑哄簱涓诲崟
+            orderService.insert(orderNew);
+
+            List<OrderDetlPakin> pakinDetails = orderDetlPakinService.selectList(
+                    new EntityWrapper<OrderDetlPakin>().eq("order_no", orderPakin.getOrderNo())
+            );
+
+            boolean hasInsertFailed = false;
+
+            if (CollectionUtils.isNotEmpty(pakinDetails)) {
+                for (OrderDetlPakin pd : pakinDetails) {
+                    OrderDetl od = new OrderDetl(pd);
+                    od.setOrderId(orderNew.getId());
+
+                    boolean insertSuccess = orderDetlService.insert(od);
+                    if (!insertSuccess) {
+                        hasInsertFailed = true;
+                        log.warn("鍑哄簱鏄庣粏鎻掑叆澶辫触锛氬嚭搴撳崟鍙�={}, 鐗╂枡={}",
+                                orderNew.getOrderNo(), pd.getMatnr());
+                    }
+                }
+            }
+
+            // 鏍规嵁鏄庣粏鎻掑叆缁撴灉鏇存柊鐘舵��
+            if (!hasInsertFailed) {
+                orderNew.setSettle(4L);           // 鍑哄簱鍗曟垚鍔熺姸鎬�
+                orderPakin.setSettle(4L);         // 鍘熷叆搴撳崟鏇存柊鐘舵�侊紙瑙嗕笟鍔℃槸鍚﹂渶瑕侊級
+                orderService.updateById(orderNew);
+                orderPakinService.updateById(orderPakin);  // 娉ㄦ剰锛氳繖閲岀敤浜� orderPakinService
+
+                apiSuccess = true;
+                responseMsg = String.format("鎴愬姛鐢熸垚鍑哄簱鍗曪細%s锛屽叡 %d 鏉℃槑缁�",
+                        orderNew.getOrderNo(), pakinDetails.size());
+                log.info(responseMsg);
+            } else {
+                responseMsg = "閮ㄥ垎鍑哄簱鏄庣粏鎻掑叆澶辫触锛岃鍗曞彿锛�" + orderNew.getOrderNo();
+                log.error(responseMsg);
+                throw new RuntimeException("閮ㄥ垎鏄庣粏鎻掑叆澶辫触锛岃Е鍙戜簨鍔″洖婊�");
+            }
+
+        } catch (Exception e) {
+            apiSuccess = false;
+            responseMsg = "鐢熸垚鍑哄簱鍗曞け璐ワ細" + e.getMessage();
+            log.error("鐢熸垚鍑哄簱鍗曞け璐ワ紝鍏ュ簱鍗曞彿锛歿}锛屽師鍥狅細{}", orderPakin.getOrderNo(), e.getMessage(), e);
+
+            // 濡傛灉浣犲笇鏈涘け璐ユ椂涓嶅洖婊氾紝鍙互娉ㄩ噴鎺変笅闈㈣繖琛�
+            throw e;  // 鈫� 淇濇寔浜嬪姟鍥炴粴锛堟帹鑽愶級
+
+        } finally {
+            // 鏃犺鎴愬姛澶辫触锛岄兘璁板綍鏃ュ織
+            logData.put("endTime", System.currentTimeMillis());
+            logData.put("durationMs", logData.getLongValue("endTime") - logData.getLongValue("startTime"));
+            logData.put("success", apiSuccess);
+            logData.put("message", responseMsg);
+            logData.put("outOrderNo", orderNew != null ? orderNew.getOrderNo() : "鏈敓鎴�");
+
+            saveApiLog(logData, responseMsg, apiSuccess);
+        }
+
+        return apiSuccess ? SUCCESS : FAIL;
+    }
+
+    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);
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java b/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
index 2ba70a1..1e89dee 100644
--- a/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -157,7 +157,7 @@
                 case "PUR_RECEIVEBIll": //宸插鏍告敹鏂欏崟鏌ヨ
                     jsonObject.put("start_biztime",  latestUpdateTime);//涓氬姟璧峰鏃ユ湡
                     jsonObject.put("end_biztime", sdf1.format(now));//涓氬姟缁撴潫鏃ユ湡
-                    jsonObject.put("billno", null);
+                    jsonObject.put("billno", "CGSL-260106-000001");
                     jsonObject.put("billstatus", Arrays.asList("C"));//鏁版嵁鐘舵�� [A:鏆傚瓨, B:宸叉彁浜�, C:宸插鏍竇
                     jsonObject.put("start_auditdate", latestUpdateTime);
                     jsonObject.put("end_auditdate", sdf1.format(now));
diff --git a/src/main/resources/mapper/OrderPakinMapper.xml b/src/main/resources/mapper/OrderPakinMapper.xml
index d860bca..6e9b299 100644
--- a/src/main/resources/mapper/OrderPakinMapper.xml
+++ b/src/main/resources/mapper/OrderPakinMapper.xml
@@ -87,6 +87,14 @@
           and status = 1
         order by create_time asc
     </select>
+    <select id="selectComplete67" resultMap="BaseResultMap">
+        select top 5 *
+        from man_order_pakin
+        where 1=1
+          and settle = 67
+          and status = 1
+        order by create_time asc
+    </select>
     <select id="selectComplete8" resultMap="BaseResultMap">
         select top 5 *
         from man_order_pakin
diff --git a/src/main/webapp/static/js/orderPakin/order.js b/src/main/webapp/static/js/orderPakin/order.js
index c655147..8109431 100644
--- a/src/main/webapp/static/js/orderPakin/order.js
+++ b/src/main/webapp/static/js/orderPakin/order.js
@@ -96,6 +96,8 @@
             showWrkTrace(data.id);
         } else if (layEvent === 'del') {
             doDel(data.id);
+        }else if(layEvent === 'transfer'){
+            doModifyTransfer(data.id, data.orderNo, 66);
         } else if (layEvent === 'complete') {
             doModify(data.id, data.orderNo, 4);
         } else if (layEvent === 'look') {
@@ -484,6 +486,44 @@
         });
     }
 
+    // 淇敼璁㈠崟鐘舵��
+    function doModifyTransfer(orderId, orderNo, settle) {
+        layer.confirm('纭畾瑕佽揣涓昏浆鎹㈠悧锛�', {
+            shade: .1,
+            skin: 'layui-layer-admin'
+        }, function (i) {
+            layer.close(i);
+            layer.load(2);
+            console.log(orderId);
+            console.log(settle);
+            $.ajax({
+                url: baseUrl+"/order/pakin/order/update/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {
+                    id: orderId,
+                    orderNo: orderNo,
+                    settle: settle
+                },
+                method: 'POST',
+                success: function (res) {
+                    layer.closeAll('loading');
+                    if (res.code === 200){
+                        if (insTbCount === 0) {
+                            insTb.reload({page: {curr: 1}});
+                        } else {
+                            $(".layui-laypage-btn")[0].click();
+                        }
+                        layer.msg(res.msg, {icon: 1});
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    }else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
     // 浠诲姟杩芥函
     function showWrkTrace(orderId) {
         let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
diff --git a/src/main/webapp/views/orderPakin/order.html b/src/main/webapp/views/orderPakin/order.html
index 4e32b77..41a4a65 100644
--- a/src/main/webapp/views/orderPakin/order.html
+++ b/src/main/webapp/views/orderPakin/order.html
@@ -103,6 +103,9 @@
     {{# if (d.settle == 0 || d.settle == 1 || d.settle == 2) { }}
     <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">瀹岀粨</a>
     {{# } }}
+    {{# if (d.settle == 0 || d.settle == 1 || d.settle == 2) { }}
+    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="transfer">杞崲</a>
+    {{# } }}
 </script>
 <!-- 琛ㄦ牸鎿嶄綔鍒� -->
 <script type="text/html" id="tbLook">
@@ -135,6 +138,12 @@
           class="layui-badge layui-badge-blue"
           {{# }else if(d.settle === 5){ }}
           class="layui-badge layui-badge-gray"
+          {{# }else if(d.settle === 66){ }}
+          class="layui-badge layui-badge-gray"
+          {{# }else if(d.settle === 67){ }}
+          class="layui-badge layui-badge-gray"
+          {{# }else if(d.settle === 65){ }}
+          class="layui-badge layui-badge-gray"
           {{# }else if(d.settle === 6){ }}
           class="layui-badge layui-badge-gray"
           {{# } }}

--
Gitblit v1.9.1