From 32b593115da09714624f3803fc43a6add07da391 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 22 五月 2025 16:20:14 +0800
Subject: [PATCH] #系统异常监视

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1585 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 1,078 insertions(+), 507 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 baaa901..238f2da 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -8,10 +8,9 @@
 import com.core.common.DateUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.mapper.BasCrnErrorMapper;
-import com.zy.asrs.mapper.WaitPakinMapper;
-import com.zy.asrs.mapper.WrkMastMapper;
+import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.RouteUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
 import com.zy.common.model.LocTypeDto;
@@ -21,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,6 +38,8 @@
 import com.zy.core.thread.BarcodeThread;
 import com.zy.core.thread.LedThread;
 import com.zy.core.thread.SiemensDevpThread;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -45,10 +47,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -86,26 +85,43 @@
     private BasErrLogService basErrLogService;
     @Autowired
     private BasCrnErrorMapper basCrnErrorMapper;
-
+    @Autowired
+    private WrkMastStaMapper wrkMastStaMapper;
+    @Autowired
+    private BasRgvService basRgvService;
+    @Autowired
+    private BasRgvMapMapper basRgvMapMapper;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private BasRgvMapService basRgvMapService;
+    @Autowired
+    private ConfigService configService;
     @Value("${wms.url}")
     private String wmsUrl;
+
+    @Value("${camera.url}")
+    private String cameraUrl;
+
+    public Short wrkNo = 10000;
 
     /**
      * 缁勬墭
      * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
      */
-    public synchronized void generateStoreWrkFile() {
+    public synchronized void generateStoreWrkFile(Integer mark) {
+        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
         // 鏍规嵁杈撻�佺嚎plc閬嶅巻
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鍏ュ簱鍙�
             for (DevpSlave.Sta inSta : devp.getInSta()) {
-                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
-                if (barcodeThread == null) {
+                if (inSta.getStaNo() == 1035) {
                     continue;
                 }
-
-                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
+                BarcodeThread barcodeThreadMat = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcodeMat());
+                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                 if (staProtocol == null) {
@@ -114,73 +130,106 @@
                     staProtocol = staProtocol.clone();
                 }
 
-                //LED
-                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-                // 鍏ュ嚭搴撴ā寮忓垽鏂�
-//                if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; }
-//                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
-//                    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 = "鎵爜澶辫触";
+                    News.watchError(staProtocol.getSiteId() + "绔�-鍏ュ簱", "鎵爜澶辫触");
+                    back = true;
+                }
+                // 閫�鍥�
+                if (back) {
+                    if (!staProtocol.isLoading()) {
+                        continue;
+                    }
+                    if (!staProtocol.isPakMk()) {
+                        continue;
+                    }
+                    // led 寮傚父鏄剧ず
+                    if (ledThread != null) {
+                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
+                        News.watchInfo(staProtocol.getSiteId() + "绔�-鍏ュ簱", errMsg);
+                    }
+                }
 
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-                if (staProtocol.isAutoing() && staProtocol.isLoading()
+                if (staProtocol.isAutoing()
+                        && staProtocol.isLoading()
                         && staProtocol.isInEnable()
-                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990)
-                        && staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) {
-
-                    String barcode = barcodeThread.getBarcode();
-                    if(!Cools.isEmpty(barcode)) {
-                        log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-                        if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
-                            staProtocol.setWorkNo((short) 9999);
-                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
-                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-
-                            log.info("鎵爜澶辫触1 ===>> {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{},绔欑偣:{}", inSta.getBarcode(), barcode, inSta.getStaNo());
-                            // led 寮傚父鏄剧ず
-                            if (ledThread != null) {
-                                String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
-                            }
-                            continue;
-                        }
-                    } else {
-                        staProtocol.setWorkNo((short) 9999);
-                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
-                        devpThread.setPakMk(staProtocol.getSiteId(), false);
-                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-
-                        log.info("鎵爜澶辫触2 ===>> {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{},绔欑偣:{}", inSta.getBarcode(), barcode, inSta.getStaNo());
+                        && !staProtocol.isEmptyMk()
+                        && staProtocol.isPakMk()) {
+                    String barcode = staProtocol.getBarcode();
+                    if (Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
+                        News.watchInfo(staProtocol.getSiteId() + "绔�-鍏ュ簱", "{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
                         // led 寮傚父鏄剧ず
                         if (ledThread != null) {
                             String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
+                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                         }
                         continue;
                     }
-
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
-
                     if (wrkMast != null) {
-                        log.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
-                        staProtocol.setWorkNo((short)9999);
-                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                        int wrkNo1 = basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo()));
+                        if (wrkNo1 != 0) {
+                            News.watchError(staProtocol.getSiteId() + "绔�-鍏ュ簱", barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,璇锋煡鐪媁CS杈撻�佺嚎鐣岄潰,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
+                            if (ledThread != null) {
+                                News.error(methodName + ":鎵爜澶辫触锛岃閲嶈瘯");
+                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo()));
+                            }
+                            continue;
+                        }
+                        barcodeThread.setBarcode("");
+                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+                        staProtocol.setStaNo(RouteUtils.SouStaEnd(null, wrkMast.getSourceStaNo()));
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
                         boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        log.info("杈撻�佺嚎涓嬪彂(瀛樺湪璁惧涓婅蛋鐨勫伐浣滄。锛岀洿鎺ヤ笅鍙戯紒))锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
+
+                        ledThread.errorReset();
+                        log.info("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
+
                         if (!result) {
-                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            News.watchError(staProtocol.getSiteId() + "绔�-鍏ュ簱", methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            log.error("杈撻�佺嚎涓嬪彂(瀛樺湪璁惧涓婅蛋鐨勫伐浣滄。锛岀洿鎺ヤ笅鍙戯紒)==>鏇存柊plc绔欑偣淇℃伅澶辫触");
+
+//                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            continue;
                         }
 
-                        // led 寮傚父鏄剧ず
-                        if (ledThread != null) {
-                            String errorMsg = "宸ヤ綔妗e凡瀛樺湪璇ユ潯鐮佸彿===>>" + barcode;
-                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
-                        }
+                    }
+                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                            .eq("barcode", barcode)
+                            .in("io_type", 107, 103, 57));
+                    if (!Cools.isEmpty(checkPick)) {
                         continue;
                     }
-
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
 
@@ -198,46 +247,28 @@
                         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());
+                            staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(), dto.getSourceStaNo()));
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                            if (!result) {
-                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-                            }
+                            log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo());
 
-                            // led 鍏ュ簱淇℃伅鏄剧ず
-                            if (ledThread != null) {
-                                // 鍛戒护闆嗗悎
-                                List<LedCommand> commands = new ArrayList<>();
-                                // 缁勮鍛戒护
-                                LedCommand ledCommand = new LedCommand();
-                                ledCommand.setWorkNo(dto.getWorkNo());
-                                ledCommand.setIoType(1);
-                                ledCommand.setTitle("鍏ㄦ澘鍏ュ簱");
-                                ledCommand.setLocNo(dto.getLocNo());
-                                ledCommand.setStaNo(dto.getStaNo());
-                                commands.add(ledCommand);
-                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, commands));
+                            ledThread.errorReset();
+                            log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
+
+                            if (!result) {
+                                News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+
+                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
                         } else {
-                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
-                            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));
-                            if (!result) {
-                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            String errorMsg = jsonObject.getString("msg");
+                            if (!Cools.isEmpty(errorMsg)) {
+                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                             }
-
-                            // led 寮傚父鏄剧ず
-                            if (ledThread != null) {
-                                String errorMsg = jsonObject.getString("msg");
-                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
-                            }
+                            News.watchError(staProtocol.getSiteId() + "绔�-鍏ュ簱", errorMsg);
                         }
+
 
                     } catch (Exception e) {
                         e.printStackTrace();
@@ -246,8 +277,10 @@
 
                 }
 
+
             }
         }
+//        News.infoNoLog(""+mark+" - 0"+" - 缁勬墭  ===銆嬫墽琛屽畬鎴�");
 
     }
 
@@ -255,57 +288,64 @@
      * wms鍏ュ簱
      * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 1 ==>> 2
      */
