From ced2fc10af63b23402352f675f8b1e3c241c42ab Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期一, 10 十一月 2025 11:16:27 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/WorkService.java                   |    1 
 src/main/java/com/zy/asrs/task/handler/GroupOrderFormHandler.java    |  196 ++++++++++++++++-
 src/main/java/com/zy/asrs/utils/OrderOutBatchUtil.java               |  177 ++++++++++++++++
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java          |  102 +++++++++
 src/main/java/com/zy/asrs/entity/param/OrderInspectionRollParam.java |   12 +
 src/main/java/com/zy/asrs/task/GroupOrderFormScheduler.java          |   75 ++++--
 src/main/java/com/zy/asrs/utils/CodeDetectionUtil.java               |   90 ++++++++
 src/main/webapp/views/orderPakout/order.html                         |    7 
 8 files changed, 621 insertions(+), 39 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/param/OrderInspectionRollParam.java b/src/main/java/com/zy/asrs/entity/param/OrderInspectionRollParam.java
new file mode 100644
index 0000000..a173dd6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/OrderInspectionRollParam.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.entity.param;
+
+public class OrderInspectionRollParam {
+
+    private String batchNo;//鍗峰彿
+
+    public OrderInspectionRollParam() {}
+
+    public OrderInspectionRollParam(String batchNo) {
+        this.batchNo = batchNo;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
index 169142c..71687dd 100644
--- a/src/main/java/com/zy/asrs/service/WorkService.java
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -32,6 +32,7 @@
      */
     void startupFullTakeStoreOrder(StockOutParam param, Long userId);
     void startupFullTakeStoreOrderPakout(StockOutParam param, Long userId);
+    void startupFullTakeStoreOutGroupOrderForm(StockOutParam param, Long userId);
     void startupFullTakeStoreOrderGift(StockOutParam param, Long userId);
 
     /**
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index ef48815..b46c6e9 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -405,6 +405,108 @@
 
     @Override
     @Transactional
+    public void startupFullTakeStoreOutGroupOrderForm(StockOutParam param, Long userId) {
+        if (Cools.isEmpty(param) || Cools.isEmpty(param.getLocDetls())){
+            throw new CoolException("鍙傛暟涓虹┖");
+        }
+        if (Cools.isEmpty(param.getOrderNo())){
+            throw new CoolException("璁㈠崟鍙峰弬鏁颁负绌�");
+        }
+        DocType docType = docTypeService.selectOrAdd(param.getOrderName(), Boolean.FALSE);
+        Order order = orderService.selectByNo(param.getOrderNo());
+        if (Cools.isEmpty(order)){
+            Date now = new Date();
+            order = new Order(
+                    String.valueOf(snowflakeIdWorker.nextId()),    // 缂栧彿[闈炵┖]
+                    param.getOrderNo(),    // 璁㈠崟缂栧彿
+                    DateUtils.convert(now),    // 鍗曟嵁鏃ユ湡
+                    docType.getDocId(),    // 鍗曟嵁绫诲瀷
+                    null,    // 椤圭洰缂栧彿
+                    param.getGroupGoodsNo(),    //缁勮揣鍗曞彿
+                    null,    // 璋冩嫧椤圭洰缂栧彿
+                    null,    // 鍒濆绁ㄦ嵁鍙�
+                    null,    // 绁ㄦ嵁鍙�
+                    null,    // 瀹㈡埛缂栧彿
+                    param.getCstmrName(),    // 瀹㈡埛
+                    null,    // 鑱旂郴鏂瑰紡
+                    null,    // 鎿嶄綔浜哄憳
+                    null,    // 鍚堣閲戦
+                    null,    // 浼樻儬鐜�
+                    null,    // 浼樻儬閲戦
+                    null,    // 閿�鍞垨閲囪喘璐圭敤鍚堣
+                    null,    // 瀹炰粯閲戦
+                    null,    // 浠樻绫诲瀷
+                    null,    // 涓氬姟鍛�
+                    null,    // 缁撶畻澶╂暟
+                    null,    // 閭垂鏀粯绫诲瀷
+                    null,    // 閭垂
+                    null,    // 浠樻鏃堕棿
+                    null,    // 鍙戣揣鏃堕棿
+                    null,    // 鐗╂祦鍚嶇О
+                    null,    // 鐗╂祦鍗曞彿
+                    2L,    // 璁㈠崟鐘舵��
+                    1,    // 鐘舵��
+                    userId,    // 娣诲姞浜哄憳
+                    now,    // 娣诲姞鏃堕棿
+                    userId,    // 淇敼浜哄憳
+                    now,    // 淇敼鏃堕棿
+                    null    // 澶囨敞
+            );
+            if (!orderService.insert(order)) {
+                throw new CoolException("淇濆瓨璁㈠崟涓绘。澶辫触");
+            }
+            // 鍗曟嵁鏄庣粏妗�
+            List<DetlDto> list = new ArrayList<>();
+            List<StockOutParam.LocDetl> locDetls = param.getLocDetls();
+            int i=0;
+            for (StockOutParam.LocDetl locDetl : locDetls) {
+                i++;
+                Mat mat = matService.selectByMatnr(locDetl.getMatnr());
+                if (Cools.isEmpty(mat)) {
+                    throw new CoolException(locDetl.getMatnr() + "鐗╂枡缂栫爜妫�绱㈠け璐ワ紝璇峰厛娣诲姞鍟嗗搧");
+                }
+                OrderDetl orderDetl = new OrderDetl();
+                orderDetl.sync(mat);
+                orderDetl.setSuppCode(String.valueOf(i));  // 琛屽彿
+                orderDetl.setManu(locDetl.getLocNo());  //搴撲綅鍙�
+                orderDetl.setBatch(locDetl.getBatch()); //鏈ㄧ缂栫爜
+                orderDetl.setAnfme(locDetl.getAnfme());//鍑哄簱鏁伴噺
+                orderDetl.setModel(locDetl.getModel());//鎵规
+                orderDetl.setSpecs(locDetl.getSpecs());//瑙勬牸
+                orderDetl.setBrand(locDetl.getBrand());//鏈ㄧ绫诲瀷
+                orderDetl.setBarcode(locDetl.getZpallet());//鏈ㄧ绫诲瀷
+                orderDetl.setDanger(locDetl.getDanger());//鏈ㄧ绫诲瀷
+                orderDetl.setWeight(locDetl.getWeight());
+//                orderDetl.setWorkQty(locDetl.getAnfme());
+                orderDetl.setWorkQty(0.0);
+                orderDetl.setOrderId(order.getId());
+                orderDetl.setOrderNo(order.getOrderNo());
+                orderDetl.setOrigin(locDetl.getOrigin());
+                orderDetl.setCreateBy(userId);
+                orderDetl.setCreateTime(now);
+                orderDetl.setUpdateBy(userId);
+                orderDetl.setUpdateTime(now);
+                orderDetl.setStatus(1);
+                orderDetl.setQty(0.0D);
+                orderDetl.setMemo(locDetl.getMemo());
+                if (!orderDetlService.insert(orderDetl)) {
+                    throw new CoolException("鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�");
+                }
+            }
+
+            List<StockOutParam> stockOutParams = OutboundAllocationUtil.OutboundClassification(param);
+            for (StockOutParam stockOutParam : stockOutParams){
+                startupFullTakeStore(stockOutParam,userId);
+            }
+
+        } else {
+            throw new CoolException("璁㈠崟鍙烽噸澶嶏紝璁㈠崟"+param.getOrderNo()+"宸插瓨鍦紒锛侊紒");
+        }
+
+    }
+
+    @Override
+    @Transactional
     public void startupFullTakeStoreOrderGift(StockOutParam param, Long userId) {
         if (Cools.isEmpty(param) || Cools.isEmpty(param.getLocDetls())){
             throw new CoolException("鍙傛暟涓虹┖");
diff --git a/src/main/java/com/zy/asrs/task/GroupOrderFormScheduler.java b/src/main/java/com/zy/asrs/task/GroupOrderFormScheduler.java
index f6447b9..d1728ce 100644
--- a/src/main/java/com/zy/asrs/task/GroupOrderFormScheduler.java
+++ b/src/main/java/com/zy/asrs/task/GroupOrderFormScheduler.java
@@ -28,38 +28,61 @@
 
     @Scheduled(cron = "0/5 * * * * ? ")
     public void abandonedGroupOrderForm(){
-        String erpReport = Parameter.get().getErpReport();
-        if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
-            List<OrderPakout> orders = orderPakoutService.selectSettle(99L);
-            for (OrderPakout order : orders) {
-                try{
-                    ReturnT<String> result = groupOrderFormHandler.abandoned(order);
-                    if (!result.isSuccess()) {
-                        log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
-                    }
-                }catch (Exception e){
-                    log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
-                    log.error("璁㈠崟"+order+"澶勭悊澶辫触锛屽紓甯镐俊鎭細"+e);
+        List<OrderPakout> orders = orderPakoutService.selectSettle(99L);//搴熷純
+        if (orders.isEmpty()){
+            return;
+        }
+        for (OrderPakout order : orders) {
+            try{
+                ReturnT<String> result = groupOrderFormHandler.abandoned(order);
+                if (!result.isSuccess()) {
+                    log.error("璁″垝缁勮揣鍗昜orderNo={}]搴熷純娓呴櫎澶辫触", order.getOrderNo());
                 }
+            }catch (Exception e){
+                log.error("璁″垝缁勮揣鍗昜orderNo={}]搴熷純娓呴櫎澶辫触", order.getOrderNo());
+                log.error("璁″垝缁勮揣鍗�"+order+"搴熷純娓呴櫎澶辫触锛屽紓甯镐俊鎭細"+e);
             }
         }
     }
 
-    @Scheduled(cron = "0/5 * * * * ? ")
-    public void outGroupOrderForm(){
-        String erpReport = Parameter.get().getErpReport();
-        if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
-            List<OrderPakout> orders = orderPakoutService.selectSettle(11L);
-            for (OrderPakout order : orders) {
-                try{
-                    ReturnT<String> result = groupOrderFormHandler.start(order);
-                    if (!result.isSuccess()) {
-                        log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
-                    }
-                }catch (Exception e){
-                    log.error("璁″垝缁勮揣鍗昜orderNo={}]鍑哄簱澶辫触", order.getOrderNo());
-                    log.error("璁㈠崟"+order+"澶勭悊澶辫触锛屽紓甯镐俊鎭細"+e);
+    @Scheduled(cron = "0/30 * * * * ? ")
+    public void inspectionGroupOrderForm(){
+        List<OrderPakout> orders = orderPakoutService.selectSettle(11L);//妫�楠�
+        if (orders.isEmpty()){
+            return;
+        }
+        for (OrderPakout order : orders) {
+            try{
+                ReturnT<String> result = groupOrderFormHandler.inspection(order);
+                if (!result.isSuccess()) {
+                    log.error("璁″垝缁勮揣鍗昜orderNo={}]鏌ヨ鍗峰彿瀛樺湪涓嶅悎鏍�", order.getOrderNo());
+                } else {
+                    orderPakoutService.updateSettle(order.getId(),12L,0L);//妫�楠屽悎鏍�
                 }
+            }catch (Exception e){
+                log.error("璁″垝缁勮揣鍗昜orderNo={}]鏌ヨ鍗峰彿澶辫触", order.getOrderNo());
+                log.error("璁″垝缁勮揣鍗�"+order+"鏌ヨ鍗峰彿澶辫触锛屽紓甯镐俊鎭細"+e);
+            }
+        }
+    }
+
+    @Scheduled(cron = "0/10 * * * * ? ")
+    public void outGroupOrderForm(){
+        List<OrderPakout> orders = orderPakoutService.selectSettle(12L);//鍑哄簱
+        if (orders.isEmpty()){
+            return;
+        }
+        for (OrderPakout order : orders) {
+            try{
+                ReturnT<String> result = groupOrderFormHandler.start(order);
+                if (!result.isSuccess()) {
+                    log.error("璁″垝缁勮揣鍗昜orderNo={}]妫�楠屽嚭搴撳け璐�", order.getOrderNo());
+                } else {
+                    orderPakoutService.updateSettle(order.getId(),15L,0L);//妫�楠屽悎鏍�
+                }
+            }catch (Exception e){
+                log.error("璁″垝缁勮揣鍗昜orderNo={}]妫�楠屽嚭搴撳け璐�", order.getOrderNo());
+                log.error("璁″垝缁勮揣鍗�"+order+"妫�楠屽嚭搴撳け璐ワ紝寮傚父淇℃伅锛�"+e);
             }
         }
     }
diff --git a/src/main/java/com/zy/asrs/task/handler/GroupOrderFormHandler.java b/src/main/java/com/zy/asrs/task/handler/GroupOrderFormHandler.java
index a3b94c5..4ededa4 100644
--- a/src/main/java/com/zy/asrs/task/handler/GroupOrderFormHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/GroupOrderFormHandler.java
@@ -1,18 +1,30 @@
 package com.zy.asrs.task.handler;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.common.SnowflakeIdWorker;
 import com.zy.asrs.entity.OrderDetlPakout;
 import com.zy.asrs.entity.OrderPakout;
-import com.zy.asrs.service.OrderDetlPakoutService;
-import com.zy.asrs.service.OrderDetlService;
-import com.zy.asrs.service.OrderPakoutService;
-import com.zy.asrs.service.OrderService;
+import com.zy.asrs.entity.param.OrderCargoBookingNoteParam;
+import com.zy.asrs.entity.param.OrderInspectionRollParam;
+import com.zy.asrs.entity.param.OrderOutLocBoxCsUtilParam;
+import com.zy.asrs.service.*;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.utils.CodeDetectionUtil;
+import com.zy.asrs.utils.OrderOutBatchUtil;
+import com.zy.common.constant.MesConstant;
+import com.zy.common.utils.HttpHandler;
 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.Date;
 import java.util.List;
 
 /**
@@ -23,26 +35,188 @@
 @Service
 public class GroupOrderFormHandler extends AbstractHandler<String> {
     @Autowired
-    private OrderService orderService;
-    @Autowired
-    private OrderDetlService orderDetlService;
-    @Autowired
     private OrderPakoutService orderPakoutService;
     @Autowired
     private OrderDetlPakoutService orderDetlPakoutService;
+    @Autowired
+    private ApiLogService apiLogService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
 
     @Transactional
     public ReturnT<String> abandoned(OrderPakout orderPakout) {
         List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectByOrderId(orderPakout.getId());
-
+        moveBoth(orderPakout,orderDetls);
         return SUCCESS;
+    }
+
+    private void moveBoth(OrderPakout order, List<OrderDetlPakout> orderDetls){
+        Date now = new Date();
+        if (!Cools.isEmpty(orderDetls)) {
+            for (OrderDetlPakout orderDetl : orderDetls) {
+                orderDetl.setUpdateBy(0L);
+                orderDetl.setUpdateTime(now);
+//                orderDetlPakoutService.addToLogTable(orderDetl);
+                orderDetlPakoutService.delete(new EntityWrapper<OrderDetlPakout>()
+                        .eq("id",orderDetl.getId()));
+            }
+        }
+        if (!Cools.isEmpty(order)){
+            order.setUpdateBy(0L);
+            order.setUpdateTime(now);
+//            orderPakoutService.addToLogTable(order);
+            orderPakoutService.delete(new EntityWrapper<OrderPakout>()
+                    .eq("id",order.getId()));
+        }
+    }
+
+    @Transactional
+    public ReturnT<String> inspection(OrderPakout orderPakout) {
+        List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectByOrderId(orderPakout.getId());
+        String memo = "";
+        for (OrderDetlPakout orderDetl : orderDetls) {
+            if (!CodeDetectionUtil.barcodeDetection(orderDetl.getManu(),7)){
+                if (Cools.isEmpty(memo)){
+                    memo = "鏃犲簱瀛�";
+                }else {
+                    memo = memo+";鏃犲簱瀛�";
+                }
+                continue;
+            }
+            if (Cools.isEmpty(orderDetl.getDanger$()) || orderDetl.getDanger()==1){//鍚堟牸涓嶉渶瑕佹楠�
+                continue;
+            }
+            OrderInspectionRollParam orderInspectionRollParam = new OrderInspectionRollParam(orderDetl.getModel());
+            String response = "";
+            boolean success = false;
+            try {
+                response = new HttpHandler.Builder()
+                        .setUri(MesConstant.URL)
+                        .setPath(MesConstant.PAKIN_URL)
+                        .setJson(JSON.toJSONString(orderInspectionRollParam))
+                        .build()
+                        .doPost();
+                JSONObject jsonObject = JSON.parseObject(response);
+                if (jsonObject.getInteger("code").equals(200)) {
+                    if (jsonObject.getBoolean("state")) {
+                        String value = jsonObject.getString("value");
+                        if (value.equals("鍚堟牸")){
+                            orderDetl.setDanger(1);
+                            orderDetlPakoutService.updateById(orderDetl);
+                        } else if (value.equals(orderDetl.getDanger$())){
+                            if (Cools.isEmpty(memo)){
+                                memo = "鏌ヨ鍗峰彿缁撴灉锛�"+jsonObject.getString("message");
+                            }else {
+                                memo = memo+";鏌ヨ鍗峰彿缁撴灉锛�"+jsonObject.getString("message");
+                            }
+                            continue;
+                        } else {
+                            if (Cools.isEmpty(memo)){
+                                memo = "鏌ヨ鍗峰彿缁撴灉锛�"+jsonObject.getString("message");
+                            }else {
+                                memo = memo+";鏌ヨ鍗峰彿缁撴灉锛�"+jsonObject.getString("message");
+                            }
+                            if (value.equals("涓嶅悎鏍�")){
+                                orderDetl.setDanger(2);
+                                orderDetlPakoutService.updateById(orderDetl);
+                            }
+                            continue;
+                        }
+                    } else {
+                        if (Cools.isEmpty(memo)){
+                            memo = "鏌ヨ鍗峰彿缁撴灉锛�"+jsonObject.getString("message");
+                        }else {
+                            memo = memo+";鏌ヨ鍗峰彿缁撴灉锛�"+jsonObject.getString("message");
+                        }
+                    }
+                    success = true;
+                } else {
+                    if (Cools.isEmpty(memo)){
+                        memo = "鏌ヨ鍗峰彿缁撴灉锛�"+jsonObject.getString("message");
+                    }else {
+                        memo = memo+";鏌ヨ鍗峰彿缁撴灉锛�"+jsonObject.getString("message");
+                    }
+                    log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL+MesConstant.PAKIN_URL, JSON.toJSONString(orderInspectionRollParam), response);
+//                    throw new CoolException("鏌ヨ鍗峰彿鏄惁鍚堟牸澶辫触");
+                }
+            } catch (Exception e) {
+                if (Cools.isEmpty(memo)){
+                    memo = "鏌ヨ鍗峰彿缁撴灉锛�"+"寮傚父"+e.getMessage();
+                }else {
+                    memo = memo+";鏌ヨ鍗峰彿缁撴灉锛�"+"寮傚父"+e.getMessage();
+                }
+                log.error("fail", e);
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                return FAIL.setMsg(e.getMessage());
+            } finally {
+                try {
+                    // 淇濆瓨鎺ュ彛鏃ュ織
+                    apiLogService.save(
+                            "鏌ヨ鍗峰彿鏄惁鍚堟牸",
+                            MesConstant.URL + MesConstant.PAKIN_URL,
+                            null,
+                            "127.0.0.1",
+                            JSON.toJSONString(orderInspectionRollParam),
+                            response,
+                            success
+                    );
+                } catch (Exception e) { log.error("鏌ヨ鍗峰彿鏄惁鍚堟牸淇濆瓨鎺ュ彛鏃ュ織寮傚父", e); }
+            }
+        }
+        if (Cools.isEmpty(memo)){
+            return SUCCESS;
+        }
+        orderPakout.setSettle(13L);//妫�楠屽瓨鍦ㄤ笉鍚堟牸
+        orderPakout.setMemo(memo);
+        orderPakoutService.updateById(orderPakout);
+        return FAIL;
     }
 
     @Transactional
     public ReturnT<String> start(OrderPakout orderPakout) {
-        List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectByOrderId(orderPakout.getId());
+        List<OrderDetlPakout> orderDetlPakoutList = orderDetlPakoutService.selectByOrderId(orderPakout.getId());
+        if (orderDetlPakoutList.isEmpty()){
+            orderPakout.setSettle(98L);
+            orderPakout.setMemo("涓嶅瓨鍦ㄦ槑缁嗭紒锛侊紒");
+            orderPakoutService.updateById(orderPakout);
+            return FAIL;
+        }
+        List<OrderOutLocBoxCsUtilParam> outLocBoxCs = new ArrayList<>();
+        String orderNo = "ZH" + snowflakeIdWorker.nextId();
+        for (OrderDetlPakout orderDetl : orderDetlPakoutList) {
+            if (!CodeDetectionUtil.barcodeDetection(orderDetl.getManu(),7)){//鏃犲簱瀛�
+                continue;
+            }
+            if (Cools.isEmpty(orderDetl.getDanger$()) || orderDetl.getDanger()!=1){//涓嶅悎鏍间笉鍑哄簱
+                continue;
+            }
+            OrderOutLocBoxCsUtilParam outLocBox = new OrderOutLocBoxCsUtilParam();
+            outLocBox.setBoxNo(orderDetl.getBatch());
+            outLocBox.setRoll(orderDetl.getModel());
+            outLocBox.setMemo(orderDetl.getMemo());
+            outLocBox.setOrderOneNo(orderNo);
+            outLocBox.setCstmrName(orderPakout.getCstmrName());
+            outLocBox.setDanger(orderDetl.getDanger$());
+            outLocBoxCs.add(outLocBox);
+        }
+        if (outLocBoxCs.isEmpty()){
+            orderPakout.setSettle(98L);
+            orderPakout.setMemo("涓嶅瓨鍦ㄥ悎鏍肩殑鐗╂枡鏄庣粏锛侊紒锛�");
+            orderPakoutService.updateById(orderPakout);
+            return FAIL;
+        }
 
-        return SUCCESS;
+        OrderOutBatchUtil orderOutBatchUtil = new OrderOutBatchUtil(orderNo,orderPakout.getCstmrName(),"","MES涓嬪彂缁勮揣鍗�","缁勮揣鍗�",true,orderPakout.getItemName());
+        R r = orderOutBatchUtil.outGroupOrderForm(outLocBoxCs);
+        int code = Integer.parseInt(String.valueOf(r.get("code")));
+        if (code==200){
+            return SUCCESS;
+        }
+        String meg = String.valueOf(r.get("msg"));
+        orderPakout.setSettle(98L);
+        orderPakout.setMemo(meg);
+        orderPakoutService.updateById(orderPakout);
+        return FAIL;
     }
 
 }
diff --git a/src/main/java/com/zy/asrs/utils/CodeDetectionUtil.java b/src/main/java/com/zy/asrs/utils/CodeDetectionUtil.java
new file mode 100644
index 0000000..f8df8bc
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/CodeDetectionUtil.java
@@ -0,0 +1,90 @@
+package com.zy.asrs.utils;
+
+import java.util.regex.Pattern;
+
+public class CodeDetectionUtil {
+
+    /**
+     * 妫�娴嬭揣鏋剁爜
+     */
+    public static boolean barcodeDetection(String barcode, int code) {
+        Pattern pattern = Pattern.compile("\\d{" + code + "}");//浣嶆暟瀛�
+        return pattern.matcher(barcode).matches();
+    }
+
+    /**
+     * 妫�娴嬪皬杞﹀湴鐮�
+     */
+    public static boolean carCodeDetection(String carCode) {
+        return carCode.contains("_");
+    }
+
+    /**
+     * 妫�娴嬫暟缁勬渶澶у�煎強鍏剁储寮�
+     */
+    public static int[] crnCodeDetectionMax(int[] arr) {
+        int max = arr[0];
+        int index = 0;
+        for (int i = 0; i < arr.length; i++) {
+            if (arr[i] > max) {
+                max = arr[i];
+                index = i;
+            }
+        }
+        return new int[]{index, max};
+    }
+
+    /**
+     * 妫�娴嬫暟缁勬渶澶у�煎強鍏剁储寮�
+     */
+    public static int[] crnCodeDetectionMaxT(int[] arr,Integer crnNoIndex) {
+        int max = arr[0];
+        if (crnNoIndex == 0){
+            max = arr[1];
+        }
+        int index = 0;
+        for (int i = 0; i < arr.length; i++) {
+            if (crnNoIndex == i){
+                continue;
+            }
+            if (arr[i] > max) {
+                max = arr[i];
+                index = i;
+            }
+        }
+        return new int[]{index, max};
+    }
+
+    /**
+     * 妫�娴嬫暟缁勬渶灏忓�煎強鍏剁储寮�
+     */
+    public static int[] crnCodeDetectionMin(int[] arr) {
+        int min = arr[0];
+        int index = 0;
+        for (int i = 0; i < arr.length; i++) {
+            if (arr[i] < min) {
+                min = arr[i];
+                index = i;
+            }
+        }
+        return new int[]{index, min};
+    }
+
+
+//    public static void main(String[] args) {
+//        System.out.println("barcodeDetection:" + "22222222===>" + barcodeDetection("22222222", 7));
+//        System.out.println("barcodeDetection:" + "222222===>" + barcodeDetection("222222", 7));
+//        System.out.println("barcodeDetection:" + "111===>" + barcodeDetection("111", 7));
+//        System.out.println("barcodeDetection:" + "DB_123ss===>" + barcodeDetection("DB_123ss", 7));
+//        System.out.println("barcodeDetection:" + "12_1231===>" + barcodeDetection("12_1231", 7));
+//        System.out.println("barcodeDetection:" + "DB_123456===>" + barcodeDetection("DB_123456", 7));
+//
+//        System.out.println("carCodeDetection:" + "22222222===>" + carCodeDetection("22222222"));
+//        System.out.println("carCodeDetection:" + "222222===>" + carCodeDetection("222222"));
+//        System.out.println("carCodeDetection:" + "111===>" + carCodeDetection("111"));
+//        System.out.println("carCodeDetection:" + "DB_123ss===>" + carCodeDetection("DB_123ss"));
+//        System.out.println("carCodeDetection:" + "12_1231===>" + carCodeDetection("12_1231"));
+//        System.out.println("carCodeDetection:" + "DB_123456===>" + carCodeDetection("DB_123456"));
+//    }
+
+}
diff --git a/src/main/java/com/zy/asrs/utils/OrderOutBatchUtil.java b/src/main/java/com/zy/asrs/utils/OrderOutBatchUtil.java
index f30eab3..c12872c 100644
--- a/src/main/java/com/zy/asrs/utils/OrderOutBatchUtil.java
+++ b/src/main/java/com/zy/asrs/utils/OrderOutBatchUtil.java
@@ -415,4 +415,181 @@
         }
         return R.error(requert);
     }
