From 020f48adb61a0350924783c1b397bd381d20ddc8 Mon Sep 17 00:00:00 2001
From: 野心家 <1051256694@qq.com>
Date: 星期四, 19 六月 2025 11:13:21 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jxtlfwcs' into jxtlfwcs

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  955 +++++++++++++++++++++++++++-------------------------------
 1 files changed, 445 insertions(+), 510 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 e4b5bf4..7c0a9b4 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -7,6 +7,7 @@
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.exception.CoolException;
+import com.zy.asrs.domain.enums.WorkNoType;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.BasCrnErrorMapper;
 import com.zy.asrs.mapper.TestMastMapper;
@@ -19,6 +20,7 @@
 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;
 import com.zy.core.DevpThread;
 import com.zy.core.cache.MessageQueue;
@@ -38,18 +40,18 @@
 import com.zy.core.thread.SiemensCrnThread;
 import com.zy.core.thread.SiemensDevpThread;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import springfox.documentation.spring.web.json.Json;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
+
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -94,6 +96,8 @@
 
     @Value("${test.url}")
     private String testUrl;
+    @Autowired
+    private WrkMastService wrkMastService;
 
     /**
      * 缁勬墭
@@ -106,73 +110,85 @@
             for (DevpSlave.Sta inSta : devp.getInSta()) {
                 // 鑾峰彇鏉$爜鎵弿浠俊鎭�
                 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
-                if (barcodeThread == null) {
-                    continue;
-                }
-                String barcode = barcodeThread.getBarcode();
-//                barcode="ILY0127 0001";
-                if(!Cools.isEmpty(barcode)) {
-                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-                        continue;
-                    }
-                } else {
-                    continue;
-                }
-
                 // 鑾峰彇鍏ュ簱绔欎俊鎭�
-                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                 if (staProtocol == null) {
                     continue;
                 } else {
                     staProtocol = staProtocol.clone();
                 }
-
-//                // 鍏ュ嚭搴撴ā寮忓垽鏂�
-//                if ( inSta.getStaNo()==180 && devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
-
-                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                Short workNo = staProtocol.getWorkNo();
+                // 灏哄妫�娴嬪紓甯�
+                boolean back = false;
+                String errMsg = "寮傚父锛�";
+                if (staProtocol.isFrontErr()) {
+                    errMsg = errMsg + "鍓嶈秴闄愶紱";
+                    back = true;
+                }
+                if (staProtocol.isBackErr()) {
+                    errMsg = errMsg + "鍚庤秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isHighErr()) {
+                    errMsg = errMsg + "楂樿秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isLeftErr()) {
+                    errMsg = errMsg + "宸﹁秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isRightErr()) {
+                    errMsg = errMsg + "鍙宠秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isWeightErr()) {
+                    errMsg = errMsg + "瓒呴噸";
+                    back = true;
+                }
+                if (staProtocol.isBarcodeErr()) {
+                    errMsg = errMsg + "鎵爜澶辫触";
+                    back = true;
+                }
+                //9991婊℃墭锛�9990绌烘墭
+                String barcode = barcodeThread.getBarcode();
                 if (staProtocol.isAutoing() && staProtocol.isLoading()
                         && staProtocol.isInEnable()
-                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
-                        && staProtocol.isPakMk()){// && !Cools.isEmpty(barcode)) {
+                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() >= 9990 && staProtocol.getWorkNo() <= 9999)
+                        && staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) {
 
-//                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-//                        log.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绔欑偣淇℃伅澶辫触");
-//                        }
-//                        continue;
-//                    }
+
+                    // 閫�鍥�
+                    if (back || (!Cools.isEmpty(barcode) && barcode.equals("00000000"))) {
+                        staProtocol.setWorkNo((short) 9999);
+                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+
+                        // led 寮傚父鏄剧ず
+                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+                        if (ledThread != null) {
+                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
+                        }
+                        continue;
+                    }
 
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
                     if (wrkMast != null) {
-                        log.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
+                        News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
                         continue;
                     }
-//                    // 鑾峰彇鍏ュ簱閫氱煡妗�
-//                    List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N"));
-//                    if (waitPakins.isEmpty()) {
-//                        log.error("鏃犳鍏ュ簱鏉$爜鏁版嵁銆傛潯鐮佸彿={}", barcode);
-//                        continue;
-//                    }
 
                     try {
-
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-                        locTypeDto.setLocType1((short)1);
+                        locTypeDto.setLocType1((short) 1);
                         SearchLocParam param = new SearchLocParam();
                         param.setBarcode(barcode);
                         param.setIoType(1);
                         param.setSourceStaNo(inSta.getStaNo());
                         param.setLocType1(locTypeDto.getLocType1());
+                        log.info("婊℃澘鍏ュ簱={}",param);
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
                                 .setPath("/rpc/pakin/loc/v1")
@@ -182,92 +198,34 @@
                         JSONObject jsonObject = JSON.parseObject(response);
                         if (jsonObject.getInteger("code").equals(200)) {
                             StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-
                             barcodeThread.setBarcode("");
                             staProtocol.setWorkNo(dto.getWorkNo().shortValue());
                             staProtocol.setStaNo(dto.getStaNo().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             if (!result) {
+                                News.error("鏇存柊plc绔欑偣淇℃伅澶辫触");
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
-                        } else if (jsonObject.getInteger("code").equals(700) && (!barcodeThread.getBarcode().equals("NG"))){
+                        } else if (jsonObject.getInteger("code").equals(700) && (!barcodeThread.getBarcode().equals("NG"))) {
                             StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                             barcodeThread.setBarcode("");
-                            staProtocol.setWorkNo((short)9998);
-                            staProtocol.setStaNo((short)101);
-                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            staProtocol.setWorkNo((short) 9991);
+                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), true);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                            log.error("url锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl+"/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
-                        }else {
+                            News.error("url锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                        } else {
                             StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                             barcodeThread.setBarcode("");
-                            staProtocol.setWorkNo((short)9998);
-                            staProtocol.setStaNo((short)101);
-                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            staProtocol.setWorkNo((short) 9991);
+                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), true);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl+"/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                            News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                         }
-
-
-//                        // 妫�绱㈠簱浣�
-//                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-//                        List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
-//                        StartupDto startupDto = commonService.getLocNo(1, 1, inSta.getStaNo(), matNos, locTypeDto, 0);
-//                        // 宸ヤ綔鍙�
-//                        int workNo = startupDto.getWorkNo();
-//                        // 鎻掑叆宸ヤ綔鏄庣粏妗�
-//                        wrkDetlService.createWorkDetail(workNo, waitPakins, barcode);
-//
-//                        // 鎻掑叆宸ヤ綔涓绘。
-//                        wrkMast = new WrkMast();
-//                        wrkMast.setWrkNo(workNo);
-//                        wrkMast.setIoTime(new Date());
-//                        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
-//                        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
-//                        wrkMast.setIoPri(10D); // 浼樺厛绾э細10
-//                        wrkMast.setCrnNo(startupDto.getCrnNo());
-//                        wrkMast.setSourceStaNo(startupDto.getSourceStaNo());
-//                        wrkMast.setStaNo(startupDto.getStaNo());
-//                        wrkMast.setLocNo(startupDto.getLocNo());
-//                        wrkMast.setBarcode(barcode); // 鎵樼洏鐮�
-//                        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
-//                        wrkMast.setPicking("N"); // 鎷f枡
-//                        wrkMast.setExitMk("N"); // 閫�鍑�
-//                        wrkMast.setEmptyMk("N"); // 绌烘澘
-//                        wrkMast.setLinkMis("N");
-//                        // 鎿嶄綔浜哄憳鏁版嵁
-//                        wrkMast.setAppeTime(new Date());
-//                        wrkMast.setModiTime(new Date());
-//                        Integer insert = wrkMastMapper.insert(wrkMast);
-//                        if (insert == 0) {
-//                            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-//                        }
-//                        // 鏇存柊鐩爣搴撲綅鐘舵��
-//                        LocMast locMast = locMastService.selectById(startupDto.getLocNo());
-//                        locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
-//                        locMast.setModiTime(new Date());
-//                        if (!locMastService.updateById(locMast)){
-//                            throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
-//                        }
-//                        // 灏嗗叆搴撻�氱煡妗d慨鏀逛负宸插惎鍔�
-//                        if (wrkMastMapper.updateWaitPakInStep1(barcode) == 0) {
-//                            throw new CoolException("淇敼鍏ュ簱閫氱煡妗g姸鎬佷负宸插惎鍔ㄥけ璐�");
-//                        }
-//
-//                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-//
-//                        // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-//                        barcodeThread.setBarcode("");
-//                        staProtocol.setWorkNo((short) workNo);
-//                        staProtocol.setStaNo(startupDto.getStaNo().shortValue());
-//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//                        if (!result) {
-//                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-//                        }
-
                     } catch (Exception e) {
+                        News.error("鎵爜鍏ュ簱鎶ラ敊锛岄敊璇俊鎭�", e);
                         e.printStackTrace();
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                     }
@@ -307,7 +265,9 @@
                         && staProtocol.isPakMk()) {
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
-                    if (wrkMast == null) { continue; }
+                    if (wrkMast == null) {
+                        continue;
+                    }
 
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
@@ -324,7 +284,7 @@
                             log.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
                         }
                     } else {
-                        log.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                        News.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
                     }
 
                 }
@@ -338,7 +298,7 @@
     /**
      * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
      */
