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/LocMastServiceImpl.java |    4 
 src/main/java/com/zy/core/thread/LedThread.java                |    9 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |  384 +++++++++++++++++++++++++---------
 src/main/resources/mapper/LocMastMapper.xml                    |    4 
 src/main/resources/mapper/WrkMastMapper.xml                    |    4 
 src/main/webapp/static/js/console.map.js                       |   94 ++++----
 src/main/java/com/zy/common/model/SearchLocParam.java          |    2 
 src/main/java/com/zy/core/model/command/LedCommand.java        |    2 
 src/main/java/com/zy/common/model/MatDto.java                  |  109 ++++-----
 src/main/java/com/zy/core/model/protocol/StaProtocol.java      |    4 
 src/main/webapp/views/crn.html                                 |    2 
 src/main/java/com/zy/asrs/utils/Utils.java                     |   10 
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java            |    2 
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java            |    2 
 src/main/java/com/zy/asrs/service/LocMastService.java          |    2 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java        |    8 
 src/main/resources/application.yml                             |   11 
 17 files changed, 419 insertions(+), 234 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index 3670a2c..9fd1d06 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -30,7 +30,7 @@
 
     LocMast queryDemoSourceLoc(@Param("crnNo") Integer crnNo);
 
-    LocMast queryDemoLoc(@Param("crnNo") Integer crnNo,@Param("loc_type2") String locType2);
+    LocMast queryDemoLoc(@Param("crnNo") Integer crnNo);
 
     @Select("select count(*) as count from asr_loc_mast where 1=1 and loc_sts = 'O' and loc_type1 = #{locType1} and crn_no = #{crnNo}")
     Integer selectEmptyLocCount(@Param("locType1") Short locType1, @Param("crnNo") Integer crnNo);
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index ff288c2..dbe788c 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -122,4 +122,6 @@
 
     @Select("select count(*) from asr_wrk_mast where wrk_sts = 11 OR wrk_sts = 12;")
     Integer selectOutCount();
