From 1ddefcdadd90f100df509369ea520bebd6d206ce Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期四, 24 七月 2025 09:42:57 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/tzglwcs' into tzglwcs

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  797 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 638 insertions(+), 159 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index cd49969..3e01e03 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -10,6 +10,7 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
+import com.zy.system.service.*;
 import com.zy.asrs.utils.RouteUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
@@ -38,6 +39,9 @@
 import com.zy.core.thread.LedThread;
 import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
+import com.zy.system.entity.Config;
+import com.zy.system.mapper.ConfigMapper;
+import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -45,7 +49,10 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -94,6 +101,8 @@
     private WrkMastService wrkMastService;
     @Autowired
     private BasRgvMapService basRgvMapService;
+    @Autowired
+    private ConfigService configService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -101,12 +110,9 @@
     private boolean isToOrigin;
 
     public Integer wrkNo = 10000;
-
-    /**
-     * 缁勬墭
-     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
-     */
-    public synchronized void generateStoreWrkFile(Integer mark) {
+    @Autowired
+    private ConfigMapper configMapper;
+    public synchronized void generateStoreWrkFile3(Integer mark) {
         String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
         // 鏍规嵁杈撻�佺嚎plc閬嶅巻
         for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -117,16 +123,23 @@
                 LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+                StaProtocol staProtocolIn = devpThread.getStation().get(inSta.getStaNo() -1);
+                if (staProtocolIn == null) {
+                    continue;
+                } else {
+                    staProtocolIn = staProtocolIn.clone();
+                }
+                if (barcodeThread == null) {
+                    continue;
+                }
+                String barcode = barcodeThread.getBarcode();
+
                 if (staProtocol == null) {
                     continue;
                 } else {
                     staProtocol = staProtocol.clone();
                 }
 
-                if (barcodeThread == null) {
-                    continue;
-                }
-                String barcode = barcodeThread.getBarcode();
                 // 灏哄妫�娴嬪紓甯�
                 boolean back = false;
                 String errMsg = "";
@@ -150,14 +163,23 @@
                     errMsg = "鍙宠秴闄�";
                     back = true;
                 }
-                if (!back && staProtocol.isWeightErr()) {
-                    errMsg = "瓒呴噸";
+                if (!back && staProtocol.getWeight() > 1000) {
+                    errMsg = "瓒呴噸鎴栨湭璇诲彇";
                     back = true;
                 }
                 if (!back && staProtocol.isBarcodeErr()) {
                     errMsg = "鎵爜澶辫触";
                     back = true;
                 }
+//                if(staProtocol.getWeight() <= 0 ){
+//                    continue;
+//                }
+//                if (!back && staProtocol.getWeight() == 0.0) {
+//                    errMsg = "閲嶉噺鑾峰彇澶辫触";
+//                    back = true;
+//                }
+
+//                News.info("{}閲嶉噺", staProtocol.getWeight());
 
                 // 閫�鍥�
                 if (back) {
@@ -209,7 +231,7 @@
 //
 //                        }
                         News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,璇锋煡鐪媁CS杈撻�佺嚎鐣岄潰,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
-                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo()));
+//                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo()));
                         continue;
 //                        barcodeThread.setBarcode("");
 //                        staProtocol.setWorkNo(wrkMast.getWrkNo());
@@ -245,6 +267,7 @@
                         param.setIoType(1);
                         param.setSourceStaNo(inSta.getStaNo());
                         param.setLocType1(locTypeDto.getLocType1());
+                        param.setWeight(staProtocol.getWeight());
                         String response = new HttpHandler.Builder()
                                 .setTimeout(30,TimeUnit.SECONDS)
                                 .setUri(wmsUrl)
@@ -273,27 +296,6 @@
                             }
                         } else {
                             if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) {
-
-                                //宸ヤ綔妗e凡瀛樺湪    鍐嶆杩涘幓
-//                                wrkMast = wrkMastMapper.selectPakInStepBarcode(barcode);
-//                                if (wrkMast != null) {
-//                                    barcodeThread.setBarcode("");
-//                                    staProtocol.setWorkNo(9999);
-//                                    //staProtocol.setWorkNo(wrkMast.getWrkNo());
-//                                    //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
-//                                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
-//                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//                                    log.error("杈撻�佺嚎涓嬪彂2锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
-//                                    ledThread.errorReset();
-//                                    log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
-//                                    if (!result) {
-//                                        News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
-//
-//                                        throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-//                                    }
-//                                }
-
                                 continue;
                             }
                             staProtocol.setWorkNo(wrkNo);