-    public synchronized void stnToCrnStnPick(){
+    public synchronized void stnToCrnStnPick() {
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鎷f枡鍏ュ簱鍙�
             for (DevpSlave.Sta pickSta : devp.getPickSta()) {
@@ -348,9 +308,9 @@
                     continue;
                 }
                 String barcode = barcodeThread.getBarcode();
-                if(!Cools.isEmpty(barcode)) {
+                if (!Cools.isEmpty(barcode)) {
                     log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
-                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
+                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                         continue;
                     }
                 } else {
@@ -369,7 +329,7 @@
 //                // 鍏ュ嚭搴撴ā寮忓垽鏂�
 //                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
 
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
 
 //                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
 //                        log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
@@ -390,7 +350,7 @@
                         continue;
                     }
                     if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
-                        || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) {
+                            || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                         continue;
                     }
 
@@ -486,7 +446,7 @@
                 } else {
                     staProtocol = staProtocol.clone();
                 }
-                if (staProtocol.isAutoing() && (staProtocol.isLoading()||staProtocol.getSiteId()==109) && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
+                if (staProtocol.isAutoing() && (staProtocol.isLoading() || staProtocol.getSiteId() == 1000) && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                     // 鏌ヨ宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
                     if (wrkMast == null) {
@@ -494,6 +454,7 @@
                     }
                     // 鍒ゆ柇宸ヤ綔妗f潯浠�
                     if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
+                        News.error("宸ヤ綔妗f鏉′欢涓嶆弧瓒筹細宸ヤ綔妗f锛�" + wrkMast + ";鏉′欢iotype<100鎴栬�卻taNo涓虹┖鎴栬�卻ourceStaNo涓虹┖");
                         continue;
                     }
                     // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
@@ -524,7 +485,7 @@
                             // 澶嶄綅鍫嗗灈鏈�
                             crnThread.setResetFlag(true);
                         } else {
-                            log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                            News.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                         }
 
                     }
@@ -537,15 +498,17 @@
     /**
      * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
      */
-    public synchronized void crnIoExecute(){
+    public synchronized void crnIoExecute() {
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) { continue; }
+            if (crnProtocol == null) {
+                continue;
+            }
             BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
             if (basCrnp == null) {
-                log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
+                News.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
                 continue;
             }
 
@@ -558,7 +521,7 @@
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
                     && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
                 // 搴撲綅绉昏浆
-                this.stnToStn(crn, crnProtocol);
+//                this.stnToStn(crn, crnProtocol);
                 // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
                 if (crnProtocol.getLastIo().equals("I")) {
                     if (basCrnp.getInEnable().equals("Y")) {
@@ -590,7 +553,7 @@
     /**
      * 鍥炲師鐐癸紝鍫嗗灈鏈烘病鏈夋墽琛屼腑浠诲姟锛岃澶囧瓨鍦ㄥ叆搴撲换鍔℃椂鍙洖鍘熺偣
      */
-    public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread){
+    public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread) {
 //        for (CrnSlave crn : slaveProperties.getCrn()) {
 //            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
 //            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -603,51 +566,51 @@
 //                log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
 //                continue;
 //            }
-            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
-                if(crnProtocol.getBay() ==1 && crnProtocol.getLevel()==1){
-                    return;
-                }
-
-                // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�3,12
-                if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) {
-                    return;
-                }
-
-                //鍫嗗灈鏈烘湁鎵ц涓换鍔★紝杩囨护3,4,11,12
-                if (wrkMastMapper.selectCrnWorking(crnProtocol.getCrnNo()) != null) {
-                    return;
-                }
-
-                //杈撻�佺嚎娌℃湁鍏ュ簱浠诲姟锛岃繃婊�2
-                if (wrkMastMapper.selectDevWorking(crnProtocol.getCrnNo()) == null) {
-                    return;
-                }
-
-                log.info("鍫嗗灈鏈哄彫鍥炲師鐐�==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満鏈夊叆搴撲换鍔�,鍙洖鍘熺偣");
-                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                CrnCommand crnCommand = new CrnCommand();
-                crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-                crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
-                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍥炲師鐐�
-                crnCommand.setSourcePosX((short) 0);     // 婧愬簱浣嶆帓
-                crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
-                crnCommand.setSourcePosZ((short) 0);     // 婧愬簱浣嶅眰
-                crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
-                crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
-                crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
-                if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
-                    log.error("鍫嗗灈鏈哄洖鍘熺偣鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand));
-                }
-                crnThread.setBackHpFlag(true);
+        if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
+            if (crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) {
+                return;
             }
+
+            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�3,12
+            if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) {
+                return;
+            }
+
+            //鍫嗗灈鏈烘湁鎵ц涓换鍔★紝杩囨护3,4,11,12
+            if (wrkMastMapper.selectCrnWorking(crnProtocol.getCrnNo()) != null) {
+                return;
+            }
+
+            //杈撻�佺嚎娌℃湁鍏ュ簱浠诲姟锛岃繃婊�2
+            if (wrkMastMapper.selectDevWorking(crnProtocol.getCrnNo()) == null) {
+                return;
+            }
+
+            log.info("鍫嗗灈鏈哄彫鍥炲師鐐�==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満鏈夊叆搴撲换鍔�,鍙洖鍘熺偣");
+            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            CrnCommand crnCommand = new CrnCommand();
+            crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+            crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
+            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+            crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍥炲師鐐�
+            crnCommand.setSourcePosX((short) 0);     // 婧愬簱浣嶆帓
+            crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
+            crnCommand.setSourcePosZ((short) 0);     // 婧愬簱浣嶅眰
+            crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
+            crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
+            crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
+            if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
+                log.error("鍫嗗灈鏈哄洖鍘熺偣鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand));
+            }
+            crnThread.setBackHpFlag(true);
+        }
 //        }
     }
 
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
      */
