From ccc39836716ba323c946cddc78a62049731ebb46 Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期二, 07 十月 2025 08:43:33 +0800
Subject: [PATCH] 联调

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1409 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 1,030 insertions(+), 379 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 44d3135..1af808d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.exception.CoolException;
@@ -26,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;
@@ -94,13 +98,16 @@
     private WrkMastService wrkMastService;
     @Autowired
     private BasRgvMapService basRgvMapService;
+    @Autowired
+    private BasCrnOptService crnOptService;
 
     @Value("${wms.url}")
     private String wmsUrl;
     @Value("${wcs-slave.isToOrigin}")
     private boolean isToOrigin;
 
-    public Integer wrkNo = 10000;
+    public Integer wrkNo = 9998;
+    public Integer emptyWrkNo = 9999;
 
     /**
      * 缁勬墭
@@ -150,7 +157,7 @@
                     errMsg = "鍙宠秴闄�";
                     back = true;
                 }
-                if (!back && staProtocol.getWeight() > 1000) {
+                if (!back && staProtocol.isWeightErr()) {
                     errMsg = "瓒呴噸鎴栨湭璇诲彇";
                     back = true;
                 }
@@ -158,20 +165,10 @@
                     errMsg = "鎵爜澶辫触";
                     back = true;
                 }
-//                if(staProtocol.getWeight() <= 0 ){
-//                    continue;
-//                }
-//                if (!back && staProtocol.getWeight() == 0.0) {
-//                    errMsg = "閲嶉噺鑾峰彇澶辫触";
-//                    back = true;
-//                }
-
-//                News.info("{}閲嶉噺", staProtocol.getWeight());
 
                 // 閫�鍥�
-                if (back) {
+                if (back && !staProtocol.isEmptyMk()) {
                     log.info("errmsg: " + errMsg);
-//                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
                     MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
 
                     if (!staProtocol.isLoading()) {
@@ -180,68 +177,46 @@
                     if (!staProtocol.isPakMk()) {
                         continue;
                     }
-                    staProtocol.setWorkNo(wrkNo);
+                    if (!staProtocol.isInEnable()){
+                        continue;
+                    }
+                    staProtocol.setWorkNo(wrkNo);//閫�鍥� 宸ヤ綔鍙�:9998
                     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());
+                    log.error("杈撻�佺嚎涓嬪彂锛堝叆搴擄級锛�" + wrkNo + "," + inSta.getBackSta());
+                    break;//瓒呴檺鎵樼洏閫�鍥炰笉鐢熸垚宸ヤ綔妗�
                 }
 
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-                if (staProtocol.isAutoing()
-                        && staProtocol.isLoading()
-                        && staProtocol.isInEnable()
-                        && !staProtocol.isEmptyMk()
-                        && staProtocol.isPakMk()) {
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && staProtocol.isPakMk() && staProtocol.getWorkNo() > 9990) {
                     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());
+                        log.error("杈撻�佺嚎涓嬪彂锛堝叆搴擄級锛�" + wrkNo + "," + inSta.getBackSta());
                         continue;
                     }
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
                     if (wrkMast != null) {
-//                        int wrkNo1 = basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo()));
-//                        if (wrkNo1 != 0){
-//                            if (ledThread != null) {
-//                                News.error(methodName + ":鎵爜澶辫触锛岃閲嶈瘯");
-//                            }
-//
-//                        }
                         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());
-//                        staProtocol.setStaNo(RouteUtils.SouStaEnd(null,wrkMast.getSourceStaNo()));
-//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//                        log.info("杈撻�佺嚎涓嬪彂(瀛樺湪璁惧涓婅蛋鐨勫伐浣滄。锛岀洿鎺ヤ笅鍙戯紒))锛�"+wrkMast.getWrkNo()+","+wrkMast.getStaNo());
-//
-//                        ledThread.errorReset();
-//                        log.info("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
-//
-//                        if (!result) {
-//                            News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
-//                            log.error("杈撻�佺嚎涓嬪彂(瀛樺湪璁惧涓婅蛋鐨勫伐浣滄。锛岀洿鎺ヤ笅鍙戯紒)==>鏇存柊plc绔欑偣淇℃伅澶辫触");
-//
-////                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-//                            continue;
-//                        }
-
                     }
-                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
-                            .eq("barcode", barcode)
-                            .in("io_type", 107, 103, 57));
+                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode).in("io_type", 107, 103, 57));
                     if (!Cools.isEmpty(checkPick)) {
                         continue;
                     }
@@ -249,29 +224,34 @@
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
 
                         SearchLocParam param = new SearchLocParam();
-                        locTypeDto.setLocType1((short) 1);
+                        if (staProtocol.isHigh()){
+                            locTypeDto.setLocType1((short) 6);
+                        }else if (staProtocol.isLow()){
+                            locTypeDto.setLocType1((short) 5);
+                        }else if (staProtocol.isMid()){
+                            locTypeDto.setLocType1((short) 2);
+                        }else if (staProtocol.isLower()){
+                            locTypeDto.setLocType1((short) 1);
+                        }else{
+                            throw new CoolException("搴撲綅绫诲瀷閿欒");
+                        }
+//                        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();
+                        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(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());
+                            log.error("杈撻�佺嚎涓嬪彂锛堝叆搴擄級锛�" + dto.getWorkNo() + "," + dto.getStaNo());
 
                             ledThread.errorReset();
                             log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
@@ -283,43 +263,18 @@
                             }
                         } 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);
-                            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 (ledThread != null) {
+                            log.error("杈撻�佺嚎涓嬪彂锛堝叆搴擄級锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo());
                             String errorMsg = jsonObject.getString("msg");
                             if (!Cools.isEmpty(errorMsg)) {
                                 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);
                         }
 
 
@@ -333,7 +288,7 @@
 
             }
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 缁勬墭  ===銆嬫墽琛屽畬鎴�");
+        News.infoNoLog("" + mark + " - 0" + " - 缁勬墭  ===銆嬫墽琛屽畬鎴�");
 
     }
 
@@ -355,7 +310,7 @@
                     staProtocol = staProtocol.clone();
                 }
 
-//                // 鍏ュ嚭搴撴ā寮忓垽鏂�
+                // 鍏ュ嚭搴撴ā寮忓垽鏂�
                 if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) {
                     continue;
                 }
@@ -364,9 +319,7 @@
                 if (!staProtocol.isLoading()) {
                     continue;
                 }
-                if (staProtocol.isAutoing() && staProtocol.isInEnable()
-                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
-                        && staProtocol.isPakMk()) {
+                if (staProtocol.isAutoing() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()) {
                     News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�");
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
@@ -394,9 +347,7 @@
                     }
 
                 } else {
-                    News.errorNoLog("" + mark + " - 6" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isLoading() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable()
-                            + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk() + "銆佸伐浣滃彿锛�" + staProtocol.getWorkNo()
-                            + "銆侀攣瀹氭爣璁�" + staProtocol.isPakMk() + "銆佸叆搴撳嵃璁帮細" + staProtocol.getStamp());
+                    News.errorNoLog("" + mark + " - 6" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isLoading() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable() + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk() + "銆佸伐浣滃彿锛�" + staProtocol.getWorkNo() + "銆侀攣瀹氭爣璁�" + staProtocol.isPakMk() + "銆佸叆搴撳嵃璁帮細" + staProtocol.getStamp());
                 }
             }
         }
@@ -422,14 +373,14 @@
 
                 StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
 
-                if(staProtocol == null) {
+                if (staProtocol == null) {
 //                    News.error("绔欑偣淇℃伅鏈幏寰�");
                     continue;
                 }
                 // 灏哄妫�娴嬪紓甯�
                 boolean back = false;
                 String errMsg = "";
-                if (!back && staProtocol.isFrontErr()) {
+                if (staProtocol.isFrontErr()) {
                     errMsg = "鍓嶈秴闄�";
                     back = true;
                 }
@@ -457,14 +408,11 @@
                     errMsg = "鎵爜澶辫触";
                     back = true;
                 }
-                if(staProtocol.getSiteId() > 400){
-                    back = false;
-                }
+
 
                 // 閫�鍥�
-                if (back) {
+                if (back & !staProtocol.isEmptyMk()) {
                     log.info("errmsg: " + errMsg);
-//                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
                     MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errMsg));
                     if (!staProtocol.isLoading()) {
                         continue;
@@ -472,91 +420,55 @@
                     if (!staProtocol.isPakMk()) {
                         continue;
                     }
+                    if (!staProtocol.isInEnable()) {
+                        continue;
+                    }
                     staProtocol.setWorkNo(wrkNo);
-                    News.info("{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", pickSta.getStaNo(), errMsg, wrkNo);
-                    wrkNo++;
+                    News.info("{}鐩樼偣/鎷f枡鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", pickSta.getStaNo(), errMsg, wrkNo);
                     staProtocol.setStaNo(pickSta.getBackSta().shortValue());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                    log.error("杈撻�佺嚎涓嬪彂1锛�" + 9999 + "," + pickSta.getBackSta());
+                    log.error("杈撻�佺嚎涓嬪彂锛堢洏鐐�/鎷f枡锛夛細" + wrkNo + "," + pickSta.getBackSta());
                     LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
 
                     // led 寮傚父鏄剧ず
                     if (ledThread != null) {
-                        MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errMsg));
+                        MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errMsg));
                     }
                     continue;
                 }
-                if(staProtocol.getSiteId() < 400){
-                    if (!Cools.isEmpty(barcode)) {
-                        News.infoNoLog("" + mark + " - 1" + " - {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
-                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-                            continue;
-                        }
-                    } else {
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk() && !staProtocol.isEmptyMk()) {
+                    if (Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
+                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
+
+                        staProtocol.setWorkNo(wrkNo);
+                        News.info("{}barcode鐩樼偣/鎷f枡鍥為��锛歿}锛屼换鍔″彿锛歿}", pickSta.getStaNo(), errMsg, wrkNo);
+                        staProtocol.setStaNo(pickSta.getBackSta().shortValue());
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        log.error("杈撻�佺嚎涓嬪彂锛堢洏鐐�/鎷f枡锛夛細" + wrkNo + "," + pickSta.getBackSta());
                         continue;
                     }
-
-
-                    if (!Cools.isEmpty(barcode)) {
-//                    News.info(""+mark+" - 1"+" - {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
-                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-                            continue;
-                        }
-                    } else {
-                        continue;
-                    }
-
-                }
-
-
-                if (staProtocol == null) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-
-//                // 鍏ュ嚭搴撴ā寮忓垽鏂�
-//                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
-
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
-                    News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�");
+                    News.warnNoLog("" + mark + " - 0" + " - 鐩樼偣/鎷f枡寮�濮嬫墽琛�");
                     WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
-                    if(staProtocol.getSiteId() > 400){
-                        wrkMast = wrkMastMapper.selectPickStep3(staProtocol.getWorkNo());
-                    }
-//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
                     if (wrkMast == null) {
                         // 鏃犳嫞鏂欐暟鎹�
                         continue;
                     }
-                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
-                            || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                         continue;
                     }
-
-                    // 鎷c�佺洏銆佸苟 浣滀笟绔欒浆鎹�
-//                    int stnNo = 0;
-//                    if (wrkMast.getStaNo() == 109) {
-//                        stnNo = 127;
-//                    } else if (wrkMast.getStaNo() == 113) {
-//                        stnNo = 128;
-//                    } else {
-//                        log.error("{}鍙蜂换鍔℃暟鎹紓甯革紒", wrkMast.getWrkNo());
-//                    }
                     // 鑾峰彇鐩爣绔�
-                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-                            .eq("type_no", wrkMast.getIoType() - 50)
-                            .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
+                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>().eq("type_no", wrkMast.getIoType() - 50).eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
                             .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
                     StaDesc staDesc = staDescService.selectOne(wrapper);
                     if (Cools.isEmpty(staDesc)) {
-                        News.error("" + mark + " - 2" + " - 鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
-                        staProtocol.setWorkNo(wrkNo++);
-                        staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue() - (short) 1));
+                        News.error("" + mark + " - 2" + " - 鐩樼偣/鎷f枡鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
+                        staProtocol.setWorkNo(wrkNo);
+                        staProtocol.setStaNo((pickSta.getStaNo().shortValue()));
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
                         MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                        log.error("杈撻�佺嚎涓嬪彂4锛�" + 9989 + "," + (pickSta.getStaNo().shortValue() - (short) 1));
+                        log.error("杈撻�佺嚎涓嬪彂锛堢洏鐐�/鎷f枡锛夛細" + wrkNo + "," + (pickSta.getStaNo()));
                         //LED
                         LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
                         // led 寮傚父鏄剧ず
@@ -609,25 +521,24 @@
 
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂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));
-                    log.error("杈撻�佺嚎涓嬪彂5锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
+                    log.error("杈撻�佺嚎涓嬪彂锛堢洏鐐�/鎷f枡锛夛細" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
                     if (!result) {
                         News.error("" + mark + " - 3" + " - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
                     }
 
                 } else {
-                    News.errorNoLog("" + mark + " - 6" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isLoading() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable()
-                            + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk());
+                    News.errorNoLog("" + mark + " - 6" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isLoading() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable() + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk());
                 }
 
             }
 
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱  ===銆嬫墽琛屽畬鎴�");
+        News.infoNoLog("" + mark + " - 0" + " - 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱  ===銆嬫墽琛屽畬鎴�");
     }
 
 
@@ -644,10 +555,7 @@
                 } else {
                     staProtocol = staProtocol.clone();
                 }
-                if (staProtocol.isAutoing()
-                        && staProtocol.isLoading()
-                        && staProtocol.isInEnable()
-                        && !staProtocol.isEmptyMk()
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk()
 //                        && staProtocol.getWorkNo() > 0
                         && staProtocol.isPakMk()) {
 
@@ -720,13 +628,9 @@
                         String response = "";
                         log.info("鍏ュ簱浣滀笟绔�" + pickSta.getStaNo() + "鐩樼偣鍐嶅叆搴撲换鍔¤姹俉MS===>>鍙傛暟锛�" + param);
                         try {
-                            response = new HttpHandler.Builder()
-                                    .setUri(wmsUrl)
-                                    .setPath("/rpc/pakin2/loc/v1")
-                                    .setJson(JSON.toJSONString(param))
+                            response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/pakin2/loc/v1").setJson(JSON.toJSONString(param))
 //                                    .setTimeout(15, TimeUnit.SECONDS)
-                                    .build()
-                                    .doPost();
+                                    .build().doPost();
                         } catch (Exception e) {
                             log.error("鍏ュ簱浣滀笟绔�" + pickSta.getStaNo() + "鐩樼偣鍐嶅叆搴撲换鍔¤姹俉MS===>>鍙傛暟锛�" + param);
                             log.error("stnToCrnStnPick2===>>鐩樼偣鏌ュ簱浣嶅叆搴撴帴鍙eけ璐�", e);
@@ -828,9 +732,7 @@
                         continue;
                     }
                     //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
-                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
-                            && crnProtocol.statusType == CrnStatusType.WAITING
-                            && crnProtocol.forkPosType == CrnForkPosType.HOME) {
+                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                         log.info("鍫嗗灈鏈哄嚭搴撳畬鎴� - 寮�濮嬫墽琛�");
 
                         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
@@ -844,24 +746,57 @@
                         } else {
                             log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂鎴愬姛");
                         }
+                        Integer pltType = wrkMast.getPltType();
+                        // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
+                        wrkMast.setWrkSts(14L);
+                        wrkMast.setCrnEndTime(new Date());
+                        wrkMast.setPltType(0);
+                        if (wrkMastMapper.updateById(wrkMast) != 0) {
+                            // 澶嶄綅鍫嗗灈鏈�
+                            log.error("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,{},{}", wrkMast.getWrkNo(), wrkMast.getPltType());
+                            if (pltType == 1) {
+                                crnThread.setResetFlag(true);
+                            } else if (pltType == 2) {
+                                crnThread.setResetFlagTwo(true);
+                            }
+                        } else {
+                            News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                        }
+
+                    } else if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNoTwo().equals(wrkMast.getWrkNo().shortValue()) && crnProtocol.statusTypeTwo == CrnStatusType.WAITING && crnProtocol.forkPosTypeTwo == CrnForkPosType.HOME) {
+                        log.info("鍫嗗灈鏈哄嚭搴撳畬鎴� - 寮�濮嬫墽琛�");
+
+                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+                        // 涓嬪彂绔欑偣淇℃伅
+                        staProtocol.setWorkNo(wrkMast.getWrkNo());
+                        staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(), wrkMast.getSourceStaNo()));
+                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                            log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂澶辫触");
+                            continue;
+                        } else {
+                            log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂鎴愬姛");
+                        }
+                        Integer pltType = wrkMast.getPltType();
 
                         // 鏇存柊宸ヤ綔妗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 (pltType == 1) {
+                                crnThread.setResetFlag(true);
+                            } else if (pltType == 2) {
+                                crnThread.setResetFlagTwo(true);
+                            }
                         } else {
                             News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                         }
 
                     } else {
-                         News.errorNoLog("" + mark + " - 6" + " - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
-                                + " 鍫嗗灈鏈虹姸鎬侊細" + crnProtocol.modeType + "==鑷姩AUTO锛�" + CrnModeType.AUTO
-                                + "銆佸爢鍨涙満浠诲姟鍙凤細" + crnProtocol.getTaskNo() + "==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue()
-                                + "銆佺姸鎬佹灇涓撅細" + crnProtocol.statusType + "==WAITING锛�90 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
-                                + "銆佽揣鍙変綅缃細" + crnProtocol.forkPosType + "==HOME锛�0  // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME);
+                        News.errorNoLog("" + mark + " - 6" + " - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�" + " 鍫嗗灈鏈虹姸鎬侊細" + crnProtocol.modeType + "==鑷姩AUTO锛�" + CrnModeType.AUTO + "銆佸爢鍨涙満浠诲姟鍙凤細" + crnProtocol.getTaskNo() + "==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue() + "銆佺姸鎬佹灇涓撅細" + crnProtocol.statusType + "==WAITING锛�90 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING + "銆佽揣鍙変綅缃細" + crnProtocol.forkPosType + "==HOME锛�0  // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME);
                     }
 
                 }
@@ -869,12 +804,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();
@@ -915,39 +851,605 @@
 //            }
 
             // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-            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, 0, mark); //  鍏ュ簱
+                            crnProtocol.setLastIo("O");
+                        } else if (basCrnp.getOutEnable().equals("Y")) {
+                            //mark - 2 - ....
+                            this.outTake(crn, crnProtocol, 0, 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, 0, mark); //  鍑哄簱
+                            crnProtocol.setLastIo("I");
+                        } else if (basCrnp.getInEnable().equals("Y")) {
+                            this.inTake(crn, crnProtocol, 0, 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, 2, mark);
+                            } else {
+                                this.outPut(crn, crnProtocol, mark);
+                            }
+                        } else {
+                            WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1All(wrkMast.getSourceStaNo(), crn.getId());
+                            if (wrkMast1 != null) {
+                                this.inTake(crn, crnProtocol, 2, 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, 1, mark);
+                            } else {
+                                this.outPut(crn, crnProtocol, mark);
+                            }
+                        } else {
+                            WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1All(wrkMast.getSourceStaNo(), crn.getId());
+                            if (wrkMast1 != null) {
+                                this.inTake(crn, crnProtocol, 1, mark);
+                            } else {
+                                this.inPut(crn, crnProtocol, mark);
+                            }
+                        }
+                    } else {
+                        log.error("" + mark + " - 1" + " - 鏈夌墿鏂欐棤宸ヤ綔妗�  ===銆嬪紓甯�");
                     }
                 }
             }
             // 搴撲綅绉昏浆
             //mark - 3 - ....
-//            this.locToLoc(crn, crnProtocol, mark);
+            this.locToLoc(crn, crnProtocol, mark);
 //            this.crnRebackHp(crnProtocol, crnThread);
 
         }
 //        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鎵ц瀹屾垚");
+    }
+
+    /**
+     * 鍏堝垽鏂槸涓嶆槸鐗规畩鐨勮竟搴撲綅
+     *
+     * @param locNo
+     * @return
+     */
+    private Integer getCrnStation(String locNo) {
+        String bay = locNo.substring(2, 5);
+        if (Integer.parseInt(bay) == 1) {
+            return 1;
+        } else if (Integer.parseInt(bay) == 29) {
+            return 2;
+        }
+        if (Integer.parseInt(locNo.substring(0, 2)) >= 14) {
+            return 1;
+        } else {
+            return 2;
+        }
+    }
+
+
+    /**
+     * 鍏ュ簱鍙栬揣
+     */
+    public synchronized void inTake(CrnSlave slave, CrnProtocol crnProtocol, Integer crnStation, 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" + " - 鍫嗗灈鏈烘鍦ㄦ墽琛屽叾浠栦换鍔�,璇风◢鍚庡啀璇�");
+            }
+            if (crnStation == 0) {
+                crnStation = getCrnStation(wrkMast.getLocNo());
+            }
+            if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
+                News.error("" + mark + " - 1" + " - 9" + " - 鍫嗗灈鏈烘敼宸ヤ綅瀛樺湪宸ヤ綔妗�,宸ヤ綅={}", crnStation);
+                break;
+            }
+
+            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+            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(crnStation);
+                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 crnStation, 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;
+                            }
+                        }
+                    }
+                    if (crnStation == 0) {
+                        crnStation = getCrnStation(wrkMast.getSourceLocNo());
+                    }
+                    if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
+                        News.error("" + mark + " - 1" + " - 9" + " - 鍫嗗灈鏈烘敼宸ヤ綅瀛樺湪宸ヤ綔妗�,宸ヤ綅={}", crnStation);
+                        break;
+                    }
+
+                    // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                    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.setPltType(crnStation);
+                        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" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍑哄簱鎵ц瀹屾瘯");
     }
 
     /**
@@ -1031,15 +1533,11 @@
 //            if(staProtocol.getWorkNo() == 9998){
 //                continue;
 //            }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
-                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+            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());
+                News.errorNoLog("" + mark + " - 1" + " - 3" + " - 鍫嗗灈鏈哄叆搴撶珯淇℃伅(浠ヤ笅闇�瑕佸叏true):" + "鑷姩淇″彿" + staProtocol.isAutoing() + "鏈夌墿淇″彿" + staProtocol.isLoading() + "宸ヤ綔鍙�>0" + staProtocol.getWorkNo() + "鍙叆淇″彿" + staProtocol.isInEnable() + "鑳藉叆淇″彿锛坵ms璁剧疆锛�.equals(\"Y\")" + staDetl.getCanining());
                 continue;
             }
             // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
@@ -1113,9 +1611,7 @@
 //                    }
 //                }
 //            }
-            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());
+            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();
@@ -1190,9 +1686,30 @@
                 if (staProtocol == null) {
                     News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol);
                     break;
-//                    continue;
                 } else {
                     staProtocol = staProtocol.clone();
+                }
+                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 = 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;
+                } else {
+                    staProtocol2 = staProtocol2.clone();
+                }
+                //鍑哄叆鍙h緭閫佺嚎鍙厑璁稿瓨鍦ㄤ竴涓墭鐩�
+                if (staProtocol.isLoading() || staProtocol1.isLoading() || staProtocol2.isLoading() || staProtocol.getWorkNo() != 0 || staProtocol1.getWorkNo() != 0 || staProtocol2.getWorkNo() != 0) {
+                    break;
                 }
 
 //            // 鍏ュ嚭搴撴ā寮忓垽鏂�
@@ -1210,8 +1727,7 @@
 //                    continue;
                 }
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
-                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                     // 鍫嗗灈鏈烘帶鍒惰繃婊�
@@ -1220,54 +1736,54 @@
                         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());
+                    // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+                    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);
-//                            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;
-//                            }
-//                        }
-//                    }
+                            //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.selectWorking(slave.getId()) != null) {
@@ -1275,9 +1791,7 @@
 //                        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());
+                    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();
@@ -1473,13 +1987,40 @@
         if (wrkMastMapper.selectWorking(slave.getId()) != null) {
             return;
         }
+        int crnStation = 0;
+        String bay = wrkMast.getSourceLocNo().substring(2, 5);
+        String bay2 = wrkMast.getLocNo().substring(2, 5);
+        if (Integer.parseInt(bay) == 1 || Integer.parseInt(bay2) == 1) {
+            crnStation = 1;
+            if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
+                this.outPut(slave, crnProtocol, mark);
+                return;
+            }
+        } else if (Integer.parseInt(bay) == 29 || Integer.parseInt(bay2) == 29) {
+            crnStation = 2;
+            if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
+                this.outPut(slave, crnProtocol, mark);
+                return;
+            }
+        } else {
+            crnStation = 1;
+            if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
+                if (wrkMastMapper.selectByPltType(slave.getId(), 2) != null) {
+                    this.outPut(slave, crnProtocol, mark);
+                    return;
+                } else {
+                    crnStation = 2;
+                }
+            }
+        }
 
-        News.warnNoLog("" + mark + " - 3" + " - 3" + " - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}", wrkMast.getWrkNo().shortValue()
-                , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue()
-                , sta.getRow1().shortValue(), sta.getBay1().shortValue(), sta.getLev1().shortValue());
+
+
+        News.warnNoLog("" + mark + " - 3" + " - 3" + " - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), sta.getRow1().shortValue(), sta.getBay1().shortValue(), sta.getLev1().shortValue());
 
         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
         CrnCommand crnCommand = new CrnCommand();
+        crnCommand.setPltType(crnStation);
         crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
         crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
         crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
@@ -1507,6 +2048,8 @@
 
     }
 
+
+
     /**
      * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
      */
