From 78489da7e2185f53faaec9356fa1a8997cedab70 Mon Sep 17 00:00:00 2001
From: whycq <123456>
Date: 星期三, 28 五月 2025 08:46:55 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  854 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 528 insertions(+), 326 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 8a63999..992fb0f 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -19,6 +19,7 @@
 import com.zy.common.model.SearchLocParam;
 import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
+import com.zy.common.utils.CollectionUtils;
 import com.zy.common.utils.HttpHandler;
 import com.zy.common.utils.News;
 import com.zy.core.CrnThread;
@@ -49,6 +50,7 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -92,6 +94,8 @@
     @Value("${wms.url}")
     private String wmsUrl;
 
+    public short wrkNo = 11000;
+
     /**
      * 缁勬墭
      * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
@@ -117,64 +121,123 @@
                 if (barcodeThread == null) {
                     continue;
                 }
+
                 String barcode = barcodeThread.getBarcode();
-                //9998閫�鍥烇紝9996绌烘澘
-                if (!Cools.isEmpty(barcode) && (staProtocol.getWorkNo() != 9998 || staProtocol.getWorkNo() != 9996)) {
-                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-                        String errorMsg = "15绔欐壂鐮佸け璐ワ紝宸查��鍥�14绔�";
-                        staProtocol.setWorkNo((short) 9998);
-                        staProtocol.setStaNo((short) 14);
-                        devpThread.setPakMk(staProtocol.getSiteId(), false);
-                        // led 寮傚父鏄剧ず
-                        if (ledThread != null) {
-                            News.error(methodName +  ":鎵爜澶辫触锛岃閲嶈瘯");
-                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-                        }
-                        continue;
-                    }
-                } else {
-                    continue;
+                // 灏哄妫�娴嬪紓甯�
+                boolean back = false;
+                String errMsg = "";
+                if (staProtocol.isFrontErr()) {
+                    errMsg = "鍓嶈秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isBackErr()) {
+                    errMsg = "鍚庤秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isHighErr()) {
+                    errMsg = "楂樿秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isLeftErr()) {
+                    errMsg = "宸﹁秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isRightErr()) {
+                    errMsg = "鍙宠秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isWeightErr()) {
+                    errMsg = "瓒呴噸";
+                    back = true;
+                }
+                if (!back && staProtocol.isBarcodeErr()) {
+                    errMsg = "鎵爜澶辫触";
+                    back = true;
                 }
 
+
+
+                // 閫�鍥�
+                if (back) {
+//                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
+                    if(!staProtocol.isOutEnable()){
+                        continue;
+                    }
+
+                    if (!staProtocol.isLoading()){
+                        continue;
+                    }
+                    if (!staProtocol.isPakMk()) {
+                        continue;
+                    }
+                    staProtocol.setWorkNo(wrkNo);
+                    News.info("{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", 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));
+                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
+                }
+                //鎷f枡銆佺洏鐐逛换鍔★紝涓嶈繘鍏ユ柊鏉垮叆搴撴柟娉曪紝鐩存帴璺冲嚭
+                if(staProtocol.getWorkNo()>=3001 && staProtocol.getWorkNo()<=6000){
+                    continue;
+                }
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                 if (staProtocol.isAutoing()
                         && staProtocol.isLoading()
                         && staProtocol.isInEnable()
                         && !staProtocol.isEmptyMk()
-                        && (staProtocol.getWorkNo() == 9999 || staProtocol.getWorkNo() == 9997 || staProtocol.getWorkNo() == 9995)
-                        && staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) {
+                        && staProtocol.isPakMk() && !back) {// && !Cools.isEmpty(barcode)) {
 
-//                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-//                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-//                        //鏉$爜涓虹┖鎴栬�呬笉绗﹀悎锛岄��搴撳埌172绔欑偣
-//                        staProtocol.setWorkNo((short)9999);
-//                        staProtocol.setStaNo((short)172);
-//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//                        if (!result) {
-//                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
+                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+                        //鏉$爜涓虹┖鎴栬�呬笉绗﹀悎锛岄��搴撳埌172绔欑偣
+                        staProtocol.setWorkNo(wrkNo);
+                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                        wrkNo++;
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        if (!result) {
+                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                        }
+                        continue;
+                    }
+//                    //鍒ゆ柇101鍜�104鏄惁鏄嫞鏂欍�佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱   璁惧鏆備笉鏀寔101銆�104绔欑洏鐐�/鎷f枡鍏ュ簱
+//                    WrkMast wrkMast1=wrkMastMapper.selectpj(inSta.getStaNo(),barcode);
+//                    if(!Cools.isEmpty(wrkMast1)){
+//                        if (wrkMast1.getIoType()!=1){
+//                            continue;
 //                        }
+//                    }
+//                    if( !Cools.isEmpty(barcode)&&!Cools.isEmpty(wrkMast1)){
+//                        log.error("101鎴�104鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱", wrkMast1.getWrkNo());
 //                        continue;
 //                    }
-
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
                     if (wrkMast != null) {
                         News.error(methodName + ":宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
                         if (ledThread != null) {
-                            News.error(methodName +  ":鎵爜澶辫触锛岃閲嶈瘯");
-                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, "宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={"+ wrkMast.getWrkNo() + "}, 璇锋墜鍔ㄥ彇娑堝凡瀛樺湪宸ヤ綔妗�"));
+                            News.error(methodName + ":鎵爜澶辫触锛岃閲嶈瘯");
+                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, "宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={" + wrkMast.getWrkNo() + "}, 璇锋墜鍔ㄥ彇娑堝凡瀛樺湪宸ヤ綔妗�"));
                         }
                         continue;
                     }
 
                     WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                             .eq("barcode", barcode)
-                            .eq("io_type", 103));
+                            .in("io_type", 107,103,104,57,53));
                     if (!Cools.isEmpty(checkPick)) {
                         continue;
+                    } else {
+                        News.info("鏂版澘鍏ュ簱鏉$爜===>>" + barcode);
                     }
+//                    WrkMast checkPick2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+//                            .eq("barcode", barcode)
+//                            .in("io_type", 57,53));
+//                    if (!Cools.isEmpty(checkPick2)) {
+//                        continue;
+//                    }
 
                     try {
 
@@ -187,6 +250,7 @@
                         param.setLocType1(locTypeDto.getLocType1());
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
+                                .setTimeout(30, TimeUnit.SECONDS)
                                 .setPath("/rpc/pakin/loc/v1")
                                 .setJson(JSON.toJSONString(param))
                                 .build()
@@ -201,15 +265,18 @@
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             if (!result) {
-                                News.error(methodName  + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+                                News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
 
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            }else {
+                                ledThread.errorReset();
                             }
 
 
                         } else {
-                            staProtocol.setWorkNo((short) 9998);
-                            staProtocol.setStaNo((short) 14);
+                            staProtocol.setWorkNo(wrkNo);
+                            wrkNo++;
+                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
 
@@ -219,7 +286,7 @@
                                     MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                                 }
                             }
-                            News.error(methodName  +":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                            News.error(methodName + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
 
                         }
 
@@ -344,7 +411,7 @@
                             News.error(methodName + ":鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
                         }
                     } else {
-                        News.error(methodName +":鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                        News.error(methodName + ":鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
                     }
 
                 }
@@ -381,23 +448,46 @@
                 }
                 String barcode = barcodeThread.getBarcode();
 
-                if (!Cools.isEmpty(barcode) && (staProtocol.getWorkNo() != 9998 || staProtocol.getWorkNo() != 9996)) {
-                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
-                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-                        staProtocol.setWorkNo((short) 9998);
-                        staProtocol.setStaNo((short) 14);
-                        devpThread.setPakMk(staProtocol.getSiteId(), false);
-                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                        // led 寮傚父鏄剧ず
-                        if (ledThread != null) {
-                            String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-                            News.error(methodName + ":鎵爜澶辫触锛岃閲嶈瘯");
-                            MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+                WrkMast wrkMast1 = wrkMastMapper.selectPickStep1(staProtocol.getWorkNo().intValue());
+
+                //浠诲姟鍙峰鏋滃湪宸ヤ綔妗d腑瀛樺湪锛屽氨涓嶇敤鍘诲垽鏂潯鐮�
+                if(Cools.isEmpty(wrkMast1)) {
+//                    WrkMast mast = wrkMastMapper.selectPickStep(barcode);
+//                    if (Cools.isEmpty(mast)) {
+//                        break;
+//                    }
+
+                    if (!Cools.isEmpty(barcode)) {
+
+
+//                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
+                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)  && staProtocol.isPakMk()) {
+                            if (!staProtocol.isLoading()) {
+                                continue;
+                            }
+                            if (!staProtocol.isPakMk()) {
+                                continue;
+                            }
+                            if (staProtocol.getWorkNo() != 0) {
+                                continue;
+                            }
+
+                            staProtocol.setWorkNo(wrkNo);
+                            wrkNo++;
+                            staProtocol.setStaNo(pickSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            // led 寮傚父鏄剧ず
+                            if (ledThread != null) {
+                                String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
+                                News.error(methodName + ":鎵爜澶辫触锛岃閲嶈瘯");
+                                MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+                            }
+                            continue;
                         }
+                    } else {
                         continue;
                     }
-                } else {
-                    continue;
                 }
 
 
@@ -408,10 +498,15 @@
                         && staProtocol.isLoading()
                         && staProtocol.isInEnable()
                         && !staProtocol.isEmptyMk()
-                        && (staProtocol.getWorkNo() == 9999 || staProtocol.getWorkNo() == 9997 || staProtocol.getWorkNo() == 9995)
+//                        && (staProtocol.getWorkNo() == 9999 || staProtocol.getWorkNo() == 9997 || staProtocol.getWorkNo() == 9995)
                         && staProtocol.isPakMk()) {
 
-                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
+                    WrkMast wrkMast = null;
+                    //浼樺厛鏌ヨ浠诲姟鍙峰搴旂殑宸ヤ綔妗f湁娌℃湁锛屽鏋滄湁鐨勮瘽灏变笉鐢ㄦ煡鏉$爜鍙�
+                    wrkMast = wrkMastMapper.selectPickStep1(staProtocol.getWorkNo().intValue());
+                    if(Cools.isEmpty(wrkMast)) {
+                        wrkMast = wrkMastMapper.selectPickStep(barcode);
+                    }
 //                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
                     if (wrkMast == null) {
                         // 鏃犳嫞鏂欐暟鎹�
@@ -421,6 +516,9 @@
                             || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                         continue;
                     }
+                    LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getSourceLocNo()));
+
+
 
                     // 鎷c�佺洏銆佸苟 浣滀笟绔欒浆鎹�
 //                    int stnNo = 0;
@@ -434,8 +532,7 @@
                     // 鑾峰彇鐩爣绔�
                     Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                             .eq("type_no", wrkMast.getIoType() - 50)
-                            //閫熻吘鐗规湁鎹℃枡锛� 11绔欐槸鍑哄簱绔欙紝 鐒跺悗鎵嬪姩璧板埌15绔欒繘琛屽啀鍏ュ簱
-                            .eq("stn_no", 15) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
+                            .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
                             .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
                     StaDesc staDesc = staDescService.selectOne(wrapper);
                     if (Cools.isEmpty(staDesc)) {
@@ -482,7 +579,7 @@
                         locMast.setLocSts("Q");
                         locMast.setModiTime(new Date());
                         if (!locMastService.updateById(locMast)) {
-                            News.error(methodName+ ":淇敼搴撲綅鐘舵�佸け璐�");
+                            News.error(methodName + ":淇敼搴撲綅鐘舵�佸け璐�");
 
                             throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
                         }
@@ -491,12 +588,16 @@
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         continue;
                     }
-
+                    if (ledThread != null) {
+                        ledThread.errorReset();
+                    }
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
                     staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                     staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+
+
                     if (!result) {
                         News.error(methodName + ":鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
 
@@ -517,35 +618,8 @@
         String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
 
         for (CrnSlave crnSlave : slaveProperties.getCrn()) {
-            //鏌ヨ宸ヤ綔妗�
-            List<WrkMast> wrkMasts= wrkMastService.selectList(new EntityWrapper<WrkMast>()
-                    .eq("crn_no",crnSlave.getCrnOutStn())
-                    .and()
-                    .gt("io_type",100)
-                    .orderBy("appe_time")
-            );
-            if(Cools.isEmpty(wrkMasts)){
-                continue;
-            }
-            //閬嶅巻浠诲姟妗o紝鎸夌敓鎴愭椂闂磋繘琛屾帓搴�
-            for (WrkMast wrkMast: wrkMasts) {
-                // 鍒ゆ柇宸ヤ綔妗f潯浠�
-                if (wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
-                    continue;
-                }
-                CrnSlave.CrnStn crnStn = null;
-                for (CrnSlave.CrnStn crnStn1 : crnSlave.getCrnOutStn()) {
-                    if (crnStn1.getStaNo() == wrkMast.getSourceStaNo()) {
-                        crnStn = crnStn1;
-                        break;
-                    } else {
-                        continue;
-                    }
-                }
-                if (Cools.isEmpty(crnStn)) {
-                    continue;
-                }
-
+            // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
+            for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
                 StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
@@ -555,8 +629,15 @@
                     staProtocol = staProtocol.clone();
                 }
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
-
-
+                    // 鏌ヨ宸ヤ綔妗�
+                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
+                    if (wrkMast == null) {
+                        continue;
+                    }
+                    // 鍒ゆ柇宸ヤ綔妗f潯浠�
+                    if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
+                        continue;
+                    }
                     // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
                     CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
                     CrnProtocol crnProtocol = crnThread.getCrnProtocol();
@@ -583,6 +664,7 @@
                         wrkMast.setCrnEndTime(new Date());
                         if (wrkMastMapper.updateById(wrkMast) != 0) {
                             // 澶嶄綅鍫嗗灈鏈�
+                            News.info("crnStnToOutStn鍫嗗灈鏈哄浣嶆椂宸ヤ綔鍙�===>>" + crnProtocol.getTaskNo());
                             crnThread.setResetFlag(true);
                         } else {
                             News.error(methodName + ":鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
@@ -594,68 +676,6 @@
             }
         }
     }
-
-//    public synchronized void crnStnToOutStn1() {
-//        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-//
-//        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
-//            // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
-//            for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
-//                // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
-//                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-//                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
-//                if (staProtocol == null) {
-//                    continue;
-//                } else {
-//                    staProtocol = staProtocol.clone();
-//                }
-//                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
-//                    // 鏌ヨ宸ヤ綔妗�
-//                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
-//                    if (wrkMast == null) {
-//                        continue;
-//                    }
-//                    // 鍒ゆ柇宸ヤ綔妗f潯浠�
-//                    if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
-//                        continue;
-//                    }
-//                    // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
-//                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
-//                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-//                    if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
-//                        // 绉诲姩涓�
-//                        continue;
-//                    }
-//                    //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
-//                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
-//                            && crnProtocol.statusType == CrnStatusType.WAITING
-//                            && crnProtocol.forkPosType == CrnForkPosType.HOME) {
-//
-//                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-//
-//                        // 涓嬪彂绔欑偣淇℃伅
-//                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-//                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
-//                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
-//                            continue;
-//                        }
-//
-//                        // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
-//                        wrkMast.setWrkSts(14L);
-//                        wrkMast.setCrnEndTime(new Date());
-//                        if (wrkMastMapper.updateById(wrkMast) != 0) {
-//                            // 澶嶄綅鍫嗗灈鏈�
-//                            crnThread.setResetFlag(true);
-//                        } else {
-//                            News.error(methodName + ":鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
-//                        }
-//
-//                    }
-//
-//                }
-//            }
-//        }
-//    }
 
     /**
      * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
@@ -773,8 +793,236 @@
 
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
+     * 鏍规嵁鍏ュ簱鏃堕棿杩涜鎺掑簭鍏ュ簱,鍚屼竴鍫嗗灈鏈哄厛鏌ヨ鎵�鏈夊伐浣滄。浠诲姟鍙凤紝鍐嶆牴鎹紭鍏堢骇銆佹椂闂存帓搴忥紝纭繚鍏堣繘鍏堝嚭
      */
     public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) {
+        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
+            boolean flag = false;
+            // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            // 鏌ヨ绔欑偣璇︾粏淇℃伅
+            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+            if (staDetl == null) {
+                log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                continue;
+            }
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
+                    && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) {
+                flag = true;
+            }
+            if (!flag) {
+                continue;
+            }
+            // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
+            WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(),crnStn.getStaNo());
+            if(null == wrkMast) {
+                log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
+                continue;
+            }
+            // 鑾峰彇搴撲綅淇℃伅
+            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+            if (locMast == null) {
+                log.error("鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+                continue;
+            }
+            if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
+                log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+                continue;
+            }
+            CrnThread crnThreadNow = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
+            CrnProtocol crnProtocolNow = crnThreadNow.getCrnProtocol();
+
+            // 鍫嗗灈鏈烘帶鍒惰繃婊�
+            if (!crnProtocolNow.getStatusType().equals(CrnStatusType.IDLE) || crnProtocolNow.getTaskNo() != 0) {
+                continue;
+            }
+
+            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                break;
+//                        return;
+            }
+
+            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            CrnCommand crnCommand = new CrnCommand();
+            crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+            crnCommand.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
+            crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
+            crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
+            crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
+            log.error("1"+crnCommand+crnProtocol);
+            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+                log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+            } else {
+                System.err.println("鍏ュ簱鍒板簱浣嶅懡浠や笅鍙�");
+                // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
+                Date now = new Date();
+                wrkMast.setWrkSts(3L);
+                wrkMast.setCrnStrTime(now);
+                wrkMast.setModiTime(now);
+                if (wrkMastMapper.updateById(wrkMast) == 0) {
+                    log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
+     * 鏍规嵁鍏ュ簱鏃堕棿杩涜鎺掑簭鍏ュ簱
+     */
+    public synchronized void crnStnToLoc2(CrnSlave slave, CrnProtocol crnProtocol) {
+        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
+        List<WrkMast> wrkMasts= new ArrayList<>();
+        //鎸囬拡
+        int count=-1;
+        int i=0;
+
+        WrkMast wrkMast=null;
+        CrnSlave.CrnStn crnStn1=null;
+        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
+            boolean flag = false;
+            // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            // 鏌ヨ绔欑偣璇︾粏淇℃伅
+            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+            if (staDetl == null) {
+                News.error(methodName + ":鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                continue;
+            }
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
+                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+                flag = true;
+                // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
+                wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
+                if (null == wrkMast) {
+//                News.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
+                    continue;
+                }
+                //鎵撴搨鍙�
+                wrkMasts.add(wrkMast);
+                count++;
+                if(count==0) continue;
+                if(wrkMast.getWrkDate().getTime()<wrkMasts.get(i).getWrkDate().getTime() && wrkMast.getIoPri()>=wrkMasts.get(i).getIoPri())
+                    i=count;
+                crnStn1=crnStn;
+            }
+            if (!flag) {
+                continue;
+            }
+        }
+
+
+            if(!Cools.isEmpty(wrkMasts)){
+            wrkMast=wrkMasts.get(i);
+            // 鑾峰彇搴撲綅淇℃伅
+            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+            if (locMast != null) {
+                if (locMast.getLocSts().equals("S") && locMast.getLocSts().equals("Q")) {
+                    // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                    if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() == 0) {
+                    // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                        if (wrkMastMapper.selectWorking(slave.getId()) == null) {
+                    // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+//                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
+//                        String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
+//                        LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+//                        // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+//                        if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+//                            if (null == waitWrkMast) {
+//                                News.error(methodName + ":{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+//                            } else {
+//                                waitWrkMast.setIoPri(15D);
+//                                waitWrkMast.setModiTime(new Date());
+//                                if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+//                                    News.error(methodName + ":璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+//                                }
+//                                continue;
+//                            }
+//
+//                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+//                            // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+//                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
+//                                wrkMast.setUpdMk("Y");
+//                                wrkMast.setIoPri(14D);
+//                                wrkMastMapper.updateById(wrkMast);
+//                                // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+//                                moveLocForDeepLoc(slave, shallowLoc);
+//                                // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
+////                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
+//                            }
+//                            continue;
+//                        } else if (shallowLoc.getLocSts().equals("Q")) {
+//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+//                            if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+//                                continue;
+//                            }
+//                        }
+//                    }
+                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                    CrnCommand crnCommand = new CrnCommand();
+                    crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                    crnCommand.setSourcePosX(crnStn1.getRow().shortValue());     // 婧愬簱浣嶆帓
+                    crnCommand.setSourcePosY(crnStn1.getBay().shortValue());     // 婧愬簱浣嶅垪
+                    crnCommand.setSourcePosZ(crnStn1.getLev().shortValue());     // 婧愬簱浣嶅眰
+                    crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
+                    crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
+                    crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
+                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+                        News.error(methodName + ":鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                    } else {
+
+//                long startTime = System.currentTimeMillis();
+//                while ((System.currentTimeMillis() - startTime) < COMMAND_TIMEOUT) {
+//
+//                    if (true) {
+//                        break;
+//                    }
+//
+//                    try{
+//                        Thread.sleep(500);
+//                    }catch(Exception ignore){}
+//                }
+
+                                // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
+                                Date now = new Date();
+                                wrkMast.setWrkSts(3L);
+                                wrkMast.setCrnStrTime(now);
+                                wrkMast.setModiTime(now);
+                                if (wrkMastMapper.updateById(wrkMast) == 0) {
+                                    News.error(methodName + ":淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                                }
+                            }
+                        }
+                    }
+                }else News.error(methodName + ":鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+            }else News.error(methodName + ":鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+        }
+    }
+
+    public synchronized void crnStnToLoc1(CrnSlave slave, CrnProtocol crnProtocol) {
         String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
 
         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
@@ -911,20 +1159,28 @@
      */
     public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol) {
         String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
-            // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
-//            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo());
-            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
+        //鎸夌収宸ヤ綔妗e嚭搴�
+        List<WrkMast> wrkMasts = wrkMastService.selectWrkIoType(slave.getId());
+        if (!Cools.isEmpty(wrkMasts)) {
             for (WrkMast wrkMast : wrkMasts) {
-                if (wrkMast == null) {
+                CrnSlave.CrnStn crnStn = null;
+                for (CrnSlave.CrnStn crnStn1 : slave.getCrnOutStn()) {
+                    if (wrkMast.getSourceStaNo().equals(crnStn1.getStaNo())) {
+                        crnStn = crnStn1;
+                        break;
+                    } else {
+                        continue;
+                    }
+                }
+                if (Cools.isEmpty(crnStn)) {
                     continue;
                 }
                 // 宸ヤ綔妗g姸鎬佸垽鏂�
-                if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
-                    News.error(methodName + ":鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
+                if (wrkMast.getSourceStaNo() == null) {
+                    log.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
                     continue;
                 }
+
                 // 鑾峰彇婧愬簱浣嶄俊鎭�
                 LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
                 if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
@@ -955,6 +1211,7 @@
 //                    continue;
                 }
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
+
                 if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                         && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
@@ -1041,6 +1298,7 @@
                         break;
                     }
                 }
+
             }
         }
     }
@@ -1186,7 +1444,7 @@
         // 鑾峰彇鐩爣搴撲綅淇℃伅
         LocMast sta = locMastService.selectById(wrkMast.getLocNo());
         if (null == sta) {
-            News.error(methodName  + ":宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo());
+            News.error(methodName + ":宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo());
             return;
         }
         // 鑾峰彇鍫嗗灈鏈轰俊鎭� 骞� 鍒ゆ柇鏄惁鍙叆鍑�
@@ -1303,6 +1561,7 @@
                     }
                     // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
                     if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+                        log.error("鍏ュ簱瀹屾垚鍫嗗灈鏈轰换鍔�=========銆�"+JSON.toJSONString(wrkMast));
                         wrkMast.setWrkSts(4L);
                     } else {
                         continue;
@@ -1313,6 +1572,7 @@
                     // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
                     if (wrkMastMapper.updateById(wrkMast) > 0) {
                         // 鍫嗗灈鏈哄浣�
+                        News.info("storeFinished鍫嗗灈鏈哄浣嶆椂宸ヤ綔鍙�===>>" + crnProtocol.getTaskNo());
                         crnThread.setResetFlag(true);
                     }
                 }
@@ -1467,7 +1727,6 @@
                         && staProtocol.isLoading()
                         && staProtocol.isInEnable()
                         && staProtocol.isEmptyMk()
-                        && (staProtocol.getWorkNo() == 9996)
                         && staProtocol.isPakMk()) {
 
                     try {
@@ -1479,6 +1738,7 @@
                         param.setLocType1(locTypeDto.getLocType1());
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
+                                .setTimeout(30, TimeUnit.SECONDS)
                                 .setPath("/rpc/pakin/loc/v1")
                                 .setJson(JSON.toJSONString(param))
                                 .build()
@@ -1570,144 +1830,111 @@
      * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
      */
     public synchronized void ledExecute() {
-//        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
         for (LedSlave led : slaveProperties.getLed()) {
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-//            // 鍛戒护闆嗗悎
-//            List<LedCommand> commands = new ArrayList<>();
-//            // 宸ヤ綔妗i泦鍚�
-//            List<WrkMast> wrkMasts = new ArrayList<>();
+            // 鍛戒护闆嗗悎
+            List<LedCommand> commands = new ArrayList<>();
+            // 宸ヤ綔妗i泦鍚�
+            List<WrkMast> wrkMasts = new ArrayList<>();
             for (Integer staNo : led.getStaArr()) {
                 // 鑾峰彇鍙夎溅绔欑偣
                 StaProtocol staProtocol = devpThread.getStation().get(staNo);
                 if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
-                    MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, ""));
                     continue;
                 } else {
                     staProtocol = staProtocol.clone();
                 }
                 // 鑾峰彇宸ヤ綔妗f暟鎹�
                 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-                if (null == wrkMast) {
-                    MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, ""));
-                    continue;
-                }
-                ArrayList<MatDto> matDtos = new ArrayList<>();
-                Wrapper<WrkDetl> detlWrapper = new EntityWrapper<WrkDetl>()
-                        .eq("wrk_no", wrkMast.getWrkNo());
+                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
+                wrkMasts.add(wrkMast);
+                // 缁勮鍛戒护
                 LedCommand ledCommand = new LedCommand();
                 ledCommand.setWorkNo(wrkMast.getWrkNo());
-                ledCommand.setStaNo(wrkMast.getStaNo());
-                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo());
-                ledCommand.setLocNo(wrkMast.getLocNo());
-                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                 ledCommand.setIoType(wrkMast.getIoType());
-                ledCommand.setTitle(wrkMast.getIoType$());
-
-                switch (wrkMast.getIoType()){
-                    case 10:
+                // 鍑哄簱妯″紡
+                switch (wrkMast.getIoType()) {
+                    case 101:
+                        ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
+                        break;
+                    case 103:
+                        ledCommand.setTitle("鎷f枡鍑哄簱");
+                        break;
+                    case 104:
+                        ledCommand.setTitle("骞舵澘鍑哄簱");
+                        break;
+                    case 107:
+                        ledCommand.setTitle("鐩樼偣鍑哄簱");
+                        break;
                     case 110:
+                        ledCommand.setTitle("绌烘澘鍑哄簱");
                         ledCommand.setEmptyMk(true);
                         break;
                     default:
-                        ledCommand.setBarcode(wrkMast.getBarcode());
-                        List<WrkDetl> wrkDetls = wrkDetlService.selectList(detlWrapper);
-                        for (WrkDetl wrkDetl : wrkDetls) {
-                            MatDto matDto = new MatDto();
-                            matDto.setMaknx(wrkDetl.getMaktx());
-                            matDto.setMatNo(wrkDetl.getMatnr());
-                            matDto.setCount(wrkDetl.getAnfme());
-                            matDtos.add(matDto);
-                        }
+                        News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
                         break;
-
-
                 }
-                ledCommand.setMatDtos(matDtos);
-                MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, ledCommand.toString()));
+                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
+                ledCommand.setStaNo(wrkMast.getStaNo());
+                ledCommand.setBarcode(wrkMast.getBarcode());
+                if (wrkMast.getIoType() != 110) {
+                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
 
-//                wrkMasts.add(wrkMast);
-//                // 缁勮鍛戒护
-//                LedCommand ledCommand = new LedCommand();
-//                ledCommand.setWorkNo(wrkMast.getWrkNo());
-//                ledCommand.setIoType(wrkMast.getIoType());
-//                // 鍑哄簱妯″紡
-//                switch (wrkMast.getIoType()) {
-//                    case -1:
-//                        ledCommand.setTitle("鍏ㄦ澘鍏ュ簱");
-//                        break;
-//                    case 10:
-//                        ledCommand.setTitle("绌烘澘鍏ュ簱");
-//                        break;
-//                    case 10-1:
-//                        ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
-//                        break;
-//                    case 103:
-//                        ledCommand.setTitle("鎷f枡鍑哄簱");
-//                        break;
-//                    case 104:
-//                        ledCommand.setTitle("骞舵澘鍑哄簱");
-//                        break;
-//                    case 107:
-//                        ledCommand.setTitle("鐩樼偣鍑哄簱");
-//                        break;
-//                    case 110:
-//                        ledCommand.setTitle("绌烘澘鍑哄簱");
-//                        ledCommand.setEmptyMk(true);
-//                        break;
-//                    default:
-//                        News.error(methodName + ":浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
-//                        break;
-//                }
-//                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
-//                ledCommand.setLocNo(wrkMast.getLocNo());
-//                ledCommand.setStaNo(wrkMast.getStaNo());
-////                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo());
-//                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
-//                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
-//                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme())));
-//                }
-//                commands.add(ledCommand);
-//            }
-//            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
-//            // 鑾峰彇LED绾跨▼
-//            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-//            // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
-////            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
-////                continue;
-////            }
-//            // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
-//            if (!commands.isEmpty()) {
-//                String errMsg = "";
-//                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
-//                    News.error(methodName + ":{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-//                    continue;
-//                } else {
-//                    ledThread.setLedMk(false);
-//                }
-//
-//
+                    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 = locDetl.getAnfme();
+                        }
+                        if (wrkMast.getIoType() == 101) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+                        }
+                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+                        }
+                        if (wrkMast.getIoType() == 107) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+                        }
+                    });
+                }
+                commands.add(ledCommand);
             }
