From c0fc45a7cd97c2ded531b85575e6f26ff269db1b Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期二, 24 二月 2026 15:22:25 +0800
Subject: [PATCH] 第一次进场调试

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  819 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 620 insertions(+), 199 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 a278875..14c3375 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;
@@ -38,6 +39,8 @@
 import com.zy.core.thread.LedThread;
 import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -94,6 +97,10 @@
     private WrkMastService wrkMastService;
     @Autowired
     private BasRgvMapService basRgvMapService;
+    @Autowired
+    private BasCrnOptService crnOptService;
+    @Autowired
+    private ConfigService configService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -101,6 +108,9 @@
     private boolean isToOrigin;
 
     public Integer wrkNo = 10000;
+
+    /*鍫嗗灈鏈哄叆鍑哄簱浠诲姟涓嬪彂鎺у埗鍙傛暟*/
+//    Integer ioControl=configService.selectCrnIo(Integer mark);
 
     /**
      * 缁勬墭
@@ -130,6 +140,37 @@
                 // 灏哄妫�娴嬪紓甯�
                 boolean back = false;
                 String errMsg = "";
+                boolean fail = false;
+                // 妫�娴嬫槸鍚︽湁鍑哄簱浠诲姟 濡傛灉鏈夊嚭搴撲换鍔� 鍏ュ簱灏卞仠姝�
+                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", 12).in("io_type",101,103,104,107,110));
+                // 妫�娴�104绔欙紙鍫嗗灈鏈哄嚭搴撶珯 鍏ュ簱绔欙級鏄惁鏈夌墿 濡傛灉鏈夌墿娌℃湁宸ヤ綔鍙� 鍏ュ簱鍋滄 濡傛灉鏈夌墿宸ヤ綔鍙锋槸鍑哄簱 鍏ュ簱鍋滄 濡傛灉鏈夌墿宸ヤ綔鍙锋槸鍏ュ簱 鍙互鍏ュ簱 濡傛灉鏈夌墿宸ヤ綔鍙蜂笉瀛樺湪 鍏ュ簱鍋滄
+                StaProtocol staProtocol104 = devpThread.getStation().get(104);
+                if (staProtocol104 == null){
+                    log.error("104绔欑偣淇℃伅鏈幏鍙�");
+                    continue;
+                }
+                //104绔欐湁鐗� 鏈夊伐浣滃彿 鍒ゆ柇杩欎釜浠诲姟鐨勭被鍨�
+                WrkMast wrkMast1 = null;
+                if (staProtocol104.isLoading() && staProtocol104.getWorkNo() != 0){
+                    wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol104.getWorkNo()));
+                }
+
+                if (wrkMast1 != null){
+                    if (wrkMast1.getIoType() > 100){
+                        fail = true;
+                    }
+                }
+
+                // 妫�娴�102绔欐槸鍚︽湁鐗�  鏈夌墿缁х画鍚戜笅鎵ц
+                if (!staProtocol.isLoading()){
+                    continue;
+                }
+
+                // 濡傛灉宸ヤ綔鍙蜂笉鏄� 9999 锛堝叆搴撲换鍔★級 涓嶅悜涓嬫墽琛�
+                if (staProtocol.getWorkNo() != 9999){
+                    continue;
+                }
+
                 if (staProtocol.isFrontErr()) {
                     errMsg = "鍓嶈秴闄�";
                     back = true;
@@ -150,28 +191,40 @@
                     errMsg = "鍙宠秴闄�";
                     back = true;
                 }
-                if (!back && staProtocol.getWeight() > 1000) {
-                    errMsg = "瓒呴噸鎴栨湭璇诲彇";
+                if (!back && staProtocol.isWeightErr()) {
+                    errMsg = "瓒呴噸";
                     back = true;
                 }
                 if (!back && staProtocol.isBarcodeErr()) {
                     errMsg = "鎵爜澶辫触";
                     back = true;
                 }
-//                if(staProtocol.getWeight() <= 0 ){
-//                    continue;
-//                }
-//                if (!back && staProtocol.getWeight() == 0.0) {
-//                    errMsg = "閲嶉噺鑾峰彇澶辫触";
-//                    back = true;
-//                }
-
-//                News.info("{}閲嶉噺", staProtocol.getWeight());
+                // 鍒ゆ柇鎵樼洏鐮佹牸寮�
+                if (!back &&(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode))){
+                    errMsg = "鎵樼洏鐮佹牸寮忔湁璇�--->" + barcode;
+                    back = true;
+                }
+                if (!back && (!barcode.startsWith("5") && !barcode.startsWith("6") &&  !barcode.startsWith("7") && !barcode.startsWith("8"))) {
+                    errMsg = "鎵樼洏鐮佹牸寮忔湁璇�--->" + barcode;
+                    back = true;
+                }
+                if (!back && !wrkMastList.isEmpty()) {
+                    errMsg = "鍫嗗灈鏈烘湁鍑哄簱浠诲姟,鍏ュ簱鍋滄";
+                    back = true;
+                }if (!back && staProtocol104.isLoading() && staProtocol104.getWorkNo() == 0 && (barcode.startsWith("6") || barcode.startsWith("5"))){
+                    errMsg = "104绔欐湁鐗╀絾鏄棤宸ヤ綔鍙�,璇锋鏌�";
+                    back = true;
+                }if (!back && ((wrkMast1 != null && fail))){
+                    errMsg = "1鍙峰爢鍨涙満鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
+                    back = true;
+                }if (!back && (staProtocol104.isLoading() && wrkMast1 == null) && (barcode.startsWith("5") || barcode.startsWith("6"))){
+                    errMsg = "104绔欐湁鐗╀絾鏄搴旂殑宸ヤ綔鍙锋棤宸ヤ綔妗�,璇锋鏌�";
+                    back = true;
+                }
 
                 // 閫�鍥�
                 if (back) {
                     log.info("errmsg: " + errMsg);
-//                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
                     MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
 
                     if (!staProtocol.isLoading()) {
@@ -180,13 +233,13 @@
                     if (!staProtocol.isPakMk()) {
                         continue;
                     }
-                    staProtocol.setWorkNo(wrkNo);
+                    staProtocol.setWorkNo(wrkNo);//閫�鍥� 宸ヤ綔鍙�:10000
                     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;//瓒呴檺鎵樼洏閫�鍥炰笉鐢熸垚宸ヤ綔妗�
                 }
 
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
@@ -194,54 +247,36 @@
                         && staProtocol.isLoading()
                         && staProtocol.isInEnable()
                         && !staProtocol.isEmptyMk()
-                        && staProtocol.isPakMk()) {
+                        && staProtocol.isPakMk()
+                        && staProtocol.getWorkNo()==9999) {
                     if (Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
                         News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
 
                         staProtocol.setWorkNo(wrkNo);
                         News.info("{}barcode鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg, wrkNo);
-                        wrkNo++;
                         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));
+                            .in("io_type", 107, 103, 104));
                     if (!Cools.isEmpty(checkPick)) {
                         continue;
                     }
@@ -249,12 +284,12 @@
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
 
                         SearchLocParam param = new SearchLocParam();
-                        locTypeDto.setLocType1((short) 1);
+                        locTypeDto.setLocType1(staProtocol.toSqlModel().getLocType1());
                         param.setBarcode(barcode);
                         param.setIoType(1);
                         param.setSourceStaNo(inSta.getStaNo());
-                        param.setLocType1(locTypeDto.getLocType1());
-                        param.setWeight(staProtocol.getWeight());
+                        param.setLocType1(locTypeDto.getLocType1()); // 楂樹綆
+                        param.setWeight(staProtocol.getWeight()); // 閲嶉噺
                         String response = new HttpHandler.Builder()
                                 .setTimeout(30,TimeUnit.SECONDS)
                                 .setUri(wmsUrl)
@@ -271,7 +306,7 @@
                             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 +318,19 @@
                             }
                         } 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());
+                            log.error("杈撻�佺嚎涓嬪彂锛堝叏鏉块��鍥烇級锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo());
 
-//                            if (ledThread != null) {
                             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 +344,7 @@
 
             }
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 缁勬墭  ===銆嬫墽琛屽畬鎴�");
+        News.infoNoLog(""+mark+" - 0"+" - 缁勬墭  ===銆嬫墽琛屽畬鎴�");
 
     }
 
@@ -355,7 +366,7 @@
                     staProtocol = staProtocol.clone();
                 }
 
-//                // 鍏ュ嚭搴撴ā寮忓垽鏂�
+                // 鍏ュ嚭搴撴ā寮忓垽鏂�
                 if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) {
                     continue;
                 }
@@ -426,10 +437,39 @@
 //                    News.error("绔欑偣淇℃伅鏈幏寰�");
                     continue;
                 }
+                // 妫�娴�102绔欐槸鍚︽湁鐗� 鏈夌墿缁х画鍚戜笅鎵ц
+                if (!staProtocol.isLoading()){
+                    continue;
+                }
+                // 濡傛灉宸ヤ綔鍙蜂笉鏄� 9999 锛堝叆搴撲换鍔★級 涓嶅悜涓嬫墽琛�
+                if (staProtocol.getWorkNo() != 9999){
+                    continue;
+                }
+                // 妫�娴嬫槸鍚︽湁鍑哄簱浠诲姟 濡傛灉鏈夊嚭搴撲换鍔� 鍏ュ簱灏卞仠姝�
+                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", 12).in("io_type",101,103,104,107,110));
+                // 妫�娴�104绔欙紙鍫嗗灈鏈哄嚭搴撶珯 鍏ュ簱绔欙級鏄惁鏈夌墿 濡傛灉鏈夌墿娌℃湁宸ヤ綔鍙� 鍏ュ簱鍋滄 濡傛灉鏈夌墿宸ヤ綔鍙锋槸鍑哄簱 鍏ュ簱鍋滄 濡傛灉鏈夌墿宸ヤ綔鍙锋槸鍏ュ簱 鍙互鍏ュ簱 濡傛灉鏈夌墿宸ヤ綔鍙蜂笉瀛樺湪 鍏ュ簱鍋滄
+                StaProtocol staProtocol104 = devpThread.getStation().get(104);
+                if (staProtocol104 == null){
+                    log.error("104绔欑偣淇℃伅鏈幏鍙�");
+                    continue;
+                }
+                //104绔欐湁鐗� 鏈夊伐浣滃彿 鍒ゆ柇杩欎釜浠诲姟鐨勭被鍨�
+                WrkMast wrkMast1 = null;
+                if (staProtocol104.isLoading() && staProtocol104.getWorkNo() != 0){
+                    wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol104.getWorkNo()));
+                }
                 // 灏哄妫�娴嬪紓甯�
                 boolean back = false;
+                boolean fail = false;
                 String errMsg = "";
-                if (!back && staProtocol.isFrontErr()) {
+
+                if (wrkMast1 != null){
+                    if (wrkMast1.getIoType() > 100){
+                        fail = true;
+                    }
+                }
+
+                if (staProtocol.isFrontErr()) {
                     errMsg = "鍓嶈秴闄�";
                     back = true;
                 }
@@ -457,14 +497,33 @@
                     errMsg = "鎵爜澶辫触";
                     back = true;
                 }
-                if(staProtocol.getSiteId() > 400){
-                    back = false;
+                // 鍒ゆ柇鎵樼洏鐮佹牸寮�
+                if (!back &&(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode))){
+                    errMsg = "鎵樼洏鐮佹牸寮忔湁璇�--->" + barcode;
+                    back = true;
+                }
+                if (!back && (!barcode.startsWith("5") &&  !barcode.startsWith("6") &&  !barcode.startsWith("7") && !barcode.startsWith("8"))) {
+                    errMsg = "鎵樼洏鐮佹牸寮忔湁璇�--->" + barcode;
+                    back = true;
+                }
+                if (!back && !wrkMastList.isEmpty()) {
+                    errMsg = "鍫嗗灈鏈烘湁鍑哄簱浠诲姟,鍏ュ簱鍋滄";
+                    back = true;
+                }if (!back && staProtocol104.isLoading() && staProtocol104.getWorkNo() == 0 && (barcode.startsWith("6") || barcode.startsWith("5"))){
+                    errMsg = "104绔欐湁鐗╀絾鏄棤宸ヤ綔鍙�,璇锋鏌�";
+                    back = true;
+                }if (!back && (wrkMast1 != null && fail)){
+                    errMsg = "1鍙峰爢鍨涙満鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
+                    back = true;
+                }if (!back && (staProtocol104.isLoading() && Cools.isEmpty(wrkMast1)) && (barcode.startsWith("5") || barcode.startsWith("6"))){
+                    errMsg = "104绔欐湁鐗╀絾鏄搴旂殑宸ヤ綔鍙锋棤宸ヤ綔妗�,璇锋鏌�";
+                    back = true;
                 }
 
                 // 閫�鍥�
                 if (back) {
                     log.info("errmsg: " + errMsg);
-//                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
+                    News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", pickSta.getStaNo(), errMsg);
                     MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errMsg));
                     if (!staProtocol.isLoading()) {
                         continue;
@@ -474,11 +533,9 @@
                     }
                     staProtocol.setWorkNo(wrkNo);
                     News.info("{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", pickSta.getStaNo(), errMsg, wrkNo);
-                    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());
                     LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
 
                     // led 寮傚父鏄剧ず
@@ -486,27 +543,6 @@
                         MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, 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 {
-                        continue;
-                    }
-
-
-                    if (!Cools.isEmpty(barcode)) {
-//                    News.info(""+mark+" - 1"+" - {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
-                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-                            continue;
-                        }
-                    } else {
-                        continue;
-                    }
-
                 }
 
 
@@ -516,15 +552,12 @@
                     staProtocol = staProtocol.clone();
                 }
 
-//                // 鍏ュ嚭搴撴ā寮忓垽鏂�
+                // 鍏ュ嚭搴撴ā寮忓垽鏂�
 //                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
 
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
                     News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�");
                     WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
-                    if(staProtocol.getSiteId() > 400){
-                        wrkMast = wrkMastMapper.selectPickStep3(staProtocol.getWorkNo());
-                    }
 //                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
                     if (wrkMast == null) {
                         // 鏃犳嫞鏂欐暟鎹�
@@ -534,16 +567,6 @@
                             || 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)
@@ -552,11 +575,11 @@
                     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));
+                        staProtocol.setWorkNo(wrkNo);
+                        staProtocol.setStaNo(pickSta.getBackSta().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("杈撻�佺嚎涓嬪彂锛堢洏鐐广�佹嫞鏂欍�佸苟鏉块��鍥烇級锛�" + wrkNo + "," + pickSta.getBackSta());
                         //LED
                         LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
                         // led 寮傚父鏄剧ず
@@ -609,12 +632,10 @@
 
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂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("杈撻�佺嚎涓嬪彂锛堢洏鐐广�佹嫞鏂欍�佸苟鏉匡級锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
                     if (!result) {
                         News.error("" + mark + " - 3" + " - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
                     }
@@ -627,7 +648,7 @@
             }
 
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱  ===銆嬫墽琛屽畬鎴�");
+        News.infoNoLog(""+mark+" - 0"+" - 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱  ===銆嬫墽琛屽畬鎴�");
     }
 
 
@@ -810,6 +831,34 @@
                 } else {
                     staProtocol = staProtocol.clone();
                 }
+                //鍒ゆ柇鏄笉鏄�2鍙峰爢鍨涙満鐨�106鍑哄簱绔�
+                if (staProtocol.getSiteId() == 106 && staProtocol.isLoading()){
+                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, 2);
+                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                    if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
+                        // 绉诲姩涓�
+                        continue;
+                    }
+                    if (crnProtocol.modeType == CrnModeType.AUTO
+                            && crnProtocol.statusType == CrnStatusType.WAITING
+                            && crnProtocol.forkPosType == CrnForkPosType.HOME){
+                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", crnProtocol.getTaskNo()).eq("wrk_sts",12));
+                        if (wrkMast == null){
+                            News.errorNoLog("2鍙峰爢鍨涙満绛夊緟纭鐨勫伐浣滄。涓嶅瓨鍦�");
+                            continue;
+                        }
+                        wrkMast.setWrkSts(14L);
+                        wrkMast.setCrnEndTime(new Date());
+                        if (wrkMastMapper.updateById(wrkMast) != 0) {
+                            // 澶嶄綅鍫嗗灈鏈�
+                            log.error("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,{}", wrkMast.getWrkNo());
+                            crnThread.setResetFlag(true);
+                        } else {
+                            News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                        }
+                        break;
+                    }
+                }
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                     // 鏌ヨ宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
@@ -896,6 +945,9 @@
      */
     public synchronized void crnIoExecute(Integer mark) {
 
+        /*鍫嗗灈鏈哄叆鍑哄簱浠诲姟涓嬪彂鎺у埗鍙傛暟*/
+        Integer ioControl=configService.selectCrnIo();
+
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -940,14 +992,68 @@
                         crnProtocol.setLastIo("O");
                     }
                 }