-    public synchronized void generateStoreWrkFile0() {
-        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻鍏ュ簱鍙�
-            for (DevpSlave.Sta inSta : devp.getInSta()) {
-                // 鑾峰彇鍏ュ簱绔欎俊鎭�
-                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
-                if (staProtocol == null) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
+    public synchronized void generateStoreWrkFile0(Integer mark) {
+        // 鑾峰彇鍏ュ簱绔欎俊鎭�
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        StaProtocol staProtocol = devpThread.getStation().get(1135);
+        if (staProtocol == null) {
+            return;
+        } else {
+            staProtocol = staProtocol.clone();
+        }
 
-//                // 鍏ュ嚭搴撴ā寮忓垽鏂�
-                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) {
-                    continue;
-                }
-
-                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
-                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
-                        && staProtocol.isPakMk()) {
-                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
-                    WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
-                    if (wrkMast == null) {
-                        continue;
-                    }
-
-                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-
-                    // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂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) {
-                        // 鏇存柊宸ヤ綔涓绘。
-                        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
-                        wrkMast.setModiTime(new Date());
-                        if (wrkMastMapper.updateById(wrkMast) == 0) {
-                            log.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
-                        }
-                    } else {
-                        log.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
-                    }
-
-                }
-
-
+        // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+        if (!staProtocol.isLoading()) {
+            return;
+        }
+        if (staProtocol.isAutoing()
+                && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
+                && staProtocol.isPakMk()) {
+            News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�");
+            // 鍒ゆ柇閲嶅宸ヤ綔妗�
+            WrkMast wrkMast = wrkMastMapper.selectPakInStep11(1135);
+            if (wrkMast == null) {
+                return;
             }
+            if (wrkMast.getPltType().shortValue() != staProtocol.getFinishWorkNo()) {
+                News.watchInfo(wrkMast.getWrkNo() + "浠诲姟-2.5F鍏ュ簱", "宸ヤ綔妗e拰瀹岀粨宸ヤ綔鍙蜂笉鍖归厤锛寋}锛寋}", wrkMast.getPltType(), staProtocol.getFinishWorkNo());
+                return;
+            }
+            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "2.5F_Mode"));
+            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
+                return;
+            }
+            if (!config.getValue().equalsIgnoreCase("1")) {
+                News.watchInfo(wrkMast.getWrkNo() + "浠诲姟-2.5F鍏ュ簱", "妯″紡涓嶅1");
+                return;
+            }
+            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+            devpThread.setPakMk(staProtocol.getSiteId(), false);
+            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+            log.error("杈撻�佺嚎涓嬪彂3锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
+            if (result) {
+                // 鏇存柊宸ヤ綔涓绘。
+                wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
+                wrkMast.setModiTime(new Date());
+                if (wrkMastMapper.updateById(wrkMast) == 0) {
+                    News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+                }
+            } else {
+                News.error("" + mark + " - 2" + " - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", 1);
+            }
+
+        } else {
+            News.watchError(staProtocol.getSiteId() + "绔�-2.5F鍏ュ簱", "" + mark + " - 6" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isLoading() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable()
+                    + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk() + "銆佸伐浣滃彿锛�" + staProtocol.getWorkNo()
+                    + "銆侀攣瀹氭爣璁�" + staProtocol.isPakMk() + "銆佸叆搴撳嵃璁帮細" + staProtocol.getStamp());
         }
 
     }
@@ -313,38 +353,39 @@
     /**
      * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
      */