-    public void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){
+    public void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) {
         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
             boolean flag = false;
             // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
@@ -661,11 +624,11 @@
             // 鏌ヨ绔欑偣璇︾粏淇℃伅
             BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
             if (staDetl == null) {
-                log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                News.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                 continue;
             }
             if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
-                    && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) {
+                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
                 flag = true;
             }
             if (!flag) {
@@ -673,18 +636,18 @@
             }
             // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
             WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
-            if(null == wrkMast) {
+            if (null == wrkMast) {
 //                log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
                 continue;
             }
             // 鑾峰彇搴撲綅淇℃伅
             LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
             if (locMast == null) {
-                log.error("鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+                News.error("鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
                 continue;
             }
             if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
-                log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+                News.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
                 continue;
             }
 
@@ -706,12 +669,12 @@
                 if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
                     WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                     if (null == waitWrkMast) {
-                        log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                        News.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
                     } else {
                         waitWrkMast.setIoPri(15D);
                         waitWrkMast.setModiTime(new Date());
                         if (wrkMastMapper.updateById(waitWrkMast) == 0) {
-                            log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                            News.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
                         }
                         continue;
                     }
@@ -728,9 +691,9 @@
 //                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
                     }
                     continue;
-                } else if (shallowLoc.getLocSts().equals("Q")){
+                } else if (shallowLoc.getLocSts().equals("Q")) {
                     WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
-                    if (null != waitWrkMast && waitWrkMast.getWrkSts()==4) {
+                    if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
                         continue;
                     }
                 }
@@ -747,10 +710,14 @@
             crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
             crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
             crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-            crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
+            crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞俓
+            crnCommand.setBarcode(wrkMast.getBarcode());//鎵樼洏鐮�
+            log.error("768 鍫嗗灈鏈哄懡浠や笅鍙�" + crnCommand);
             if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
             } else {
+                log.error("772 鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔�" + crnCommand);
+                News.info("772 鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔�" + crnCommand);
 
 //                long startTime = System.currentTimeMillis();
 //                while ((System.currentTimeMillis() - startTime) < COMMAND_TIMEOUT) {
@@ -765,13 +732,17 @@
 //                }
 
                 // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
+                log.error("787 淇敼宸ヤ綔妗g姸鎬�2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� " + wrkMast);
+                News.info("787 淇敼宸ヤ綔妗g姸鎬�2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� " + wrkMast);
                 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());
+                    News.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                 }
+                log.error("795 淇敼宸ヤ綔妗g姸鎬佹垚鍔�2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�" + wrkMast);
+                News.info("795 淇敼宸ヤ綔妗g姸鎬佹垚鍔�2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�" + wrkMast);
             }
         }
     }
@@ -780,24 +751,24 @@
      * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
      * 2022-06-09 TQS淇敼锛屾煡璇㈠伐浣滄。LIST锛岄亶鍘嗕笅鍙戯紝闃叉绗竴涓换鍔″牭濉炲嚭搴�
      */
-    public void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
+    public void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol) {
         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());
-            for (WrkMast wrkMast : wrkMasts){
+            for (WrkMast wrkMast : wrkMasts) {
                 if (wrkMast == null) {
                     continue;
                 }
                 // 宸ヤ綔妗g姸鎬佸垽鏂�
-                if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null){
-                    log.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
+                if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
+                    News.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
                     continue;
                 }
                 // 鑾峰彇婧愬簱浣嶄俊鎭�
                 LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
-                if (!sourceSta.getLocSts().equals("R") &&!sourceSta.getLocSts().equals("P")) {
-                    log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
+                if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
+                    News.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
                     continue;
                 }
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
@@ -810,18 +781,24 @@
                     staProtocol = staProtocol.clone();
                 }
 
-//            // 鍏ュ嚭搴撴ā寮忓垽鏂�
-//            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; }
-
                 // 鏌ヨ绔欑偣璇︾粏淇℃伅
                 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                 if (staDetl == null) {
-                    log.error("鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                    News.error("鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                     break;
 //                    continue;
                 }
+                //鏌ヨ鍦ㄥ簱淇℃伅
+                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                        .eq("loc_sts", "R")
+                        .eq("loc_no", wrkMast.getSourceLocNo()));
+                if (Cools.isEmpty(locMast)) {
+                    News.error("鍑哄簱 ===>> 搴撲綅涓病鏈夎繖绗旇祫鏂�", wrkMast.getSourceLocNo());
+                    continue;
+                }
+
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() !=null && staDetl.getCanouting().equals("Y")
+                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                         && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
@@ -839,13 +816,13 @@
                         if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                             if (null == waitWrkMast) {
-                                log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                                News.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
                             } else {
-                                if(waitWrkMast.getWrkSts() == 11) {
+                                if (waitWrkMast.getWrkSts() == 11) {
                                     waitWrkMast.setIoPri(15D);
                                     waitWrkMast.setModiTime(new Date());
                                     if (wrkMastMapper.updateById(waitWrkMast) == 0) {
-                                        log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                                        News.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
                                     }
                                     continue;
                                 } else {
@@ -856,17 +833,17 @@
                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                             // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
                             if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
-                                || Cools.isEmpty(waitWrkMast)) {
+                                    || Cools.isEmpty(waitWrkMast)) {
                                 wrkMast.setUpdMk("Y");
                                 wrkMastMapper.updateById(wrkMast);
                                 // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
                                 moveLocForDeepLoc(slave, shallowLoc);
                             }
-                            log.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛�", wrkMast.getWrkNo());
+                            News.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛�", wrkMast.getWrkNo());
                             continue;
-                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")){
+                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
-                            if (null != waitWrkMast && waitWrkMast.getWrkSts()==4) {
+                            if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
                                 continue;
                             }
                         }
@@ -890,8 +867,9 @@
                     crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
                     crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
                     crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
+                    crnCommand.setBarcode(wrkMast.getBarcode());
                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                        log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                        News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
                         // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
                         Date now = new Date();
@@ -899,11 +877,12 @@
                         wrkMast.setCrnStrTime(now);
                         wrkMast.setModiTime(now);
                         if (wrkMastMapper.updateById(wrkMast) == 0) {
-                            log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                            News.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                         }
                         break;
                     }
                 }
+
             }
         }
     }
@@ -1028,16 +1007,35 @@
     /**
      * 搴撲綅绉昏浆
      */
