From 0d81063735b221b81413784db00aff62e77f637b Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期一, 29 九月 2025 13:24:20 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  781 +++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 695 insertions(+), 86 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 ad0bdec..6e13098 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -27,7 +27,10 @@
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.*;
-import com.zy.core.model.*;
+import com.zy.core.model.CrnSlave;
+import com.zy.core.model.DevpSlave;
+import com.zy.core.model.LedSlave;
+import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.command.LedCommand;
 import com.zy.core.model.command.RgvCommand;
@@ -153,7 +156,7 @@
                     errMsg = "鍙宠秴闄�";
                     back = true;
                 }
-                if (!back && staProtocol.getWeight() > 1000) {
+                if (!back && staProtocol.getWeight() > 15000) {
                     errMsg = "瓒呴噸鎴栨湭璇诲彇";
                     back = true;
                 }
@@ -183,13 +186,14 @@
                     if (!staProtocol.isPakMk()) {
                         continue;
                     }
-                    staProtocol.setWorkNo(wrkNo);
+                    staProtocol.setWorkNo(wrkNo);//閫�鍥� 宸ヤ綔鍙�:10000
                     News.info("{}PLC鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg, wrkNo);
-                    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());
+                    break;//瓒呴檺鎵樼洏閫�鍥炰笉鐢熸垚宸ヤ綔妗�
                 }
 
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
@@ -198,13 +202,13 @@
                         && staProtocol.isInEnable()
                         && !staProtocol.isEmptyMk()
                         && staProtocol.isPakMk()
-                        && staProtocol.getWorkNo()==9999) {
+                        && staProtocol.getWorkNo() == 9999) {
                     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++;
+//                        wrkNo++;
                         staProtocol.setStaNo(inSta.getBackSta().shortValue());
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
                         MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -223,6 +227,13 @@
 //                        }
                         News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,璇锋煡鐪媁CS杈撻�佺嚎鐣岄潰,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
                         MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo()));
+                        staProtocol.setWorkNo(wrkMast.getWrkNo());
+                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        if (!result) {
+                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                        }
                         continue;
 //                        barcodeThread.setBarcode("");
 //                        staProtocol.setWorkNo(wrkMast.getWrkNo());
@@ -260,7 +271,7 @@
                         param.setLocType1(locTypeDto.getLocType1());
                         param.setWeight(staProtocol.getWeight());
                         String response = new HttpHandler.Builder()
-                                .setTimeout(30,TimeUnit.SECONDS)
+                                .setTimeout(30, TimeUnit.SECONDS)
                                 .setUri(wmsUrl)
                                 .setPath("/rpc/pakin/loc/v1")
                                 .setJson(JSON.toJSONString(param))
@@ -311,7 +322,7 @@
                                 continue;
                             }
                             staProtocol.setWorkNo(wrkNo);
-                            wrkNo++;
+//                            wrkNo++;
                             staProtocol.setStaNo(inSta.getBackSta().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -323,7 +334,7 @@
                                 MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                             }
 //                            }
-//                            News.error(methodName + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                            News.error(methodName + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                         }
 
 
@@ -337,7 +348,7 @@
 
             }
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 缁勬墭  ===銆嬫墽琛屽畬鎴�");
+        News.infoNoLog("" + mark + " - 0" + " - 缁勬墭  ===銆嬫墽琛屽畬鎴�");
 
     }
 
@@ -426,7 +437,7 @@
 
                 StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
 
-                if(staProtocol == null) {
+                if (staProtocol == null) {
 //                    News.error("绔欑偣淇℃伅鏈幏寰�");
                     continue;
                 }
@@ -468,7 +479,7 @@
                 // 閫�鍥�
 //                if (back) {
 //                    log.info("errmsg: " + errMsg);
-////                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
+//                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
 //                    MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errMsg));
 //                    if (!staProtocol.isLoading()) {
 //                        continue;
@@ -503,7 +514,7 @@
 //
 //
 //                    if (!Cools.isEmpty(barcode)) {
-////                    News.info(""+mark+" - 1"+" - {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
+//                    News.info(""+mark+" - 1"+" - {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
 //                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
 //                            continue;
 //                        }
@@ -520,7 +531,7 @@
                     staProtocol = staProtocol.clone();
                 }
 
-//                // 鍏ュ嚭搴撴ā寮忓垽鏂�
+                // 鍏ュ嚭搴撴ā寮忓垽鏂�
 //                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
 
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
@@ -615,7 +626,7 @@
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
                     staProtocol.setWorkNo(wrkMast.getWrkNo());
 //                    if(staProtocol.getSiteId() < 400){
-                        staProtocol.setStaNo(Short.valueOf(wrkMast.getStaNo().toString()));
+                    staProtocol.setStaNo(Short.valueOf(wrkMast.getStaNo().toString()));
 //                    }
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -632,7 +643,7 @@
             }
 
         }