-    public synchronized void stnToCrnStnPick() {
+    public synchronized void stnToCrnStnPick(Integer mark) {
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鎷f枡鍏ュ簱鍙�
             for (DevpSlave.Sta pickSta : devp.getPickSta()) {
                 // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
-                if (barcodeThread == null) {
-                    continue;
-                }
-                String barcode = barcodeThread.getBarcode();
-                if(!Cools.isEmpty(barcode)) {
-                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
-                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-                        continue;
-                    }
-                } else {
-                    continue;
-                }
-
+//                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
+//                if (barcodeThread == null) {
+//                    continue;
+//                }
                 // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
-                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
                 if (staProtocol == null) {
                     continue;
                 } else {
                     staProtocol = staProtocol.clone();
                 }
+                String barcode = staProtocol.getBarcode();
+                if (!Cools.isEmpty(barcode)) {
+//                    News.info(""+mark+" - 1"+" - {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
+                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
+                        continue;
+                    }
+                } else {
+                    continue;
+                }
+
 
 //                // 鍏ュ嚭搴撴ā寮忓垽鏂�
 //                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
 
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
+                    News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�");
                     WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
 //                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
                     if (wrkMast == null) {
@@ -372,7 +413,19 @@
                             .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
                     StaDesc staDesc = staDescService.selectOne(wrapper);
                     if (Cools.isEmpty(staDesc)) {
-                        log.error("鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
+                        News.error("" + mark + " - 2" + " - 鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
+                        staProtocol.setWorkNo(wrkNo++);
+                        staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue() - (short) 1));
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        log.error("杈撻�佺嚎涓嬪彂4锛�" + 9989 + "," + (pickSta.getStaNo().shortValue() - (short) 1));
+                        //LED
+                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
+                        // led 寮傚父鏄剧ず
+                        if (ledThread != null) {
+                            String errorMsg = "姝や负鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱.璇锋斁鍦�" + pickSta.getBackSta().shortValue() + "绔欑偣";
+                            MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+                        }
                         continue;
                     }
 
@@ -421,8 +474,174 @@
                     staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                    log.error("杈撻�佺嚎涓嬪彂5锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
                     if (!result) {
-                        log.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                        News.error("" + mark + " - 3" + " - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                    }
+
+                } else {
+                    News.errorNoLog("" + mark + " - 6" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isLoading() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable()
+                            + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk());
+                }
+
+            }
+
+        }
+//        News.infoNoLog(""+mark+" - 0"+" - 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱  ===銆嬫墽琛屽畬鎴�");
+    }
+
+
+    //鐩樼偣鍐嶅叆搴�
+    public synchronized void stnToCrnStnPick2() {
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻鎷f枡鍏ュ簱鍙�
+            for (DevpSlave.Sta pickSta : devp.getPickSta()) {
+                // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+                if (staProtocol.isAutoing()
+                        && staProtocol.isLoading()
+                        && staProtocol.isInEnable()
+                        && !staProtocol.isEmptyMk()
+//                        && staProtocol.getWorkNo() > 0
+                        && staProtocol.isPakMk()) {
+
+                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+
+                    String barcode = staProtocol.getBarcode();
+                    if (!Cools.isEmpty(barcode)) {
+//                        log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
+                        if ("00000000".equals(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
+                            staProtocol.setWorkNo(wrkNo++);
+                            staProtocol.setStaNo(pickSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+
+                            // led 寮傚父鏄剧ず
+                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
+                            if (ledThread != null) {
+                                String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
+                                MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+                            }
+                            continue;
+                        }
+                    } else {
+                        staProtocol.setWorkNo(wrkNo++);
+                        staProtocol.setStaNo(pickSta.getBackSta().shortValue());
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+
+                        // led 寮傚父鏄剧ず
+                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
+                        if (ledThread != null) {
+                            String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
+                            MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+                        }
+                        continue;
+                    }
+
+                    WrkMast wrkMast = wrkMastMapper.selectPickStep2(barcode);
+                    if (wrkMast == null) {
+                        // 鏃犵洏鐐规暟鎹�
+                        continue;
+                    }
+
+                    // 鍑哄簱纭淇″彿浣�
+//                    if ((Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N")) && wrkMast.getIoType() != 107) {
+//                        continue;
+//                    }
+//                    if ( wrkMast.getIoType() != 107 || Cools.isEmpty(wrkMast.getStaNo())
+//                            || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+//                        continue;
+//                    }
+
+                    //   鑾峰彇搴撲綅鍙�
+                    try {
+                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getSourceLocNo()));
+                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+                        SearchLocParam param = new SearchLocParam();
+                        param.setBarcode(barcode);
+                        param.setIoType(107);
+                        param.setSourceStaNo(pickSta.getStaNo()); //浣滀笟绔欑偣
+                        if (!Cools.isEmpty(locMast)) {
+                            param.setLocType1(locMast.getLocType1());
+                        } else {
+                            param.setLocType1(locTypeDto.getLocType1());
+                        }
+
+                        String response = "";
+                        log.info("鍏ュ簱浣滀笟绔�" + pickSta.getStaNo() + "鐩樼偣鍐嶅叆搴撲换鍔¤姹俉MS===>>鍙傛暟锛�" + param);
+                        try {
+                            response = new HttpHandler.Builder()
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/pakin2/loc/v1")
+                                    .setJson(JSON.toJSONString(param))
+//                                    .setTimeout(15, TimeUnit.SECONDS)
+                                    .build()
+                                    .doPost();
+                        } catch (Exception e) {
+                            log.error("鍏ュ簱浣滀笟绔�" + pickSta.getStaNo() + "鐩樼偣鍐嶅叆搴撲换鍔¤姹俉MS===>>鍙傛暟锛�" + param);
+                            log.error("stnToCrnStnPick2===>>鐩樼偣鏌ュ簱浣嶅叆搴撴帴鍙eけ璐�", e);
+                            e.printStackTrace();
+                            continue;
+                        }
+                        log.info("鍏ュ簱浣滀笟绔�" + pickSta.getStaNo() + "鐩樼偣鍐嶅叆搴撲换鍔¤姹俉MS===>>鍙傛暟锛�" + param);
+                        log.info("鍏ュ簱浣滀笟绔�" + pickSta.getStaNo() + "涓嬪彂鐩樼偣鍐嶅叆搴撲换鍔¤姹俉MS杩斿洖缁撴灉===>>" + response);
+                        if (response.equals("")) {
+                            continue;
+                        }
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
+                        Integer code = jsonObject.getInteger("code");
+                        if (code == 200) {
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+                            if (Cools.isEmpty(dto) || Cools.isEmpty(dto.getStaNo())) {
+                                log.error("浠诲姟鍙�" + wrkMast.getWrkNo() + "鐩樼偣鍐嶅叆搴撴煡璇㈠簱浣嶅け璐�===>>" + jsonObject.toJSONString());
+                            } else {
+                                log.info("浠诲姟鍙�" + wrkMast.getWrkNo() + "鐩樼偣鍐嶅叆搴撴煡璇㈠簱浣嶆垚鍔�===>>" + jsonObject.toJSONString());
+                                try {
+                                    // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+                                    staProtocol.setWorkNo(dto.getWorkNo().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) {
+                                        log.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                                    }
+                                    log.info("浠诲姟鍙�" + wrkMast.getWrkNo() + "鐩樼偣鍐嶅叆搴撲换鍔′笅鍙戞垚鍔�===>>" + staProtocol);
+
+                                    ledThread.errorReset();
+                                    log.error("鐩樼偣鍚巐ed閿欒鍒犻櫎");
+
+                                } catch (Exception e) {
+                                    log.error("鐩樼偣鍐嶅叆搴撳け璐�===>>" + e);
+                                    e.printStackTrace();
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                }
+                            }
+                        } else {
+                            staProtocol.setWorkNo(wrkNo++);
+                            staProtocol.setStaNo(pickSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            if (ledThread != null) {
+                                String errorMsg = jsonObject.getString("msg");
+                                if (!Cools.isEmpty(errorMsg)) {
+                                    MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+                                }
+                            }
+                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin2/loc/v1", JSON.toJSONString(param), response);
+                        }
+                    } catch (Exception e) {
+                        log.error("stnToCrnStnPick2===>>fail", e);
+                        e.printStackTrace();
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                     }
 
                 }
@@ -435,7 +654,8 @@
     /**
      * 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
      */
-    public synchronized void crnStnToOutStn() {
+    public synchronized void crnStnToOutStn(Integer mark) {
+
         for (CrnSlave crnSlave : slaveProperties.getCrn()) {
             // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
             for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
@@ -468,26 +688,99 @@
                     if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
                             && crnProtocol.statusType == CrnStatusType.WAITING
                             && crnProtocol.forkPosType == CrnForkPosType.HOME) {
+                        log.info("鍫嗗灈鏈哄嚭搴撳畬鎴� - 寮�濮嬫墽琛�");
 
                         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                         // 涓嬪彂绔欑偣淇℃伅
                         staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                        staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(), wrkMast.getSourceStaNo()));
                         if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                            log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂澶辫触");
                             continue;
+                        } else {
+                            log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂鎴愬姛");
                         }
 
                         // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
-                        wrkMast.setWrkSts(14L);
+                        if (wrkMast.getStaNo() == 1135) {
+                            wrkMast.setWrkSts(107L);
+                        } else {
+                            wrkMast.setWrkSts(14L);
+                        }
                         wrkMast.setCrnEndTime(new Date());
                         if (wrkMastMapper.updateById(wrkMast) != 0) {
                             // 澶嶄綅鍫嗗灈鏈�
+                            log.error("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,{}", wrkMast.getWrkNo());
                             crnThread.setResetFlag(true);
                         } else {
-                            log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                            News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                         }
 
+                    } else {
+                        News.watchError(crnProtocol.getCrnNo() + "鍙峰爢鍨涙満-鍑哄簱鍒板嚭搴撶珯", "" + mark + " - 6" + " - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
+                                + " 鍫嗗灈鏈虹姸鎬侊細" + crnProtocol.modeType + "==鑷姩AUTO锛�" + CrnModeType.AUTO
+                                + "銆佸爢鍨涙満浠诲姟鍙凤細" + crnProtocol.getTaskNo() + "==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue()
+                                + "銆佺姸鎬佹灇涓撅細" + crnProtocol.statusType + "==WAITING锛�90 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
+                                + "銆佽揣鍙変綅缃細" + crnProtocol.forkPosType + "==HOME锛�0  // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME);
+                    }
+
+                }
+            }
+        }
+//        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯  ===銆嬫墽琛屽畬鎴�");
+    }
+
+    /**
+     * 鍫嗗灈搴撳埌鍥涘悜搴�
+     */
+    public synchronized void toSxk(Integer mark) {
+
+        for (DevpSlave devpSlave : slaveProperties.getDevp()) {
+            // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
+            for (DevpSlave.Sta crnStn : devpSlave.getOutSta()) {
+                if (crnStn.getStaNo() != 1135) {
+                    continue;
+                }
+                // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId());
+                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.selectPakOutStep3(staProtocol.getSiteId());
+                    if (wrkMast == null) {
+                        continue;
+                    }
+                    if (wrkMast.getWrkNo().shortValue() != staProtocol.getFinishWorkNo()) {
+                        continue;
+                    }
+                    // 鍒ゆ柇宸ヤ綔妗f潯浠�
+                    if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
+                        continue;
+                    }
+
+                    // 涓嬪彂绔欑偣淇℃伅
+                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+                    staProtocol.setStaNo((short) 1031);
+                    if (!MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol))) {
+                        log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂澶辫触222");
+                        continue;
+                    } else {
+                        log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂鎴愬姛222");
+                    }
+
+                    // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
+                    wrkMast.setWrkSts(108L);
+                    wrkMast.setCrnEndTime(new Date());
+                    if (wrkMastMapper.updateById(wrkMast) != 0) {
+                        log.error("杞Щ鑷�1031,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
+                    } else {
+                        News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负107澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                     }
 
                 }
@@ -498,7 +791,8 @@
     /**
      * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
      */
-    public synchronized void crnIoExecute() {
+    public synchronized void crnIoExecute(Integer mark) {
+
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -508,7 +802,7 @@
             }
             BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
             if (basCrnp == null) {
-                log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
+                News.error("" + mark + " - 1" + " - {}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
                 continue;
             }
 
@@ -520,32 +814,37 @@
             // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
                     && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
+                News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�");
                 // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
                 if (crnProtocol.getLastIo().equals("I")) {
                     if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnStnToLoc(crn, crnProtocol); //  鍏ュ簱
+                        //mark - 1 - ....
+                        this.crnStnToLoc(crn, crnProtocol, mark); //  鍏ュ簱
                         crnProtocol.setLastIo("O");
                     } else if (basCrnp.getOutEnable().equals("Y")) {
-                        this.locToCrnStn(crn, crnProtocol); //  鍑哄簱
+                        //mark - 2 - ....
+                        this.locToCrnStn(crn, crnProtocol, mark); //  鍑哄簱
                         crnProtocol.setLastIo("I");
                     }
                 }
                 // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
                 else if (crnProtocol.getLastIo().equals("O")) {
                     if (basCrnp.getOutEnable().equals("Y")) {
-                        this.locToCrnStn(crn, crnProtocol); //  鍑哄簱
+                        this.locToCrnStn(crn, crnProtocol, mark); //  鍑哄簱
                         crnProtocol.setLastIo("I");
                     } else if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnStnToLoc(crn, crnProtocol); //  鍏ュ簱
+                        this.crnStnToLoc(crn, crnProtocol, mark); //  鍏ュ簱
                         crnProtocol.setLastIo("O");
                     }
                 }
             }
             // 搴撲綅绉昏浆
-            this.locToLoc(crn, crnProtocol);
+            //mark - 3 - ....
+            this.locToLoc(crn, crnProtocol, mark);
 //            this.crnRebackHp(crnProtocol, crnThread);
 
         }