+
+
+
+
+
+
+
+//                if (ioControl==1){
+//                    //鍏ュ簱浼樺厛  鍏堟墽琛屽叆搴撳啀鎵ц鍑哄簱
+//                    Integer inCount=wrkMastService.selectIn();
+//                    if (inCount == 0 && basCrnp.getOutEnable().equals("Y")){
+//                        this.locToCrnStn(crn, crnProtocol, mark); //  鍑哄簱
+//                    }
+//                    if (basCrnp.getInEnable().equals("Y")){
+//                        this.crnStnToLoc(crn, crnProtocol, mark); //  鍏ュ簱
+//                    }
+//                }else if (ioControl==2){
+//                    //鍑哄簱浼樺厛 鍏堟墽琛屽嚭搴撳啀鎵ц鍏ュ簱
+//                    Integer outCount=wrkMastService.selectOut();
+//                    if (outCount==0 && basCrnp.getInEnable().equals("Y")){
+//                        this.crnStnToLoc(crn, crnProtocol, mark); //  鍏ュ簱
+//                    }
+//                    if (basCrnp.getOutEnable().equals("Y")){
+//                        this.locToCrnStn(crn, crnProtocol, mark); //  鍑哄簱
+//                    }
+//                }else if(ioControl==3){
+//                    //鍏ュ嚭搴撲氦鏇挎墽琛� 涓嶅仛闄愬埗
+//                    // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
+//                    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");
+//                        }
+//                    }
+//                    // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
+//                    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");
+//                        }
+//                    }
+//                }
             }