-    public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){
+    public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol) {
+//        log.info("寮�濮嬬Щ搴撲换鍔$▼搴�");
+        //鑾峰彇鎵�鏈夌Щ搴撲换鍔�
+        List<WrkMast> wrkMasts = wrkMastMapper.selectLocMoves(slave.getId());
         // 鑾峰彇宸ヤ綔妗d俊鎭�
-        WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
-        if (null == wrkMast) {
+        WrkMast wrkMast = null;
+        if (Cools.isEmpty(wrkMasts)) {
             return;
+        } else {
+            wrkMast = wrkMasts.get(0);
         }
+//        //鍚庢煡绛夊緟搴撲綅杞祴璇曞簱浣�
+//        if (Cools.isEmpty(wrkMast)) {
+//            for (WrkMast wm : wrkMasts) {
+//                LocMast sourceSta1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wm.getSourceLocNo()));
+//                if (sourceSta1.getLocType1() == 3) {
+//                    wrkMast = wm;
+//                }
+//            }
+//        }
+//        //閮芥病鏈夋弧瓒虫潯浠剁殑锛岃烦杩囩Щ搴�
+//        if (Cools.isEmpty(wrkMast)) {
+//            return;
+//        }
+
         // 鑾峰彇婧愬簱浣嶄俊鎭�
         LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
         if (null == sourceSta) {
-            log.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈡簮搴撲綅澶辫触锛佸伐浣滃彿={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+            News.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈡簮搴撲綅澶辫触锛佸伐浣滃彿={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
             return;
         }
         // 婧愬簱浣�  搴撲綅鐘舵�佸垽鏂�
@@ -1047,7 +1045,7 @@
         // 鑾峰彇鐩爣搴撲綅淇℃伅
         LocMast sta = locMastService.selectById(wrkMast.getLocNo());
         if (null == sta) {
-            log.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo());
+            News.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo());
             return;
         }
         // 鑾峰彇鍫嗗灈鏈轰俊鎭� 骞� 鍒ゆ柇鏄惁鍙叆鍑�
@@ -1066,6 +1064,12 @@
             return;
         }
 
+        //娴嬭瘯搴撲綅鍑哄簱蹇呴』瑕佹寜鍚姩鎸夐挳鎵嶈兘鍑哄簱
+        if (sourceSta.getLocType1() == 1 && sourceSta.getCtnKind() == 0) {
+            News.error("鍑哄簱 ===>> 绛夊緟鍚姩鎸夐挳", wrkMast);
+            return;
+        }
+
         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
         CrnCommand crnCommand = new CrnCommand();
         crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
@@ -1078,8 +1082,9 @@
         crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
         crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
         crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 鐩爣搴撲綅灞�
+        crnCommand.setBarcode(wrkMast.getBarcode());//鎵樼洏鐮�
         if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-            log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+            News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
         } else {
             // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
             Date now = new Date();
@@ -1087,10 +1092,10 @@
             wrkMast.setCrnStrTime(now);
             wrkMast.setModiTime(now);
             if (wrkMastMapper.updateById(wrkMast) == 0) {
-                log.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                News.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
             }
         }
-
+        log.info("缁撴潫绉诲簱浠诲姟绋嬪簭");
     }
 
     /**
@@ -1102,17 +1107,19 @@
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) { continue; }
+            if (crnProtocol == null) {
+                continue;
+            }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
-                if(crnProtocol.getTaskNo()==9999){
+                if (crnProtocol.getTaskNo() == 9999) {
                     // 鍫嗗灈鏈哄浣�
                     crnThread.setResetFlag(true);
-                }else {
+                } else {
                     // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                     if (wrkMast == null) {
-                        log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+                        News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
                         continue;
                     }
                     // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
@@ -1139,7 +1146,7 @@
      * 鍫嗗灈鏈哄紓甯镐俊鎭褰�
      */
     @Async
-    public void recCrnErr(){
+    public void recCrnErr() {
         Date now = new Date();
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
@@ -1161,7 +1168,7 @@
                                 continue;
                             }
                             BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
-                            String errName = crnError==null? String.valueOf(crnProtocol.getAlarm()):crnError.getErrName();
+                            String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
                             BasErrLog basErrLog = new BasErrLog(
                                     null,    // 缂栧彿
                                     wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
@@ -1200,7 +1207,7 @@
                             }
                         }
                     }
-                // 鏃犱换鍔�
+                    // 鏃犱换鍔�
                 } else {
                     BasErrLog latest = basErrLogService.findLatest(crn.getId());
                     // 鏈夊紓甯�
@@ -1208,7 +1215,7 @@
                         // 璁板綍鏂板紓甯�
                         if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
                             BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
-                            String errName = crnError==null? String.valueOf(crnProtocol.getAlarm()):crnError.getErrName();
+                            String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
                             BasErrLog basErrLog = new BasErrLog(
                                     null,    // 缂栧彿
                                     null,    // 宸ヤ綔鍙�
@@ -1223,7 +1230,7 @@
                                     null,    // 婧愮珯
                                     null,    // 婧愬簱浣�
                                     null,    // 鏉$爜
-                                    (int)crnProtocol.getAlarm(),    // 寮傚父鐮�
+                                    (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
                                     errName,    // 寮傚父
                                     1,    // 寮傚父鎯呭喌
                                     now,    // 娣诲姞鏃堕棿
@@ -1236,7 +1243,7 @@
                                 log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                             }
                         }
-                    // 鏃犲紓甯�
+                        // 鏃犲紓甯�
                     } else {
                         // 寮傚父淇
                         if (latest != null && latest.getStatus() == 1) {
@@ -1261,7 +1268,7 @@
      * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
      */
     @Async
-    public void storeEmptyPlt(){
+    public void storeEmptyPlt() {
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻绌烘澘鍏ュ簱鍙�
             for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
@@ -1307,14 +1314,12 @@
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
                         } else {
-                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl+"/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                         }
                     } catch (Exception e) {
                         e.printStackTrace();
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                     }
-
-
 
 
 //                    // 妫�绱㈠簱浣�
@@ -1381,7 +1386,8 @@
      * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
      */
     @Async
-    public void ledExecute() {
+    public synchronized void ledExecute(Integer mark) {
+
         for (LedSlave led : slaveProperties.getLed()) {
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -1399,13 +1405,24 @@
                 }
                 // 鑾峰彇宸ヤ綔妗f暟鎹�
                 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
+//                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
+                if (null == wrkMast) {
+                    continue;
+                }
+                log.info("" + mark + " - 0" + " - 寮�濮嬫墽琛�:鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�");
                 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 101:
                         ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
                         break;
@@ -1423,14 +1440,16 @@
                         ledCommand.setEmptyMk(true);
                         break;
                     default:
-                        log.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
+                        News.error("" + mark + " - 1" + " - 浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
                         break;
                 }
                 ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
+                ledCommand.setLocNo(wrkMast.getLocNo());
                 ledCommand.setStaNo(wrkMast.getStaNo());
-                if (wrkMast.getIoType() != 110) {
+//                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())));
+                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), wrkDetl.getSpecs())));
                 }
                 commands.add(ledCommand);
             }
@@ -1441,10 +1460,29 @@
             if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
                 continue;
             }
+//             鍛戒护涓嬪彂 -------------------------------------------------------------------------------
+//            if (!commands.isEmpty()) {
+//                if (led.getId() < 7) {
+//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
+//                        News.error(""+mark+" - 2"+" - {}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+//                        continue;
+//                    } else {
+//                        ledThread.setLedMk(false);
+//                    }
+//                } else {
+//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
+//                        News.error(""+mark+" - 3"+" - {}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+//                        continue;
+//                    } else {
+//                        ledThread.setLedMk(false);
+//                    }
+//                }
+//
+//            }
             // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
             if (!commands.isEmpty()) {
-                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
-                    log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
+                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
                     continue;
                 } else {
                     ledThread.setLedMk(false);
@@ -1457,6 +1495,7 @@
                     wrkMast.setOveMk("Y");
                     wrkMast.setModiTime(new Date());
                     if (wrkMastMapper.updateById(wrkMast) == 0) {
+                        log.error("" + mark + " - 4" + " - 鏇存柊宸ヤ綔妗eけ璐�");
                         throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
                     }
                 }