+//        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鎵ц瀹屾垚");
     }
 
     /**
@@ -583,7 +882,7 @@
             if (wrkMastMapper.selectDevWorking(crnProtocol.getCrnNo()) == null) {
                 return;
             }
-            log.info("鍫嗗灈鏈哄彫鍥炲師鐐�==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満鏈夊叆搴撲换鍔�,鍙洖鍘熺偣");
+            News.info("鍫嗗灈鏈哄彫鍥炲師鐐�==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満鏈夊叆搴撲换鍔�,鍙洖鍘熺偣");
             // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
             CrnCommand crnCommand = new CrnCommand();
             crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
@@ -597,7 +896,7 @@
             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));
+                News.error("鍫嗗灈鏈哄洖鍘熺偣鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand));
             }
             crnThread.setBackHpFlag(true);
         }
@@ -607,13 +906,15 @@
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
      */
-    public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) {
+    public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
+        News.warnNoLog("" + mark + " - 1" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽叆搴�");
         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
             boolean flag = false;
             // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
             StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
             if (staProtocol == null) {
+                News.infoNoLog("" + mark + " - 1" + " - 1" + " - 鍫嗗灈鏈哄叆搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц)锛歴taProtocol=" + staProtocol);
                 continue;
             } else {
                 staProtocol = staProtocol.clone();
@@ -621,80 +922,149 @@
             // 鏌ヨ绔欑偣璇︾粏淇℃伅
             BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
             if (staDetl == null) {
-                log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                News.watchError(staProtocol.getSiteId() + "绔�-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 2" + " - 鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                 continue;
             }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
-                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
-                flag = true;
-            }
-            if (!flag) {
-                continue;
-            }
-            // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
-            WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
-            if (null == wrkMast) {
+            WrkMast wrkMast;
+            LocMast locMast;
+            if (crnStn.getStaNo() == 1131) {
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getFinishWorkNo() > 0
+                        && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+                    flag = true;
+                }
+
+                if (!flag) {
+                    News.watchError(staProtocol.getSiteId() + "绔�-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 3" + " - 鍫嗗灈鏈哄叆搴撶珯淇℃伅(浠ヤ笅闇�瑕佸叏true):"
+                            + "鑷姩淇″彿" + staProtocol.isAutoing() + "鏈夌墿淇″彿" + staProtocol.isLoading()
+                            + "宸ヤ綔鍙�>0" + staProtocol.getWorkNo() + "鍙叆淇″彿" + staProtocol.isInEnable()
+                            + "鑳藉叆淇″彿锛坵ms璁剧疆锛�.equals(\"Y\")" + staDetl.getCanining());
+                    continue;
+                }
+                // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
+                wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getFinishWorkNo().intValue(), crnStn.getStaNo());
+                if (null == wrkMast) {
+                    News.watchInfo(staProtocol.getSiteId() + "绔�-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getFinishWorkNo());
+                    continue;
+                }
+                // 鑾峰彇搴撲綅淇℃伅
+                locMast = locMastService.selectById(wrkMast.getLocNo());
+                if (locMast == null) {
+                    News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 5" + " - 鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+                    continue;
+                }
+                if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
+                    News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 6" + " - 鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+                    continue;
+                }
+
+                // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+//                News.infoNoLog(""+mark+" - 1"+" - 7"+" - 鍫嗗灈鏈烘帶鍒惰繃婊�:鍫嗗灈鏈烘槸鍚︾┖闂�={}锛屼换鍔″彿={}", crnProtocol.getStatusType(),crnProtocol.getTaskNo());
+                    continue;
+                }
+
+                // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                    continue;
+                }
+            } else {
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
+                        && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+                    flag = true;
+                }
+                if (!flag) {
+                    News.watchError(staProtocol.getSiteId() + "绔�-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 3" + " - 鍫嗗灈鏈哄叆搴撶珯淇℃伅(浠ヤ笅闇�瑕佸叏true):"
+                            + "鑷姩淇″彿" + staProtocol.isAutoing() + "鏈夌墿淇″彿" + staProtocol.isLoading()
+                            + "宸ヤ綔鍙�>0" + staProtocol.getWorkNo() + "鍙叆淇″彿" + staProtocol.isInEnable()
+                            + "鑳藉叆淇″彿锛坵ms璁剧疆锛�.equals(\"Y\")" + staDetl.getCanining());
+                    continue;
+                }
+                // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
+                wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
+                if (null == wrkMast) {
+                    News.watchInfo(staProtocol.getSiteId() + "绔�-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
 //                log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
-                continue;
-            }
-            // 鑾峰彇搴撲綅淇℃伅
-            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
-            if (locMast == null) {
-                log.error("鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
-                continue;
-            }
-            if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
-                log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
-                continue;
+                    continue;
+                }
+                // 鑾峰彇搴撲綅淇℃伅
+                locMast = locMastService.selectById(wrkMast.getLocNo());
+                if (locMast == null) {
+                    News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 5" + " - 鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+                    continue;
+                }
+                if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
+                    News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 6" + " - 鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+                    continue;
+                }
+
+                // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+//                News.infoNoLog(""+mark+" - 1"+" - 7"+" - 鍫嗗灈鏈烘帶鍒惰繃婊�:鍫嗗灈鏈烘槸鍚︾┖闂�={}锛屼换鍔″彿={}", crnProtocol.getStatusType(),crnProtocol.getTaskNo());
+                    continue;
+                }
+
+                // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                    continue;
+                }
             }
 
-            // 鍫嗗灈鏈烘帶鍒惰繃婊�
-            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
-                continue;
-            }
-
-            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
-                continue;
-            }
 
             // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
             if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
+                News.watchInfo(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 8" + " - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}", wrkMast.getWrkNo());
                 String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
                 LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                 // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
                 if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                    News.watchInfo(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 9" + " - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}", shallowLoc.getLocSts());
                     WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                     if (null == waitWrkMast) {
-                        log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                        News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄叆搴�", "" + mark + " - 1" + " - 10" + " - {}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
                     } else {
                         waitWrkMast.setIoPri(15D);
                         waitWrkMast.setModiTime(new Date());
                         if (wrkMastMapper.updateById(waitWrkMast) == 0) {
-                            log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                            News.error("" + mark + " - 1" + " - 11" + " - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
                         }
                         continue;
                     }
 
                 } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                    News.warnNoLog("" + mark + " - 1" + " - 12" + " - // F銆丏  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
                     // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
                     if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
-                        wrkMast.setUpdMk("Y");
-                        wrkMast.setIoPri(14D);
-                        wrkMastMapper.updateById(wrkMast);
+
+                        if (moveLocForDeepLoc(slave, shallowLoc, mark)) {
+                            wrkMast.setUpdMk("Y");
+                            wrkMast.setIoPri(14D);
+                            wrkMastMapper.updateById(wrkMast);
+                        }
+
                         // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
-                        moveLocForDeepLoc(slave, shallowLoc);
+                        moveLocForDeepLoc(slave, shallowLoc, mark);
                         // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
 //                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
                     }
                     continue;
                 } else if (shallowLoc.getLocSts().equals("Q")) {
+                    News.warnNoLog("" + mark + " - 1" + " - 13" + " - // Q  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
                     WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                     if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+                        News.infoNoLog("" + mark + " - 1" + " - 14" + " - // F銆丏  宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}", waitWrkMast.getWrkSts());
                         continue;
                     }
                 }
             }
+            //涓嬪彂浠诲姟鍓嶈姹傛憚鍍忔満
+            boolean succ = sendACameraRequest(wrkMast.getWrkNo());
+            if (!succ) {
+                log.error(wrkMast.getWrkNo() + "浠诲姟涓嬪彂鍓嶈姹傛憚鍍忔満鍚姩澶辫触");
+            }
+
+            News.warnNoLog("" + mark + " - 1" + " - 15" + " - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}", wrkMast.getWrkNo().shortValue()
+                    , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue()
+                    , locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue());
 
             // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
             CrnCommand crnCommand = new CrnCommand();
@@ -708,8 +1078,9 @@
             crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
             crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
             crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
+            crnCommand.setTraySize(locMast.getLocType1() == 2);
             if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                News.error("" + mark + " - 1" + " - 16" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
             } else {
 
 //                long startTime = System.currentTimeMillis();
@@ -730,40 +1101,52 @@
                 wrkMast.setCrnStrTime(now);
                 wrkMast.setModiTime(now);
                 if (wrkMastMapper.updateById(wrkMast) == 0) {
-                    log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                    News.error("" + mark + " - 1" + " - 17" + " - 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                 }
             }
         }
+        News.infoNoLog("" + mark + " - 1" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍏ュ簱鎵ц瀹屾瘯");
     }
 
     /**
      * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
      * 2022-06-09 TQS淇敼锛屾煡璇㈠伐浣滄。LIST锛岄亶鍘嗕笅鍙戯紝闃叉绗竴涓换鍔″牭濉炲嚭搴�
      */
-    public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol) {
+    public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
+        News.warnNoLog("" + mark + " - 2" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽嚭搴�");
         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) {
+                if (crnStn.getStaNo() == 1131) {
+                    Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "2.5F_Mode"));
+                    if (Cools.isEmpty(config) || config.getValue().equals("false")) {
+                        return;
+                    }
+                    if (!config.getValue().equalsIgnoreCase("2")) {
+                        return;
+                    }
+                }
                 if (wrkMast == null) {
                     continue;
                 }
                 // 宸ヤ綔妗g姸鎬佸垽鏂�
                 if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