@@ -1522,7 +2065,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) {
@@ -1530,8 +2076,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;
                 }
@@ -1542,8 +2099,47 @@
                 if (wrkMastMapper.updateById(wrkMast) > 0) {
                     // 鍫嗗灈鏈哄浣�
                     log.error(wrkMast.getWrkNo() + "浠诲姟淇敼鐘舵��4鎴愬姛锛屽浣嶅爢鍨涙満={}", crnThread.getCrnProtocol().getCrnNo());
-                    News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo());
+                    News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿宸ヤ綅1={}", crnThread.getCrnProtocol().getCrnNo());
                     crnThread.setResetFlag(true);
+                }
+            } else if (crnProtocol.statusTypeTwo == CrnStatusType.WAITING && crnProtocol.getTaskNoTwo() != 0) {
+                News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
+                if (crnProtocol.getTaskNo() == 9999) {
+                    crnThread.setResetFlagTwo(true);
+                    continue;
+                }
+                // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+                WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNoTwo().intValue());
+                if (wrkMast == null) {
+                    News.error("" + mark + " - 1" + " - 鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+                    continue;
+                }
+                // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
+                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;
+                }
+                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" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿2宸ヤ綅2={}", crnThread.getCrnProtocol().getCrnNo());
+                    crnThread.setResetFlagTwo(true);
                 }
             }
 