@@ -1470,6 +1509,7 @@
             }
 
         }
+        log.info("" + mark + " - 0" + " - 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣ㄦ墽琛屽畬鎴�");
     }
 
     /**
@@ -1523,12 +1563,12 @@
             // 鑾峰彇led绾跨▼
             LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
             // led鏄剧ず榛樿鍐呭
-            if (reset && !ledThread.isLedMk()) {
-                ledThread.setLedMk(true);
+            if (reset) {
+                if (ledThread == null) {
+                    continue;
+                }
                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
-                    log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                } else {
-
+                    News.error("{}鍙稬ED鏄剧ず榛樿鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
                 }
             }
         }
@@ -1539,7 +1579,7 @@
      * tip锛氬悓姝�
      */
     @Transactional
-    public synchronized void moveLocForDeepLocPakin(CrnSlave crn, LocMast shallowLoc, WrkMast pakinWrkMast){
+    public synchronized void moveLocForDeepLocPakin(CrnSlave crn, LocMast shallowLoc, WrkMast pakinWrkMast) {
         LocMast loc = locMastService.selectById(pakinWrkMast.getLocNo());
 
         // 鑾峰彇宸ヤ綔鍙�
@@ -1558,7 +1598,7 @@
         wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
         wrkMast.setPicking("N"); // 鎷f枡
         wrkMast.setExitMk("N"); // 閫�鍑�
-        wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D")?"Y":"N"); // 绌烘澘
+        wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
         wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
         wrkMast.setLinkMis("N");
         wrkMast.setCtnNo("Y");  // 鍏ュ簱闃诲搴撲綅绉昏浆鏍囪
@@ -1588,7 +1628,7 @@
         if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
             shallowLoc.setLocSts("S"); // S.鍏ュ簱棰勭害锛屽叆搴撻樆濉炲簱浣嶇Щ杞�
             shallowLoc.setModiTime(now);
-            if (!locMastService.updateById(shallowLoc)){
+            if (!locMastService.updateById(shallowLoc)) {
                 throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
             }
         } else {
@@ -1614,7 +1654,7 @@
      * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)
      * tip锛氬悓姝�
      */
-    private void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc){
+    private void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc) {
         try {
             List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
             LocMast loc = null;
@@ -1731,7 +1771,7 @@
     /**
      * 鍫嗗灈鏈烘紨绀�  ===>> 搴撲綅绉昏浆
      */
-    public synchronized void crnDemoOfLocMove1(){
+    public synchronized void crnDemoOfLocMove1() {
         try {
             for (CrnSlave crn : slaveProperties.getCrn()) {
                 if (!crn.getDemo()) {
@@ -1832,7 +1872,7 @@
     /**
      * 鍫嗗灈鏈哄懡浠や笅鍙戝悗锛屽紓姝ヤ慨鏀瑰伐浣滄。鐘舵��
      */
-    public synchronized void crnIoWrkMast(){
+    public synchronized void crnIoWrkMast() {
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -1845,18 +1885,20 @@
             if (crnProtocol.getStatusType() != CrnStatusType.IDLE && crnProtocol.getTaskNo() != 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
                 // 鑾峰彇宸ヤ綔妗�
                 WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo());
-                if (wrkMast == null) { continue; }
+                if (wrkMast == null) {
+                    continue;
+                }
                 // 鍏ュ簱
                 if (wrkMast.getWrkSts() == 1 || wrkMast.getWrkSts() == 2) {
-                    log.warn("鍫嗗灈鏈洪潪绌洪棽鎯呭喌涓嬶紝寮�濮嬩慨鏀瑰伐浣滄。鐘舵�併�俒id:{},鏃堕棿锛歿}] >>>>> 鍫嗗灈鏈哄綋鍓嶇姸鎬佷负锛歿}銆備换鍔″彿:{}", crn.getId(), DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), crnProtocol.getStatusType().desc, crnProtocol.getTaskNo());
+                    News.warn("鍫嗗灈鏈洪潪绌洪棽鎯呭喌涓嬶紝寮�濮嬩慨鏀瑰伐浣滄。鐘舵�併�俒id:{},鏃堕棿锛歿}] >>>>> 鍫嗗灈鏈哄綋鍓嶇姸鎬佷负锛歿}銆備换鍔″彿:{}", crn.getId(), DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), crnProtocol.getStatusType().desc, crnProtocol.getTaskNo());
                     // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
                     wrkMast.setWrkSts(3L);
                     wrkMast.setCrnStrTime(now);
                     wrkMast.setModiTime(now);
                     if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                        News.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                     }
-                    log.warn("淇敼宸ヤ綔妗g姸鎬佹垚鍔熴�俒鏃堕棿锛歿}] >>>>> 浠诲姟鍙�:{}",  DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F),  wrkMast.getWrkNo());
+                    News.warn("淇敼宸ヤ綔妗g姸鎬佹垚鍔熴�俒鏃堕棿锛歿}] >>>>> 浠诲姟鍙�:{}", DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), wrkMast.getWrkNo());
                 }
                 // 鍑哄簱銆佺Щ搴�
                 if (wrkMast.getWrkSts() == 11) {
@@ -1866,46 +1908,14 @@
                     wrkMast.setCrnStrTime(now);
                     wrkMast.setModiTime(now);
                     if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                        News.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                     }
-                    log.warn("淇敼宸ヤ綔妗g姸鎬佹垚鍔熴�俒鏃堕棿锛歿}] >>>>> 浠诲姟鍙�:{}",  DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F),  wrkMast.getWrkNo());
+                    News.warn("淇敼宸ヤ綔妗g姸鎬佹垚鍔熴�俒鏃堕棿锛歿}] >>>>> 浠诲姟鍙�:{}", DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), wrkMast.getWrkNo());
                 }
 
 
             }
 
-        }
-    }
-
-    /**
-     * 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁�
-     */
-    public void ioConvert() {
-        try {
-            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-            for (DevpSlave devp : slaveProperties.getDevp()) {
-                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-
-                WrkMast pakout = wrkMastMapper.selectWorkingPakout();
-                if (pakout != null) {
-                    if (devpThread.ioMode != IoModeType.PAKOUT_MODE) {
-                        // 鍑哄簱鍒囨崲涓�
-                        devpThread.ioMode = IoModeType.PAKOUT_BOOTING;
-
-                        WrkMast pakin = wrkMastMapper.selectWorkingPakin();
-                        if (pakin == null) {
-                            // 鍑哄簱妯″紡
-                            devpThread.ioMode = IoModeType.PAKOUT_MODE;
-                        }
-                    }
-                } else {
-                    // 鍏ュ簱妯″紡
-                    devpThread.ioMode = IoModeType.PAKIN_MODE;
-                }
-            }
-
-        } catch (Exception e) {
-            e.printStackTrace();
         }
     }
 
@@ -1926,9 +1936,11 @@
      * 绔欏埌绔�  ===>>  鍫嗗灈鏈�109绔欏埌108绔�
      * 109闃茬垎娌欑绔欑偣 鍑哄簱 鍒� 108绔欑偣
      */