-                    log.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
+                    News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "" + mark + " - 2" + " - 1" + " - 鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
                     continue;
                 }
                 // 鑾峰彇婧愬簱浣嶄俊鎭�
                 LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
                 if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
-                    log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
+                    News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "" + mark + " - 2" + " - 2" + " - 鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
                     continue;
                 }
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
                 StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
                 if (staProtocol == null) {
+                    News.watchInfo(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol);
                     break;
 //                    continue;
                 } else {
@@ -772,20 +1155,30 @@
 
 //            // 鍏ュ嚭搴撴ā寮忓垽鏂�
 //            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; }
-                if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
-                    continue;
-                }
+//                if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
+//                    News.infoNoLog(""+mark+" - 2"+" - 4"+" - 鍏ュ嚭搴撴ā寮忥紙姝ゅ鍑哄簱鏂规硶锛屽嚭搴撴ā寮忕户缁�=="+devpThread.ioModeOf2F);
+//                    continue;
+//                }
 
                 // 鏌ヨ绔欑偣璇︾粏淇℃伅
                 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                 if (staDetl == null) {
-                    log.error("鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                    News.watchInfo(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "" + mark + " - 2" + " - 5" + " - 鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                     break;
 //                    continue;
                 }
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
-                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+//                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
+//                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+
+                if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
+                ) {
+                    if (slave.getId() == 1 || slave.getId() == 2) {
+                        if (staProtocol.isLoading() || staProtocol.getWorkNo() != 0) {
+                            //if (staProtocol.isLoading() || staProtocol.getWorkNo() != 0 || !staProtocol.isOutEnable()) {
+                            continue;
+                        }
+                    }
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                     // 鍫嗗灈鏈烘帶鍒惰繃婊�
@@ -796,19 +1189,21 @@
 
                     // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
                     if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
+                        News.watchInfo(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "" + mark + " - 2" + " - 6" + " - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}", wrkMast.getWrkNo());
                         String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
                         LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                         // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
                         if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                            News.watchInfo(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "" + mark + " - 2" + " - 7" + " - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}", shallowLoc.getLocSts());
                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                             if (null == waitWrkMast) {
-                                log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                                News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
                             } else {
                                 if (waitWrkMast.getWrkSts() == 11) {
                                     waitWrkMast.setIoPri(15D);
                                     waitWrkMast.setModiTime(new Date());
                                     if (wrkMastMapper.updateById(waitWrkMast) == 0) {
-                                        log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                                        News.error("" + mark + " - 2" + " - 8" + " - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
                                     }
                                     continue;
                                 } else {
@@ -816,6 +1211,7 @@
                                 }
                             }
                         } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                            News.warnNoLog("" + mark + " - 2" + " - 9" + " - // F銆丏  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
 //                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                             //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
@@ -823,16 +1219,18 @@
 //                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
 //                                || Cools.isEmpty(waitWrkMast)) {
                             if (Cools.isEmpty(waitWrkMast)) {
-                                wrkMast.setUpdMk("Y");
-                                wrkMastMapper.updateById(wrkMast);
-                                // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
-                                moveLocForDeepLoc(slave, shallowLoc);
+                                if (moveLocForDeepLoc(slave, shallowLoc, mark)) {
+                                    wrkMast.setUpdMk("Y");
+                                    wrkMastMapper.updateById(wrkMast);
+                                }
                             }
-                            log.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
+                            News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
                             continue;
                         } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
+                            News.warnNoLog("" + mark + " - 2" + " - 10" + " - // Q銆丼  搴撲綅鐘舵��={}", shallowLoc.getLocSts());
                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
                             if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+                                News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "" + mark + " - 2" + " - 11" + " - // F銆丏  宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}", waitWrkMast.getWrkSts());
                                 continue;
                             }
                         }
@@ -843,6 +1241,14 @@
                         break;
 //                        return;
                     }
+                    //涓嬪彂浠诲姟鍓嶈姹傛憚鍍忔満
+                    boolean succ = sendACameraRequest(wrkMast.getWrkNo());
+                    if (!succ) {
+                        News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", wrkMast.getWrkNo() + "浠诲姟涓嬪彂鍓嶈姹傛憚鍍忔満鍚姩澶辫触");
+                    }
+                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}", wrkMast.getWrkNo().shortValue()
+                            , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue()
+                            , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
 
                     // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
                     CrnCommand crnCommand = new CrnCommand();
@@ -856,8 +1262,9 @@
                     crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
                     crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
                     crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
+                    crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //搴撲綅绫诲瀷
                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                        log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                        News.error("" + mark + " - 2" + " - 13" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
                         // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
                         Date now = new Date();
@@ -865,13 +1272,16 @@
                         wrkMast.setCrnStrTime(now);
                         wrkMast.setModiTime(now);
                         if (wrkMastMapper.updateById(wrkMast) == 0) {
-                            log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                            News.error("" + mark + " - 2" + " - 14" + " - 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                         }
                         break;
                     }
+                }else {
+                    News.watchError(wrkMast.getWrkNo() + "浠诲姟-鍫嗗灈鏈哄嚭搴�", "鍫嗗灈鏈虹珯鐐圭姸鎬侀渶瑕佹弧瓒筹細鑷姩銆佸彲鍑�, 绔欑偣缂栧彿={}", staProtocol.getSiteId());
                 }
             }
         }
+        News.infoNoLog("" + mark + " - 2" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍑哄簱鎵ц瀹屾瘯");
     }
 
 //    /**
@@ -994,16 +1404,17 @@
     /**
      * 搴撲綅绉昏浆
      */
-    public synchronized void locToLoc(CrnSlave slave, CrnProtocol crnProtocol) {
+    public synchronized void locToLoc(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
         // 鑾峰彇宸ヤ綔妗d俊鎭�
         WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
         if (null == wrkMast) {
             return;
         }
+        News.warnNoLog("" + mark + " - 3" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽簱浣嶇Щ杞�");
         // 鑾峰彇婧愬簱浣嶄俊鎭�
         LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
         if (null == sourceSta) {
-            log.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈡簮搴撲綅澶辫触锛佸伐浣滃彿={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+            News.error("" + mark + " - 3" + " - 1" + " - 宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈡簮搴撲綅澶辫触锛佸伐浣滃彿={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
             return;
         }
         // 婧愬簱浣�  搴撲綅鐘舵�佸垽鏂�
@@ -1013,7 +1424,11 @@
         // 鑾峰彇鐩爣搴撲綅淇℃伅
         LocMast sta = locMastService.selectById(wrkMast.getLocNo());
         if (null == sta) {
-            log.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo());
+            News.error("" + mark + " - 3" + " - 2" + " - 宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo());
+            return;
+        }
+        if (sta.getLocType1() != sourceSta.getLocType1()) {
+            News.error("绉诲簱鐩爣搴撲綅绫诲瀷涓庢簮搴撲綅绫诲瀷涓嶇");
             return;
         }
         // 鑾峰彇鍫嗗灈鏈轰俊鎭� 骞� 鍒ゆ柇鏄惁鍙叆鍑�
@@ -1031,6 +1446,14 @@
         if (wrkMastMapper.selectWorking(slave.getId()) != null) {
             return;
         }
+        //涓嬪彂浠诲姟鍓嶈姹傛憚鍍忔満
+        boolean succ = sendACameraRequest(wrkMast.getWrkNo());
+        if (!succ) {
+            log.error(wrkMast.getWrkNo() + "浠诲姟涓嬪彂鍓嶈姹傛憚鍍忔満鍚姩澶辫触");
+        }
+        News.warnNoLog("" + mark + " - 3" + " - 3" + " - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}", wrkMast.getWrkNo().shortValue()
+                , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue()
+                , sta.getRow1().shortValue(), sta.getBay1().shortValue(), sta.getLev1().shortValue());
 
         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
         CrnCommand crnCommand = new CrnCommand();
@@ -1044,8 +1467,9 @@
         crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
         crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
         crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 鐩爣搴撲綅灞�
+        crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //搴撲綅绫诲瀷
         if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-            log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+            News.error("" + mark + " - 3" + " - 4" + " - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
         } else {
             // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
             Date now = new Date();
@@ -1053,16 +1477,18 @@
             wrkMast.setCrnStrTime(now);
             wrkMast.setModiTime(now);
             if (wrkMastMapper.updateById(wrkMast) == 0) {
-                log.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                News.error("" + mark + " - 3" + " - 5" + " - 銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
             }
         }
+        News.infoNoLog("" + mark + " - 3" + " - 0" + " - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氬簱浣嶇Щ杞畬鎴�");
 
     }
 
     /**
      * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
      */
-    public synchronized void storeFinished() {
+    public synchronized void storeFinished(Integer mark) {
+
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -1072,40 +1498,41 @@
             }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
-                if (crnProtocol.getTaskNo() == 9999) {
-                    // 鍫嗗灈鏈哄浣�
-                    crnThread.setResetFlag(true);
-                } else {
-                    // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
-                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
-                    if (wrkMast == null) {
-                        log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
-                        continue;
-                    }
-                    // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
-                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
-                        wrkMast.setWrkSts(4L);
-                    } else {
-                        continue;
-                    }
-                    Date now = new Date();
-                    wrkMast.setCrnEndTime(now);
-                    wrkMast.setModiTime(now);
-                    // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        // 鍫嗗灈鏈哄浣�
-                        crnThread.setResetFlag(true);
-                    }
-                }
+                News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
 
+                // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+                WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
+                if (wrkMast == null) {
+                    News.error("" + mark + " - 1" + " - 鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+                    continue;
+                }
+                // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
+                if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+                    wrkMast.setWrkSts(4L);
+                } else {
+                    continue;
+                }
+                Date now = new Date();
+                wrkMast.setCrnEndTime(now);
+                wrkMast.setModiTime(now);
+                // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                if (wrkMastMapper.updateById(wrkMast) > 0) {
+                    // 鍫嗗灈鏈哄浣�
+                    log.error(wrkMast.getWrkNo() + "浠诲姟淇敼鐘舵��4鎴愬姛锛屽浣嶅爢鍨涙満={}", crnThread.getCrnProtocol().getCrnNo());
+                    News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo());
+                    crnThread.setResetFlag(true);
+                }
             }
+
+
         }