+
+
+    public R outGroupOrderForm(List<OrderOutLocBoxCsUtilParam>  OutLocBoxCs) {
+        int total = OutLocBoxCs.size();
+        if (!Cools.isEmpty(OutLocBoxCs) && !OutLocBoxCs.isEmpty()) {
+            LocDetlService locDetlService = SpringUtils.getBean(LocDetlService.class);
+            LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
+            SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class);
+            WorkService workService = SpringUtils.getBean(WorkService.class);
+            List<LocDto> locDtos = new ArrayList<>();
+            List<OrderOutLocBoxCsUtilParam> outLocBoxCList = new ArrayList<>();
+            List<String> outLocBoxCNew = new ArrayList<>();
+            List<String> outLocRollListOld = new ArrayList<>();
+            List<String> outLocRollListNew = new ArrayList<>();
+            for (OrderOutLocBoxCsUtilParam outLocBoxC : OutLocBoxCs) {
+                if (!outLocRollListOld.contains(outLocBoxC.getRoll())) {
+                    outLocRollListOld.add(outLocBoxC.getRoll());
+                }
+            }
+            for (OrderOutLocBoxCsUtilParam outLocBoxC : OutLocBoxCs) {
+                total--;
+                LocDetl locDetlSou = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC.getBoxNo()).eq("model",outLocBoxC.getRoll()));
+                if (Cools.isEmpty(locDetlSou)) {
+                    locDetlSou = new LocDetl();
+                    locDetlSou.setBatch(outLocBoxC.getBoxNo());
+                    locDetlSou.setModel(outLocBoxC.getRoll());
+                    locDetlSou.setLocNo("鏃犲簱瀛�");
+//                    sign = false;
+                    errorMsgOrderLoc = errorMsgOrderLoc + "[===銆�" + "绠卞彿锛�" + outLocBoxC.getBoxNo() + "鍗峰彿锛�" + outLocBoxC.getRoll() + " 鏈煡璇㈠埌鏁版嵁锛侊紒锛併��===]";
+//                    continue;
+                }
+                if (signDanger){
+                    if (!locDetlSou.getDanger$().equals(outLocBoxC.getDanger())) {
+                        sign = false;
+                        errorMsgOrderLoc = errorMsgOrderLoc + "[===銆�" + "绠卞彿锛�" + outLocBoxC.getBoxNo() + "鍗峰彿锛�" + outLocBoxC.getRoll() +  " ==銆嬪嚭搴撹緭鍏ュ緟鍒ょ姸鎬侊細" + outLocBoxC.getDanger() + "銆佸簱瀛樼姸鎬侊細" + locDetlSou.getDanger$() + "銆傜姸鎬佷笉鍖归厤銆�===]";
+                        continue;
+                    }
+                }
+                if (!outLocBoxCNew.contains(outLocBoxC.getBoxNo()) && !locDetlSou.getLocNo().equals("鏃犲簱瀛�")) {
+                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlSou.getLocNo()));
+                    if (Cools.isEmpty(locMast)) {
+//                        sign = false;
+                        errorMsgOrderLoc = errorMsgOrderLoc + "[===銆�" + "绠卞彿锛�" + outLocBoxC.getBoxNo() + "鍗峰彿锛�" + outLocBoxC.getRoll() +  " 鎵�鍦ㄥ簱浣嶄笉婊¤冻鍑哄簱鏉′欢锛侊紒锛佹湭鏌ヨ鍒版绠卞彿鎵�鍦ㄥ簱浣�" + "銆�===]";
+//                        continue;
+                    } else if (!locMast.getLocSts().equals("F")) {
+//                        sign = false;
+                        errorMsgOrderLoc = errorMsgOrderLoc + "[===銆�" + "绠卞彿锛�" + outLocBoxC.getBoxNo() + "鍗峰彿锛�" + outLocBoxC.getRoll() +  " 鎵�鍦ㄥ簱浣嶄笉婊¤冻鍑哄簱鏉′欢锛侊紒锛佸簱浣嶇姸鎬佷笉涓篎锛侊紒锛佸簱浣嶇姸鎬侊細" + locMast.getLocSts$() + "銆�===]";
+//                        continue;
+                    } else {
+                        // 鐩爣搴撲綅 ===>> 娴呭簱浣�
+                        if (Utils.isShallowLoc(slaveProperties, locMast.getLocNo())) {
+                            String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast.getLocNo());
+                            LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc));
+                            if (!Cools.isEmpty(locMast2)) {
+                                if (locMast2.getLocSts().equals("P") || locMast2.getLocSts().equals("R")) {
+                                    errorMsgOrderLoc = errorMsgOrderLoc + "[===銆�" + "绠卞彿锛�" + outLocBoxC.getBoxNo() +  "鍗峰彿锛�" + outLocBoxC.getRoll() + " 鎵�鍦ㄥ簱浣嶆弧瓒冲嚭搴撴潯浠讹紒锛侊紒浣嗘槸鐩搁偦搴撲綅鍦ㄥ嚭搴撲腑锛侊紒锛佸洜姝や細澶规潅鍦ㄥ墠杈硅鍗曟墽琛岋紒锛侊紒" + "銆�===]";
+                                }
+                            }
+                        }
+                    }
+                }
+                if (sign && !outLocRollListNew.contains(outLocBoxC.getRoll()) && !locDetlSou.getLocNo().equals("鏃犲簱瀛�")) {
+                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+                            .eq("loc_no", locDetlSou.getLocNo()).eq("origin", locDetlSou.getOrigin()));
+                    for (LocDetl locDetl : locDetls) {
+                        if (!outLocRollListNew.contains(locDetl.getModel())){
+                            if (!outLocRollListOld.contains(locDetl.getModel())){
+                                total++;
+                                OrderOutLocBoxCsUtilParam orderOutLocBoxCsUtilParam = new OrderOutLocBoxCsUtilParam(locDetl.getBatch(),locDetl.getModel(), outLocBoxC);
+                                orderOutLocBoxCsUtilParam.setMemo("闄勫甫鍑哄簱");
+                                orderOutLocBoxCsUtilParam.setDanger(locDetl.getDanger$());
+                                outLocBoxCList.add(orderOutLocBoxCsUtilParam);
+                                outLocBoxCNew.add(outLocBoxC.getBoxNo());
+                                outLocRollListNew.add(outLocBoxC.getRoll());
+                            } else {
+                                if (locDetlSou.getBatch().equals(locDetl.getBatch()) && locDetlSou.getModel().equals(locDetl.getModel())) {
+                                    total++;
+                                    outLocBoxCList.add(outLocBoxC);
+                                    outLocBoxCNew.add(outLocBoxC.getBoxNo());
+                                    outLocRollListNew.add(outLocBoxC.getRoll());
+                                }
+                            }
+                        }
+                    }
+                } else if (sign && !outLocRollListNew.contains(outLocBoxC.getRoll()) && locDetlSou.getLocNo().equals("鏃犲簱瀛�")) {
+                    if (!outLocRollListNew.contains(locDetlSou.getModel())){
+                        total++;
+                        outLocBoxCList.add(outLocBoxC);
+                        outLocBoxCNew.add(outLocBoxC.getBoxNo());
+                        outLocRollListNew.add(outLocBoxC.getRoll());
+                    }
+                }
+            }
+            for (OrderOutLocBoxCsUtilParam outLocBoxC : outLocBoxCList) {
+                LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC.getBoxNo()).eq("model", outLocBoxC.getRoll()));
+                if (Cools.isEmpty(locDetl)) {
+//                    total--;
+//                    continue;
+                    locDetl = new LocDetl();
+                    locDetl.setBatch(outLocBoxC.getBoxNo());
+                    locDetl.setModel(outLocBoxC.getRoll());
+                    locDetl.setLocNo("鏃犲簱瀛�");
+                }
+
+                if (!Cools.isEmpty(outLocBoxC.getMemo())) {
+                    if (Cools.isEmpty(locDetl.getMemo())) {
+                        locDetl.setMemo(DateUtils.convert(new Date(), DateUtils.yyyyMMdd_C) + "澶囨敞锛�" + outLocBoxC.getMemo());
+                    } else {
+                        String memo = Cools.isEmpty(locDetl.getMemo()) ? "" : locDetl.getMemo() + "锛�";
+                        locDetl.setMemo(memo + DateUtils.convert(new Date(), DateUtils.yyyyMMdd_C) + "澶囨敞锛�" + outLocBoxC.getMemo());
+                    }
+                }
+                LocDto locDto = new LocDto(locDetl);
+                locDtos.add(locDto);
+            }
+
+            StockOutParam param = new StockOutParam();
+            ArrayList<StockOutParam.LocDetl> locDetls = new ArrayList<>();
+            List<LocDto> locDtosList = new ArrayList<>();
+            List<String> batchList = new ArrayList<>();
+            for (LocDto locDto : locDtos) {
+                if (!batchList.contains(locDto.getBatch())) {
+                    batchList.add(locDto.getBatch());
+                    locDtosList.add(locDto);
+                }
+            }
+            for (LocDto locDto : locDtosList) {
+                StockOutParam.LocDetl locDetl = new StockOutParam.LocDetl();
+                locDetl.setBrand(locDto.getBrand());
+                locDetl.setLocNo(locDto.getLocNo());
+                locDetl.setAnfme(locDto.getAnfme());
+                locDetl.setMatnr(locDto.getMatnr());
+                locDetl.setBatch(locDto.getBatch());
+                locDetl.setModel(locDto.getModel());
+                locDetl.setSpecs(locDto.getSpecs());
+                locDetl.setZpallet(locDto.getZpallet());
+                locDetl.setOrigin(locDto.getOrigin());
+                locDetl.setWeight(locDto.getWeight());
+                locDetl.setMemo(locDto.getMemo());
+                locDetl.setDanger(locDto.getDanger());
+
+                locDetls.add(locDetl);
+            }
+            param.setLocDetls(locDetls);
+            param.setOrderNo(orderOneNo);
+            param.setCstmrName(cstmrName);
+            param.setOrderName(orderName);
+            param.setGroupGoodsNo(groupGoodsNo);
+
+            if (sign && total > 0) {
+                workService.startupFullTakeStoreOutGroupOrderForm(param, 9999L);
+            }
+
+            try {
+                OperateLogService operateLogService = SpringUtils.getBean(OperateLogService.class);
+                // 璁板綍鎿嶄綔鏃ュ織
+                OperateLog operateLog = new OperateLog();
+                operateLog.setAction(action);
+                operateLog.setIp(ip);
+                operateLog.setUserId(9999L);
+                operateLog.setRequest("鍗曞彿锛�" + orderOneNo + "銆佸鎴峰悕锛�" + cstmrName);
+                operateLog.setResponse(errorMsgOrderLoc.equals("") ? "姝e父" : (sign && total > 0) ? "鎴愬姛:" + errorMsgOrderLoc : "澶辫触:" + errorMsgOrderLoc);
+                operateLogService.insert(operateLog);
+            } catch (Exception e) {
+                log.error("璁板綍鎿嶄綔鏃ュ織澶辫触锛�" + e.getMessage());
+            }
+
+        }
+
+        log.info("鍑哄簱{}鏉$鍙凤紒", total);
+
+        String requert = errorMsgOrderLoc.equals("") ? "姝e父" : (sign && total > 0) ? "鎴愬姛:" + errorMsgOrderLoc : "澶辫触:" + errorMsgOrderLoc;
+        if (sign && total > 0) {
+            return R.ok(requert.equals("姝e父")? "鎴愬姛":requert);
+        }
+        return R.error(requert);
+    }
 }
diff --git a/src/main/webapp/views/orderPakout/order.html b/src/main/webapp/views/orderPakout/order.html
index babd8e0..2a0c422 100644
--- a/src/main/webapp/views/orderPakout/order.html
+++ b/src/main/webapp/views/orderPakout/order.html
@@ -113,10 +113,13 @@
 <!--        <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">鍒犻櫎</a>-->
     {{# } }}
     {{# if (d.settle == 10) { }}
-        <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">鍑哄簱</a>
+        <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">妫�楠屽嚭搴�</a>
+    {{# } }}
+    {{# if (d.settle == 13 || d.settle == 98) { }}
+    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="inspection">鍑哄簱鍚堟牸鍝�</a>
     {{# } }}
     {{# if (d.settle == 98) { }}
-        <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">閲嶆柊鍑哄簱</a>
+        <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">閲嶆柊妫�楠屽嚭搴�</a>
     {{# } }}
 </script>
 <!-- 琛ㄦ牸鎿嶄綔鍒� -->

--
Gitblit v1.9.1