-    public void stnToStn(CrnSlave slave, CrnProtocol crnProtocol){
+    public void stnToStn(CrnSlave slave, CrnProtocol crnProtocol) {
         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
-            if(crnStn.getStaNo()!=109){ continue; }
+            if (crnStn.getStaNo() != 109) {
+                continue;
+            }
 
             boolean flag = false;
             // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
@@ -1942,11 +1954,11 @@
             // 鏌ヨ绔欑偣璇︾粏淇℃伅
             BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
             if (staDetl == null) {
-                log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                News.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                 continue;
             }
             if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
-                    && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) {
+                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
                 flag = true;
             }
 
@@ -1977,262 +1989,185 @@
             // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
             CrnCommand crnCommand = new CrnCommand();
             crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-            crnCommand.setTaskNo((short)9999); // 宸ヤ綔鍙�
+            crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
             crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
             crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
             crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
             crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
             crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
-            crnCommand.setDestinationPosX((short)2);     // 鐩爣搴撲綅鎺�
-            crnCommand.setDestinationPosY((short)19);     // 鐩爣搴撲綅鍒�
-            crnCommand.setDestinationPosZ((short)1);     // 鐩爣搴撲綅灞�
+            crnCommand.setDestinationPosX((short) 2);     // 鐩爣搴撲綅鎺�
+            crnCommand.setDestinationPosY((short) 19);     // 鐩爣搴撲綅鍒�
+            crnCommand.setDestinationPosZ((short) 1);     // 鐩爣搴撲綅灞�
             if (!MessageQueue.offer(SlaveType.Crn, 1, new Task(2, crnCommand))) {
-                log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", 1, JSON.toJSON(crnCommand));
+                News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", 1, JSON.toJSON(crnCommand));
             } else {
             }
         }
     }
 