@@ -301,7 +303,8 @@
                             staProtocol.setStaNo(inSta.getBackSta().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//
+                            log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo());
+
 //                            if (ledThread != null) {
                             String errorMsg = jsonObject.getString("msg");
                             if (!Cools.isEmpty(errorMsg)) {
@@ -325,6 +328,436 @@
 //        News.infoNoLog(""+mark+" - 0"+" - 缁勬墭  ===銆嬫墽琛屽畬鎴�");
 
     }
+    /**
+     * 缁勬墭
+     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
+     */
+//    public synchronized void generateStoreWrkFile(Integer mark) {
+//        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
+//        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+//        for (DevpSlave devp : slaveProperties.getDevp()) {
+//            // 閬嶅巻鍏ュ簱鍙�
+//            for (DevpSlave.Sta inSta : devp.getInSta()) {
+//                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+//                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
+//                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+//                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+//                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+//                StaProtocol staProtocolIn = devpThread.getStation().get(inSta.getStaNo() -1);
+//                if (staProtocolIn == null) {
+//                    continue;
+//                } else {
+//                    staProtocolIn = staProtocolIn.clone();
+//                }
+//                if (barcodeThread == null) {
+//                    continue;
+//                }
+//                String barcode = barcodeThread.getBarcode();
+//                if(staProtocolIn.getStamp() == 1 && barcode!=null && !barcode.isEmpty()) {
+//                    log.error("鐢熸垚浠诲姟涓�");
+//
+//                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+//                            .eq("barcode", barcode)
+//                            .in("io_type", 107, 103, 57));
+//                    if (!Cools.isEmpty(checkPick)) {
+//                        continue;
+//                    }
+//                    try {
+//                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+//
+//                        SearchLocParam param = new SearchLocParam();
+//                        locTypeDto.setLocType1((short) 1);
+//                        param.setBarcode(barcode);
+//                        param.setIoType(1);
+//                        param.setSourceStaNo(inSta.getStaNo());
+//                        param.setLocType1(locTypeDto.getLocType1());
+//                        param.setWeight(staProtocol.getWeight());
+//                        String response = new HttpHandler.Builder()
+//                                .setTimeout(30, TimeUnit.SECONDS)
+//                                .setUri(wmsUrl)
+//                                .setPath("/rpc/pakin/loc/v1")
+//                                .setJson(JSON.toJSONString(param))
+//                                .build()
+//                                .doPost();
+//                        JSONObject jsonObject = JSON.parseObject(response);
+//                        if (jsonObject.getInteger("code").equals(200)) {
+//                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+//                            barcodeThread.setBarcode("");
+//                            staProtocolIn.setWorkNo(dto.getWorkNo());
+////                            //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
+////                            staProtocol.setStaNo(dto.getStaNo().shortValue());
+//                            devpThread.setPakMk(staProtocolIn.getSiteId(), false);
+//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocolIn));
+//                            log.error("宸ヤ綔鍙蜂笅鍙�2锛�" + dto.getWorkNo() + "," + dto.getStaNo());
+//                            ledThread.errorReset();
+//                            log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
+//                            if (!result) {
+//                                News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+//
+//                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+//                            }
+//                        }
+//                    } catch (Exception e) {
+//                        e.printStackTrace();
+//                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                    }
+//                }else{
+//                    if (staProtocol == null) {
+//                        continue;
+//                    } else {
+//                        staProtocol = staProtocol.clone();
+//                    }
+//
+//                    // 灏哄妫�娴嬪紓甯�
+//                    boolean back = false;
+//                    String errMsg = "";
+//                    if (staProtocol.isFrontErr()) {
+//                        errMsg = "鍓嶈秴闄�";
+//                        back = true;
+//                    }
+//                    if (!back && staProtocol.isBackErr()) {
+//                        errMsg = "鍚庤秴闄�";
+//                        back = true;
+//                    }
+//                    if (!back && staProtocol.isHighErr()) {
+//                        errMsg = "楂樿秴闄�";
+//                        back = true;
+//                    }
+//                    if (!back && staProtocol.isLeftErr()) {
+//                        errMsg = "宸﹁秴闄�";
+//                        back = true;
+//                    }
+//                    if (!back && staProtocol.isRightErr()) {
+//                        errMsg = "鍙宠秴闄�";
+//                        back = true;
+//                    }
+//                    if (!back && staProtocol.getWeight() > 1000) {
+//                        errMsg = "瓒呴噸鎴栨湭璇诲彇";
+//                        back = true;
+//                    }
+//                    if (!back && staProtocol.isBarcodeErr()) {
+//                        errMsg = "鎵爜澶辫触";
+//                        back = true;
+//                    }
+//
+//                    // 閫�鍥�
+//                    if (back) {
+//                        log.info("errmsg: " + errMsg);
+////                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
+//                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
+//
+//                        if (!staProtocol.isLoading()) {
+//                            continue;
+//                        }
+//                        if (!staProtocol.isPakMk()) {
+//                            continue;
+//                        }
+//                        staProtocol.setWorkNo(wrkNo);
+//                        News.info("{}PLC鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg, wrkNo);
+//                        wrkNo++;
+//                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
+//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                        log.error("杈撻�佺嚎涓嬪彂1锛�" + wrkNo + "," + inSta.getBackSta());
+//                    }
+//
+//                    // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+//                    if (staProtocol.isAutoing()
+//                            && staProtocol.isLoading()
+//                            && staProtocol.isInEnable()
+//                            && !staProtocol.isEmptyMk()
+//                            && staProtocol.isPakMk()) {
+//                        if (Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
+//                            News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+//
+//                            staProtocol.setWorkNo(wrkNo);
+//                            News.info("{}barcode鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg, wrkNo);
+//                            wrkNo++;
+//                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                            log.error("杈撻�佺嚎涓嬪彂1锛�" + wrkNo + "," + inSta.getBackSta());
+//                            continue;
+//                        }
+//                        // 鍒ゆ柇閲嶅宸ヤ綔妗�
+//                        WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
+//                        if (wrkMast != null) {
+//                            News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,璇锋煡鐪媁CS杈撻�佺嚎鐣岄潰,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
+//                            continue;
+//                        }
+//                        WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+//                                .eq("barcode", barcode)
+//                                .in("io_type", 107, 103, 57));
+//                        if (!Cools.isEmpty(checkPick)) {
+//                            continue;
+//                        }
+//                        try {
+//                            LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+//
+//                            SearchLocParam param = new SearchLocParam();
+//                            locTypeDto.setLocType1((short) 1);
+//                            param.setBarcode(barcode);
+//                            param.setIoType(1);
+//                            param.setSourceStaNo(inSta.getStaNo());
+//                            param.setLocType1(locTypeDto.getLocType1());
+//                            param.setWeight(staProtocol.getWeight());
+//                            String response = new HttpHandler.Builder()
+//                                    .setTimeout(30,TimeUnit.SECONDS)
+//                                    .setUri(wmsUrl)
+//                                    .setPath("/rpc/pakin/loc/v1")
+//                                    .setJson(JSON.toJSONString(param))
+//                                    .build()
+//                                    .doPost();
+//                            JSONObject jsonObject = JSON.parseObject(response);
+//                            if (jsonObject.getInteger("code").equals(200)) {
+//                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+//                                barcodeThread.setBarcode("");
+//                                staProtocol.setWorkNo(dto.getWorkNo());
+//                                //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
+//                                staProtocol.setStaNo(dto.getStaNo().shortValue());
+//                                devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                                boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                                log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo());
+//
+//                                ledThread.errorReset();
+//                                log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
+//
+//                                if (!result) {
+//                                    News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+//
+//                                    throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+//                                }
+//                            } else {
+//                                if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) {
+//                                    continue;
+//                                }
+//                                staProtocol.setWorkNo(wrkNo);
+//                                wrkNo++;
+//                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
+//                                devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                                log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo());
+//
+//                                String errorMsg = jsonObject.getString("msg");
+//                                if (!Cools.isEmpty(errorMsg)) {
+//                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+//                                }
+//                            }
+//
+//                        } catch (Exception e) {
+//                            e.printStackTrace();
+//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                        }
+//
+//                    }
+//                }
+//            }
+//        }
+//
+//    }
+
+    // 闈欐�佺嚎绋嬪畨鍏⊿et锛岀敤浜庡瓨鍌ㄦ鍦ㄨ皟鐢ㄦ帴鍙g殑宸ヤ綅鍙�
+    private static final Set<Integer> callingStations = ConcurrentHashMap.newKeySet();
+
+    public synchronized void generateStoreWrkFile(Integer mark) {
+        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
+        final Set<String> INVALID_BARCODES = new HashSet<>(Arrays.asList("NG", "NoRead", "00000000"));
+
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            for (DevpSlave.Sta inSta : devp.getInSta()) {
+
+                // 銆愬垽鏂伐浣嶆槸鍚︽鍦ㄨ皟鐢ㄦ帴鍙o紝璺宠繃姝e湪璋冪敤鐨勩��
+                int staNo = inSta.getStaNo();
+                if (!callingStations.add(staNo)) {
+                    // 濡傛灉宸插瓨鍦ㄨ皟鐢ㄤ腑锛岃烦杩�
+                    log.info("宸ヤ綅{}鎺ュ彛璋冪敤涓紝璺宠繃鏈", staNo);
+                    continue;
+                }
+
+                try {
+                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
+                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+
+                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                    StaProtocol staProtocolIn = devpThread.getStation().get(staNo - 1);
+
+                    if (staProtocolIn == null || barcodeThread == null) continue;
+                    staProtocolIn = staProtocolIn.clone();
+                    String barcode = barcodeThread.getBarcode();
+
+                    // 濡傛灉鍓嶅伐浣嶆湁璐� + 鎵爜鍣ㄦ湁鏉$爜
+                    if (staProtocolIn.getStamp() == 1 && barcode != null && !barcode.isEmpty()) {
+                        log.info("鐢熸垚淇″彿鏃堕棿: {}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
+                        if (wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                                .eq("barcode", barcode)
+                                .in("io_type", 107, 103, 57)) != null) {
+                            continue;
+                        }
+
+                        try {
+
+
+                            SearchLocParam param = new SearchLocParam();
+                            param.setBarcode(barcode);
+                            param.setIoType(1);
+                            param.setSourceStaNo(staNo);
+                            param.setLocType1((short) 1);
+                            param.setWeight(staProtocol.getWeight());
+
+                            String response = new HttpHandler.Builder()
+                                    .setTimeout(30, TimeUnit.SECONDS)
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/pakin/loc/v1")
+                                    .setJson(JSON.toJSONString(param))
+                                    .build()
+                                    .doPost();
+
+                            JSONObject json = JSON.parseObject(response);
+                            if (json.getInteger("code").equals(200)) {
+                                StartupDto dto = json.getObject("data", StartupDto.class);
+                                barcodeThread.setBarcode("");
+                                staProtocolIn.setWorkNo(dto.getWorkNo());
+                                devpThread.setPakMk(staProtocolIn.getSiteId(), false);
+                                boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocolIn));
+                                log.info("鐢熸垚浠诲姟鏃堕棿: {}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
+
+                                ledThread.errorReset();
+                                log.error("宸ヤ綔鍙蜂笅鍙�2锛�" + dto.getWorkNo() + "," + dto.getStaNo());
+
+                                if (!result) {
+                                    News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+                                    throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                                }
+                            } else {
+                                String msg = json.getString("msg");
+                                if (!"宸ヤ綔妗e凡瀛樺湪".equals(msg)) {
+                                    staProtocol.setWorkNo(wrkNo++);
+                                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
+                                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                                    log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo());
+                                    if (!Cools.isEmpty(msg)) {
+                                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, msg));
+                                    }
+                                }
+                            }
+                        } catch (Exception e) {
+                            log.error("缁勬墭浠诲姟寮傚父锛�", e);
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        }
+
+                        continue;
+                    } else {
+                        // 灏哄/閲嶉噺/鎵爜寮傚父妫�娴�
+                        if (staProtocol == null) continue;
+                        staProtocol = staProtocol.clone();
+                        boolean back = false;
+                        String errMsg = "";
+
+                        if (staProtocol.isFrontErr()) { errMsg = "鍓嶈秴闄�"; back = true; }
+                        else if (staProtocol.isBackErr()) { errMsg = "鍚庤秴闄�"; back = true; }
+                        else if (staProtocol.isHighErr()) { errMsg = "楂樿秴闄�"; back = true; }
+                        else if (staProtocol.isLeftErr()) { errMsg = "宸﹁秴闄�"; back = true; }
+                        else if (staProtocol.isRightErr()) { errMsg = "鍙宠秴闄�"; back = true; }
+                        else if (staProtocol.getWeight() > 1000) { errMsg = "瓒呴噸鎴栨湭璇诲彇"; back = true; }
+                        else if (staProtocol.isBarcodeErr()) { errMsg = "鎵爜澶辫触"; back = true; }
+
+                        // 灏哄寮傚父鍥為��
+                        if (back && staProtocol.getWorkNo() <9999) {
+//                            log.info("errmsg: " + errMsg);
+                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
+
+                            if (!staProtocol.isLoading() || !staProtocol.isPakMk()) continue;
+                            staProtocol.setWorkNo(wrkNo++);
+                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            log.error("杈撻�佺嚎涓嬪彂1锛�" + wrkNo + "," + inSta.getBackSta());
+                            continue;
+                        }
+
+//                        // 鍏ュ簱鏉′欢婊¤冻锛屽紑濮嬭姹傚叆搴撳湴鍧�
+//                        if (staProtocol.isAutoing() && staProtocol.isLoading()
+//                                && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
+//
+//                            if (Cools.isEmpty(barcode) || INVALID_BARCODES.contains(barcode)) {
+//                                News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+//                                staProtocol.setWorkNo(wrkNo++);
+//                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
+//                                devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                                log.error("杈撻�佺嚎涓嬪彂1锛歿} , {}", wrkNo, inSta.getBackSta());
+//                                continue;
+//                            }
+//
+//                            if (wrkMastMapper.selectPakInStep1(staNo, barcode) != null ||
+//                                    wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+//                                            .eq("barcode", barcode)
+//                                            .in("io_type", 107, 103, 57)) != null) {
+//                                News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛�2.璁惧涓婅蛋锛夌殑鏁版嵁锛岃鏌ョ湅WCS杈撻�佺嚎鐣岄潰");
+//                                continue;
+//                            }
+//
+//                            try {
+//                                SearchLocParam param = new SearchLocParam();
+//                                param.setBarcode(barcode);
+//                                param.setIoType(1);
+//                                param.setSourceStaNo(staNo);
+//                                param.setLocType1((short) 1);
+//                                param.setWeight(staProtocol.getWeight());
+//
+//                                String response = new HttpHandler.Builder()
+//                                        .setTimeout(30, TimeUnit.SECONDS)
+//                                        .setUri(wmsUrl)
+//                                        .setPath("/rpc/pakin/loc/v1")
+//                                        .setJson(JSON.toJSONString(param))
+//                                        .build()
+//                                        .doPost();
+//
+//                                JSONObject json = JSON.parseObject(response);
+//                                if (json.getInteger("code").equals(200)) {
+//                                    StartupDto dto = json.getObject("data", StartupDto.class);
+//                                    barcodeThread.setBarcode("");
+//                                    staProtocol.setWorkNo(dto.getWorkNo());
+//                                    staProtocol.setStaNo(dto.getStaNo().shortValue());
+//                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                                    ledThread.errorReset();
+//                                    log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo());
+//
+//                                    if (!result) {
+//                                        News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+//                                        throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+//                                    }
+//                                } else {
+//                                    String msg = json.getString("msg");
+//                                    if (!"宸ヤ綔妗e凡瀛樺湪".equals(msg)) {
+//                                        staProtocol.setWorkNo(wrkNo++);
+//                                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
+//                                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                                        log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo());
+//                                        if (!Cools.isEmpty(msg)) {
+//                                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, msg));
+//                                        }
+//                                    }
+//                                }
+//                            } catch (Exception e) {
+//                                log.error("缁勬墭浠诲姟寮傚父锛�", e);
+//                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                            }
+//                        }
+                    }
+                } finally {
+                    // 銆愭棤璁烘帴鍙h皟鐢ㄦ槸鍚︽垚鍔燂紝鏈�鍚庨兘閲婃斁璋冪敤鏍囪銆�
+                    callingStations.remove(staNo);
+                    log.debug("宸ヤ綅{}鎺ュ彛璋冪敤瀹屾垚锛岄噴鏀捐皟鐢ㄦ爣璁�", staNo);
+                }
+            }
+        }
+    }
+
 
     /**
      * wms鍏ュ簱
@@ -911,7 +1344,7 @@
                 if (crnProtocol.getLastIo().equals("I")) {
                     if (basCrnp.getInEnable().equals("Y")) {
                         //mark - 1 - ....
-                        this.crnStnToLoc(crn, crnProtocol, mark); //  鍏ュ簱
+                        this.crnStnToLoc(crn, crnProtocol, mark, crnThread); //  鍏ュ簱
                         crnProtocol.setLastIo("O");
                     } else if (basCrnp.getOutEnable().equals("Y")) {
                         //mark - 2 - ....
@@ -925,15 +1358,15 @@
                         this.locToCrnStn(crn, crnProtocol, mark); //  鍑哄簱
                         crnProtocol.setLastIo("I");
                     } else if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnStnToLoc(crn, crnProtocol, mark); //  鍏ュ簱
+                        this.crnStnToLoc(crn, crnProtocol, mark, crnThread); //  鍏ュ簱
                         crnProtocol.setLastIo("O");
                     }
                 }
             }
             // 搴撲綅绉昏浆
             //mark - 3 - ....
-//            this.locToLoc(crn, crnProtocol, mark);
-//            this.crnRebackHp(crnProtocol, crnThread);
+            this.locToLoc(crn, crnProtocol, mark);
+            this.crnRebackHp(crnProtocol, crnThread,null);
 
         }
 //        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鎵ц瀹屾垚");
@@ -942,55 +1375,103 @@
     /**
      * 鍥炲師鐐癸紝鍫嗗灈鏈烘病鏈夋墽琛屼腑浠诲姟锛岃澶囧瓨鍦ㄥ叆搴撲换鍔℃椂鍙洖鍘熺偣
      */