@@ -1580,8 +2176,7 @@
                             }
                             BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
                             String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
-                            BasErrLog basErrLog = new BasErrLog(
-                                    null,    // 缂栧彿
+                            BasErrLog basErrLog = new BasErrLog(null,    // 缂栧彿
                                     wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
                                     now,    // 鍙戠敓鏃堕棿
                                     null,    // 缁撴潫鏃堕棿
@@ -1628,8 +2223,7 @@
                         if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
                             BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
                             String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
-                            BasErrLog basErrLog = new BasErrLog(
-                                    null,    // 缂栧彿
+                            BasErrLog basErrLog = new BasErrLog(null,    // 缂栧彿
                                     null,    // 宸ヤ綔鍙�
                                     now,    // 鍙戠敓鏃堕棿
                                     null,    // 缁撴潫鏃堕棿
@@ -1685,6 +2279,9 @@
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻绌烘澘鍏ュ簱鍙�
             for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
+                //鑾峰彇鏉$爜鎵弿浠俊鎭�
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode());
+                String barcode = barcodeThread.getBarcode();
                 // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
@@ -1702,17 +2299,47 @@
                 if (!staProtocol.isLoading()) {
                     continue;
                 }
+                boolean back = false;
+                String errMsg = "";
+                if (staProtocol.isBarcodeErr()) {
+                    errMsg = "鎵爜澶辫触";
+                    back = true;
+                }
+                if (back && staProtocol.isEmptyMk()) {
+                    log.info("errmsg: " + errMsg);
+                    MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errMsg));
 
+                    if (!staProtocol.isLoading()) {
+                        continue;
+                    }
+                    if (!staProtocol.isPakMk()) {
+                        continue;
+                    }
+                    if (!staProtocol.isInEnable()){
+                        continue;
+                    }
+                    staProtocol.setWorkNo(emptyWrkNo);//閫�鍥� 宸ヤ綔鍙�:9999
+                    News.info("{}PLC绌烘澘鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", emptyInSta.getStaNo(), errMsg, emptyWrkNo);
+                    staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
+                    devpThread.setPakMk(staProtocol.getSiteId(), false);
+                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                    log.error("杈撻�佺嚎涓嬪彂锛堢┖鏉匡級锛�" + emptyWrkNo + "," + emptyInSta.getBackSta());
+                    break;//瓒呴檺鎵樼洏閫�鍥炰笉鐢熸垚宸ヤ綔妗�
+                }
                 // 绔欑偣鏉′欢鍒ゆ柇
-                if (staProtocol.isAutoing()
-                        && staProtocol.isLoading()
-                        && staProtocol.isInEnable()
-                        && staProtocol.isEmptyMk()
-                        && staProtocol.isPakMk()
-                        && (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() > 9700)
-                ) {
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isEmptyMk() && staProtocol.isPakMk() && (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() > 9700)) {
                     News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛岋細绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�");
+                    if (Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
+                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", emptyInSta.getBarcode(), barcode);
 
+                        staProtocol.setWorkNo(wrkNo);
+                        News.info("{}barcode鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", emptyInSta.getStaNo(), emptyInSta, wrkNo);
+                        staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        log.error("杈撻�佺嚎涓嬪彂锛堢┖鏉匡級锛�" + wrkNo + "," + emptyInSta.getBackSta());
+                        continue;
+                    }
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                         SearchLocParam param = new SearchLocParam();
@@ -1720,12 +2347,8 @@
                         param.setIoType(10);
                         param.setSourceStaNo(emptyInSta.getStaNo());
                         param.setLocType1(locTypeDto.getLocType1());
-                        String response = new HttpHandler.Builder()
-                                .setUri(wmsUrl)
-                                .setPath("/rpc/pakin/loc/v1")
-                                .setJson(JSON.toJSONString(param))
-                                .build()
-                                .doPost();
+                        param.setBarcode(barcode);
+                        String response = new HttpHandler.Builder().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);
@@ -1736,7 +2359,7 @@
                             //staProtocol.setStaNo(staProtocol.getSiteId().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                            log.error("杈撻�佺嚎涓嬪彂6锛�" + dto.getWorkNo() + "," + staProtocol.getSiteId());
+                            log.error("杈撻�佺嚎涓嬪彂锛堢┖鏉匡級锛�" + dto.getWorkNo() + "," + staProtocol.getSiteId());
                             if (!result) {
                                 News.errorNoLog("" + mark + " - 1" + " - 鏇存柊plc绔欑偣淇℃伅澶辫触");
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
@@ -1749,7 +2372,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);
@@ -1757,22 +2380,12 @@
 //                                ledThread.errorReset();
                             }
                         } else {
-//                            staProtocol.setWorkNo(wrkNo++);
-//                            staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
-//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//                            if (!result) {
-//                                News.errorNoLog(""+mark+" - 2"+" - 鏇存柊plc绔欑偣淇℃伅澶辫触");
-//                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-//                            }
-//
                             if (ledThread != null) {
                                 String errorMsg = jsonObject.getString("msg");
                                 if (!Cools.isEmpty(errorMsg)) {
                                     MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errorMsg));
                                 }
                             }