-    /**
-     * 鏍规嵁PLC鎸夐挳娴嬭瘯銆佸畬鎴愩�佹殏鍋滀俊鍙凤紝鏇存柊testMast琛ㄤ腑status鍊硷紝浜ょ敱WMS绯荤粺澶勭悊
-     */
-    @Transactional
-    public void packTest() {
-        try {
-            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-            for (DevpSlave devp : slaveProperties.getDevp()) {
-                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                if(null != devpThread){
-                    for (int i = 0; i < 48; i++){
-                        int olsStatus = 0;//testMast琛ㄥ師鏉tatus鏁版嵁鐘舵��
-                        int newStatus = 0;//testMast琛ㄥ緟淇敼鐨剆tatus鏁版嵁鐘舵��
-                        short newSingle = 0;  //PLC鍦板潃寰呬慨鏀圭殑鏂板��
-                        switch (devpThread.startSignal[i][0]){//鏍规嵁淇″彿鏌ユ壘testMast琛ㄤ腑瀵瑰簲鐘舵�佹潯浠�,olsStatus锛宯ewStatus鏍规嵁瀹為檯娴佺▼璋冩暣
-                            case 0://鍒濆鐘舵�侊紝鍏ュ簱
-                                olsStatus = 1;//寰呮祴
-                                newStatus = 1;//寰呮祴
-                                newSingle = 1;//搴撳瓨鏈夎祫鏂欙紝瀵勫瓨鍣ㄥ湴鍧�锛�0===>>1
-                                break;
-                            case 2://鍚姩澶嶆牳淇″彿
-                                olsStatus = 1;//寰呮祴
-                                newStatus = 2;//澶嶆牳涓�
-                                newSingle = 3;//娴嬭瘯澶嶆牳锛屽瘎瀛樺櫒鍦板潃锛�2===>>3
-                                break;
-                            case 3://娴嬭瘯瀹屾垚
-                                olsStatus = 4;//娴嬭瘯瀹屾垚
-                                newStatus = 4;//娴嬭瘯瀹屾垚
-                                newSingle = 4;//娴嬭瘯瀹屾垚锛屽瘎瀛樺櫒鍦板潃锛�3===>>4
-                                break;
-                            case 5://NG娴嬭瘯淇″彿
-                            case 6://瀹屾垚娴嬭瘯淇″彿
-                            case 22://瀹屾垚娴嬭瘯淇″彿
-                                olsStatus = 4;//娴嬭瘯瀹屾垚
-                                newStatus = 5;//宸茬Щ搴�
-                                newSingle = 0;//鍚姩绉诲簱锛屽瘎瀛樺櫒鍦板潃娓呴浂锛�5/6===>>0
-                                break;
-                            case 7://鏆傚仠淇″彿
-                                olsStatus = 99;//plc缁欏嚭鏆傚仠淇″彿
-                                newStatus = 0;//WCS鏀跺埌鏆傚仠淇″彿鍚庯紝鏇存柊testMast
-                                newSingle = 8;//鏆傚仠娴嬭瘯锛屽瘎瀛樺櫒鍦板潃锛�7===>>8
-                                break;
-                            case 9://绱ф�ュ嚭搴撶‘璁ゅ厖鐢电嚎宸茬粡鎷斿嚭
-                                olsStatus = 99;//plc缁欏嚭鏆傚仠淇″彿
-                                newStatus = 0;//WCS鏀跺埌鏆傚仠淇″彿鍚庯紝鏇存柊testMast
-                                newSingle = 8;//鏆傚仠娴嬭瘯锛屽瘎瀛樺櫒鍦板潃锛�9===>>8
-                                break;
-                            case 10://瑙i櫎鏆傚仠淇″彿
-                                olsStatus = 0;//plc缁欏嚭鏆傚仠淇″彿
-                                newStatus = 1;//WCS鏀跺埌鏆傚仠淇″彿鍚庯紝鏇存柊testMast
-                                newSingle = 0;//鏆傚仠娴嬭瘯锛屽瘎瀛樺櫒鍦板潃锛�10===>>0/11
-                                break;
-                            case 12://绱ф�ュ嚭搴撶‘璁ゅ厖鐢电嚎宸茬粡鎷斿嚭
-                                newSingle = 11;//鏆傚仠娴嬭瘯锛屽瘎瀛樺櫒鍦板潃锛�12===>>11
-                                break;
-                            case 13://鍏ュ簱鍓嶅垽鏂厖鐢电嚎鏄惁鏀惧ソ
-                                newSingle = 14;//绂佺敤搴撲綅锛屽瘎瀛樺櫒鍦板潃锛�13===>>14
-                                break;
-                            case 15://鍏呯數绾挎斁濂�
-                                newSingle = 0;//澶嶄綅锛屽瘎瀛樺櫒鍦板潃锛�12===>>0
-                                break;
-                            default:
-                                log.error("璇诲彇娴嬭瘯搴撲綅淇″彿鍑洪敊");
-                                break;
-                        }
 
-                        TestMast testMast = testMastService.selectOne(new EntityWrapper<TestMast>()
-                                .eq("channel",(i+1)).eq("status",olsStatus));//鏌ユ壘鍘熸潵鐨勭姸鎬�
-                        LocMast locMast=null;
-                        boolean sign=false;
-                        switch (devpThread.startSignal[i][0]){
-                            case 0:
-                            case 3:
-                                if (!Cools.isEmpty(testMast)){
-                                    locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("channel",(i+1)));
-                                    if (!Cools.isEmpty(locMast) && locMast.getLocSts().equals("F")){
-                                        sign=true;
-                                    }
-                                }
-                                break;
-                            case 5:
-                            case 6:
-                                if (!Cools.isEmpty(testMast)){
-                                    locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("channel",(i+1)));
-                                    if (!Cools.isEmpty(locMast) && locMast.getLocSts().equals("F")){
-                                        if (devpThread.startSignal[i][0]==5 && locMast.getPackStatus()==4){
-                                            sign=true;
-                                        }else if (devpThread.startSignal[i][0]==6 && locMast.getPackStatus()==3){
-                                            sign=true;
-                                        }else {
-                                            log.error("娴嬭瘯瀹屾垚绉诲簱鏃舵寜涓嬪畬鎴愭寜閽笌娴嬭瘯缁撴灉涓嶄竴鑷�===>>[channel:{}", i+1);
-                                        }
-                                    }else {
-                                        log.error("娴嬭瘯瀹屾垚绉诲簱鏃舵湭鏌ヨ鍒版祴璇曟。妗�===>>[channel:{}", i+1);
-                                    }
-                                }
-                                break;
-                            case 2:
-                                if (!Cools.isEmpty(testMast)){
-                                    testMast.setStatus(newStatus);
-                                    testMast.setModiTime(new Date());
-                                    if(!testMastService.update(testMast,new EntityWrapper<TestMast>().eq("channel",(i+1)).eq("barcode",testMast.getBarcode()))){
-                                        throw new CoolException("鏇存柊浜у搧娴嬭瘯鐘舵�佸け璐�");
-                                    }else {
-                                        sign=true;
-                                    }
-                                }else {
-                                    log.error("鍚姩娴嬭瘯鏃舵湭鏌ヨ鍒版祴璇曟。妗�===>>[channel:{}", i+1);
-                                }
-                                break;
-                            case 7:
-                                SearchLocParam param = new SearchLocParam();
-                                param.setBarcode(i+1+"");
-                                String response = new HttpHandler.Builder()
-                                        .setUri(wmsUrl)
-                                        .setPath("/mobile/test/suspend/auth")
-                                        .setJson(JSON.toJSONString(param))
-                                        .build()
-                                        .doPost();
-                                JSONObject jsonObject = JSON.parseObject(response);
-                                if (jsonObject.getInteger("code").equals(200)) {
-                                    testMast = testMastService.selectOne(new EntityWrapper<TestMast>().eq("channel",(i+1)));
-                                    testMast.setStatus(newStatus);
-                                    testMast.setModiTime(new Date());
-                                    if(!testMastService.update(testMast,new EntityWrapper<TestMast>().eq("channel",(i+1)).eq("barcode",testMast.getBarcode()))){
-                                        log.error("鏇存柊浜у搧娴嬭瘯鐘舵�佸け璐�");
-                                    }
-                                    sign=true;
-                                } else {
-                                    log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl+"/mobile/test/suspend/auth", JSON.toJSONString(param), response);
-                                }
-                                break;
-                            case 9:
-                            case 12:
-                                locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("channel",(i+1)));
-                                if (!Cools.isEmpty(locMast) && locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")){
-                                    locMast.setPackStatus(8); //8.绱ф�ュ嚭搴�
-                                    if (locMastService.update(locMast,new EntityWrapper<LocMast>().eq("channel",(i+1)))){
-                                        log.info("搴撲綅锛歿}锛岀揣鎬ュ嚭搴擄紒",locMast.getLocNo());
-                                    }
-                                }else {
-                                    log.error("搴撲綅涓嶆槸鍦ㄥ簱鐘舵�侊紝鏃犻渶绱ф�ュ嚭搴擄紒");
-                                }
-                                sign=true;
-                                break;
-                            case 10:
-                                if (!Cools.isEmpty(testMast)){
-                                    locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("channel",(i+1)));
-                                    if (!Cools.isEmpty(locMast) && locMast.getLocSts().equals("F") ){
-                                        if ( locMast.getFireStatus().equals(1)){
-                                            newSingle=11;
-                                        }else {
-                                            testMast.setStatus(newStatus);
-                                            testMast.setModiTime(new Date());
-                                            if(!testMastService.update(testMast,new EntityWrapper<TestMast>().eq("channel",(i+1)).eq("barcode",testMast.getBarcode()))){
-                                                throw new CoolException("鏇存柊浜у搧娴嬭瘯鐘舵�佸け璐�");
-                                            }else {
-                                                sign=true;
-                                            }
-                                        }
-                                    }
-                                }
-                                sign=true;
-                                break;
-                            case 13:
-                                locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("channel",(i+1)));
-                                if (locMast.getLocSts().equals("O")){
-                                    locMast.setLocSts("X");
-                                    locMastService.update(locMast,new EntityWrapper<LocMast>().eq("channel",(i+1)));
-                                }
-                                sign=true;
-                                break;
-                            case 15:
-                                locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("channel",(i+1)));
-                                if (locMast.getLocSts().equals("X")){
-                                    locMast.setLocSts("O");
-                                    locMastService.update(locMast,new EntityWrapper<LocMast>().eq("channel",(i+1)));
-                                }
-                                sign=true;
-                                break;
-                            default:
-                                log.error("璇诲彇娴嬭瘯搴撲綅淇″彿鍑洪敊");
-                                continue;
-                        }
-                        if (sign){
-                            boolean result = messageQueueOffer(i,newSingle,SlaveType.Devp, devp.getId());
-                            if(!result){
-                                log.error("鏇存柊娴嬭瘯淇″彿澶辫触===>>[channel:{},locNo:{},barcode:{}]", i+1, testMast.getLocNo(), testMast.getBarcode());
-                            } else {
-                                devpThread.startSignal[i][0]  = newSingle;
-                            }
-                        }
-                    }
-
-                }
-
-            }
-        } catch (Exception e) {
-            log.error("鍚姩娴嬭瘯  ===>> 鍚姩娴嬭瘯澶辫触", e);
-            e.printStackTrace();
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-        }
-    }
-
-    public boolean messageQueueOffer(int i ,short newSingle,SlaveType devp,Integer id){
+    public boolean messageQueueOffer(int i, short newSingle, SlaveType devp, Integer id) {
         //澶嶄綅PLC淇″彿锛屽�熺敤杈撻�佺珯鐐瑰疄浣撶被
         StaProtocol staProtocol = new StaProtocol();
-        staProtocol.setSiteId(i*2);//瀵勫瓨鍣ㄥ湴鍧�
+        staProtocol.setSiteId(i * 2);//瀵勫瓨鍣ㄥ湴鍧�
         staProtocol.setStaNo(newSingle);//淇敼PLC瀵勫瓨鍣ㄥ湴鍧�鍊�,8==>0
         return MessageQueue.offer(devp, id, new Task(3, staProtocol));
     }
 
+    public boolean messageQueueOffer2(int i, short newSingle, SlaveType devp, Integer id) {
+        //澶嶄綅PLC淇″彿锛屽�熺敤杈撻�佺珯鐐瑰疄浣撶被
+        StaProtocol staProtocol = new StaProtocol();
+        staProtocol.setSiteId(i);//瀵勫瓨鍣ㄥ湴鍧�
+        staProtocol.setStaNo(newSingle);//淇敼PLC瀵勫瓨鍣ㄥ湴鍧�鍊�,8==>0
+        return MessageQueue.offer(devp, id, new Task(5, staProtocol));
+    }
+
     /**
-     * 灏嗙伀璀︽姤璀︿俊鍙峰啓鍏ュ埌鍫嗗灈鏈篜LC涓�
+     * 鏇存柊PLC搴撲綅鐘舵�併�佹洿鏂板簱浣嶅惎鍔ㄧ姸鎬�
      */
     @Transactional
-    public void fierCrn() {
+    public void packTest1() {
         try {
-            for (CrnSlave crn :slaveProperties.getCrn()) {
-                // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
-                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("fire_status", 1));
-                if (!Cools.isEmpty(locMast)){
-                    //鎶ヨ淇″彿鍐欏叆1
-                    if (!MessageQueue.offer(SlaveType.Crn, 1, new Task(4, (short)1))) {
-                        log.error("鐏  ===>> 缁欏爢鍨涙満鍙戦�佹姤璀︿俊鍙峰け璐�");
-                    }
-                } else {
-                    //鎶ヨ淇″彿娌℃湁鍚庯紝澶嶄綅鍦板潃
-                    if (!MessageQueue.offer(SlaveType.Crn, 1, new Task(4, (short)0))) {
-                        log.error("鐏  ===>> 缁欏爢鍨涙満娓呴浂澶嶄綅鎶ヨ淇″彿澶辫触");
+            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                if (null != devpThread) {
+                    //devpThread.startSignal[i][0]
+                    //0:绌洪棽,1:寰呮祴,2:娴嬭瘯涓�;3.娴嬭瘯瀹屾垚;4.娴嬭瘯澶辫触;
+
+                    //locMast.setPackStatus
+                    // "浜у搧鐘舵�亄0:绌洪棽,1:寰呮祴,2:娴嬭瘯涓�;3.娴嬭瘯瀹屾垚;4.娴嬭瘯澶辫触;}"
+
+                    //testMast.setStatus
+                    //"鐘舵�� 0: 鏃犺揣  1: 绛夊緟娴嬭瘯 2:娴嬭瘯涓� 3.娴嬭瘯瀹屾垚;4.娴嬭瘯澶辫触; "
+                    for (int i = 0; i < 24; i++) {
+                        //鏌ヨ鍦ㄥ簱鍜岄绾﹀嚭搴�
+                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("channel", i + 1));
+                        if (!Cools.isEmpty(locMast)) {
+                            if (locMast.getLocSts().equals("F")) {
+                                TestMast testMast = testMastService.selectOne(new EntityWrapper<TestMast>()
+                                        .eq("loc_no", locMast.getLocNo())
+                                        .eq("user_id", locMast.getBarcode()));
+                                if (Cools.isEmpty(testMast)) {
+//                                log.info("2377琛岀▼搴忓紑濮嬭繍琛岋紝娴嬭瘯妗d负绌猴紝璺宠繃");
+                                    continue;
+                                }
+                                HashMap<String, Short> hashMap = new HashMap<>();
+                                if (devpThread.startSignal[i][0] != locMast.getPackStatus()) {
+                                    hashMap.put("locSts", locMast.getPackStatus().shortValue());
+                                    hashMap.put("channel", (short) (i * 2));
+                                    MessageQueue.offer(SlaveType.Devp, 1, new Task(6, hashMap));
+                                }
+                                //鍚屾璁惧鐘舵��
+                                if (locMast.getPackStatus() != testMast.getStatus()) {
+                                    testMast.setStatus(locMast.getPackStatus());
+                                    testMastService.updateById(testMast);
+                                }
+                                if (devpThread.startSignal[i][1] != locMast.getCtnKind()) {
+                                    locMast.setCtnKind(devpThread.startSignal[i][1]);
+                                    locMastService.updateById(locMast);
+                                }
+                            } else if (locMast.getLocSts().equals("O")) {
+                                //褰撳厖鏀剧數搴撲綅涓篛绌哄簱浣嶆椂
+                                //搴撲綅鐘舵�佹敼涓�0绌洪棽
+                                locMast = locMastService.selectztgx("O", i);
+                                if (!Cools.isEmpty(locMast)) {
+                                    HashMap<String, Short> hashMap = new HashMap<>();
+                                    if (devpThread.startSignal[i][0] != locMast.getPackStatus()) {
+                                        hashMap.put("locSts", (short) 0);
+                                        hashMap.put("channel", (short) (i * 2));
+                                        MessageQueue.offer(SlaveType.Devp, 1, new Task(6, hashMap));
+                                        locMast.setPackStatus(0);
+                                        locMastService.updateById(locMast);
+                                    }
+
+                                    if (devpThread.startSignal[i][1] != locMast.getChannel()) {
+                                        locMast.setCtnKind(devpThread.startSignal[i][1]);
+                                        locMastService.updateById(locMast);
+                                    }
+                                }
+                            }
+                        }
                     }
                 }
             }
         } catch (Exception e) {
-            log.error("鐏  ===>> 缁欏爢鍨涙満鍙戦�佽鎶ュけ璐�", e);
+            News.error("鑾峰緱娴嬭瘯搴撲綅鐘舵�佸け璐�", e);
             e.printStackTrace();
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
     }
 
+    /**
+     * 鍑哄簱绔欑偣鏃犺揣鏃惰嚜鍔ㄨˉ绌烘澘鍒板嚭搴撳彛
+     */
+    public void automaticEmptyBoardOutbound() {
+        // 鑾峰彇鍏ュ簱绔欎俊鎭�
+        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        StaProtocol staProtocol = devpThread.getStation().get(101);
+        if (staProtocol == null) {
+            return;
+        } else {
+            staProtocol = staProtocol.clone();
+        }
+        if (staProtocol.isAutoing() && !staProtocol.isLoading()
+                && staProtocol.isOutEnable() && staProtocol.getWorkNo() == 0
+        ) {
+            WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110));
+            if (!Cools.isEmpty(wrkMast1)) {
+                return;
+            }
+            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "D").orderBy("row1"));
+            if (Cools.isEmpty(locMast)) {
+                return;
+            }
+            //鐢熸垚绌烘澘鍑哄簱浠诲姟
+            // 鑾峰彇宸ヤ綔鍙�
+            int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
+            // 鑾峰彇婧愮珯
+            Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                    .eq("type_no", 110)
+                    .eq("stn_no", 101)
+                    .eq("crn_no", locMast.getCrnNo());
+            StaDesc staDesc = staDescService.selectOne(wrapper);
+            Integer sourceStaNo = staDesc.getCrnStn();
+            if (Cools.isEmpty(sourceStaNo)) {
+                throw new CoolException("妫�绱㈡簮绔欏け璐�");
+            }
+            Date now = new Date();
+            // 淇濆瓨宸ヤ綔妗�
+            WrkMast wrkMast = new WrkMast();
+            wrkMast.setWrkNo(workNo);
+            wrkMast.setIoTime(now);
+            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+            wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
+            wrkMast.setIoPri(10D);
+            wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
+            wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
+            wrkMast.setCrnNo(locMast.getCrnNo());
+            wrkMast.setSourceLocNo(locMast.getLocNo()); // 婧愬簱浣�
+            wrkMast.setFullPlt("N"); // 婊℃澘锛歒
+            wrkMast.setPicking("N"); // 鎷f枡
+            wrkMast.setExitMk("N"); // 閫�鍑�
+            wrkMast.setEmptyMk("Y"); // 绌烘澘
+            wrkMast.setLinkMis("N");
+            wrkMast.setAppeUser(9995L);
+            wrkMast.setAppeTime(now);
+            wrkMast.setModiUser(9995L);
+            wrkMast.setModiTime(now);
+            boolean res = wrkMastService.insert(wrkMast);
+            if (!res) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+            }
+            // 鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害
+            if (locMast.getLocSts().equals("D")){
+                locMast.setLocSts("R");
+                locMast.setModiUser(9995L);
+                locMast.setModiTime(now);
+                if (!locMastService.updateById(locMast)) {
+                    throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+                }
+            }
+        }
+    }
 }

--
Gitblit v1.9.1