+//        News.infoNoLog(""+mark+" - 0"+" - 瀵瑰伐浣滄。鐨勫畬鎴愭搷浣滄墽琛屽畬鎴�");
     }
 
     /**
      * 鍫嗗灈鏈哄紓甯镐俊鎭褰�
      */
-    public synchronized void recCrnErr() {
+    public synchronized void recCrnErr(Integer mark) {
         Date now = new Date();
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
@@ -1118,9 +1545,11 @@
 //            if (crnProtocol.getModeType() != CrnModeType.STOP) {
                 // 鏈変换鍔�
                 if (crnProtocol.getTaskNo() != 0) {
+
                     BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
                     // 鏈夊紓甯�
                     if (latest == null) {
+                        News.warnNoLog("" + mark + " - 1" + " - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏈変换鍔★紝鏈夊紓甯�");
                         if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
                             WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo());
                             if (wrkMast == null) {
@@ -1152,7 +1581,7 @@
                                     "浠诲姟涓紓甯�"    // 澶囨敞
                             );
                             if (!basErrLogService.insert(basErrLog)) {
-                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+                                News.error("" + mark + " - 2" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                             }
                         }
                     } else {
@@ -1162,7 +1591,7 @@
                             latest.setUpdateTime(now);
                             latest.setStatus(2);
                             if (!basErrLogService.updateById(latest)) {
-                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+                                News.error("" + mark + " - 3" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
                             }
                         }
                     }
@@ -1171,6 +1600,7 @@
                     BasErrLog latest = basErrLogService.findLatest(crn.getId());
                     // 鏈夊紓甯�
                     if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
+                        News.warnNoLog("" + mark + " - 4" + " - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏃犱换鍔★紝鏈夊紓甯�");
                         // 璁板綍鏂板紓甯�
                         if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
                             BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
@@ -1199,7 +1629,7 @@
                                     "鏃犱换鍔″紓甯�"    // 澶囨敞
                             );
                             if (!basErrLogService.insert(basErrLog)) {
-                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+                                News.error("" + mark + " - 5" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                             }
                         }
                         // 鏃犲紓甯�
@@ -1210,7 +1640,7 @@
                             latest.setUpdateTime(now);
                             latest.setStatus(2);
                             if (!basErrLogService.updateById(latest)) {
-                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+                                News.error("" + mark + " - 6" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
                             }
                         }
                     }
@@ -1218,6 +1648,7 @@
             }
 
         }
+//        News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄紓甯镐俊鎭褰曟墽琛屽畬鎴�");
     }
 
 
@@ -1226,7 +1657,8 @@
     /**
      * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
      */
-    public synchronized void storeEmptyPlt() {
+    public synchronized void storeEmptyPlt(Integer mark) {
+
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻绌烘澘鍏ュ簱鍙�
             for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
@@ -1240,8 +1672,12 @@
                 }
 
                 LedThread ledThread = null;
-                if (!Cools.isEmpty(emptyInSta.getLed()))  {
+                if (!Cools.isEmpty(emptyInSta.getLed())) {
                     ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, emptyInSta.getLed());
+                }
+
+                if (!staProtocol.isLoading()) {
+                    continue;
                 }
 
                 // 绔欑偣鏉′欢鍒ゆ柇
@@ -1249,8 +1685,10 @@
                         && staProtocol.isLoading()
                         && staProtocol.isInEnable()
                         && staProtocol.isEmptyMk()
-                        && (staProtocol.getWorkNo() > 9990 && staProtocol.getWorkNo() <= 9999)
-                        && staProtocol.isPakMk()) {
+                        && staProtocol.isPakMk()
+                        && (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() > 9700)
+                ) {
+                    News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛岋細绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�");
 
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
@@ -1271,10 +1709,12 @@
 
                             // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
                             staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-                            staProtocol.setStaNo(dto.getStaNo().shortValue());
+                            staProtocol.setStaNo(staProtocol.getSiteId().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            log.error("杈撻�佺嚎涓嬪彂6锛�" + dto.getWorkNo() + "," + staProtocol.getSiteId());
                             if (!result) {
+                                News.errorNoLog("" + mark + " - 1" + " - 鏇存柊plc绔欑偣淇℃伅澶辫触");
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
 
@@ -1289,41 +1729,46 @@
                                 ledCommand.setLocNo(dto.getLocNo());
                                 ledCommand.setStaNo(dto.getStaNo());
                                 commands.add(ledCommand);
-                                MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, commands));
+                                MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(1, commands));
 //                                ledThread.errorReset();
                             }
                         } else {
-                            staProtocol.setWorkNo((short)9999);
-                            staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
-                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                            if (!result) {
-                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-                            }
-
+//                            staProtocol.setWorkNo(wrkNo++);
+//                            staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
+//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                            if (!result) {
+//                                News.errorNoLog(""+mark+" - 2"+" - 鏇存柊plc绔欑偣淇℃伅澶辫触");
+//                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+//                            }
+//
                             if (ledThread != null) {
                                 String errorMsg = jsonObject.getString("msg");
                                 if (!Cools.isEmpty(errorMsg)) {
-                                    MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(5, errorMsg));
+                                    MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errorMsg));
                                 }
                             }
-                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+//                            News.error(""+mark+" - 3"+" - 璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                         }
                     } catch (Exception e) {
                         e.printStackTrace();
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                     }
 
+                } else {
+                    News.errorNoLog("" + mark + " - 4" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isAutoing() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable()
+                            + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk() + "銆佸伐浣滃彿锛�" + staProtocol.getWorkNo()
+                            + "銆侀攣瀹氭爣璁�" + staProtocol.isPakMk());
                 }
-
             }
         }
+//        News.infoNoLog(""+mark+" - 0"+" - 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐ф墽琛屽畬鎴�");
     }
 
     /**
      * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
      */