-//                            News.error(""+mark+" - 3"+" - 璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                         }
                     } catch (Exception e) {
                         e.printStackTrace();
@@ -1780,13 +2393,11 @@
                     }
 
                 } else {
-                    News.errorNoLog("" + mark + " - 4" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isAutoing() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable()
-                            + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk() + "銆佸伐浣滃彿锛�" + staProtocol.getWorkNo()
-                            + "銆侀攣瀹氭爣璁�" + staProtocol.isPakMk());
+                    News.errorNoLog("" + mark + " - 4" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isAutoing() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable() + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk() + "銆佸伐浣滃彿锛�" + staProtocol.getWorkNo() + "銆侀攣瀹氭爣璁�" + staProtocol.isPakMk());
                 }
             }
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐ф墽琛屽畬鎴�");
+        News.infoNoLog("" + mark + " - 0" + " - 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐ф墽琛屽畬鎴�");
     }
 
     /**
@@ -1867,14 +2478,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(), 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(), 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(), total));
                         }
                     });
                 }
@@ -2038,7 +2649,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(), 29);
+                    } else if (shallowLoc.getRow1() == 29) {
+                        loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
+                    } else {
+                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+                    }
+
 
                     if (loc != null) {
                         if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
@@ -2057,7 +2675,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(), 29);
+                        } else if (shallowLoc.getRow1() == 29) {
+                            loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
+                        } else {
+                            loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+                        }
+
 
                         if (null != loc) {//瀵瑰簲娣卞簱浣嶉潪鍦ㄥ簱鐘舵��,涓嶈兘绉诲簱
                             String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
@@ -2169,7 +2794,7 @@
                 }
 
                 // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-                if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
+                if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getTaskNoTwo() == 0) {
                     // 鑾峰彇绉诲簱宸ヤ綔妗d俊鎭�
                     WrkMast wrkMast = wrkMastMapper.selectLocMove(crn.getId());
                     if (null != wrkMast) {
@@ -2177,11 +2802,13 @@
                     }
 
                     LocMast sourceLoc = locMastService.queryDemoSourceLoc(crn.getId());
-                    LocMast loc = locMastService.queryDemoLoc(crn.getId());
-                    if (null == sourceLoc || null == loc) {
+                    if (sourceLoc == null){
                         continue;
                     }
-
+                    LocMast loc = locMastService.queryDemoLoc(crn.getId(),sourceLoc.getLocType1());
+                    if (null == loc) {
+                        continue;
+                    }
                     String sourceLocNo = sourceLoc.getLocNo();
                     String locNo = loc.getLocNo();
 
@@ -2205,6 +2832,7 @@
                     wrkMast.setLinkMis("N");
                     wrkMast.setAppeTime(new Date());
                     wrkMast.setModiTime(new Date());
+                    wrkMast.setPltType(2);//鍥哄畾2鍙峰伐浣嶇Щ搴�
                     int res = wrkMastMapper.insert(wrkMast);
                     if (res == 0) {
                         throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
@@ -2324,9 +2952,7 @@
                                     // 鍑哄簱鍒囨崲涓�
                                     devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING;
                                     WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
-                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
-                                            && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading()
-                                            && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
+                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading() && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
                                         // 鍑哄簱妯″紡
                                         devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE;
                                     }
@@ -2342,9 +2968,7 @@
                                     // 鍑哄簱鍒囨崲涓�
                                     devpThread.ioModeOf4F = IoModeType.PAKOUT_BOOTING;
                                     WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
-                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
-                                            && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading()
-                                            && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
+                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading() && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
                                         // 鍑哄簱妯″紡
                                         devpThread.ioModeOf4F = IoModeType.PAKOUT_MODE;
                                     }
@@ -2388,10 +3012,8 @@
         SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
         List<Integer> list = new ArrayList<>();
         list.add(101);
-        list.add(112);
         Map<Integer, Integer> map = new HashMap<>();
         map.put(101, 102);
-        map.put(112, 111);
         for (Integer site : list) {
             WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("sta_no", map.get(site)));
             if (!Cools.isEmpty(wrkMast)) {
@@ -2407,25 +3029,19 @@
             if (staProtocol.isAutoing()  //鑷姩
                     && !staProtocol.isLoading()  //鏃犵墿
                     && staProtocol.isOutEnable()  //鍙嚭淇″彿
-                    && staProtocol.getWorkNo() == 0
-            ) {
+                    && staProtocol.getWorkNo() == 0) {
                 WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(site);
                 if (null != pakoutEmpty) {
                     return;
                 }
                 Short loctype1 = 1;
                 if (site == 101) {
-                    loctype1 = 2;
+                    loctype1 = 1;
                 }
                 LocTypeDto locTypeDto = new LocTypeDto(loctype1, (short) 1, (short) 1);
                 locTypeDto.setSiteId(site);
                 try {
-                    String response = new HttpHandler.Builder()
-                            .setUri(wmsUrl)
-                            .setPath("/rpc/auto/emptyOut/v1")
-                            .setJson(JSON.toJSONString(locTypeDto))
-                            .build()
-                            .doPost();
+                    String response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/auto/emptyOut/v1").setJson(JSON.toJSONString(locTypeDto)).build().doPost();
                     JSONObject jsonObject = JSON.parseObject(response);
                     if (jsonObject.getInteger("code").equals(200)) {
                         String data = jsonObject.get("data").toString();
@@ -2457,8 +3073,7 @@
             if (staProtocol.isAutoing()  //鑷姩
                     && staProtocol.isLoading()  //鏈夌墿
                     && staProtocol.isInEnable()  //鍙叆淇″彿
-                    && staProtocol.isPakMk()
-                    && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) //宸ヤ綔鍙蜂负0鎴栬�呭伐浣滃彿鏄�9991~9999锛堣緭閫佹満鐣欑敤锛�
+                    && staProtocol.isPakMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) //宸ヤ綔鍙蜂负0鎴栬�呭伐浣滃彿鏄�9991~9999锛堣緭閫佹満鐣欑敤锛�
             ) {
 
                 try {
@@ -2469,12 +3084,7 @@
                     LocTypeDto locTypeDto = new LocTypeDto(loctype1, (short) 1, (short) 1);
                     locTypeDto.setSiteId(site);
 
-                    String response = new HttpHandler.Builder()
-                            .setUri(wmsUrl)
-                            .setPath("/rpc/auto/emptyIn/v1")
-                            .setJson(JSON.toJSONString(locTypeDto))
-                            .build()
-                            .doPost();
+                    String response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/auto/emptyIn/v1").setJson(JSON.toJSONString(locTypeDto)).build().doPost();
                     JSONObject jsonObject = JSON.parseObject(response);
                     if (jsonObject.getInteger("code").equals(200)) {
                         News.info((String) jsonObject.get("msg"));
@@ -2557,12 +3167,8 @@
                 }
 
                 // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
-                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE &&
-                        rgvProtocol.getModeType() == RgvModeType.AUTO
-                        && rgvProtocol.getLoaded1() == 0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
-                        && (rgvProtocol.getTaskNo1() == 0)
-                        && rgvThread.isPakMk()
-                ) {
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getLoaded1() == 0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+                        && (rgvProtocol.getTaskNo1() == 0) && rgvThread.isPakMk()) {
                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
 
                     Integer rgvNoOther = basRgvMap.getRgvNoOther(rgvProtocol.getRgvNo());
@@ -2573,12 +3179,7 @@
                     } else {
                         rgvProtocolOther = rgvProtocolOther.clone();
                     }
-                    if (rgvProtocolOther.getStatusType() == RgvStatusType.IDLE
-                            && rgvProtocolOther.getModeType() == RgvModeType.AUTO
-                            && rgvProtocolOther.getLoaded1() == 0
-                            && (rgvProtocolOther.getTaskNo1() == 0)
-                            && rgvThreadOther.isPakMk()
-                    ) {
+                    if (rgvProtocolOther.getStatusType() == RgvStatusType.IDLE && rgvProtocolOther.getModeType() == RgvModeType.AUTO && rgvProtocolOther.getLoaded1() == 0 && (rgvProtocolOther.getTaskNo1() == 0) && rgvThreadOther.isPakMk()) {
                         //瀵瑰伐浣滄。杩涜鍒ゆ柇
                         basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
                         if (rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo1() <= 9000) {
@@ -2622,10 +3223,7 @@
                     }
 
                     // 鍙湁褰揜GV绛夊緟WCS纭銆佽嚜鍔�
-                    if ((rgvProtocol.getStatusType1() == RgvStatusType.WAITING || rgvProtocol.getStatusType1() == RgvStatusType.FETCHWAITING)
-                            && rgvProtocol.getModeType() == RgvModeType.AUTO
-                            && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1)
-                    ) {
+                    if ((rgvProtocol.getStatusType1() == RgvStatusType.WAITING || rgvProtocol.getStatusType1() == RgvStatusType.FETCHWAITING) && rgvProtocol.getModeType() == RgvModeType.AUTO && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1)) {
                         log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}", rgvProtocol.getRgvNo(), rgvProtocol.getStatusType(), rgvProtocol);
                         if (rgvProtocol.getTaskNo1() != 0) {
                             if (rgvProtocol.getTaskNo1() == 32222) {
@@ -2733,12 +3331,7 @@
                 }
 
                 // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
-                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
-                        && rgvProtocol.getModeType() == RgvModeType.AUTO
-                        && rgvProtocol.getLoaded1() == 0
-                        && rgvProtocol.getTaskNo1() == 0
-                        && rgvThread.isPakMk()
-                ) {
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getTaskNo1() == 0 && rgvThread.isPakMk()) {
                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                     if (basRgvMap == null) {
                         log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
@@ -2949,12 +3542,8 @@
                 }
 
                 // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
-                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
-                        && rgvProtocol.getModeType() == RgvModeType.AUTO
-                        && rgvProtocol.getLoaded1() == 0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
-                        && rgvProtocol.getTaskNo1() == 0
-                        && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
-                        && rgvThread.isPakMk()
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getLoaded1() == 0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+                        && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvThread.isPakMk()
 //                        && rgvProtocol.getTaskNo2()==0
                 ) {
                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
@@ -3176,4 +3765,66 @@
         }
     }
 
+    public synchronized void crnMove() {
+        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.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));
+                if (basCrnOptPage != null && basCrnOptPage.getRecords() != null && basCrnOptPage.getRecords().size() > 0) {
+                    if (System.currentTimeMillis() - basCrnOptPage.getRecords().get(0).getSendTime().getTime() < 1000 * 60 * 3) {
+                        continue;
+                    }
+                } else {
+                    if (System.currentTimeMillis() - crnProtocol.getLastCommandTime() < 1000 * 60 * 2) {
+                        continue;
+                    }
+                }
+                List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crn.getId()).notIn("wrk_sts", 5, 14, 15));
+                if (!wrkMasts.isEmpty()) {
+                    continue;
+                }
+
+                CrnSlave.CrnStn crnStn = crn.getCrnInStn().get(0);
+
+                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.setTaskMode(CrnTaskModeType.XY_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));
+                }
+                crnThread.setBackHpFlag(true);
+                try {
+                    Thread.sleep(500);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }

--
Gitblit v1.9.1