-        News.infoNoLog(""+mark+" - 0"+" - 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱  ===銆嬫墽琛屽畬鎴�");
+        News.infoNoLog("" + mark + " - 0" + " - 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱  ===銆嬫墽琛屽畬鎴�");
     }
 
 
@@ -853,16 +864,21 @@
                         // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
                         wrkMast.setWrkSts(14L);
                         wrkMast.setCrnEndTime(new Date());
+                        wrkMast.setPltType(0);
                         if (wrkMastMapper.updateById(wrkMast) != 0) {
                             // 澶嶄綅鍫嗗灈鏈�
-                            log.error("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,{}", wrkMast.getWrkNo());
-                            crnThread.setResetFlag(true);
+                            log.error("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,{},{}", wrkMast.getWrkNo(), wrkMast.getPltType());
+                            if (wrkMast.getPltType() == 1) {
+                                crnThread.setResetFlag(true);
+                            } else if (wrkMast.getPltType() == 2) {
+                                crnThread.setResetFlagTwo(true);
+                            }
                         } else {
                             News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                         }
 
                     } else {
-                         News.errorNoLog("" + mark + " - 6" + " - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
+                        News.errorNoLog("" + mark + " - 6" + " - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
                                 + " 鍫嗗灈鏈虹姸鎬侊細" + crnProtocol.modeType + "==鑷姩AUTO锛�" + CrnModeType.AUTO
                                 + "銆佸爢鍨涙満浠诲姟鍙凤細" + crnProtocol.getTaskNo() + "==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue()
                                 + "銆佺姸鎬佹灇涓撅細" + crnProtocol.statusType + "==WAITING锛�90 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
@@ -874,12 +890,13 @@
         }
 //        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯  ===銆嬫墽琛屽畬鎴�");
     }
+
     /**
      * 鍫嗗灈鏈洪粯璁ゅ洖鍘熺偣
      */
     public synchronized void crnToInStn(Integer mark) {
-        if(isToOrigin){
-            for (CrnSlave crn : slaveProperties.getCrn()){
+        if (isToOrigin) {
+            for (CrnSlave crn : slaveProperties.getCrn()) {
                 // 鑾峰彇鍫嗗灈鏈轰俊鎭�
                 CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
                 CrnProtocol crnProtocol = crnThread.getCrnProtocol();
@@ -920,29 +937,93 @@
 //            }
 
             // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
-                    && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
+            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getModeType() == CrnModeType.AUTO
+                    && crnProtocol.getForkPos() == 0 && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0) {
                 News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�");
-                // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
-                if (crnProtocol.getLastIo().equals("I")) {
-                    if (basCrnp.getInEnable().equals("Y")) {
-                        //mark - 1 - ....
-                        this.crnStnToLoc(crn, crnProtocol, mark); //  鍏ュ簱
-                        crnProtocol.setLastIo("O");
-                    } else if (basCrnp.getOutEnable().equals("Y")) {
-                        //mark - 2 - ....
-                        this.locToCrnStn(crn, crnProtocol, mark); //  鍑哄簱
-                        crnProtocol.setLastIo("I");
+                if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 0) {
+                    //鍫嗗灈鏈烘病鏈夌墿鏂�
+                    // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
+                    if (crnProtocol.getLastIo().equals("I")) {
+                        if (basCrnp.getInEnable().equals("Y")) {
+                            //mark - 1 - ....
+                            this.inTake(crn, crnProtocol, mark); //  鍏ュ簱
+                            crnProtocol.setLastIo("O");
+                        } else if (basCrnp.getOutEnable().equals("Y")) {
+                            //mark - 2 - ....
+                            this.outTake(crn, crnProtocol, mark); //  鍑哄簱
+                            crnProtocol.setLastIo("I");
+                        }
                     }
-                }
-                // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
-                else if (crnProtocol.getLastIo().equals("O")) {
-                    if (basCrnp.getOutEnable().equals("Y")) {
-                        this.locToCrnStn(crn, crnProtocol, mark); //  鍑哄簱
-                        crnProtocol.setLastIo("I");
-                    } else if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnStnToLoc(crn, crnProtocol, mark); //  鍏ュ簱
-                        crnProtocol.setLastIo("O");
+                    // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
+                    else if (crnProtocol.getLastIo().equals("O")) {
+                        if (basCrnp.getOutEnable().equals("Y")) {
+                            this.outTake(crn, crnProtocol, mark); //  鍑哄簱
+                            crnProtocol.setLastIo("I");
+                        } else if (basCrnp.getInEnable().equals("Y")) {
+                            this.inTake(crn, crnProtocol, mark); //  鍏ュ簱
+                            crnProtocol.setLastIo("O");
+                        }
+                    }
+
+                } else if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 1) {
+                    // 鍫嗗灈鏈烘湁鐗╂枡
+                    WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 1);
+                    if (wrkMast != null) {
+                        if (wrkMast.getIoType() >= 100) {
+                            this.outPut(crn, crnProtocol, mark);
+                        } else {
+                            this.inPut(crn, crnProtocol, mark);
+                        }
+                    } else {
+                        log.error("" + mark + " - 1" + " - 鏈夌墿鏂欐棤宸ヤ綔妗�  ===銆嬪紓甯�");
+                    }
+                } else if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 0) {
+                    // 鍫嗗灈鏈哄伐浣�1鏈夌墿鏂�
+                    WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 1);
+                    if (wrkMast != null) {
+                        //鍏堝垽鏂槸鍑哄簱杩樻槸鍏ュ簱
+                        //鍐嶅垽鏂槸杩樻湁娌℃湁鍚岀被鍨嬬殑宸ヤ綔妗�
+                        if (wrkMast.getIoType() >= 100) {
+                            WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo());
+                            if (wrkMast1 != null) {
+                                this.outTake(crn, crnProtocol, mark);
+                            } else {
+                                this.outPut(crn, crnProtocol, mark);
+                            }
+                        } else {
+                            WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1All(wrkMast.getSourceStaNo(), crn.getId());
+                            if (wrkMast1 != null) {
+                                this.inTake(crn, crnProtocol, mark);
+                            } else {
+                                this.inPut(crn, crnProtocol, mark);
+                            }
+                        }
+                    } else {
+                        log.error("" + mark + " - 1" + " - 鏈夌墿鏂欐棤宸ヤ綔妗�  ===銆嬪紓甯�");
+                    }
+                } else if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 1) {
+                    // 鍫嗗灈鏈哄伐浣�2鏈夌墿鏂�
+                    WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 2);
+                    if (wrkMast != null) {
+                        //鍏堝垽鏂槸鍑哄簱杩樻槸鍏ュ簱
+                        //鍐嶅垽鏂槸杩樻湁娌℃湁鍚岀被鍨嬬殑宸ヤ綔妗�
+                        if (wrkMast.getIoType() >= 100) {
+                            WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo());
+                            if (wrkMast1 != null) {
+                                this.outTake(crn, crnProtocol, mark);
+                            } else {
+                                this.outPut(crn, crnProtocol, mark);
+                            }
+                        } else {
+                            WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1All(wrkMast.getSourceStaNo(), crn.getId());
+                            if (wrkMast1 != null) {
+                                this.inTake(crn, crnProtocol, mark);
+                            } else {
+                                this.inPut(crn, crnProtocol, mark);
+                            }
+                        }
+                    } else {
+                        log.error("" + mark + " - 1" + " - 鏈夌墿鏂欐棤宸ヤ綔妗�  ===銆嬪紓甯�");
                     }
                 }
             }