-    public synchronized void ledExecute() {
+    public synchronized void ledExecute(Integer mark) {
         for (LedSlave led : slaveProperties.getLed()) {
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -1331,63 +1776,161 @@
             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()) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
+            List<Integer> staArr = new ArrayList<>();
+            // 鑾峰彇鍙夎溅绔欑偣
+            StaProtocol modelStaProtocol = devpThread.getStation().get(led.getModelSta());
+            if (null != modelStaProtocol && modelStaProtocol.isIn()) {
+                for (Integer staNo : led.getInStaArr()) {
+                    // 鑾峰彇鍙夎溅绔欑偣
+                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                    if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
+                        continue;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+                    // 鑾峰彇宸ヤ綔妗f暟鎹�
+                    WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
+                    if (null == wrkMast) {
+                        continue;
+                    }
+                    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;
+                        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("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
+                            break;
+                    }
+                    ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
+                    ledCommand.setStaNo(wrkMast.getStaNo());
+                    ledCommand.setBarcode(wrkMast.getBarcode());
+                    if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
+                        List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+
+                        wrkDetls.forEach(wrkDetl -> {
+                            Double total = 0.0;
+                            EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
+                            LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
+                            if (Cools.isEmpty(locDetl)) {
+                                total = wrkDetl.getAnfme();
+                            } else {
+                                total = locDetl.getAnfme();
+                            }
+                            if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
+                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getAnfme(), wrkDetl.getUnit()));
+                            }
+                            if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
+                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getAnfme(), wrkDetl.getUnit()));
+                            }
+                            if (wrkMast.getIoType() == 107) {
+                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getAnfme(), wrkDetl.getUnit()));
+                            }
+                        });
+                    }
+                    commands.add(ledCommand);
                 }
-                // 鑾峰彇宸ヤ綔妗f暟鎹�
-                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-//                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
-                if (null == wrkMast) {
-                    continue;
+            } else if (null != modelStaProtocol && modelStaProtocol.isOut()) {
+                for (Integer staNo : led.getOutStaArr()) {
+                    // 鑾峰彇鍙夎溅绔欑偣
+                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                    if (null == staProtocol || null == staProtocol.getFinishWorkNo() || 0 == staProtocol.getFinishWorkNo() || !staProtocol.isLoading()) {
+                        continue;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+                    // 鑾峰彇宸ヤ綔妗f暟鎹�
+                    WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
+                    if (null == wrkMast) {
+                        continue;
+                    }
+                    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;
+                        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("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
+                            break;
+                    }
+                    ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
+                    ledCommand.setStaNo(wrkMast.getStaNo());
+                    ledCommand.setBarcode(wrkMast.getBarcode());
+                    if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
+                        List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+
+                        wrkDetls.forEach(wrkDetl -> {
+                            Double total = 0.0;
+                            EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
+                            LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
+                            if (Cools.isEmpty(locDetl)) {
+                                total = wrkDetl.getAnfme();
+                            } else {
+                                total = locDetl.getAnfme();
+                            }
+                            if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
+                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getAnfme(), wrkDetl.getUnit()));
+                            }
+                            if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
+                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getAnfme(), wrkDetl.getUnit()));
+                            }
+                            if (wrkMast.getIoType() == 107) {
+                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getAnfme(), wrkDetl.getUnit()));
+                            }
+                        });
+                    }
+                    commands.add(ledCommand);
                 }