-    public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread) {
-//        for (CrnSlave crn : slaveProperties.getCrn()) {
-//            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-//            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
-//            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-//            if (crnProtocol == null) {
-//                continue;
-//            }
-//            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
-//            if (basCrnp == null) {
-//                log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
-//                continue;
-//            }
-        if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
-            if (crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) {
-                return;
+    public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread,String staNo) {
+        if(staNo == null){
+            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
+                if (crnProtocol.getBay() == 121 || crnProtocol.getBay() == 1) {
+                    return;
+                }
+                int x=1;
+                switch (crnProtocol.getCrnNo()){
+                    case 1: x =1; break;
+                    case 2: x =3; break;
+                    case 3: x =5; break;
+                    case 4: x =7; break;
+                }
+
+                // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�3,12
+                if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) {
+                    return;
+                }
+
+                //鍫嗗灈鏈烘湁鎵ц涓换鍔★紝杩囨护3,4,11,12
+                if (wrkMastMapper.selectCrnWorking(crnProtocol.getCrnNo()) != null) {
+                    return;
+                }
+
+                //杈撻�佺嚎娌℃湁鍏ュ簱浠诲姟锛岃繃婊�2
+                if (wrkMastMapper.selectDevWorking(crnProtocol.getCrnNo()) != null) {
+                    return;
+                }
+                News.info("鍫嗗灈鏈哄彫鍥炲師鐐�==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満鏈夊叆搴撲换鍔�,鍙洖鍘熺偣");
+                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                CrnCommand crnCommand = new CrnCommand();
+                crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
+                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                crnCommand.setTaskMode(CrnTaskModeType.X_MOVE); // 浠诲姟妯″紡:  鍥炲師鐐�
+                crnCommand.setSourcePosX((short) x);     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosY((short) 121);     // 婧愬簱浣嶅垪
+                crnCommand.setSourcePosZ((short) 2);     // 婧愬簱浣嶅眰
+                crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
+                crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
+                crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
+                if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
+                    News.error("鍫嗗灈鏈哄洖鍘熺偣鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand));
+                }
+                crnThread.setBackHpFlag(true);
+            }
+        } else {
+            int y = 1; // 榛樿鍒�
+            int x=1;
+            switch (crnProtocol.getCrnNo()){
+                case 1: x =1; break;
+                case 2: x =3; break;
+                case 3: x =5; break;
+                case 4: x =7; break;
+            }
+            int staNoInt = Integer.parseInt(staNo);
+
+            int z = staNoInt / 100; // 灞�
+
+            if ((staNoInt >= 121 && staNoInt <= 126) || (staNoInt >= 221 && staNoInt <= 231) || (staNoInt >= 411 && staNoInt <= 414)) {
+                y = 121;
             }
 
-            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�3,12
-            if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) {
-                return;
-            }
+            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
+                if (crnProtocol.getBay() == y) {
+                    return;
+                }
 