@@ -953,6 +1034,518 @@
 
         }
 //        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鎵ц瀹屾垚");
+    }
+
+    /**
+     * 鍏堝垽鏂槸涓嶆槸鐗规畩鐨勮竟搴撲綅
+     *
+     * @param locNo
+     * @return
+     */
+    private Integer getCrnStation(String locNo) {
+        String bay = locNo.substring(2, 6);
+        if (Integer.parseInt(bay) == 1) {
+            return 2;
+        } else if (Integer.parseInt(bay) == 29) {
+            return 1;
+        }
+        if (Integer.parseInt(locNo.substring(0, 2)) >= 14) {
+            return 1;
+        } else {
+            return 2;
+        }
+    }
+
+
+    /**
+     * 鍏ュ簱鍙栬揣
+     */
+    public synchronized void inTake(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
+        News.warnNoLog("" + mark + " - 1" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽叆搴�");
+        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
+            boolean flag = false;
+            // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                News.infoNoLog("" + mark + " - 1" + " - 1" + " - 鍫嗗灈鏈哄叆搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц)锛歴taProtocol=" + staProtocol);
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            // 鏌ヨ绔欑偣璇︾粏淇℃伅
+            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+            if (staDetl == null) {
+                News.error("" + mark + " - 1" + " - 2" + " - 鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                continue;
+            }
+
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
+                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+                flag = true;
+            }
+            if (!flag) {
+                News.errorNoLog("" + mark + " - 1" + " - 3" + " - 鍫嗗灈鏈哄叆搴撶珯淇℃伅(浠ヤ笅闇�瑕佸叏true):"
+                        + "鑷姩淇″彿" + staProtocol.isAutoing() + "鏈夌墿淇″彿" + staProtocol.isLoading()
+                        + "宸ヤ綔鍙�>0" + staProtocol.getWorkNo() + "鍙叆淇″彿" + staProtocol.isInEnable()
+                        + "鑳藉叆淇″彿锛坵ms璁剧疆锛�.equals(\"Y\")" + staDetl.getCanining());
+                continue;
+            }
+            // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
+            WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
+            if (null == wrkMast) {
+                News.infoNoLog("" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
+//                log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
+                continue;
+            }
+            // 鑾峰彇搴撲綅淇℃伅
+            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+            if (locMast == null) {
+                News.error("" + mark + " - 1" + " - 5" + " - 鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+                continue;
+            }
+            if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
+                News.error("" + mark + " - 1" + " - 6" + " - 鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+                continue;
+            }
+
+            // 鍫嗗灈鏈烘帶鍒惰繃婊�
+            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+//                News.infoNoLog(""+mark+" - 1"+" - 7"+" - 鍫嗗灈鏈烘帶鍒惰繃婊�:鍫嗗灈鏈烘槸鍚︾┖闂�={}锛屼换鍔″彿={}", crnProtocol.getStatusType(),crnProtocol.getTaskNo());
+                continue;
+            }
+
+            WrkMast wrkMast103 = wrkMastMapper.selectPakInStep103(slave.getId());
+            if (wrkMast103 != null) {
+                News.error("" + mark + " - 1" + " - 8" + " - 鍫嗗灈鏈烘鍦ㄦ墽琛屽叾浠栦换鍔�,璇风◢鍚庡啀璇�");
+            }
+
+            Integer crnStation = getCrnStation(wrkMast.getLocNo());
+            if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
+                News.error("" + mark + " - 1" + " - 9" + " - 鍫嗗灈鏈烘敼宸ヤ綅瀛樺湪宸ヤ綔妗�,宸ヤ綅={}", crnStation);
+            }
+
+            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                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());
+
+            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            CrnCommand crnCommand = new CrnCommand();
+            crnCommand.setPltType(crnStation);
+            crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+//            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+            crnCommand.setTaskMode(CrnTaskModeType.TAKE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
+//            crnCommand.setDestinationPosX((short) (locMast.getRow1() + slave.getOffset()));     // 鐩爣搴撲綅鎺�
+//            crnCommand.setDestinationPosY((short) (locMast.getBay1() + slave.getOffset()));     // 鐩爣搴撲綅鍒�
+//            crnCommand.setDestinationPosZ((short) (locMast.getLev1() + slave.getOffset()));     // 鐩爣搴撲綅灞�
+//            crnCommand.setTraySize(locMast.getLocType1() == 2);
+            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+                News.error("" + mark + " - 1" + " - 16" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+            } else {
+
+                // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 103.鍚婅溅鍏ュ簱涓�
+                Date now = new Date();
+                wrkMast.setWrkSts(103L);
+                wrkMast.setPltType(1);
+                wrkMast.setCrnStrTime(now);
+                wrkMast.setModiTime(now);
+                if (wrkMastMapper.updateById(wrkMast) == 0) {
+                    News.error("" + mark + " - 1" + " - 17" + " - 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 103.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                }
+            }
+        }
+        News.infoNoLog("" + mark + " - 1" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍏ュ簱鍙栬揣鎵ц瀹屾瘯");
+    }
+
+
+    /**
+     * 鍏ュ簱鏀捐揣
+     */
+    public synchronized void inPut(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
+        News.warnNoLog("" + mark + " - 1" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽叆搴�");
+        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
+            boolean flag = false;
+
+            // 鑾峰彇宸ヤ綔鐘舵�佷负104锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
+            WrkMast wrkMast = wrkMastMapper.selectPakInStep104(slave.getId());
+            if (null == wrkMast) {
+                News.infoNoLog("" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}");
+//                log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
+                continue;
+            }
+            // 鑾峰彇搴撲綅淇℃伅
+            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+            if (locMast == null) {
+                News.error("" + mark + " - 1" + " - 5" + " - 鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+                continue;
+            }
+            if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
+                News.error("" + mark + " - 1" + " - 6" + " - 鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+                continue;
+            }
+
+            // 鍫嗗灈鏈烘帶鍒惰繃婊�
+            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+//                News.infoNoLog(""+mark+" - 1"+" - 7"+" - 鍫嗗灈鏈烘帶鍒惰繃婊�:鍫嗗灈鏈烘槸鍚︾┖闂�={}锛屼换鍔″彿={}", crnProtocol.getStatusType(),crnProtocol.getTaskNo());
+                continue;
+            }
+
+            if (wrkMast.getPltType() == 1) {
+                if (crnProtocol.getLoaded() == 0) {
+                    News.infoNoLog("" + mark + " - 1" + " - 7" + " - 鍫嗗灈鏈烘湁宸ヤ綔妗f棤鐗╋紝浠诲姟鍙�={}", crnProtocol.getStatusType(), wrkMast.getWrkNo());
+                }
+            } else if (wrkMast.getPltType() == 2) {
+                if (crnProtocol.getLoadedTwo() == 0) {
+                    News.infoNoLog("" + mark + " - 1" + " - 7" + " - 鍫嗗灈鏈烘湁宸ヤ綔妗f棤鐗╋紝浠诲姟鍙�={}", crnProtocol.getStatusType(), wrkMast.getWrkNo());
+
+                }
+            }
+
+            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                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());
+
+            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            CrnCommand crnCommand = new CrnCommand();
+            crnCommand.setPltType(wrkMast.getPltType());
+            crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+//            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+            crnCommand.setTaskMode(CrnTaskModeType.PUT); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+//            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+//            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+//            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
+            crnCommand.setDestinationPosX((short) (locMast.getRow1() + slave.getOffset()));     // 鐩爣搴撲綅鎺�
+            crnCommand.setDestinationPosY((short) (locMast.getBay1() + slave.getOffset()));     // 鐩爣搴撲綅鍒�
+            crnCommand.setDestinationPosZ((short) (locMast.getLev1() + slave.getOffset()));     // 鐩爣搴撲綅灞�
+//            crnCommand.setTraySize(locMast.getLocType1() == 2);
+            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+                News.error("" + mark + " - 1" + " - 16" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+            } else {
+
+                // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 105.鍚婅溅鍏ュ簱鍙栬揣涓�
+                Date now = new Date();
+                wrkMast.setWrkSts(105L);
+                wrkMast.setCrnStrTime(now);
+                wrkMast.setModiTime(now);
+                if (wrkMastMapper.updateById(wrkMast) == 0) {
+                    News.error("" + mark + " - 1" + " - 17" + " - 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 103.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                }
+            }
+        }
+        News.infoNoLog("" + mark + " - 1" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍏ュ簱鏀捐揣鎵ц瀹屾瘯");
+    }
+
+
+    /**
+     * 鍑哄簱鍙栬揣
+     */
+    public synchronized void outTake(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
+        News.warnNoLog("" + mark + " - 2" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽嚭搴�");
+        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
+            // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
+            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
+            for (WrkMast wrkMast : wrkMasts) {
+                if (wrkMast == null) {
+                    continue;
+                }
+                // 宸ヤ綔妗g姸鎬佸垽鏂�
+                if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
+                    News.error("" + mark + " - 2" + " - 1" + " - 鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
+                    continue;
+                }
+                // 鑾峰彇婧愬簱浣嶄俊鎭�
+                LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
+                if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
+                    News.error("" + mark + " - 2" + " - 2" + " - 鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
+                    continue;
+                }
+                // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+                if (staProtocol == null) {
+                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol);
+                    break;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+
+
+                // 鏌ヨ绔欑偣璇︾粏淇℃伅
+                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+                if (staDetl == null) {
+                    News.error("" + mark + " - 2" + " - 5" + " - 鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                    break;
+                }
+                // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
+                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
+                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+                    // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+//                        continue;
+                        break;
+                    }
+
+                    // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
+                        News.warnNoLog("" + mark + " - 2" + " - 6" + " - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}", wrkMast.getWrkNo());
+                        String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
+                        LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+                        // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+                        if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                            News.warnNoLog("" + mark + " - 2" + " - 7" + " - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}", shallowLoc.getLocSts());
+                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                            if (null == waitWrkMast) {
+                                News.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                            } else {
+                                if (waitWrkMast.getWrkSts() == 11) {
+                                    waitWrkMast.setIoPri(15D);
+                                    waitWrkMast.setModiTime(new Date());
+                                    if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                                        News.error("" + mark + " - 2" + " - 8" + " - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                                    }
+                                    continue;
+                                } else {
+
+                                }
+                            }
+                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                            News.warnNoLog("" + mark + " - 2" + " - 9" + " - // F銆丏  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
+//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                            //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
+                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+                            // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+//                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
+//                                || Cools.isEmpty(waitWrkMast)) {
+                            if (Cools.isEmpty(waitWrkMast)) {
+                                wrkMast.setUpdMk("Y");
+                                wrkMastMapper.updateById(wrkMast);
+                                // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+                                moveLocForDeepLoc(slave, shallowLoc, mark);
+                            }
+                            News.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
+                            continue;
+                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
+                            News.warnNoLog("" + mark + " - 2" + " - 10" + " - // Q銆丼  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
+                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+                            if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+                                News.infoNoLog("" + mark + " - 2" + " - 11" + " - // F銆丏  宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}", waitWrkMast.getWrkSts());
+                                continue;
+                            }
+                        }
+                    }
+
+                    Integer crnStation = getCrnStation(wrkMast.getSourceLocNo());
+                    if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
+                        News.error("" + mark + " - 1" + " - 9" + " - 鍫嗗灈鏈烘敼宸ヤ綅瀛樺湪宸ヤ綔妗�,宸ヤ綅={}", crnStation);
+                    }
+
+                    // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                        break;
+//                        return;
+                    }
+
+                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}", wrkMast.getWrkNo().shortValue()
+                            , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue()
+                            , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
+
+                    // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
+                    CrnCommand crnCommand = new CrnCommand();
+                    crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                    crnCommand.setPltType(crnStation);
+                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+//                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                    crnCommand.setTaskMode(CrnTaskModeType.TAKE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                    crnCommand.setSourcePosX((short) (sourceSta.getRow1() + slave.getOffset()));     // 婧愬簱浣嶆帓
+                    crnCommand.setSourcePosY((short) (sourceSta.getBay1() + slave.getOffset()));     // 婧愬簱浣嶅垪
+                    crnCommand.setSourcePosZ((short) (sourceSta.getLev1() + slave.getOffset()));     // 婧愬簱浣嶅眰
+//                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
+//                    crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
+//                    crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
+                    crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //搴撲綅绫诲瀷
+                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+                        News.error("" + mark + " - 2" + " - 13" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                    } else {
+                        // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
+                        Date now = new Date();
+                        wrkMast.setWrkSts(106L);
+                        wrkMast.setCrnStrTime(now);
+                        wrkMast.setModiTime(now);
+                        if (wrkMastMapper.updateById(wrkMast) == 0) {
+                            News.error("" + mark + " - 2" + " - 14" + " - 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        News.infoNoLog("" + mark + " - 2" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍑哄簱鎵ц瀹屾瘯");
+    }
+
+    /**
+     * 鍑哄簱鏀捐揣
+     */
+    public synchronized void outPut(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
+        News.warnNoLog("" + mark + " - 2" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽嚭搴�");
+        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
+            // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
+            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep107(slave.getId(), crnStn.getStaNo());
+            for (WrkMast wrkMast : wrkMasts) {
+                if (wrkMast == null) {
+                    continue;
+                }
+                // 宸ヤ綔妗g姸鎬佸垽鏂�
+                if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
+                    News.error("" + mark + " - 2" + " - 1" + " - 鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
+                    continue;
+                }
+                // 鑾峰彇婧愬簱浣嶄俊鎭�
+                LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
+                if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
+                    News.error("" + mark + " - 2" + " - 2" + " - 鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
+                    continue;
+                }
+                // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+                if (staProtocol == null) {
+                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol);
+                    break;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+
+
+                // 鏌ヨ绔欑偣璇︾粏淇℃伅
+                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+                if (staDetl == null) {
+                    News.error("" + mark + " - 2" + " - 5" + " - 鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                    break;
+//                    continue;
+                }
+                // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
+                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
+                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+                    // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+//                        continue;
+                        break;
+                    }
+
+                    // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
+                        News.warnNoLog("" + mark + " - 2" + " - 6" + " - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}", wrkMast.getWrkNo());
+                        String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
+                        LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+                        // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+                        if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                            News.warnNoLog("" + mark + " - 2" + " - 7" + " - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}", shallowLoc.getLocSts());
+                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                            if (null == waitWrkMast) {
+                                News.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                            } else {
+                                if (waitWrkMast.getWrkSts() == 11) {
+                                    waitWrkMast.setIoPri(15D);
+                                    waitWrkMast.setModiTime(new Date());
+                                    if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                                        News.error("" + mark + " - 2" + " - 8" + " - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                                    }
+                                    continue;
+                                } else {
+
+                                }
+                            }
+                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                            News.warnNoLog("" + mark + " - 2" + " - 9" + " - // F銆丏  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
+//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                            //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
+                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+                            // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+//                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
+//                                || Cools.isEmpty(waitWrkMast)) {
+                            if (Cools.isEmpty(waitWrkMast)) {
+                                wrkMast.setUpdMk("Y");
+                                wrkMastMapper.updateById(wrkMast);
+                                // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+                                moveLocForDeepLoc(slave, shallowLoc, mark);
+                            }
+                            News.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
+                            continue;
+                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
+                            News.warnNoLog("" + mark + " - 2" + " - 10" + " - // Q銆丼  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
+                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+                            if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+                                News.infoNoLog("" + mark + " - 2" + " - 11" + " - // F銆丏  宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}", waitWrkMast.getWrkSts());
+                                continue;
+                            }
+                        }
+                    }
+
+                    if (wrkMastMapper.selectByPltType(slave.getId(), wrkMast.getPltType()) == null) {
+                        News.error("" + mark + " - 1" + " - 9" + " - 鍫嗗灈鏈烘敼宸ヤ綅瀛樺湪宸ヤ綔妗�,宸ヤ綅={}", wrkMast.getPltType());
+                    }
+
+
+                    // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                        break;
+//                        return;
+                    }
+
+                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}", wrkMast.getWrkNo().shortValue()
+                            , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue()
+                            , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
+
+                    // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
+                    CrnCommand crnCommand = new CrnCommand();
+                    crnCommand.setPltType(wrkMast.getPltType());
+                    crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+//                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                    crnCommand.setTaskMode(CrnTaskModeType.PUT); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+//                    crnCommand.setSourcePosX((short) (sourceSta.getRow1() + slave.getOffset()));     // 婧愬簱浣嶆帓
+//                    crnCommand.setSourcePosY((short) (sourceSta.getBay1() + slave.getOffset()));     // 婧愬簱浣嶅垪
+//                    crnCommand.setSourcePosZ((short) (sourceSta.getLev1() + slave.getOffset()));     // 婧愬簱浣嶅眰
+                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
+                    crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
+                    crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
+                    crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //搴撲綅绫诲瀷
+                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+                        News.error("" + mark + " - 2" + " - 13" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                    } else {
+                        // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
+                        Date now = new Date();
+                        wrkMast.setWrkSts(108L);
+                        wrkMast.setCrnStrTime(now);
+                        wrkMast.setModiTime(now);
+                        if (wrkMastMapper.updateById(wrkMast) == 0) {
+                            News.error("" + mark + " - 2" + " - 14" + " - 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        News.infoNoLog("" + mark + " - 2" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍑哄簱鎵ц瀹屾瘯");
     }
 
     /**
@@ -1175,7 +1768,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,14 +1791,18 @@
                 } else {
                     staProtocol = staProtocol.clone();
                 }
-                StaProtocol staProtocol1 = devpThread.getStation().get(crnStn.getStaNo() - 1);
+                StaProtocol staProtocol1 = staProtocol.getSiteId() == 101 ? devpThread.getStation().get(crnStn.getStaNo() + 1) : devpThread.getStation().get(crnStn.getStaNo() - 1);
+//                StaProtocol staProtocol1 = devpThread.getStation().get(crnStn.getStaNo() - 1);
+//                StaProtocol staProtocol1 = devpThread.getStation().get(crnStn.getStaNo() + 1);
                 if (staProtocol1 == null) {
                     News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol);
                     break;
                 } else {
                     staProtocol1 = staProtocol1.clone();
                 }
-                StaProtocol staProtocol2 = devpThread.getStation().get(crnStn.getStaNo() - 2);
+                StaProtocol staProtocol2 = staProtocol.getSiteId() == 101 ? devpThread.getStation().get(crnStn.getStaNo() + 2) : devpThread.getStation().get(crnStn.getStaNo());
+//                StaProtocol staProtocol2 = devpThread.getStation().get(crnStn.getStaNo() - 2);
+//                StaProtocol staProtocol2 = devpThread.getStation().get(crnStn.getStaNo() + 2);
                 if (staProtocol2 == null) {
                     News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol);
                     break;
@@ -1213,7 +1810,7 @@
                     staProtocol2 = staProtocol2.clone();
                 }
                 //鍑哄叆鍙h緭閫佺嚎鍙厑璁稿瓨鍦ㄤ竴涓墭鐩�
-                if(staProtocol.isLoading() || staProtocol1.isLoading() || staProtocol2.isLoading() ) {
+                if (staProtocol.isLoading() || staProtocol1.isLoading() || staProtocol2.isLoading() || staProtocol.getWorkNo() != 0 || staProtocol1.getWorkNo() != 0 || staProtocol2.getWorkNo() != 0) {
                     break;
                 }
 
@@ -1502,6 +2099,7 @@
 
         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
         CrnCommand crnCommand = new CrnCommand();
+        crnCommand.setPltType(getCrnStation(wrkMast.getSourceLocNo()));
         crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
         crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
         crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
@@ -1544,7 +2142,10 @@
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                 News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
-
+                if (crnProtocol.getTaskNo() == 9999) {
+                    crnThread.setResetFlag(true);
+                    continue;
+                }
                 // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
                 WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                 if (wrkMast == null) {
@@ -1552,8 +2153,19 @@
                     continue;
                 }
                 // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
-                if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+                if (wrkMast.getWrkSts() == 3) {
                     wrkMast.setWrkSts(4L);
+                    wrkMast.setPltType(0);
+                } else if (wrkMast.getWrkSts() == 103) {
+                    wrkMast.setWrkSts(104L);
+                } else if (wrkMast.getWrkSts() == 105) {
+                    wrkMast.setWrkSts(4L);
+                    wrkMast.setPltType(0);
+                } else if (wrkMast.getWrkSts() == 106) {
+                    wrkMast.setWrkSts(107L);
+                } else if (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11) {
+                    wrkMast.setWrkSts(4L);
+                    wrkMast.setPltType(0);
                 } else {
                     continue;
                 }
@@ -1771,7 +2383,7 @@
                                 LedCommand ledCommand = new LedCommand();
                                 ledCommand.setWorkNo(dto.getWorkNo());
                                 ledCommand.setIoType(1);
-                                ledCommand.setTitle("鍏ㄦ澘鍏ュ簱");
+                                ledCommand.setTitle("绌烘澘鍏ュ簱");
                                 ledCommand.setLocNo(dto.getLocNo());
                                 ledCommand.setStaNo(dto.getStaNo());
                                 commands.add(ledCommand);
@@ -1808,7 +2420,7 @@
                 }
             }
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐ф墽琛屽畬鎴�");
+        News.infoNoLog("" + mark + " - 0" + " - 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐ф墽琛屽畬鎴�");
     }
 
     /**
@@ -1890,13 +2502,13 @@
                             total = locDetl.getAnfme();
                         }
                         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(), 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(), 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(), 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(), total));
                         }
                         if (wrkMast.getIoType() == 107) {
-                            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(), 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(), total));
                         }
                     });
                 }
@@ -2060,7 +2672,14 @@
             LocMast loc = null;
             for (Integer row : rows) {
                 if (Utils.isDeepLoc(slaveProperties, row)) {
-                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+                    if (shallowLoc.getBay1() == 1) {
+                        loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
+                    } else if (shallowLoc.getRow1() == 29) {
+                        loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 29);
+                    } else {
+                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+                    }
+
 
                     if (loc != null) {
                         if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
@@ -2079,7 +2698,14 @@
             if (null == loc) {
                 for (Integer row : rows) {
                     if (Utils.isShallowLoc(slaveProperties, row)) {
-                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+                        if (shallowLoc.getBay1() == 1) {
+                            loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
+                        } else if (shallowLoc.getRow1() == 29) {
+                            loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 29);
+                        } else {
+                            loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+                        }
+
 
                         if (null != loc) {//瀵瑰簲娣卞簱浣嶉潪鍦ㄥ簱鐘舵��,涓嶈兘绉诲簱
                             String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
@@ -3211,11 +3837,7 @@
             }
 
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
-
-                if ((crnProtocol.getCrnNo()==3 || crnProtocol.getCrnNo()==4) && crnProtocol.getBay()==0 && crnProtocol.getLevel() == 1) {
-                    continue;
-                }
-                if ((crnProtocol.getCrnNo()==1 || crnProtocol.getCrnNo()==2) && crnProtocol.getBay()==1 && crnProtocol.getLevel() == 1) {
+                if (crnProtocol.getCrnNo() == 1 && crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) {
                     continue;
                 }
                 Page<BasCrnOpt> basCrnOptPage = crnOptService.selectPage(new Page<>(1, 1), new EntityWrapper<BasCrnOpt>().eq("crn_no", crn.getId()).orderBy("send_time", false));
@@ -3241,31 +3863,18 @@
                 News.info("鍫嗗灈鏈烘棤浠诲姟鑷姩鍥炲叆搴撳彛寰呮満==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満");
                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                 CrnCommand crnCommand = new CrnCommand();
-                if (crnProtocol.getCrnNo()==3 || crnProtocol.getCrnNo()==4){
-                    crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-                    crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
-                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍫嗗灈鏈虹Щ鍔�
-                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
-                    crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
-                    crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
-                    crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
-                    crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
-                    crnCommand.setCommand((short) 1);
-                }else {
-                    crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-                    crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
-                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍫嗗灈鏈虹Щ鍔�
-                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
-                    crnCommand.setSourcePosY((short) 1);     // 婧愬簱浣嶅垪
-                    crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
-                    crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
-                    crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
-                    crnCommand.setCommand((short) 1);
-                }
+                crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
+                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+//                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍫嗗灈鏈虹Щ鍔�
+                crnCommand.setTaskMode(CrnTaskModeType.X_MOVE);//浣欏閿愰簰鍥炲師鐐逛换鍔℃ā寮�:  绔欎綅杞Щ
+                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosY((short) 1);     // 婧愬簱浣嶅垪
+                crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
+                crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
+                crnCommand.setDestinationPosY((short) 14);     // 鐩爣搴撲綅鍒�
+                crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
+                crnCommand.setCommand((short) 1);//浠诲姟纭浣�
                 if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
                     News.error("鍫嗗灈鏈虹Щ鍔ㄥ懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand));
                 }

--
Gitblit v1.9.1