-                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;
-                    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:
-                        log.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", 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());
@@ -1397,22 +1940,10 @@
             }
             // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
             if (!commands.isEmpty()) {
-                if (led.getId() == 7) {
-                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
-                        log.error("{}鍙稬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))) {
-                        log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                        continue;
-                    } else {
-                        ledThread.setLedMk(false);
-                    }
+                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
+                    News.error("{}鍙稬ED鏄剧ず鍐呭鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    continue;
                 }
-
             }
 
             try {
@@ -1443,28 +1974,47 @@
         for (LedSlave led : slaveProperties.getLed()) {
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+            List<Integer> staArr = new ArrayList<>();
             // 鍛戒护闆嗗悎
             boolean reset = true;
-            for (Integer staNo : led.getStaArr()) {
-                // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (staProtocol == null) {
-                    continue;
+            StaProtocol modelStaProtocol = devpThread.getStation().get(led.getModelSta());
+            if (null != modelStaProtocol && modelStaProtocol.isIn()) {
+                staArr = led.getInStaArr();
+                for (Integer staNo : staArr) {
+                    // 鑾峰彇鍙夎溅绔欑偣
+                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                    if (staProtocol == null) {
+                        continue;
+                    }
+                    if (staProtocol.getWorkNo() != 0 || staProtocol.isErr()) {
+                        reset = false;
+                        break;
+                    }
                 }
-                if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
-                    reset = false;
-                    break;
+            } else if (null != modelStaProtocol && modelStaProtocol.isOut()) {
+                staArr = led.getOutStaArr();
+                for (Integer staNo : staArr) {
+                    // 鑾峰彇鍙夎溅绔欑偣
+                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                    if (staProtocol == null) {
+                        continue;
+                    }
+                    if (staProtocol.isLoading() || staProtocol.isErr()) {
+                        reset = false;
+                        break;
+                    }
                 }
             }
+
             // 鑾峰彇led绾跨▼
             LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
             // led鏄剧ず榛樿鍐呭
-            if (reset && !ledThread.isLedMk()) {
-                ledThread.setLedMk(true);
-                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
-                    log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                } else {
-
+            if (reset) {
+                if (ledThread == null) {
+                    continue;
+                }
+                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
+                    News.error("{}鍙稬ED鏄剧ず榛樿鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
                 }
             }
         }
@@ -1550,8 +2100,10 @@
      * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)
      * tip锛氬悓姝�
      */
-    private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc) {
+    private synchronized boolean moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc, Integer mark) {
+
         try {
+            News.warnNoLog("" + mark + "moveLocForDeepLoc" + " - 0" + " - 寮�濮嬫墽琛�:鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)");
             List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
             LocMast loc = null;
             for (Integer row : rows) {
@@ -1593,75 +2145,83 @@
             }
 
             if (null == loc) {
-                log.error("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-            }
-
-            // 鑾峰彇宸ヤ綔鍙�
-            int workNo = commonService.getWorkNo(0);
-            // 淇濆瓨宸ヤ綔妗�
-            WrkMast wrkMast = new WrkMast();
-            wrkMast.setWrkNo(workNo);
-            wrkMast.setIoTime(new Date());
-            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
-            wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
-            wrkMast.setIoPri(13D);
-            wrkMast.setCrnNo(crn.getId());
-            wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
-            wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
-            wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
-            wrkMast.setPicking("N"); // 鎷f枡
-            wrkMast.setExitMk("N"); // 閫�鍑�
-            wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
-            wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
-            wrkMast.setLinkMis("N");
-            wrkMast.setAppeTime(new Date());
-            wrkMast.setModiTime(new Date());
-            int res = wrkMastMapper.insert(wrkMast);
-            if (res == 0) {
-                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-            }
-            // 宸ヤ綔妗f槑缁嗕繚瀛�
-            if (shallowLoc.getLocSts().equals("F")) {
-                List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
-                for (LocDetl locDetl : locDetls) {
-                    WrkDetl wrkDetl = new WrkDetl();
-                    wrkDetl.setWrkNo(workNo);
-                    wrkDetl.setIoTime(new Date());
-                    wrkDetl.setAnfme(locDetl.getAnfme());
-                    VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
-                    wrkDetl.setAppeTime(new Date());
-                    wrkDetl.setModiTime(new Date());
-                    if (!wrkDetlService.insert(wrkDetl)) {
-                        throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                News.error("" + mark + "moveLocForDeepLoc" + " - 1" + " - 鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+//                throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+                return false;
+            } else {
+                // 鑾峰彇宸ヤ綔鍙�
+                int workNo = commonService.getWorkNo(0);
+                // 淇濆瓨宸ヤ綔妗�
+                WrkMast wrkMast = new WrkMast();
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setIoTime(new Date());
+                wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
+                wrkMast.setIoPri(13D);
+                wrkMast.setCrnNo(crn.getId());
+                wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
+                wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
+                wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 婊℃澘锛歒
+                wrkMast.setPicking("N"); // 鎷f枡
+                wrkMast.setExitMk("N"); // 閫�鍑�
+                wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
+                wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
+                wrkMast.setLinkMis("N");
+                wrkMast.setAppeTime(new Date());
+                wrkMast.setModiTime(new Date());
+                int res = wrkMastMapper.insert(wrkMast);
+                if (res == 0) {
+                    News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 2" + " - 淇濆瓨宸ヤ綔妗eけ璐�");
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+                // 宸ヤ綔妗f槑缁嗕繚瀛�
+                if (shallowLoc.getLocSts().equals("F")) {
+                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
+                    for (LocDetl locDetl : locDetls) {
+                        WrkDetl wrkDetl = new WrkDetl();
+                        wrkDetl.setWrkNo(workNo);
+                        wrkDetl.setIoTime(new Date());
+                        wrkDetl.setAnfme(locDetl.getAnfme());
+                        VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
+                        wrkDetl.setAppeTime(new Date());
+                        wrkDetl.setModiTime(new Date());
+                        if (!wrkDetlService.insert(wrkDetl)) {
+                            News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 3" + " - 淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                            throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                        }
                     }
                 }
-            }
-            // 淇敼婧愬簱浣嶇姸鎬�
-            if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
-                shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
-                shallowLoc.setModiTime(new Date());
-                if (!locMastService.updateById(shallowLoc)) {
-                    throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+                // 淇敼婧愬簱浣嶇姸鎬�
+                if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+                    shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+                    shallowLoc.setModiTime(new Date());
+                    if (!locMastService.updateById(shallowLoc)) {
+                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 4" + " - 鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+                        throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+                    }
+                } else {
+                    News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 5" + " - 婧愬簱浣嶅嚭搴撳け璐�");
+                    throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
                 }
-            } else {
-                throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
-            }
-            // 淇敼鐩爣搴撲綅鐘舵��
-            if (loc.getLocSts().equals("O")) {
-                loc.setLocSts("S"); // S.鍏ュ簱棰勭害
-                loc.setModiTime(new Date());
-                if (!locMastService.updateById(loc)) {
-                    throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+                // 淇敼鐩爣搴撲綅鐘舵��
+                if (loc.getLocSts().equals("O")) {
+                    loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+                    loc.setModiTime(new Date());
+                    if (!locMastService.updateById(loc)) {
+                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 6" + " - 鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+                        throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+                    }
+                } else {
+                    News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 7" + " - 绉昏浆澶辫触");
+                    throw new CoolException("绉昏浆澶辫触");
                 }
-            } else {
-                throw new CoolException("绉昏浆澶辫触");
             }
+
         } catch (Exception e) {
-            log.error("鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
-            e.printStackTrace();
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            News.error("" + mark + "moveLocForDeepLoc" + " - 8" + " - 鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
+            return false;
         }
+        return true;
     }
 
     /**
@@ -1759,7 +2319,7 @@
                 }
             }
         } catch (Exception e) {
-            log.error("鍫嗗灈鏈烘紨绀�  ===>> 搴撲綅绉昏浆澶辫触", e);
+            News.error("鍫嗗灈鏈烘紨绀�  ===>> 搴撲綅绉昏浆澶辫触", e);
             e.printStackTrace();
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
@@ -1786,27 +2346,27 @@
                 }
                 // 鍏ュ簱
                 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) {
-                    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姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
                     wrkMast.setWrkSts(12L);
                     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());
                 }
 
 
@@ -1878,94 +2438,105 @@
 
     }
 
-    public synchronized void outOfDevp() {
+    public synchronized void outOfDevp(Integer mark) {
+
         List<WrkMast> wrkMasts = wrkMastMapper.selectPick();
+        if (wrkMasts.size() != 0) {
+            News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛宱utOfDevp");
+        }
         for (WrkMast wrkMast : wrkMasts) {
             if (basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo())) == 0) {
                 wrkMast.setCtnNo("Y");
                 if (wrkMastMapper.updateById(wrkMast) == 0) {
-                    log.error("淇敼{}宸ヤ綔妗eけ璐ワ紝ctn_no", wrkMast.getWrkNo());
+                    News.error("" + mark + " - 1" + " - 淇敼{}宸ヤ綔妗eけ璐ワ紝ctn_no", wrkMast.getWrkNo());
                 }
             }
-
         }
+//        News.infoNoLog(""+mark+" - 0"+" - outOfDevp鎵ц瀹屾垚");
     }
 
 
     public synchronized void autoEmptyOut() {
-        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-        Integer autoOutSite = 12;
-        //濡傛灉绔欑偣鍙嚭绂佺敤锛屽垯涓嶇敓鎴愮┖鐩樺嚭搴撲换鍔�
-        StaProtocol staProtocol = devpThread.getStation().get(autoOutSite);
-        if (staProtocol == null) {
-            return;
-        } else {
-            staProtocol = staProtocol.clone();
-        }
-        if (staProtocol.isAutoing()  //鑷姩
-                && !staProtocol.isLoading()  //鏃犵墿
-                && staProtocol.isOutEnable()  //鍙嚭淇″彿
-                && staProtocol.getWorkNo() == 0
-        ) {
-            WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(autoOutSite);
-            if (null != pakoutEmpty) {
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        List<Integer> list = new ArrayList<>();
+        list.add(101);
+        list.add(112);
+        Map<Integer, Integer> map = new HashMap<>();
+        map.put(101, 102);
+        map.put(112, 111);
+        for (Integer site : list) {
+            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("sta_no", map.get(site)));
+            if (!Cools.isEmpty(wrkMast)) {
+                continue;
+            }
+            //濡傛灉绔欑偣鍙嚭绂佺敤锛屽垯涓嶇敓鎴愮┖鐩樺嚭搴撲换鍔�
+            StaProtocol staProtocol = devpThread.getStation().get(site);
+            if (staProtocol == null) {
                 return;
+            } else {
+                staProtocol = staProtocol.clone();
             }
-            try {
-                String response = new HttpHandler.Builder()
-                        .setUri(wmsUrl)
-                        .setPath("/rpc/auto/emptyOut/v1")
-                        .build()
-                        .doPost();
-                JSONObject jsonObject = JSON.parseObject(response);
-                if (jsonObject.getInteger("code").equals(200)) {
-                    JSONObject data = (JSONObject) jsonObject.get("data");
-                    log.info((String) data.get("msg"));
-                } else {
-                    log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyOut/v1","", response);
+            if (staProtocol.isAutoing()  //鑷姩
+                    && !staProtocol.isLoading()  //鏃犵墿
+                    && staProtocol.isOutEnable()  //鍙嚭淇″彿
+                    && staProtocol.getWorkNo() == 0
+            ) {
+                WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(site);
+                if (null != pakoutEmpty) {
+                    return;
                 }
-            } catch (Exception e) {
-                e.printStackTrace();
-                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                Short loctype1 = 1;
+                if (site == 101) {
+                    loctype1 = 2;
+                }
+                LocTypeDto locTypeDto = new LocTypeDto(loctype1, (short) 1, (short) 1);
+                locTypeDto.setSiteId(site);
+                try {
+                    String response = new HttpHandler.Builder()
+                            .setUri(wmsUrl)
+                            .setPath("/rpc/auto/emptyOut/v1")
+                            .setJson(JSON.toJSONString(locTypeDto))
+                            .build()
+                            .doPost();
+                    JSONObject jsonObject = JSON.parseObject(response);
+                    if (jsonObject.getInteger("code").equals(200)) {
+                        String data = jsonObject.get("data").toString();
+                        News.info((String) jsonObject.get("msg") + "," + data);
+                    } else {
+                        News.warnNoLog("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyOut/v1", "", response);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                }
             }
         }
+
     }
 
-    public synchronized void autoEmptyIn() {
-        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-        Integer autoInSite = 12;
-        StaProtocol staProtocol = devpThread.getStation().get(autoInSite);
-        if (staProtocol == null) {
-            return;
-        } else {
-            staProtocol = staProtocol.clone();
-        }
-        if (staProtocol.isAutoing()  //鑷姩
-                && staProtocol.isLoading()  //鏈夌墿
-                && staProtocol.isInEnable()  //鍙叆淇″彿
-                && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) //宸ヤ綔鍙蜂负0鎴栬�呭伐浣滃彿鏄�9991~9999锛堣緭閫佹満鐣欑敤锛�
-        ) {
-
-            try {
-                LocTypeDto locTypeDto = new LocTypeDto((short) 1, (short) 1, (short) 1);
-
-
-                String response = new HttpHandler.Builder()
-                        .setUri(wmsUrl)
-                        .setPath("/rpc/auto/emptyIn/v1")
-                        .setJson(JSON.toJSONString(locTypeDto))
-                        .build()
-                        .doPost();
-                JSONObject jsonObject = JSON.parseObject(response);
-                if (jsonObject.getInteger("code").equals(200)) {
-                    log.info((String) jsonObject.get("msg"));
-                } else {
-                    log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyIn/v1", JSON.toJSONString(locTypeDto), response);
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+    public boolean sendACameraRequest(Integer taskNo) {
+        try {
+            WrkMast wrkMast = wrkMastService.selectByWrkNo(taskNo);
+            if (null == wrkMast) {
+                return false;
             }
+
+            String response = new HttpHandler.Builder()
+                    .setUri(cameraUrl)
+                    .setPath("/execute")
+                    .build()
+                    .doGet();
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(200)) {
+                wrkMast.setLogErrMemo(jsonObject.getInteger("data").toString());
+                wrkMastService.updateById(wrkMast);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
         }
+
+        return true;
     }
+
 }

--
Gitblit v1.9.1