+
+    List<WrkMast> selectPakOutStep11To2(@Param("crnNo")Integer crnNO, @Param("sourceStaNo")Integer sourceStaNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java
index dc2effd..bc45966 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -36,7 +36,7 @@
      * @param crn
      * @return
      */
-    LocMast queryDemoLoc(Integer crn,String locType2);
+    LocMast queryDemoLoc(Integer crn);
 
     /**
      * 妫�鏌ュ綋鍓嶅簱浣嶆墍灞炲贩閬撶殑绌哄簱浣嶆暟閲�
diff --git a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
index 20f1c09..ababf93 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -40,8 +40,8 @@
     }
 
     @Override
-    public LocMast queryDemoLoc(Integer crn,String locType2) {
-        return this.baseMapper.queryDemoLoc(crn,locType2);
+    public LocMast queryDemoLoc(Integer crn) {
+        return this.baseMapper.queryDemoLoc(crn);
     }
 
     @Override
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 96e5d34..14c3375 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -140,8 +140,9 @@
                 // 灏哄妫�娴嬪紓甯�
                 boolean back = false;
                 String errMsg = "";
+                boolean fail = false;
                 // 妫�娴嬫槸鍚︽湁鍑哄簱浠诲姟 濡傛灉鏈夊嚭搴撲换鍔� 鍏ュ簱灏卞仠姝�
-                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no",1).in("wrk_sts", 11, 12));
+                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){
@@ -149,9 +150,25 @@
                     continue;
                 }
                 //104绔欐湁鐗� 鏈夊伐浣滃彿 鍒ゆ柇杩欎釜浠诲姟鐨勭被鍨�
-                WrkMast wrkMast1 = new WrkMast();
+                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()) {
@@ -187,20 +204,20 @@
                     errMsg = "鎵樼洏鐮佹牸寮忔湁璇�--->" + barcode;
                     back = true;
                 }
-                if (!back && (!barcode.startsWith("5") &&  !barcode.startsWith("6") &&  !barcode.startsWith("7") && !barcode.startsWith("8"))) {
+                if (!back && (!barcode.startsWith("5") && !barcode.startsWith("6") &&  !barcode.startsWith("7") && !barcode.startsWith("8"))) {
                     errMsg = "鎵樼洏鐮佹牸寮忔湁璇�--->" + barcode;
                     back = true;
                 }
                 if (!back && !wrkMastList.isEmpty()) {
-                    errMsg = "鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
+                    errMsg = "鍫嗗灈鏈烘湁鍑哄簱浠诲姟,鍏ュ簱鍋滄";
                     back = true;
                 }if (!back && staProtocol104.isLoading() && staProtocol104.getWorkNo() == 0 && (barcode.startsWith("6") || barcode.startsWith("5"))){
                     errMsg = "104绔欐湁鐗╀絾鏄棤宸ヤ綔鍙�,璇锋鏌�";
                     back = true;
-                }if (!back && (!Cools.isEmpty(wrkMast1) && wrkMast1.getIoType() > 100)){
-                    errMsg = "鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
+                }if (!back && ((wrkMast1 != null && fail))){
+                    errMsg = "1鍙峰爢鍨涙満鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
                     back = true;
-                }if (!back && (staProtocol104.isLoading() && Cools.isEmpty(wrkMast1)) && (barcode.startsWith("5") || barcode.startsWith("6"))){
+                }if (!back && (staProtocol104.isLoading() && wrkMast1 == null) && (barcode.startsWith("5") || barcode.startsWith("6"))){
                     errMsg = "104绔欐湁鐗╀絾鏄搴旂殑宸ヤ綔鍙锋棤宸ヤ綔妗�,璇锋鏌�";
                     back = true;
                 }
@@ -259,7 +276,7 @@
                     }
                     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;
                     }
@@ -267,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.setWeight(staProtocol.getWeight()); // 閲嶉噺
                         String response = new HttpHandler.Builder()
                                 .setTimeout(30,TimeUnit.SECONDS)
                                 .setUri(wmsUrl)
@@ -420,8 +437,16 @@
 //                    News.error("绔欑偣淇℃伅鏈幏寰�");
                     continue;
                 }
+                // 妫�娴�102绔欐槸鍚︽湁鐗� 鏈夌墿缁х画鍚戜笅鎵ц
+                if (!staProtocol.isLoading()){
+                    continue;
+                }
+                // 濡傛灉宸ヤ綔鍙蜂笉鏄� 9999 锛堝叆搴撲换鍔★級 涓嶅悜涓嬫墽琛�
+                if (staProtocol.getWorkNo() != 9999){
+                    continue;
+                }
                 // 妫�娴嬫槸鍚︽湁鍑哄簱浠诲姟 濡傛灉鏈夊嚭搴撲换鍔� 鍏ュ簱灏卞仠姝�
-                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", 1).in("wrk_sts", 11, 12));
+                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){
@@ -429,13 +454,21 @@
                     continue;
                 }
                 //104绔欐湁鐗� 鏈夊伐浣滃彿 鍒ゆ柇杩欎釜浠诲姟鐨勭被鍨�
-                WrkMast wrkMast1 = new WrkMast();
+                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 (wrkMast1 != null){
+                    if (wrkMast1.getIoType() > 100){
+                        fail = true;
+                    }
+                }
+
                 if (staProtocol.isFrontErr()) {
                     errMsg = "鍓嶈秴闄�";
                     back = true;
@@ -474,13 +507,13 @@
                     back = true;
                 }
                 if (!back && !wrkMastList.isEmpty()) {
-                    errMsg = "鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
+                    errMsg = "鍫嗗灈鏈烘湁鍑哄簱浠诲姟,鍏ュ簱鍋滄";
                     back = true;
                 }if (!back && staProtocol104.isLoading() && staProtocol104.getWorkNo() == 0 && (barcode.startsWith("6") || barcode.startsWith("5"))){
                     errMsg = "104绔欐湁鐗╀絾鏄棤宸ヤ綔鍙�,璇锋鏌�";
                     back = true;
-                }if (!back && (!Cools.isEmpty(wrkMast1) && wrkMast1.getIoType() > 100)){
-                    errMsg = "鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
+                }if (!back && (wrkMast1 != null && fail)){
+                    errMsg = "1鍙峰爢鍨涙満鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
                     back = true;
                 }if (!back && (staProtocol104.isLoading() && Cools.isEmpty(wrkMast1)) && (barcode.startsWith("5") || barcode.startsWith("6"))){
                     errMsg = "104绔欐湁鐗╀絾鏄搴旂殑宸ヤ綔鍙锋棤宸ヤ綔妗�,璇锋鏌�";
@@ -511,27 +544,6 @@
                     }
                     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;
-//                    }
-//
-//                }
 
 
                 if (staProtocol == null) {
@@ -818,6 +830,34 @@
                     continue;
                 } 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)) {
                     // 鏌ヨ宸ヤ綔妗�
@@ -1191,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()));     // 鐩爣搴撲綅鍒�
@@ -1235,6 +1276,9 @@
             // 鑾峰彇宸ヤ綔鐘舵�佷负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) {
                     continue;
@@ -1252,12 +1296,28 @@
                 }
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
                 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;
                 } 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);
@@ -1386,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 {
@@ -1816,12 +1891,16 @@
                 if (!staProtocol.isLoading()) {
                     continue;
                 }
+                // 濡傛灉宸ヤ綔鍙蜂笉鏄� 9998 锛堝叆搴撲换鍔★級 涓嶅悜涓嬫墽琛�
+                if (staProtocol.getWorkNo() != 9998){
+                    continue;
+                }
 
                 // 灏哄妫�娴嬪紓甯�
                 boolean back = false;
                 String errMsg = "";
                 // 妫�娴嬫槸鍚︽湁鍑哄簱浠诲姟 濡傛灉鏈夊嚭搴撲换鍔� 鍏ュ簱灏卞仠姝�
-                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no",1).in("wrk_sts", 11, 12));
+                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){
@@ -1829,7 +1908,7 @@
                     continue;
                 }
                 //104绔欐湁鐗� 鏈夊伐浣滃彿 鍒ゆ柇杩欎釜浠诲姟鐨勭被鍨�
-                WrkMast wrkMast1 = new WrkMast();
+                WrkMast wrkMast1 = null;
                 if (staProtocol104.isLoading() && staProtocol104.getWorkNo() != 0){
                     wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol104.getWorkNo()));
                 }
@@ -1843,15 +1922,15 @@
                     back = true;
                 }
                 if (!back && !wrkMastList.isEmpty()) {
-                    errMsg = "鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
+                    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 && (!Cools.isEmpty(wrkMast1) && wrkMast1.getIoType() > 100)){
-                    errMsg = "鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
+                }if (!back && (wrkMast1 != null && wrkMast1.getIoType() > 100)){
+                    errMsg = "1鍙峰爢鍨涙満鏈夊嚭搴撲换鍔�,鍏ュ簱鍋滄";
                     back = true;
-                }if (!back && (staProtocol104.isLoading() && Cools.isEmpty(wrkMast1)) && (barcode.startsWith("5") || barcode.startsWith("6"))){ // 鍚屼笂
+                }if (!back && (staProtocol104.isLoading() && wrkMast1 == null) && (barcode.startsWith("5") || barcode.startsWith("6"))){ // 鍚屼笂
                     errMsg = "104绔欐湁鐗╀絾鏄搴旂殑宸ヤ綔鍙锋棤宸ヤ綔妗�,璇锋鏌�";
                     back = true;
                 }
@@ -1872,7 +1951,7 @@
                     staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                    log.error("杈撻�佺嚎涓嬪彂(姝e湪鎵ц鍑哄簱浠诲姟 绌烘澘鍏ュ簱鏆傚仠)锛�" + wrkNo + "," + emptyInSta.getBackSta());
+                    log.error("杈撻�佺嚎涓嬪彂锛�" + wrkNo + "," + emptyInSta.getBackSta());
                     break;//鎵樼洏閫�鍥炰笉鐢熸垚宸ヤ綔妗�
                 }
                 // 绔欑偣鏉′欢鍒ゆ柇
@@ -1881,14 +1960,14 @@
                         && 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());
@@ -1971,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);
@@ -1981,32 +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 54:
-                        ledCommand.setTitle("骞舵澘鍐嶅叆搴�");
-                        break;
-                    case 57:
-                        ledCommand.setTitle("鐩樼偣鍐嶅叆搴�");
                         break;
                     case 101:
                         ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
@@ -2024,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 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57||wrkMast.getIoType() == 54) {
-                            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));
+
+                        // 涓烘瘡涓猈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.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(), total));
-                        }
-                        if (wrkMast.getIoType() == 107||wrkMast.getIoType()==104) {
-                            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));
-                        }
-                    });
+                    } 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け璐�");
+                        }
                     }
                 }
 
@@ -2090,6 +2248,7 @@
             }
 
         }
+        News.infoNoLog("" + mark + " - 0" + " - 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣ㄦ墽琛屽畬鎴�");
     }
 
     /**
@@ -2353,8 +2512,13 @@
                     }
 
                     LocMast sourceLoc = locMastService.queryDemoSourceLoc(crn.getId());
-                    LocMast loc = locMastService.queryDemoLoc(crn.getId(),sourceLoc.getLocType2().toString());
-                    if (null == sourceLoc || null == loc) {
+                    LocMast loc = locMastService.queryDemoLoc(crn.getId());
+                    if (null == sourceLoc) {
+                        continue;
+                    }
+
+                    if (null == loc) {
+                        log.error("搴撲綅宸插叏閮ㄦ爣璁�");
                         continue;
                     }
 
@@ -2413,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("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
                         }
@@ -3365,7 +3530,10 @@
             }
 
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
-                if (crnProtocol.getBay()==0 && crnProtocol.getLevel() == 1) {
+                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));
@@ -3410,7 +3578,7 @@
 //                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍫嗗灈鏈虹Щ鍔�
                     crnCommand.setTaskMode(CrnTaskModeType.X_MOVE);//浣欏閿愰簰鍥炲師鐐逛换鍔℃ā寮�:  绔欎綅杞Щ
                     crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
-                    crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
+                    crnCommand.setSourcePosY((short) 1);     // 婧愬簱浣嶅垪
                     crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
                     crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
                     crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 36a0324..27ec9c2 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -144,6 +144,16 @@
     }
 
     /**
+     * 閫氳繃搴撲綅鍙疯幏鍙栧眰 0100203
+     */
+    public static int getLev(String locNo) {
+        if (!Cools.isEmpty(locNo)) {
+            return Integer.parseInt(locNo.substring(5, 7));
+        }
+        throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
+    }
+
+    /**
      * 褰撴绱㈠埌鍙屾繁搴撲綅鐨勬祬搴撲綅鏃讹紝濡傛灉娣卞簱浣嶆棤璐э紝鍒欐斁鍏ュ搴旂殑娣卞簱浣�
      */
     public static void toDeepIfEmptyByShallow(String shallowLoc) {
diff --git a/src/main/java/com/zy/common/model/MatDto.java b/src/main/java/com/zy/common/model/MatDto.java
index 6b94054..11d61b5 100644
--- a/src/main/java/com/zy/common/model/MatDto.java
+++ b/src/main/java/com/zy/common/model/MatDto.java
@@ -12,79 +12,64 @@
     private String matnr;
 
     // 鐗╂枡鍚嶇О
-    private String maknx;
+    private String maktx;
 
-    private String batch;
-
+    // 搴撲綅瑙勬牸
     private String specs;
 
-    private String temp1;
-    private String temp2;
-    private String outOrderNo;
-    private String orderNo;
-    private String unit;
-    private Double weight;
-    private String objectId;
-    private String objectName;
-    private Double length;
-    // 瀹㈡埛淇℃伅
-    private String manu;
-
-    // 澶囨敞
-    private String memo;
-
-    private String proType;
     // 鐗╂枡鏁伴噺
-    private Double count;
+    private Double anfme;
 
+    // 搴撲綅鏁伴噺
     private Double total;
+
+    //杈呮暟閲�
+    private Double weight;
+
+    // 杈呭簱浣嶆暟閲�
+    private Double totalWeight;
+
+    //鎵樼洏鐮�
+    private String barcode;
+
+    //u8鏃у搧鍚�
+    private String sku;
+
+    //鍨嬪彿
+    private String model;
+
+    //瀹㈡埛鍚嶇О
+    private String supp;
+
+    //寮�绁ㄥ鎴峰悕绉�
+    private String kpCstmrName;
+
+    //鍗曞彿
+    private String orderNo;
+
+    //鎵瑰彿
+    private String batch;
+
+//    private String cstateid;
 
     public MatDto() {
     }
-    public MatDto(String matnr, String maknx, String batch, String specs,String OrderNo,String outOrderNo,String unit,Double weight,String objectName,Double length,String temp1,String proType,Double count,String temp2, Double total){
-        this.matnr = matnr;
-        this.maknx = maknx;
-        this.batch = batch;
-        this.specs = specs;
-        this.orderNo = OrderNo;
-        this.outOrderNo = outOrderNo;
-        this.unit = unit;
-        this.weight = weight;
-        this.objectName = objectName;
-        this.length = length;
-        this.temp1 = temp1;
-        this.proType = proType;
-        this.count = count;
-        this.temp2 = temp2;
-        this.total = total;
-    }
-    public MatDto(String matnr, String maknx, String batch, String specs, String manu, String memo, Double count, Double total) {
-        this.matnr = matnr;
-        this.maknx = maknx;
-        this.batch = batch;
-        this.specs = specs;
-        this.manu = manu;
-        this.memo = memo;
-        this.count = count;
-        this.total = total;
-    }
 
-    public MatDto(String matNo, String maknx, Double count) {
+    public MatDto(String matNo, String maktx, Double anfme, Double weight, Double total, Double totalWeight, String specs, String sku, String barcode, String model, String supp, String kpCstmrName, String orderNo, String batch) {
         this.matnr = matNo;
-        this.maknx = maknx;
-        this.count = count;
-    }
-    public MatDto(String matNo, String maknx, Double count,String specs) {
+        this.maktx = maktx;
         this.specs = specs;
-        this.matnr = matNo;
-        this.maknx = maknx;
-        this.count = count;
-    }
-    public MatDto(String matNo, String maknx, Double count,Double total,String specs) {
-        this.specs = specs;
-        this.matnr = matNo;
-        this.maknx = maknx;
-        this.count = count;
+        this.anfme = anfme;
+        this.weight = weight;
         this.total = total;
+        this.totalWeight = totalWeight;
+        this.sku = sku;
+        this.barcode = barcode;
+        this.model = model;
+        this.supp = supp;
+        this.kpCstmrName = kpCstmrName;
+        this.orderNo = orderNo;
+        this.batch = batch;
+//        this.cstateid = cstateid;
     }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/common/model/SearchLocParam.java b/src/main/java/com/zy/common/model/SearchLocParam.java
index 5442d39..c1819f4 100644
--- a/src/main/java/com/zy/common/model/SearchLocParam.java
+++ b/src/main/java/com/zy/common/model/SearchLocParam.java
@@ -18,7 +18,7 @@
     // 搴撲綅瑙勬牸锛� 0:鏈煡, 1:浣庡簱浣�, 2:涓簱浣�, 3:楂樺簱浣� 锛�
     private Short locType1;
 
-    private Integer weight;
+    private double weight;
 
     public static void main(String[] args) {
         SearchLocParam searchLocParam = new SearchLocParam();
diff --git a/src/main/java/com/zy/core/model/command/LedCommand.java b/src/main/java/com/zy/core/model/command/LedCommand.java
index 66271c0..f3bc83c 100644
--- a/src/main/java/com/zy/core/model/command/LedCommand.java
+++ b/src/main/java/com/zy/core/model/command/LedCommand.java
@@ -44,7 +44,7 @@
         if (!this.emptyMk){
 
             for (MatDto matDto : matDtos) {
-                s.append("[鍟嗗搧缂栫爜:" + matDto.getMatnr() + ", 鏁伴噺:" + matDto.getCount() + "]\n");
+                s.append("[鍟嗗搧缂栫爜:" + matDto.getMatnr() + ", 鏁伴噺:" + matDto.getAnfme() + "]\n");
             }
         }
 
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index 8f06589..7e5483a 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -53,7 +53,7 @@
     private boolean pakMk = true;
 
     //鎵樼洏閲嶉噺
-    private Integer weight = 0;
+    private double weight = 0;
 
     // 鍏ュ簱鏆傚瓨鏁�
     private Short inQty;
@@ -123,7 +123,7 @@
         basDevp.setLocType2((short) 0);  // 瀹界獎绫诲瀷{0:鏈煡,1:绐勫簱浣�,2:瀹藉簱浣峿
         basDevp.setLocType3((short) 0);  // 杞婚噸绫诲瀷{0:鏈煡,1:杞诲簱浣�,2:閲嶅簱浣峿
         basDevp.setLocType1(high != low && low ? (short) 1 : (short) 2);
-        basDevp.setMaxWt((double) (weight !=null ?(int)weight : 0));
+        basDevp.setMaxWt((double) (weight != 0 ?(int)weight : 0));
         return basDevp;
     }
 
diff --git a/src/main/java/com/zy/core/thread/LedThread.java b/src/main/java/com/zy/core/thread/LedThread.java
index fb69130..9a0c1ea 100644
--- a/src/main/java/com/zy/core/thread/LedThread.java
+++ b/src/main/java/com/zy/core/thread/LedThread.java
@@ -41,7 +41,7 @@
     // 鏄剧ず鍣�
     private StringBuffer stringBuffer = new StringBuffer();
     private List<LedCommand> commandList;
-
+    private boolean ledMk = false;
     private StringBuffer errorMsg = new StringBuffer();
 
     public LedThread(Slave slave) {
@@ -84,7 +84,7 @@
 
     private void write(List<LedCommand> list) {
         commandList = list;
-
+        this.ledMk = false;
         StringBuilder sb = new StringBuilder();
         for (LedCommand command : list) {
             sb.append(command.getTitle()).append("锛�").append(command.getWorkNo()).append(")").append("\n");
@@ -92,7 +92,9 @@
             sb.append("鐩爣绔欙細").append(command.getStaNo()).append("\n");
             if (!command.isEmptyMk()) {
                 for (MatDto matDto : command.getMatDtos()) {
-                    sb.append(matDto.getSpecs()).append("-").append(matDto.getBatch()).append("\n");
+                    sb.append("鐗╂枡缂栫爜锛�").append(matDto.getMatnr()).append("\n");
+                    sb.append("鏁伴噺锛�").append(matDto.getAnfme()).append("\n");
+                    sb.append("瑙勬牸锛�").append(matDto.getSpecs()).append("\n");
                 }
             }
             sb.append("\n");
@@ -114,6 +116,7 @@
     private void error(String msg) {
         errorMsg.delete(0, errorMsg.length());
         errorMsg.append(msg);
+        this.ledMk = false;
     }
 
     public void errorReset() {
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 8b2dc25..c77b5a1 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -314,6 +314,12 @@
                 staProtocol.setHigh(status[6]);     // 楂樺簱浣�
                 staProtocol.setLow(status[7]);      // 浣庡簱浣�
 
+                //璇诲彇纾呯Г
+                if (staProtocol.getSiteId() == 102){
+                    resultWeight = siemensS7Net.Read("DB101.1272", (short) (4));
+                    staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt16(resultWeight.Content, 0));
+                }
+
                 if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                     staProtocol.setPakMk(true);
                 }
@@ -322,7 +328,7 @@
 
             //鏉$爜鎵弿鍣�
             ArrayList<Integer> barcodeList = getBarcodeList();
-            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840", (short) (barcodeList.size() * 8));
+            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.602", (short) (barcodeList.size() * 8));
             if (result2.IsSuccess) {
                 for (int i = 0; i < barcodeList.size(); i++) {
                     Integer barcodeId = barcodeList.get(i);
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 2bd4fe8..916ce98 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -98,6 +98,13 @@
       row: 4
       bay: 1
       lev: 1
+    # 鍫嗗灈鏈哄嚭搴撶珯鐐�
+    crnOutStn[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 103
+      row: 3
+      bay: 1
+      lev: 1
   # plc
   devp[0]:
     id: 1
@@ -137,7 +144,7 @@
   # LED1
   led[0]:
     id: 121
-    ip: 127.0.0.1
+    ip: 10.10.10.133
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
     staArr: 102
@@ -145,7 +152,7 @@
   # LED2
   led[1]:
     id: 123
-    ip: 127.0.0.1
+    ip: 10.10.10.132
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
     staArr: 105
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index c9513af..2774635 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -55,8 +55,8 @@
     </select>
 
     <select id="queryDemoLoc" resultMap="BaseResultMap">
-        select top 1 * from asr_loc_mast where crn_no = #{crnNo} and loc_sts = 'O' and loc_type2 =#{locType2}
-        ORDER BY NEWID()
+        select top 1 * from asr_loc_mast where crn_no = #{crnNo} and loc_sts = 'O' and loc_type2 is null and lev1 in (3,4,5,6)
+        ORDER BY lev1 asc,bay1 asc
     </select>
 
 </mapper>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 3bca05f..290fc0b 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -169,6 +169,10 @@
         select * from dbo.asr_wrk_mast where crn_no=#{crnNo} and source_sta_no=#{sourceStaNo} and wrk_sts=11 and io_type>100 order by io_pri desc,io_time,wrk_no asc
     </select>
 
+    <select id="selectPakOutStep11To2" resultMap="BaseResultMap">
+        select * from dbo.asr_wrk_mast where crn_no=#{crnNo} and source_sta_no =#{sourceStaNo} and wrk_sts=11 and io_type>100 order by io_pri desc,io_time,wrk_no asc
+    </select>
+
     <!--                                       鍏ュ嚭搴撴ā寮忕浉鍏�                                      -->
     <select id="selectWorkingPakin" resultMap="BaseResultMap">
         select top 1 * from dbo.asr_wrk_mast where wrk_sts in (2,3,4) and io_type != 11 and source_sta_no = #{sourceStaNo} order by io_time,wrk_no
diff --git a/src/main/webapp/static/js/console.map.js b/src/main/webapp/static/js/console.map.js
index a61503b..eb82215 100644
--- a/src/main/webapp/static/js/console.map.js
+++ b/src/main/webapp/static/js/console.map.js
@@ -1,9 +1,9 @@
 mapInfo ={
     "mapName": "wcs",
-    "rackCount": 8,
-    "crnCount": 4,
+    "rackCount": 4,
+    "crnCount": 2,
     "stbCount": 120,
-    "hpPosition": 0,
+    "hpPosition": 1,
     "minBayNo": 2,
     "racks": [
         {
@@ -11,41 +11,41 @@
             "id": "rack1",
             "top": 160,
             "left": 500,
-            "width": 800,
+            "width": 1150,
             "height": 23,
-            "minBayNo": 1,
-            "maxBayNo": 26
+            "minBayNo": 2,
+            "maxBayNo": 35
         },
         {
             "type": "rack",
             "id": "rack2",
             "top": 210,
             "left": 500,
-            "width": 800,
+            "width": 1150,
             "height": 23,
-            "minBayNo": 1,
-            "maxBayNo": 27
+            "minBayNo": 2,
+            "maxBayNo": 35
         },
         {
             "type": "rack",
             "id": "rack3",
             "top": 300,
             "left": 500,
-            "width": 800,
+            "width": 1000,
             "height": 23,
-            "minBayNo": 1,
-            "maxBayNo": 35
+            "minBayNo": 2,
+            "maxBayNo": 26
         },
         {
             "type": "rack",
             "id": "rack4",
             "top": 350,
             "left": 500,
-            "width": 800,
+            "width": 1000,
             "height": 23,
-            "minBayNo": 1,
-            "maxBayNo": 35
-        },
+            "minBayNo": 2,
+            "maxBayNo": 26
+        }
     ],
     "rackDescs": [
         {
@@ -53,7 +53,7 @@
             "id": "lb_desc2",
             "text": "#4",
             "top": 160,
-            "left": 460,
+            "left": 1650,
             "width": 30,
             "height": 23
         },
@@ -62,7 +62,7 @@
             "id": "lb_desc3",
             "text": "#3",
             "top": 210,
-            "left": 460,
+            "left": 1650,
             "width": 30,
             "height": 23
         },
@@ -71,16 +71,16 @@
             "id": "lb_desc4",
             "text": "#2",
             "top": 300,
-            "left": 460,
+            "left": 1500,
             "width": 30,
             "height": 23
         },
         {
             "type": "rackDescs",
-            "id": "lb_desc4",
+            "id": "lb_desc5",
             "text": "#1",
             "top": 350,
-            "left": 460,
+            "left": 1500,
             "width": 30,
             "height": 23
         }
@@ -91,25 +91,7 @@
             "id": "crn-2",
             "text": "1",
             "top": 187,
-            "left": 1250,
-            "width": 100,
-            "height": 22
-        },
-        {
-            "type": "track",
-            "id": "lb_track1",
-            "text": "",
-            "top": 197,
             "left": 500,
-            "width": 800,
-            "height": 2
-        },
-        {
-            "type": "crane",
-            "id": "crn-1",
-            "text": "1",
-            "top": 327,
-            "left": 1250,
             "width": 100,
             "height": 22
         },
@@ -117,9 +99,27 @@
             "type": "track",
             "id": "lb_track2",
             "text": "",
+            "top": 197,
+            "left": 500,
+            "width": 1150,
+            "height": 2
+        },
+        {
+            "type": "crane",
+            "id": "crn-1",
+            "text": "1",
+            "top": 327,
+            "left": 500,
+            "width": 100,
+            "height": 22
+        },
+        {
+            "type": "track",
+            "id": "lb_track1",
+            "text": "",
             "top": 337,
             "left": 500,
-            "width": 800,
+            "width": 1000,
             "height": 2
         }
     ],
@@ -142,16 +142,16 @@
                     "width": 2900,
                     "height": 600,
                     "stns": [
-                        { "type": "stn", "id": "site-105", "text": "105", "top": 130, "left": 1400, "width": 90, "height": 70 },
-                        { "type": "stn", "id": "site-101", "text": "101", "top": 210, "left": 1500, "width": 90, "height": 23 },
-                        { "type": "stn", "id": "site-102", "text": "102", "top": 210, "left": 1400, "width": 90, "height": 23 },
-                        { "type": "stn", "id": "site-106", "text": "106", "top": 163, "left": 1301, "width": 90, "height": 23 },
-                        { "type": "stn", "id": "site-103", "text": "103", "top": 210, "left": 1301, "width": 90, "height": 23 },
-                        { "type": "stn", "id": "site-104", "text": "104", "top": 260, "left": 1400, "width": 90, "height": 70 },
+                        { "type": "stn", "id": "site-105", "text": "105", "top": 130, "left": 300, "width": 90, "height": 70 },
+                        { "type": "stn", "id": "site-101", "text": "101", "top": 210, "left": 200, "width": 90, "height": 23 },
+                        { "type": "stn", "id": "site-102", "text": "102", "top": 210, "left": 300, "width": 90, "height": 23 },
+                        { "type": "stn", "id": "site-106", "text": "106", "top": 163, "left": 400, "width": 90, "height": 23 },
+                        { "type": "stn", "id": "site-103", "text": "103", "top": 210, "left": 400, "width": 90, "height": 23 },
+                        { "type": "stn", "id": "site-104", "text": "104", "top": 260, "left": 300, "width": 90, "height": 70 }
                     ],
                     "barcode": []
                 }
             ]
         }
     ]
-}
+}
\ No newline at end of file
diff --git a/src/main/webapp/views/crn.html b/src/main/webapp/views/crn.html
index 7f6e736..25e7157 100644
--- a/src/main/webapp/views/crn.html
+++ b/src/main/webapp/views/crn.html
@@ -155,7 +155,7 @@
                     <span class="select-title">鍫嗗灈鏈哄彿</span>
                     <div class="select-container" style="padding: 20px 0;">
                         <label><input type="radio" name="crnSelect" value="1" checked>&nbsp;1鍙峰爢鍨涙満</label>
-<!--                        <label><input type="radio" name="crnSelect" value="2">&nbsp;2鍙峰爢鍨涙満</label>-->
+                        <label><input type="radio" name="crnSelect" value="2">&nbsp;2鍙峰爢鍨涙満</label>
 <!--                        <label><input type="radio" name="crnSelect" value="3">&nbsp;3鍙峰爢鍨涙満</label>-->
 <!--                        <label><input type="radio" name="crnSelect" value="4">&nbsp;4鍙峰爢鍨涙満</label>-->
                         <!--                        <label><input type="radio" name="crnSelect" value="5">&nbsp;5鍙峰爢鍨涙満</label>-->

--
Gitblit v1.9.1