+
+
+
+
             // 搴撲綅绉昏浆
             //mark - 3 - ....
-//            this.locToLoc(crn, crnProtocol, mark);
+            this.locToLoc(crn, crnProtocol, mark);
 //            this.crnRebackHp(crnProtocol, crnThread);
 
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鎵ц瀹屾垚");
+        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鎵ц瀹屾垚");
     }
 
     /**
@@ -1125,6 +1231,7 @@
             crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
             crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
             crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+//            crnCommand.setSourcePosY((short)(wrkMast.getBarcode().startsWith("7")? 0:1));     // 婧愬簱浣嶅垪
             crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
             crnCommand.setDestinationPosX((short) (locMast.getRow1() + slave.getOffset()));     // 鐩爣搴撲綅鎺�
             crnCommand.setDestinationPosY((short) (locMast.getBay1() + slave.getOffset()));     // 鐩爣搴撲綅鍒�
@@ -1169,8 +1276,11 @@
             // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
 //            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo());
             List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
+            if (wrkMasts.isEmpty()) {
+                wrkMasts = wrkMastMapper.selectPakOutStep11To2(slave.getId(), 103);
+            }
             for (WrkMast wrkMast : wrkMasts) {
-                if (wrkMast == null) {
+                 if (wrkMast == null) {
                     continue;
                 }
                 // 宸ヤ綔妗g姸鎬佸垽鏂�
@@ -1186,14 +1296,51 @@
                 }
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+                StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getSourceStaNo());
                 if (staProtocol == null) {
                     News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol);
                     break;
-//                    continue;
                 } else {
                     staProtocol = staProtocol.clone();
                 }
+                //宸ヤ綔妗g洰鏍囩珯涓�101 涓� 101鏈夌墿  鐩爣绔欎负101 涓斿伐浣滄。鐘舵�佷负12 15 14 鍋滄缁欏爢鍨涙満涓嬪叏鏉垮嚭搴撲互澶栫殑浠诲姟
+                if (wrkMast.getStaNo() == 101){
+                    List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("sta_no", 101).in("wrk_sts", 12, 14, 15));
+                    StaProtocol staProtocol101 = devpThread.getStation().get(101);
+                    StaProtocol staProtocol102 = devpThread.getStation().get(102);
+                    StaProtocol staProtocol103 = devpThread.getStation().get(103);
+                    if (staProtocol101 == null) {
+                        News.infoNoLog("" + mark + " - 2" + " - 3" + " - 宸ヤ綔妗g洰鏍囩珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol);
+                        break;
+                    } else {
+                        staProtocol101 = staProtocol101.clone();
+                    }
+                    if (staProtocol101.isLoading() || !Cools.isEmpty(wrkMastList) || staProtocol101.getWorkNo() != 0 || staProtocol102.isLoading() || staProtocol102.getWorkNo() != 0 || staProtocol103.isLoading() || staProtocol103.getWorkNo() != 0){
+                        break;
+                    }
+                }
+//                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;
+//                }
 
 //            // 鍏ュ嚭搴撴ā寮忓垽鏂�
 //            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; }
@@ -1209,9 +1356,27 @@
                     break;
 //                    continue;
                 }
+
+                // 鍫嗗灈鏈哄嚭搴撶珯鍙嚭淇″彿鏍¢獙鍙傛暟
+                Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "OutStationVerify"));
+                boolean out = false;
+                if (config != null){
+                    if (config.getValue().equals("Y")){
+                        if (staProtocol.isOutEnable()){
+                            out = true; // 鏍¢獙鍫嗗灈鏈哄嚭搴撶珯鍙嚭淇″彿  鍑哄簱绔欏彲鍑�
+                        }else {
+                            out = false; // 鏍¢獙鍫嗗灈鏈哄嚭搴撶珯淇″彿 鍑哄簱绔欎笉鍙嚭
+                        }
+                    }else if (config.getValue().equals("N")){
+                        out = true; // 涓嶆牎楠屽爢鍨涙満鍑哄簱绔欏彲鍑轰俊鍙�
+                    }else {
+                        throw new CoolException("鏍¢獙鍫嗗灈鏈哄嚭搴撶珯鍙嚭淇″彿鍙傛暟寮傚父 璇烽┈涓婃鏌ュ弬鏁板搴旂殑鍊�");
+                    }
+                }
+
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
                 if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
-                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+                        && staProtocol.getWorkNo() == 0 && out) {
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                     // 鍫嗗灈鏈烘帶鍒惰繃婊�
@@ -1220,7 +1385,7 @@
                         break;
                     }
 
-//                    // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+                    // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
 //                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
 //                        News.warnNoLog("" + mark + " - 2" + " - 6" + " - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}", wrkMast.getWrkNo());
 //                        String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
@@ -1281,17 +1446,32 @@
 
                     // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
                     CrnCommand crnCommand = new CrnCommand();
-                    crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-//                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                    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 (wrkMast.getCrnNo() == 2){
+                        crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+//                      crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                        crnCommand.setSourcePosX((short) (sourceSta.getRow1() + slave.getOffset()));     // 婧愬簱浣嶆帓
+                        crnCommand.setSourcePosY((short) (sourceSta.getBay1() + slave.getOffset()));     // 婧愬簱浣嶅垪
+                        crnCommand.setSourcePosZ((short) (sourceSta.getLev1() + slave.getOffset()));     // 婧愬簱浣嶅眰
+                        crnCommand.setDestinationPosX(wrkMast.getIoType() == 101? crnStn.getRow().shortValue() : 3);     // 鐩爣搴撲綅鎺�
+//                        crnCommand.setDestinationPosY((short)(Utils.getLev(wrkMast.getSourceLocNo()) <= 2? 0 : 1));     // 鐩爣搴撲綅鍒�
+                        crnCommand.setDestinationPosY((short)1);     // 鐩爣搴撲綅鍒�
+                        crnCommand.setDestinationPosZ((short)1);     // 鐩爣搴撲綅灞�
+                        crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //搴撲綅绫诲瀷
+                    }else {
+                        crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+//                      crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                        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 {
@@ -1522,7 +1702,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) {
@@ -1549,7 +1732,7 @@
 
 
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 瀵瑰伐浣滄。鐨勫畬鎴愭搷浣滄墽琛屽畬鎴�");
+        News.infoNoLog(""+mark+" - 0"+" - 瀵瑰伐浣滄。鐨勫畬鎴愭搷浣滄墽琛屽畬鎴�");
     }
 
     /**
@@ -1671,7 +1854,7 @@
             }
 
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄紓甯镐俊鎭褰曟墽琛屽畬鎴�");
+        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄紓甯镐俊鎭褰曟墽琛屽畬鎴�");
     }
 
 
@@ -1685,6 +1868,12 @@
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻绌烘澘鍏ュ簱鍙�
             for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
+                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode());
+                if (barcodeThread == null) {
+                    continue;
+                }
+                String barcode = barcodeThread.getBarcode();
                 // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
@@ -1702,24 +1891,87 @@
                 if (!staProtocol.isLoading()) {
                     continue;
                 }
+                // 濡傛灉宸ヤ綔鍙蜂笉鏄� 9998 锛堝叆搴撲换鍔★級 涓嶅悜涓嬫墽琛�
+                if (staProtocol.getWorkNo() != 9998){
+                    continue;
+                }
 
+                // 灏哄妫�娴嬪紓甯�
+                boolean back = false;
+                String errMsg = "";
+                // 妫�娴嬫槸鍚︽湁鍑哄簱浠诲姟 濡傛灉鏈夊嚭搴撲换鍔� 鍏ュ簱灏卞仠姝�
+                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("io_type",101,103,104,107,110).in("wrk_sts", 12));
+                // 妫�娴�104绔欙紙鍫嗗灈鏈哄嚭搴撶珯 鍏ュ簱绔欙級鏄惁鏈夌墿 濡傛灉鏈夌墿娌℃湁宸ヤ綔鍙� 鍏ュ簱鍋滄 濡傛灉鏈夌墿宸ヤ綔鍙锋槸鍑哄簱 鍏ュ簱鍋滄 濡傛灉鏈夌墿宸ヤ綔鍙锋槸鍏ュ簱 鍙互鍏ュ簱 濡傛灉鏈夌墿宸ヤ綔鍙蜂笉瀛樺湪 鍏ュ簱鍋滄
+                StaProtocol staProtocol104 = devpThread.getStation().get(104);
+                if (staProtocol104 == null){
+                    log.error("104绔欑偣淇℃伅鏈幏鍙�");
+                    continue;
+                }
+                //104绔欐湁鐗� 鏈夊伐浣滃彿 鍒ゆ柇杩欎釜浠诲姟鐨勭被鍨�
+                WrkMast wrkMast1 = null;
+                if (staProtocol104.isLoading() && staProtocol104.getWorkNo() != 0){
+                    wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol104.getWorkNo()));
+                }
+                // 鍒ゆ柇鎵樼洏鐮佹牸寮�
+                if (Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)){
+                    errMsg = "鎵樼洏鐮佹牸寮忔湁璇�--->" + barcode;
+                    back = true;
+                }
+                if (!back && (!barcode.startsWith("5") &&  !barcode.startsWith("6") &&  !barcode.startsWith("7") && !barcode.startsWith("8"))) {
+                    errMsg = "鎵樼洏鐮佹牸寮忔湁璇�--->" + barcode;
+                    back = true;
+                }
+                if (!back && !wrkMastList.isEmpty()) {
+                    errMsg = "鍫嗗灈鏈烘湁鍑哄簱浠诲姟,鍏ュ簱鍋滄";
+                    back = true;
+                }if (!back && staProtocol104.isLoading() && staProtocol104.getWorkNo() == 0 && (barcode.startsWith("5") || barcode.startsWith("6"))){ // 104铏界劧鏈夌墿娌℃湁宸ヤ綔鍙� 浣嗘槸濡傛灉102鐨勮揣鐗╄杩涚殑鏄�2鍙峰爢鍨涙満 涓嶈兘闃绘嫤 锛�1鍙峰爢鍨涙満鏉$爜 5xxx 6xxx   2鍙峰爢鍨涙満 7xxx 8xxx锛�
+                    errMsg = "104绔欐湁鐗╀絾鏄棤宸ヤ綔鍙�,璇锋鏌�";
+                    back = true;
+                }if (!back && (wrkMast1 != null && wrkMast1.getIoType() > 100)){
+                    errMsg = "1鍙峰爢鍨涙満鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
+                    back = true;
+                }if (!back && (staProtocol104.isLoading() && wrkMast1 == null) && (barcode.startsWith("5") || barcode.startsWith("6"))){ // 鍚屼笂
+                    errMsg = "104绔欐湁鐗╀絾鏄搴旂殑宸ヤ綔鍙锋棤宸ヤ綔妗�,璇锋鏌�";
+                    back = true;
+                }
+
+                // 閫�鍥�
+                if (back) {
+                    log.info("errmsg: " + errMsg);
+                    MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errMsg));
+
+                    if (!staProtocol.isLoading()) {
+                        continue;
+                    }
+                    if (!staProtocol.isPakMk()) {
+                        continue;
+                    }
+                    staProtocol.setWorkNo(wrkNo);//閫�鍥� 宸ヤ綔鍙�:10000
+                    News.info("{}PLC鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", emptyInSta.getStaNo(), errMsg, 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());
+                    break;//鎵樼洏閫�鍥炰笉鐢熸垚宸ヤ綔妗�
+                }
                 // 绔欑偣鏉′欢鍒ゆ柇
                 if (staProtocol.isAutoing()
                         && staProtocol.isLoading()
                         && staProtocol.isInEnable()
                         && staProtocol.isEmptyMk()
                         && staProtocol.isPakMk()
-                        && (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() > 9700)
+                        && staProtocol.getWorkNo() == 9998
                 ) {
                     News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛岋細绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�");
 
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                         SearchLocParam param = new SearchLocParam();
-                        locTypeDto.setLocType1((short) 1);
+                        locTypeDto.setLocType1(staProtocol.toSqlModel().getLocType1());
                         param.setIoType(10);
                         param.setSourceStaNo(emptyInSta.getStaNo());
                         param.setLocType1(locTypeDto.getLocType1());
+                        param.setBarcode(barcode); // 绌烘墭鐩樺叆搴撻渶瑕佹牴鎹墭鐩樼爜鍒嗗簱浣�
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
                                 .setPath("/rpc/pakin/loc/v1")
@@ -1736,7 +1988,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 +2001,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);
@@ -1786,7 +2038,7 @@
                 }
             }
         }
-//        News.infoNoLog(""+mark+" - 0"+" - 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐ф墽琛屽畬鎴�");
+        News.infoNoLog(""+mark+" - 0"+" - 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐ф墽琛屽畬鎴�");
     }
 
     /**
@@ -1798,8 +2050,7 @@
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
             // 鍛戒护闆嗗悎
             List<LedCommand> commands = new ArrayList<>();
-            // 宸ヤ綔妗i泦鍚�
-            List<WrkMast> wrkMasts = new ArrayList<>();
+            List<Integer> workNoList = new ArrayList<>();
             for (Integer staNo : led.getStaArr()) {
                 // 鑾峰彇鍙夎溅绔欑偣
                 StaProtocol staProtocol = devpThread.getStation().get(staNo);
@@ -1808,29 +2059,42 @@
                 } else {
                     staProtocol = staProtocol.clone();
                 }
+                Integer wrkNo = null;
+                Integer ioType = null;
+                Integer targetStaNo = null;
+                String sourceLocNo = null;
+                String locNo = null;
+                String barcode = null;
+                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, staNo);
+
                 // 鑾峰彇宸ヤ綔妗f暟鎹�
-                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-                if (null == wrkMast) {
+                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",staProtocol.getWorkNo()));
+                if (wrkMast == null && barcodeThread != null) {
+                    wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",barcodeThread.getBarcode()));
+                }
+                if (wrkMast == null){
                     continue;
                 }
-                wrkMasts.add(wrkMast);
+                wrkNo = wrkMast.getWrkNo();
+                ioType = wrkMast.getIoType();
+                sourceLocNo = wrkMast.getSourceLocNo();
+                locNo = wrkMast.getLocNo();
+                targetStaNo = wrkMast.getStaNo();
+                barcode = wrkMast.getBarcode();
+                News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�:鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�");
+                workNoList.add(wrkNo);
                 // 缁勮鍛戒护
                 LedCommand ledCommand = new LedCommand();
-                ledCommand.setWorkNo(wrkMast.getWrkNo());
-                ledCommand.setIoType(wrkMast.getIoType());
+                ledCommand.setWorkNo(wrkNo);
+                ledCommand.setIoType(ioType);
                 // 鍑哄簱妯″紡
-                switch (wrkMast.getIoType()) {
+                switch (ioType) {
                     case 1:
                         ledCommand.setTitle("鍏ㄦ澘鍏ュ簱");
                         break;
                     case 10:
                         ledCommand.setTitle("绌烘澘鍏ュ簱");
-                        break;
-                    case 53:
-                        ledCommand.setTitle("鎷f枡鍐嶅叆搴�");
-                        break;
-                    case 57:
-                        ledCommand.setTitle("鐩樼偣鍐嶅叆搴�");
                         break;
                     case 101:
                         ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
@@ -1848,60 +2112,130 @@
                         ledCommand.setTitle("绌烘澘鍑哄簱");
                         ledCommand.setEmptyMk(true);
                         break;
+                    case 53:
+                        ledCommand.setTitle("鎷f枡鍏ュ簱");
+                        break;
+                    case 57:
+                        ledCommand.setTitle("鐩樼偣鍏ュ簱");
+                        break;
+                    case 54:
+                        ledCommand.setTitle("骞舵澘鍏ュ簱");
+                        break;
                     default:
-                        News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
+                        News.error("" + mark + " - 1" + " - 浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkNo, ioType);
                         break;
                 }
-                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
-                ledCommand.setStaNo(wrkMast.getStaNo());
-                ledCommand.setBarcode(wrkMast.getBarcode());
-                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
-                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+                ledCommand.setSourceLocNo(sourceLocNo);
+                ledCommand.setLocNo(locNo);
+                ledCommand.setStaNo(targetStaNo);
+                ledCommand.setBarcode(barcode);
 
-                    wrkDetls.forEach(wrkDetl -> {
-                        Double total = 0.0;
-                        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
-                        LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
-                        if (Cools.isEmpty(locDetl)) {
-                            total = wrkDetl.getAnfme();
-                        } else {
-                            total = locDetl.getAnfme();
+                // 淇敼寮�濮嬶細澶勭悊澶氫釜wrkDetl锛屼笉鍚堝苟
+                if (ioType != 110 && ioType != 10) {
+                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkNo);
+
+                    if (!wrkDetls.isEmpty()) {
+                        // 鑾峰彇搴撳瓨淇℃伅
+                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+                                .eq("loc_no", wrkMast.getSourceLocNo()));
+                        double totalAnfme = 0D;
+                        double totalWeight = 0D;
+                        for (LocDetl locDetl : locDetls) {
+                            totalAnfme += locDetl.getAnfme();
+//                        totalWeight += locDetl.getWeight();
                         }
-                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
-                            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.getAnfme(), total));
+
+                        // 涓烘瘡涓猈rkDetl鍒涘缓鐙珛鐨凪atDto
+                        for (WrkDetl wrkDetl : wrkDetls) {
+                            // 娉ㄦ剰锛氳繖閲屼娇鐢ㄦ瘡涓獁rkDetl鐨勫師濮嬫暟鎹紝涓嶅悎骞�
+                            ledCommand.getMatDtos().add(new MatDto(
+                                    wrkDetl.getMatnr()
+                                    , wrkDetl.getMaktx()
+                                    , wrkDetl.getAnfme()  // 浣跨敤鍗曚釜鐗╂枡鐨勬暟閲忥紝涓嶇疮鍔�
+                                    , wrkDetl.getWeight() // 浣跨敤鍗曚釜鐗╂枡鐨勯噸閲忥紝涓嶇疮鍔�
+                                    , totalAnfme          // 搴撳瓨鎬绘暟锛堣繖涓槸姝e父鐨勶級
+                                    , totalWeight         // 搴撳瓨鎬婚噸閲忥紙杩欎釜鏄甯哥殑锛�
+                                    , wrkDetl.getSpecs()
+                                    , wrkDetl.getSku()
+                                    , wrkDetl.getZpallet()
+                                    , wrkDetl.getModel()
+                                    , wrkDetl.getSupp()
+                                    , wrkDetl.getBarcode()
+                                    , wrkDetl.getOrderNo()
+                                    , wrkDetl.getBatch()
+//                                , wrkDetl.getCstateid$()
+                            ));
                         }
-                        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.getAnfme(), total));
-                        }
-                        if (wrkMast.getIoType() == 107) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getAnfme(), total));
-                        }
-                    });
+                    } else {
+//                        List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectTodayByWrkNo(wrkNo);
+//                        if (!wrkDetlLogs.isEmpty()) {
+//                            // 鑾峰彇搴撳瓨淇℃伅
+//                            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+//                                    .eq("loc_no", sourceLocNo));
+//                            double totalAnfme = 0D;
+//                            double totalWeight = 0D;
+//                            for (LocDetl locDetl : locDetls) {
+//                                totalAnfme += locDetl.getAnfme();
+//                                totalWeight += locDetl.getWeight();
+//                            }
+//
+//                            // 涓烘瘡涓猈rkDetlLog鍒涘缓鐙珛鐨凪atDto
+//                            for (WrkDetlLog wrkDetlLog : wrkDetlLogs) {
+//                                // 娉ㄦ剰锛氳繖閲屼娇鐢ㄦ瘡涓獁rkDetlLog鐨勫師濮嬫暟鎹紝涓嶅悎骞�
+//                                ledCommand.getMatDtos().add(new MatDto(
+//                                        wrkDetlLog.getMatnr()
+//                                        , wrkDetlLog.getMaktx()
+//                                        , wrkDetlLog.getAnfme()  // 浣跨敤鍗曚釜鐗╂枡鐨勬暟閲忥紝涓嶇疮鍔�
+//                                        , wrkDetlLog.getWeight() // 浣跨敤鍗曚釜鐗╂枡鐨勯噸閲忥紝涓嶇疮鍔�
+//                                        , totalAnfme              // 搴撳瓨鎬绘暟
+//                                        , totalWeight             // 搴撳瓨鎬婚噸閲�
+//                                        , wrkDetlLog.getSpecs()
+//                                        , wrkDetlLog.getSku()
+//                                        , wrkDetlLog.getZpallet()
+//                                        , wrkDetlLog.getModel()
+//                                        , wrkDetlLog.getSupp()
+//                                        , wrkDetlLog.getKpCstmrName()
+//                                        , wrkDetlLog.getOrderNo()
+//                                        , wrkDetlLog.getBatch()
+////                                    , wrkDetlLog.getCstateid$()
+//                                ));
+//                            }
+//                        }
+                    }
                 }
+                // 淇敼缁撴潫
+
                 commands.add(ledCommand);
             }
-            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
+            Set<Integer> workNos = new HashSet<>(workNoList);
             // 鑾峰彇LED绾跨▼
             LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
             // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
             if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
                 continue;
             }
+
             // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
             if (!commands.isEmpty()) {
                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
-                    News.error("{}鍙稬ED鏄剧ず鍐呭鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触--->鍑哄簱锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
                     continue;
+                } else {
+                    ledThread.setLedMk(false);
                 }
             }
 
             try {
                 // 淇敼涓绘。led鏍囪
-                for (WrkMast wrkMast : wrkMasts) {
-                    wrkMast.setOveMk("Y");
-                    wrkMast.setModiTime(new Date());
-                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                for (Integer wrkNo : workNoList) {
+                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo));
+                    if (wrkMast != null) {
+                        wrkMast.setOveMk("Y");
+                        wrkMast.setModiTime(new Date());
+                        if (wrkMastMapper.updateById(wrkMast) == 0) {
+                            News.errorNoLog("" + mark + " - 4" + " - 鏇存柊宸ヤ綔妗eけ璐�");
+                            throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                        }
                     }
                 }
 
@@ -1914,6 +2248,7 @@
             }
 
         }
+        News.infoNoLog("" + mark + " - 0" + " - 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣ㄦ墽琛屽畬鎴�");
     }
 
     /**
@@ -2178,7 +2513,12 @@
 
                     LocMast sourceLoc = locMastService.queryDemoSourceLoc(crn.getId());
                     LocMast loc = locMastService.queryDemoLoc(crn.getId());
-                    if (null == sourceLoc || null == loc) {
+                    if (null == sourceLoc) {
+                        continue;
+                    }
+
+                    if (null == loc) {
+                        log.error("搴撲綅宸插叏閮ㄦ爣璁�");
                         continue;
                     }
 
@@ -2237,6 +2577,7 @@
                     if (loc.getLocSts().equals("O")) {
                         loc.setLocSts("S"); // S.鍏ュ簱棰勭害
                         loc.setModiTime(new Date());
+                        loc.setLocType2((short) 1); // 鏍囪
                         if (!locMastService.updateById(loc)) {
                             throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
                         }
@@ -2388,10 +2729,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)) {
@@ -2415,7 +2754,7 @@
                 }
                 Short loctype1 = 1;
                 if (site == 101) {
-                    loctype1 = 2;
+                    loctype1 = 1;
                 }
                 LocTypeDto locTypeDto = new LocTypeDto(loctype1, (short) 1, (short) 1);
                 locTypeDto.setSiteId(site);
@@ -3176,4 +3515,86 @@
         }
     }
 
+    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.getBay()==1 && crnProtocol.getLevel() == 1 && crnProtocol.getCrnNo() == 1) {
+                    continue;
+                }
+                if (crnProtocol.getCrnNo() == 2 && crnProtocol.getLevel() == 1 && (crnProtocol.getBay() == 0 || crnProtocol.getBay() == 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();
+//                if (crnProtocol.getCrnNo()==3 || crnProtocol.getCrnNo()==4){
+//                    crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+//                    crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
+//                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+//                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍫嗗灈鏈虹Щ鍔�
+//                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+//                    crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
+//                    crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
+//                    crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
+//                    crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
+//                    crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
+//                    crnCommand.setCommand((short) 1);
+//                }else {
+                    crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                    crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
+                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+//                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍫嗗灈鏈虹Щ鍔�
+                    crnCommand.setTaskMode(CrnTaskModeType.X_MOVE);//浣欏閿愰簰鍥炲師鐐逛换鍔℃ā寮�:  绔欎綅杞Щ
+                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+                    crnCommand.setSourcePosY((short) 1);     // 婧愬簱浣嶅垪
+                    crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
+                    crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
+                    crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
+                    crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
+                    crnCommand.setCommand((short) 1);//浠诲姟纭浣�
+//                }
+                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