-            //鍫嗗灈鏈烘湁鎵ц涓换鍔★紝杩囨护3,4,11,12
-            if (wrkMastMapper.selectCrnWorking(crnProtocol.getCrnNo()) != null) {
-                return;
-            }
+                // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) {
+                    return;
+                }
 
-            //杈撻�佺嚎娌℃湁鍏ュ簱浠诲姟锛岃繃婊�2
-            if (wrkMastMapper.selectDevWorking(crnProtocol.getCrnNo()) == null) {
-                return;
+                // 鍫嗗灈鏈烘湁鎵ц涓换鍔�
+                if (wrkMastMapper.selectCrnWorking(crnProtocol.getCrnNo()) != null) {
+                    return;
+                }
+
+
+                News.info("鍫嗗灈鏈哄彫鍥炲師鐐�==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満鏈夊叆搴撲换鍔�,鍙洖鍘熺偣");
+                // 鍛戒护涓嬪彂
+                CrnCommand crnCommand = new CrnCommand();
+                crnCommand.setCrnNo(crnProtocol.getCrnNo());
+                crnCommand.setTaskNo((short) 9999);
+                crnCommand.setAckFinish((short) 0);
+                crnCommand.setTaskMode(CrnTaskModeType.X_MOVE);
+                crnCommand.setSourcePosX((short) x); // 榛樿鎺掑缁堜负1
+                crnCommand.setSourcePosY((short) y); // 鍔ㄦ�佸垪
+                crnCommand.setSourcePosZ((short) z); // 鍔ㄦ�佸眰
+                crnCommand.setDestinationPosX((short) 0);
+                crnCommand.setDestinationPosY((short) 0);
+                crnCommand.setDestinationPosZ((short) 0);
+                if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
+                    News.error("鍫嗗灈鏈哄洖鍘熺偣鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand));
+                }
+                crnThread.setBackHpFlag(true);
             }