-//
-//            try {
-//                // 淇敼涓绘。led鏍囪
-//                for (WrkMast wrkMast : wrkMasts) {
-//                    wrkMast.setOveMk("Y");
-//                    wrkMast.setModiTime(new Date());
-//                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-//                        throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
-//                    }
-//                }
-//
-//                // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
-//                ledThread.setWorkNos(workNos);
-//
-//            } catch (Exception e) {
-//                e.printStackTrace();
-//                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-//            }
+            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
+            // 鑾峰彇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());
+                    continue;
+                } else {
+//                    News.info("{}鍙稬ED鍛戒护涓嬪彂鎴愬姛锛侊紒锛乕ip锛歿}] [port锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort(),commands);
+                }
+            }
+
+            try {
+                // 淇敼涓绘。led鏍囪
+                for (WrkMast wrkMast : wrkMasts) {
+                    wrkMast.setOveMk("Y");
+                    wrkMast.setModiTime(new Date());
+                    if (wrkMastMapper.updateById(wrkMast) == 0) {
+                        throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                    }
+                }
+
+                // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
+                ledThread.setWorkNos(workNos);
+
+            } catch (Exception e) {
+                e.printStackTrace();
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            }
 
         }
     }
@@ -1716,33 +1943,6 @@
      * 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
      */
     public synchronized void ledReset() {
-//        for (LedSlave led : slaveProperties.getLed()) {
-//            // 鑾峰彇杈撻�佺嚎plc绾跨▼
-//            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-//            // 鍛戒护闆嗗悎
-//            boolean reset = true;
-//            for (Integer staNo : led.getStaArr()) {
-//                // 鑾峰彇鍙夎溅绔欑偣
-//                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-//                if (staProtocol == null) {
-//                    continue;
-//                } else {
-//                    staProtocol = staProtocol.clone();
-//                }
-//                if (staProtocol.getWorkNo() != 0) {
-//                    reset = false;
-//                    break;
-//                }
-//            }
-//            // 鑾峰彇led绾跨▼
-//            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId());
-//            // led鏄剧ず榛樿鍐呭
-//            if (reset) {
-//                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
-//                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-//                }
-//            }
-//        }
         for (LedSlave led : slaveProperties.getLed()) {
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -1751,34 +1951,35 @@
             for (Integer staNo : led.getStaArr()) {
                 // 鑾峰彇鍙夎溅绔欑偣
                 StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (staProtocol == null) {
-                    continue;
-                }
-                if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
+                StaProtocol staProtocol1 = devpThread.getStation().get(staNo+1);
+                if (staProtocol == null) { continue; }
+                if (staProtocol1 == null) { continue; }
+                if (staProtocol.getWorkNo() != 0 || staProtocol.isLoading()) {
                     reset = false;
                     break;
                 }
+                if (staProtocol1.isLoading() || staProtocol1.getWorkNo() != 0) {
+                    reset = false;
+                    break;
+                }
+                if (!staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && !staProtocol1.isLoading() && staProtocol1.getWorkNo() == 0){
+//                    News.error("{}鍙稬ED鍏ュ簱鍙�2涓珯鐐归兘娌℃湁鏁版嵁,鍑嗗reset澶嶄綅鏄剧ず鍣紒锛侊紒[ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                }
             }
-//            // 鑾峰彇led绾跨▼
-//            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-//            // led鏄剧ず榛樿鍐呭
-//            if (reset && !ledThread.isLedMk()) {
-//                if (led.getId() == 7) {
-//                    ledThread.setLedMk(true);
-//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
-//                        News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-//                    } else {
-//
-//                    }
-//                } else {
-//                    ledThread.setLedMk(true);
-//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
-//                        News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-//                    } else {
-//
-//                    }
-//                }
-//            }
+            // 鑾峰彇led绾跨▼
+//            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId());
+            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
+            // led鏄剧ず榛樿鍐呭
+            if (reset) {
+                //News.info("{}鍙稬ED鍛戒护閲嶇疆锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                if (ledThread == null) {
+                    continue;
+                }
+                ledThread.errorReset();
+                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
+                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                }
+            }
         }
     }
 
@@ -2199,7 +2400,6 @@
 //
 //
 //    }
-
     public synchronized void outOfDevp() {
         List<WrkMast> wrkMasts = wrkMastMapper.selectPick();
         for (WrkMast wrkMast : wrkMasts) {
@@ -2238,6 +2438,7 @@
             try {
                 String response = new HttpHandler.Builder()
                         .setUri(wmsUrl)
+                        .setTimeout(30, TimeUnit.SECONDS)
                         .setPath("/rpc/auto/emptyOut/v1")
                         .build()
                         .doPost();
@@ -2276,6 +2477,7 @@
 
                 String response = new HttpHandler.Builder()
                         .setUri(wmsUrl)
+                        .setTimeout(30, TimeUnit.SECONDS)
                         .setPath("/rpc/auto/emptyIn/v1")
                         .setJson(JSON.toJSONString(locTypeDto))
                         .build()

--
Gitblit v1.9.1