-            News.info("鍫嗗灈鏈哄彫鍥炲師鐐�==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満鏈夊叆搴撲换鍔�,鍙洖鍘熺偣");
-            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-            CrnCommand crnCommand = new CrnCommand();
-            crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-            crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
-            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-            crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍥炲師鐐�
-            crnCommand.setSourcePosX((short) 0);     // 婧愬簱浣嶆帓
-            crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
-            crnCommand.setSourcePosZ((short) 0);     // 婧愬簱浣嶅眰
-            crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
-            crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
-            crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
-            if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
-                News.error("鍫嗗灈鏈哄洖鍘熺偣鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand));
-            }
-            crnThread.setBackHpFlag(true);
         }
 //        }
     }
@@ -998,7 +1479,7 @@
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
      */
-    public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
+    public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol, Integer mark,CrnThread crnThread) {
         News.warnNoLog("" + mark + " - 1" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽叆搴�");
         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
             boolean flag = false;
@@ -1017,11 +1498,22 @@
                 News.error("" + mark + " - 1" + " - 2" + " - 鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                 continue;
             }
-//            if(staProtocol.getWorkNo() == 9998){
-//                continue;
+            WrkMast wrkMast1 = wrkMastMapper.selectPakInOne(slave.getId());
+            if(wrkMast1 != null){
+                crnRebackHp(crnProtocol,crnThread,wrkMast1.getStaNo().toString());
+            }
+//            if(staProtocol.getSiteId() == 225){
+//                News.info("鍏ュ簱绔欑偣淇℃伅{}",staProtocol);
+//            staProtocol.isLoading() &&
 //            }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
+            if(staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9998){
+                log.info("璇诲彇鍒板伐浣滃彿鏃堕棿: {}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
+
+            }
+            if (staProtocol.isAutoing()  && staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9998
                     && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+                log.info("鍙叆鏃堕棿: {}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
+
                 flag = true;
             }
             if (!flag) {
@@ -1032,8 +1524,9 @@
                 continue;
             }
             // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
-            WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
+            WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo(), crnStn.getStaNo());
             if (null == wrkMast) {
+                log.info("" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
                 News.infoNoLog("" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
 //                log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
                 continue;
@@ -1060,48 +1553,6 @@
                 continue;
             }
 
-//            // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
-//            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
-//                News.warnNoLog("" + mark + " - 1" + " - 8" + " - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}", wrkMast.getWrkNo());
-//                String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
-//                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-//                // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
-//                if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
-//                    News.warnNoLog("" + mark + " - 1" + " - 9" + " - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}", shallowLoc.getLocSts());
-//                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
-//                    if (null == waitWrkMast) {
-//                        News.error("" + mark + " - 1" + " - 10" + " - {}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
-//                    } else {
-//                        waitWrkMast.setIoPri(15D);
-//                        waitWrkMast.setModiTime(new Date());
-//                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
-//                            News.error("" + mark + " - 1" + " - 11" + " - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
-//                        }
-//                        continue;
-//                    }
-//
-//                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
-//                    News.warnNoLog("" + mark + " - 1" + " - 12" + " - // F銆丏  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
-//                    // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
-//                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
-//                        wrkMast.setUpdMk("Y");
-//                        wrkMast.setIoPri(14D);
-//                        wrkMastMapper.updateById(wrkMast);
-//                        // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
-//                        moveLocForDeepLoc(slave, shallowLoc, mark);
-//                        // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
-////                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
-//                    }
-//                    continue;
-//                } else if (shallowLoc.getLocSts().equals("Q")) {
-//                    News.warnNoLog("" + mark + " - 1" + " - 13" + " - // Q  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
-//                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
-//                    if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
-//                        News.infoNoLog("" + mark + " - 1" + " - 14" + " - // F銆丏  宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}", waitWrkMast.getWrkSts());
-//                        continue;
-//                    }
-//                }
-//            }
             News.warnNoLog("" + mark + " - 1" + " - 15" + " - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}", wrkMast.getWrkNo().shortValue()
                     , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue()
                     , locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue());
@@ -1119,6 +1570,8 @@
             crnCommand.setDestinationPosY((short) (locMast.getBay1() + slave.getOffset()));     // 鐩爣搴撲綅鍒�
             crnCommand.setDestinationPosZ((short) (locMast.getLev1() + slave.getOffset()));     // 鐩爣搴撲綅灞�
 //            crnCommand.setTraySize(locMast.getLocType1() == 2);
+            log.info("鍫嗗灈鏈轰换鍔′笅鍙戞椂闂�: {}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
+
             if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                 News.error("" + mark + " - 1" + " - 16" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
             } else {
@@ -1159,7 +1612,7 @@
 //            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo());
             List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
             for (WrkMast wrkMast : wrkMasts) {
-                if (wrkMast == null) {
+                 if (wrkMast == null) {
                     continue;
                 }
                 // 宸ヤ綔妗g姸鎬佸垽鏂�
@@ -1198,9 +1651,21 @@
                     break;
 //                    continue;
                 }
+                boolean canOut;
+                Config config = configService.selectConfigByCode("C-OUT-OP");
+
+                if (Cools.isEmpty(config) || config.getValue().equals("false") ){
+                    canOut = staProtocol.isAutoing()
+                            && !staProtocol.isLoading()
+                            && "Y".equals(staDetl.getCanouting())
+                            && staProtocol.getWorkNo() == 0
+                            && staProtocol.isOutEnable();
+                } else {
+                    canOut = staProtocol.isAutoing();
+                }
+
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
-                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+                if (canOut) {
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                     // 鍫嗗灈鏈烘帶鍒惰繃婊�
@@ -1508,33 +1973,47 @@
             if (crnProtocol == null) {
                 continue;
             }
-            //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
-            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
-                News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
+            if(crnProtocol.getTaskNo() == 9999){
+                //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+                    News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
 
-                // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
-                WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
-                if (wrkMast == null) {
-                    News.error("" + mark + " - 1" + " - 鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
-                    continue;
-                }
-                // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
-                if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
-                    wrkMast.setWrkSts(4L);
-                } else {
-                    continue;
-                }
-                Date now = new Date();
-                wrkMast.setCrnEndTime(now);
-                wrkMast.setModiTime(now);
-                // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                if (wrkMastMapper.updateById(wrkMast) > 0) {
+
+
                     // 鍫嗗灈鏈哄浣�
-                    log.error(wrkMast.getWrkNo() + "浠诲姟淇敼鐘舵��4鎴愬姛锛屽浣嶅爢鍨涙満={}", crnThread.getCrnProtocol().getCrnNo());
                     News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo());
                     crnThread.setResetFlag(true);
                 }
+            }else{
+                //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+                    News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
+
+                    // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
+                    if (wrkMast == null ) {
+                        News.error("" + mark + " - 1" + " - 鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+                        continue;
+                    }
+                    // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
+                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+                        wrkMast.setWrkSts(4L);
+                    } else {
+                        continue;
+                    }
+                    Date now = new Date();
+                    wrkMast.setCrnEndTime(now);
+                    wrkMast.setModiTime(now);
+                    // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                    if (wrkMastMapper.updateById(wrkMast) > 0) {
+                        // 鍫嗗灈鏈哄浣�
+                        log.error(wrkMast.getWrkNo() + "浠诲姟淇敼鐘舵��4鎴愬姛锛屽浣嶅爢鍨涙満={}", crnThread.getCrnProtocol().getCrnNo());
+                        News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo());
+                        crnThread.setResetFlag(true);
+                    }
+                }
             }
+
 
 
         }
@@ -1856,14 +2335,14 @@
                         } else {
                             total = locDetl.getAnfme();
                         }
-                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(), total));
+                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(),wrkDetl.getLuHao(), total));
                         }
-                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(), total));
+                        if (wrkMast.getIoType() == 103 ) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(),wrkDetl.getLuHao(), total));
                         }
                         if (wrkMast.getIoType() == 107) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(), total));
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(),wrkDetl.getLuHao(), total));
                         }
                     });
                 }

--
Gitblit v1.9.1