From a6758aa0c0ac75a5ea3f46fb214d62d8f07a6ad4 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 23 二月 2024 12:45:09 +0800
Subject: [PATCH] #显示器更新

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 2650 +++++++++++++++++++++++++++++++---------------------------
 1 files changed, 1,425 insertions(+), 1,225 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 62ba267..de5d0c9 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
+import com.core.common.SpringUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
@@ -103,13 +104,15 @@
     @Autowired
     private RedisUtil redisUtil;
     @Autowired
-    private WrkMastLocMapper wrkMastLocMapper;
+    private WrkMastLogMapper wrkMastLogMapper;
     @Autowired
     private BasLiftOptService basLiftOptService;
     @Autowired
     private ConfigService configService;
     @Autowired
     private NavigateMapUtils navigateMapUtils;
+    @Autowired
+    private WrkDetlLogService wrkDetlLogService;
 
 
     /**
@@ -236,7 +239,7 @@
                         param.setLocType1(locTypeDto.getLocType1());
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
-                                .setPath("/rpc/pakin/loc/v1")
+                                .setPath("/rpc/pakin/loc/v2")
                                 .setJson(JSON.toJSONString(param))
                                 .build()
                                 .doPost();
@@ -275,7 +278,7 @@
                                     ledThread.setLedMk(false);
                                 }
                             }
-                            News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                            News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
                         } else if (code == 700) {
 //                            staProtocol.setWorkNo((short) 32002);
 //                            staProtocol.setRollback102(1);//102绔欏洖閫�淇″彿
@@ -402,111 +405,128 @@
      */
     @Transactional
     public synchronized void stnToCrnStnPick(){
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻鎷f枡鍏ュ簱鍙�
-            for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
-                if (pickSta.getStaNo() == 325 || pickSta.getStaNo() == 331 || pickSta.getStaNo() == 333 || pickSta.getStaNo() == 339) {
-                    continue;
-                }
-
-                // 鑾峰彇鎷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()
+        try {
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 閬嶅巻鎷f枡鍏ュ簱鍙�
+                for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
+                    // 鑾峰彇鎷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.getWorkNo() > 0)
-                        && staProtocol.isPakMk()){
+                            && staProtocol.isPakMk()) {
 
-                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
-                    if (barcodeThread == null) {
-                        continue;
-                    }
-                    String barcode = barcodeThread.getBarcode();
-                    if(Cools.isEmpty(barcode)) {
-                        continue;
-                    }
-                    if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
-                        continue;
-                    }
-
-                    WrkMast wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode);
-                    if (wrkMast == null) {//鎵句笉鍒板伐浣滄。
-                        continue;
-                    }
-
-                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104)
-                            || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) {
-                        continue;
-                    }
-
-                    //*********************鍚屽簱浣嶇粍鏍¢獙*********************
-                    boolean flag = false;
-                    String th = "";
-                    List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo());
-                    for (String loc : innerLoc) {
-                        LocMast locMast = locMastService.selectById(loc);
-                        if (locMast == null) {
+                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
+                        if (barcodeThread == null) {
+                            continue;
+                        }
+                        String barcode = barcodeThread.getBarcode();
+                        if (Cools.isEmpty(barcode)) {
+                            continue;
+                        }
+                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
                             continue;
                         }
 
-                        if (!locMast.getLocSts().equals("F")) {
-                            flag = true;
-                            th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�";
-                            break;
+                        WrkMast wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode);
+                        if (wrkMast == null) {//鎵句笉鍒板伐浣滄。
+                            continue;
+                        }
+
+                        if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104)
+                                || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+                            continue;
+                        }
+
+//                        //*********************鍚屽簱浣嶇粍鏍¢獙*********************
+//                        boolean flag = false;
+//                        String th = "";
+//                        List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo());
+//                        for (String loc : innerLoc) {
+//                            LocMast locMast = locMastService.selectById(loc);
+//                            if (locMast == null) {
+//                                continue;
+//                            }
+//
+//                            if (!locMast.getLocSts().equals("F")) {
+//                                flag = true;
+//                                th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�";
+//                                break;
+//                            }
+//                        }
+//                        if (flag) {
+//                            News.info(th);
+//                            continue;
+//                        }
+//                        //*********************鍚屽簱浣嶇粍鏍¢獙*********************
+
+//                        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+//                        if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
+//                            News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+//                            continue;
+//                        }
+
+                        try {
+                            LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣�
+                            SearchLocParam param = new SearchLocParam();
+                            param.setWrkNo(wrkMast.getWrkNo());
+                            param.setBarcode(wrkMast.getBarcode());
+                            param.setIoType(wrkMast.getIoType());
+                            param.setSourceStaNo(pickSta.getStaNo());
+                            param.setLiftNo(pickSta.getLiftNo());
+                            param.setLocType1(locMast.getLocType1());
+                            String response = new HttpHandler.Builder()
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/pakin/loc/v2")
+                                    .setJson(JSON.toJSONString(param))
+                                    .build()
+                                    .doPost();
+                            JSONObject jsonObject = JSON.parseObject(response);
+                            Integer code = jsonObject.getInteger("code");
+                            if (code.equals(200)) {
+                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+
+//                                //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯
+//                                LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo()));
+//                                if (liftStaProtocol == null) {
+//                                    News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触");
+//                                    continue;
+//                                }
+//
+//                                // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+//                                wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54
+//                                wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+//                                wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯
+//                                wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔�
+//                                wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅
+//                                wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
+//                                wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌�
+//                                wrkMast.setModiTime(new Date());
+//                                if (wrkMastMapper.updateById(wrkMast) == 0) {
+//                                    News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+//                                    continue;
+//                                }
+                            } else if (code == 500) {
+                                News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
+                            }
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         }
                     }
-                    if (flag) {
-                        News.info(th);
-                        continue;
-                    }
-                    //*********************鍚屽簱浣嶇粍鏍¢獙*********************
-
-                    // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-                    if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
-                        News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-                        continue;
-                    }
-
-                    String sourceLocNo = wrkMast.getSourceLocNo().trim();
-                    LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(sourceLocNo));//鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯
-                    if (liftStaProtocol == null) {
-                        continue;
-                    }
-
-                    // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
-                    wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
-                    wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-                    wrkMast.setSourceStaNo(pickSta.getBackSta()); // 婧愮珯
-//                            wrkMast.setStaNo(dto.getStaNo()); // 鐩爣绔�
-//                            wrkMast.setCrnNo(dto.getCrnNo());
-                    wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔�
-                    wrkMast.setLocNo(sourceLocNo); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
-                    wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
-                    wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌�
-                    wrkMast.setModiTime(new Date());
-                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-                        continue;
-                    }
-
-                    // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
-                    LocMast locMast = locMastService.selectById(sourceLocNo);
-                    locMast.setLocSts("Q");
-                    locMast.setModiTime(new Date());
-                    if (!locMastService.updateById(locMast)) {
-                        News.info("淇敼搴撲綅鐘舵�佸け璐�");
-                        continue;
-                    }
                 }
-            }
 
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -515,101 +535,41 @@
      */
     @Transactional
     public synchronized void stnToCrnStnPick2(){
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻鎷f枡鍏ュ簱鍙�
-            for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
-                if (!(pickSta.getStaNo() == 325 || pickSta.getStaNo() == 331 || pickSta.getStaNo() == 333 || pickSta.getStaNo() == 339)) {
-                    continue;
-                }
-
-                // 鑾峰彇鎷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.getWorkNo() > 0)
-                        && staProtocol.isPakMk()){
-
-                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
-                    if (wrkMast == null) {//鎵句笉鍒板伐浣滄。
+        try {
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 閬嶅巻鎷f枡鍏ュ簱鍙�
+                for (DevpSlave.Sta pickSta : devp.getPickInSta2()) {
+                    // 鑾峰彇鎷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.getWorkNo() > 0)
+                            && staProtocol.isPakMk()) {
 
-                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104)
-                            || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) {
-                        continue;
-                    }
-
-                    //*********************鍚屽簱浣嶇粍鏍¢獙*********************
-                    boolean flag = false;
-                    String th = "";
-                    List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo());
-                    for (String loc : innerLoc) {
-                        LocMast locMast = locMastService.selectById(loc);
-                        if (locMast == null) {
+                        WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
+                        if (wrkMast == null) {
                             continue;
                         }
-
-                        if (!locMast.getLocSts().equals("F")) {
-                            flag = true;
-                            th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�";
-                            break;
+                        if (wrkMast.getSteNo() == null) {
+                            wrkMast.setSteNo(1);
+                            wrkMastMapper.updateById(wrkMast);
+                            staProtocol.setStaNo((short) 341);//鍐欏叆鐩爣绔�
+                            staProtocol.setPakMk(false);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                         }
                     }
-                    if (flag) {
-                        News.info(th);
-                        continue;
-                    }
-                    //*********************鍚屽簱浣嶇粍鏍¢獙*********************
-
-                    // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-                    if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
-                        News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-                        continue;
-                    }
-
-                    String sourceLocNo = wrkMast.getSourceLocNo().trim();
-                    LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(sourceLocNo));//鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯
-                    if (liftStaProtocol == null) {
-                        continue;
-                    }
-
-                    // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
-                    wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
-                    wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-                    wrkMast.setSourceStaNo(pickSta.getBackSta()); // 婧愮珯
-//                            wrkMast.setStaNo(dto.getStaNo()); // 鐩爣绔�
-//                            wrkMast.setCrnNo(dto.getCrnNo());
-                    wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔�
-                    wrkMast.setLocNo(sourceLocNo); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
-                    wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
-                    wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌�
-                    wrkMast.setModiTime(new Date());
-                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-                        continue;
-                    }
-
-                    // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
-                    LocMast locMast = locMastService.selectById(sourceLocNo);
-                    locMast.setLocSts("Q");
-                    locMast.setModiTime(new Date());
-                    if (!locMastService.updateById(locMast)) {
-                        News.info("淇敼搴撲綅鐘舵�佸け璐�");
-                        continue;
-                    }
-
-                    staProtocol.setStaNo(pickSta.getBackSta().shortValue());//鍐欏叆鐩爣绔�
-                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                 }
-            }
 
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -618,129 +578,110 @@
      */
     @Transactional
     public synchronized void stnToCrnStnPlate(){
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻鎷f枡鍏ュ簱鍙�
-            for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
-//                if (pickSta.getStaNo() == 325 || pickSta.getStaNo() == 331 || pickSta.getStaNo() == 333 || pickSta.getStaNo() == 339) {
-//                    continue;
-//                }
-
-                // 鑾峰彇鎷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.getWorkNo() > 0)
-                        && staProtocol.isPakMk()){
-
-                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
-                    if (barcodeThread == null) {
+        try {
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 閬嶅巻鎷f枡鍏ュ簱鍙�
+                for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
+                    // 鑾峰彇鎷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();
                     }
-                    String barcode = barcodeThread.getBarcode();
-                    if(Cools.isEmpty(barcode)) {
-                        continue;
-                    }
-                    if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
-                        continue;
-                    }
+                    if (staProtocol.isAutoing()
+                            && staProtocol.isLoading()
+                            && staProtocol.isInEnable()
+//                            && (staProtocol.getWorkNo() > 0)
+                            && staProtocol.isPakMk()) {
 
-                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
-                    if (wrkMast == null) {//鎵句笉鍒板伐浣滄。
-                        continue;
-                    }
-
-                    if ((wrkMast.getIoType() != 107)
-                            || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) {
-                        continue;
-                    }
-
-                    //*********************鍚屽簱浣嶇粍鏍¢獙*********************
-                    boolean flag = false;
-                    String th = "";
-                    List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo());
-                    for (String loc : innerLoc) {
-                        LocMast locMast = locMastService.selectById(loc);
-                        if (locMast == null) {
+                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
+                        if (barcodeThread == null) {
+                            continue;
+                        }
+                        String barcode = barcodeThread.getBarcode();
+                        if (Cools.isEmpty(barcode)) {
+                            continue;
+                        }
+                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
+                            continue;
+                        }
+                        WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode);
+                        if (wrkMast == null) {//鎵句笉鍒板伐浣滄。
                             continue;
                         }
 
-                        if (!locMast.getLocSts().equals("F")) {
-                            flag = true;
-                            th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�";
-                            break;
+                        if ((wrkMast.getIoType() != 107)
+                                || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+                            continue;
                         }
-                    }
-                    if (flag) {
-                        News.info(th);
-                        continue;
-                    }
-                    //*********************鍚屽簱浣嶇粍鏍¢獙*********************
 
-                    // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-                    if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
-                        News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-                        continue;
-                    }
+//                        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+//                        if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
+//                            News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+//                            continue;
+//                        }
 
-                    //鐩樼偣鎵炬柊搴撲綅
-                    try {
-                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣�
-                        SearchLocParam param = new SearchLocParam();
-                        param.setWrkNo(wrkMast.getWrkNo());
-                        param.setBarcode(barcode);
-                        param.setIoType(107);//鐩樼偣
-                        param.setSourceStaNo(wrkMast.getStaNo());
-                        param.setLocType1(locMast.getLocType1());
-                        String response = new HttpHandler.Builder()
-                                .setUri(wmsUrl)
-                                .setPath("/rpc/pakin/loc/v1")
-                                .setJson(JSON.toJSONString(param))
-                                .build()
-                                .doPost();
-                        JSONObject jsonObject = JSON.parseObject(response);
-                        Integer code = jsonObject.getInteger("code");
-                        if (code.equals(200)) {
-                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+                        //鐩樼偣鎵炬柊搴撲綅
+                        try {
+                            LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣�
+                            SearchLocParam param = new SearchLocParam();
+                            param.setWrkNo(wrkMast.getWrkNo());
+                            param.setBarcode(wrkMast.getBarcode());
+                            param.setIoType(107);//鐩樼偣
+                            param.setSourceStaNo(pickSta.getStaNo());
+                            param.setLiftNo(pickSta.getLiftNo());
+                            param.setLocType1(locMast.getLocType1());
+                            String response = new HttpHandler.Builder()
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/pakin/loc/v2")
+                                    .setJson(JSON.toJSONString(param))
+                                    .build()
+                                    .doPost();
+                            JSONObject jsonObject = JSON.parseObject(response);
+                            Integer code = jsonObject.getInteger("code");
+                            if (code.equals(200)) {
+                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
 
-                            //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯
-                            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo()));
-                            if (liftStaProtocol == null) {
-                                News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触");
-                                continue;
+//                                //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯
+//                                LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo()));
+//                                if (liftStaProtocol == null) {
+//                                    News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触");
+//                                    continue;
+//                                }
+//
+//                                // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+//                                wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 107->57
+//                                wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+//                                wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯
+//                                wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔�
+//                                wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅
+//                                wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
+//                                wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌�
+//                                wrkMast.setModiTime(new Date());
+//                                if (wrkMastMapper.updateById(wrkMast) == 0) {
+//                                    News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+//                                    continue;
+//                                }
+
+//                                staProtocol.setStaNo(dto.getSourceStaNo().shortValue());//鍐欏叆鐩爣绔�
+//                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+
+                            } else if (code == 500) {
+                                News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
                             }
-
-                            // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
-                            wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 107->57
-                            wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-                            wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯
-                            wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔�
-                            wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅
-                            wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
-                            wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌�
-                            wrkMast.setModiTime(new Date());
-                            if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-                                continue;
-                            }
-
-                        } else if (code == 500){
-                            News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         }
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                    }
 
+                    }
                 }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -982,31 +923,35 @@
      * 鍒濆鍖栧疄鏃跺湴鍥�
      */
     public synchronized void initRealtimeBasMap() {
-        for (int i = 1; i <= 10; i++) {//鎬诲叡鍥涘眰妤�
-            Object data = redisUtil.get(RedisKeyType.MAP.key + i);
-            if (data == null) {//redis鍦板浘鏁版嵁涓虹┖锛屼粠鏁版嵁搴撲腑鑾峰彇
-                BasMap basMap = basMapService.selectLatestMap(i);
-                if (basMap == null) {
-                    //鏁版嵁搴撲腑涔熶笉瀛樺湪鍦板浘鏁版嵁锛屼粠鍦板浘鏂囦欢涓幏鍙�
-                    //杞藉叆鍦板浘
-                    NavigateMapData mapData = new NavigateMapData(i);
-                    List<List<MapNode>> lists = mapData.getJsonData(-1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
+        try {
+            for (int i = 1; i <= 10; i++) {//鎬诲叡鍥涘眰妤�
+                Object data = redisUtil.get(RedisKeyType.MAP.key + i);
+                if (data == null) {//redis鍦板浘鏁版嵁涓虹┖锛屼粠鏁版嵁搴撲腑鑾峰彇
+                    BasMap basMap = basMapService.selectLatestMap(i);
+                    if (basMap == null) {
+                        //鏁版嵁搴撲腑涔熶笉瀛樺湪鍦板浘鏁版嵁锛屼粠鍦板浘鏂囦欢涓幏鍙�
+                        //杞藉叆鍦板浘
+                        NavigateMapData mapData = new NavigateMapData(i);
+                        List<List<MapNode>> lists = mapData.getJsonData(-1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
 
-                    //瀛樺叆鏁版嵁搴�
-                    basMap = new BasMap();
-                    basMap.setData(JSON.toJSONString(lists));
-                    basMap.setCreateTime(new Date());
-                    basMap.setUpdateTime(new Date());
-                    basMap.setLev(i);
+                        //瀛樺叆鏁版嵁搴�
+                        basMap = new BasMap();
+                        basMap.setData(JSON.toJSONString(lists));
+                        basMap.setCreateTime(new Date());
+                        basMap.setUpdateTime(new Date());
+                        basMap.setLev(i);
 
-                    if (!basMapService.insert(basMap)) {
-                        log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
+                        if (!basMapService.insert(basMap)) {
+                            log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
+                        }
                     }
-                }
 
-                //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
-                redisUtil.set(RedisKeyType.MAP.key + i, JSON.toJSONString(basMap));
+                    //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
+                    redisUtil.set(RedisKeyType.MAP.key + i, JSON.toJSONString(basMap));
+                }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -1070,30 +1015,34 @@
      * 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
      */
     public synchronized void shuttleInExecute() {
-        List<WrkMast> wrkMasts = wrkMastMapper.selectInStep4();
-        for (WrkMast wrkMast : wrkMasts) {
-            //鑾峰彇婧愮珯
-            BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo());
-            if (sourceBasDevp == null) {
-                continue;//绔欑偣涓嶅瓨鍦�
-            }
+        try {
+            List<WrkMast> wrkMasts = wrkMastMapper.selectInStep4();
+            for (WrkMast wrkMast : wrkMasts) {
+                //鑾峰彇婧愮珯
+                BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo());
+                if (sourceBasDevp == null) {
+                    continue;//绔欑偣涓嶅瓨鍦�
+                }
 
-            //鑾峰彇鐩爣绔�
-            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(sourceBasDevp.getLiftNo(), Utils.getLev(wrkMast.getLocNo()));
-            if (liftStaProtocol == null) {
-                continue;//绔欑偣涓嶅瓨鍦�
-            }
+                //鑾峰彇鐩爣绔�
+                LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(sourceBasDevp.getLiftNo(), Utils.getLev(wrkMast.getLocNo()));
+                if (liftStaProtocol == null) {
+                    continue;//绔欑偣涓嶅瓨鍦�
+                }
 
-            // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢锛岃嚜鍔ㄣ�佺┖闂层�佹湁鐗�
-            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) {
-                News.info("{}浠诲姟锛岃緭閫佺珯鐐圭姸鎬佷笉婊¤冻鍏ュ簱銆傝緭閫佺珯鐐�:{}", wrkMast.getWrkNo(), JSON.toJSONString(liftStaProtocol));
-                continue;
-            }
+                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢锛岃嚜鍔ㄣ�佺┖闂层�佹湁鐗�
+                if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) {
+                    News.info("{}浠诲姟锛岃緭閫佺珯鐐圭姸鎬佷笉婊¤冻鍏ュ簱銆傝緭閫佺珯鐐�:{}", wrkMast.getWrkNo(), JSON.toJSONString(liftStaProtocol));
+                    continue;
+                }
 
-            boolean step1 = this.shuttleInExecuteStep1(wrkMast, liftStaProtocol);//灏忚溅鎼叆搴撲腑
-            if (!step1) {
-                continue;
+                boolean step1 = this.shuttleInExecuteStep1(wrkMast, liftStaProtocol);//灏忚溅鎼叆搴撲腑
+                if (!step1) {
+                    continue;
+                }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -1219,11 +1168,15 @@
      * 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
      */
     public synchronized void shuttleOutExecute() {
-        for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) {
-            boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
-            if (!step1) {
-                continue;
+        try {
+            for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) {
+                boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
+                if (!step1) {
+                    continue;
+                }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -1250,15 +1203,15 @@
                 return false;//鍑哄簱绔欑偣涓嶅瓨鍦�
             }
 
-            if (!basDevp.getAutoing().equals("Y")) {
-                News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鏄嚜鍔ㄧ姸鎬�",wrkMast.getWrkNo(),basDevp.getDevNo());
-                return false;//涓嶆槸鑷姩鐘舵��
-            }
-
-            if (!basDevp.getOutEnable().equals("Y")) {
-                News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), basDevp.getDevNo());
-                return false;//鍑哄簱绔欑偣涓嶅彲鍑�
-            }
+//            if (!basDevp.getAutoing().equals("Y")) {
+//                News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鏄嚜鍔ㄧ姸鎬�",wrkMast.getWrkNo(),basDevp.getDevNo());
+//                return false;//涓嶆槸鑷姩鐘舵��
+//            }
+//
+//            if (!basDevp.getOutEnable().equals("Y")) {
+//                News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), basDevp.getDevNo());
+//                return false;//鍑哄簱绔欑偣涓嶅彲鍑�
+//            }
 
             Integer liftNo = basDevp.getLiftNo();//鎼滅储鍑哄簱鎻愬崌鏈烘槸鍚﹀瓨鍦ㄥ叆搴撲换鍔★紝濡傚瓨鍦ㄧ姝㈠嚭搴�
             List<WrkMast> liftWrkMasts = wrkMastMapper.selectInWrkMastByLiftNo(liftNo);
@@ -1286,7 +1239,35 @@
                 return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹病鏈夋墭鐩�
             }
 
+            if (wrkMast.getStaNo() == 300) {
+                //鍑�300绔欙紝妫�娴�300绔欎换鍔℃暟閲�
+                List<WrkMast> wrkMasts = wrkMastMapper.select300Wrk();
+                if (wrkMasts.size() >= 20) {
+                    News.info("{}浠诲姟锛岃緭閫佺嚎浠诲姟杩囪浇{}", wrkMast.getWrkNo(), wrkMasts.size());
+                    return false;
+                }
+            }
+
             if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+                //寮哄埗棰勭暀涓�鍙板皬杞︾粰鍏ュ簱浠诲姟
+                int lev = Utils.getLev(wrkMast.getSourceLocNo());
+                //鑾峰彇褰撳墠妤煎眰鏈夊嚑鍙板彲鐢ㄥ皬杞�
+                int shuttleCount = shuttleDispatchUtils.getShuttleCountByLev(lev);
+                if (shuttleCount >= 2) {//鍙湁鍙敤灏忚溅鏁伴噺澶т簬2锛屾墠杩涜鍏ュ簱浠诲姟棰勭暀灏忚溅
+                    int shuttleWrkInObligateCount = 1;//棰勭暀灏忚溅鏁伴噺
+                    Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleWrkInObligateCount").eq("status", 1));
+                    if (config != null) {
+                        shuttleWrkInObligateCount = Integer.parseInt(config.getValue());
+                    }
+                    //鍙敤鍑哄簱灏忚溅鏁伴噺(缁欏叆搴撲换鍔¢鐣欎竴鍙拌溅)
+                    int useShuttleCount = shuttleCount - shuttleWrkInObligateCount;
+                    //鏌ヨ妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟鏁伴噺
+                    List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev);
+                    if (wrkMasts.size() >= useShuttleCount) {
+                        News.info("{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size());
+                        return false;
+                    }
+                }
                 boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
                 News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
                 return false;
@@ -1351,106 +1332,110 @@
      * 鍥涘悜绌挎杞︿换鍔″畬鎴�
      */
     public synchronized void shuttleFinished() {
-        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-            //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                continue;
-            }
+        try {
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+                if (shuttleProtocol == null) {
+                    continue;
+                }
 
-            //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬�
-            if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id  //浠诲姟瀹屾垚绛夊緟纭
-                    && shuttleProtocol.getTaskNo() != 0
-                    && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id
-            ) {
-                //灏嗕换鍔℃。鏍囪涓哄畬鎴�
-                WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo());
-                if (wrkMast != null) {
-                    switch (wrkMast.getWrkSts().intValue()) {
-                        case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
-                            wrkMast.setWrkSts(9L);
-                            shuttleProtocol.setTaskNo(0);
-                            if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                                //閲婃斁灏忚溅浠ょ墝
-                                shuttleProtocol.setToken(0);
-                            }
-                            break;
-                        case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
-                            wrkMast.setWrkSts(23L);
-                            shuttleProtocol.setTaskNo(0);
-                            if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                                //閲婃斁灏忚溅浠ょ墝
-                                shuttleProtocol.setToken(0);
-                            }
-                            break;
-                        case 102://102.灏忚溅绉诲姩鑷崇珯鐐� ==> 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
-                            wrkMast.setWrkSts(103L);
-                            break;
-                        case 104://104.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴�
-                            wrkMast.setWrkSts(105L);
-                            shuttleProtocol.setTaskNo(0);//娓呯悊宸ヤ綔鍙�
-                            break;
-                        case 108://108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
-                            wrkMast.setWrkSts(109L);
-                            break;
-                        case 110://110.灏忚溅绉诲姩涓� ==> 111.灏忚溅绉诲姩瀹屾垚
-                            wrkMast.setWrkSts(111L);
-                            shuttleProtocol.setTaskNo(0);
-                            if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                                //閲婃斁灏忚溅浠ょ墝
-                                shuttleProtocol.setToken(0);
-                            }
-                            break;
-                        default:
-                    }
-
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        if (wrkMast.getWrkSts() == 111) {
-                            // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-                            if (wrkMastLocMapper.save(wrkMast.getWrkNo()) <= 0) {
-                                log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
-                            }
-                            // 鍒犻櫎宸ヤ綔涓绘。
-                            if (!wrkMastService.deleteById(wrkMast)) {
-                                log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo());
-                            }
+                //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬�
+                if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id  //浠诲姟瀹屾垚绛夊緟纭
+                        && shuttleProtocol.getTaskNo() != 0
+                        && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id
+                ) {
+                    //灏嗕换鍔℃。鏍囪涓哄畬鎴�
+                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo());
+                    if (wrkMast != null) {
+                        switch (wrkMast.getWrkSts().intValue()) {
+                            case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
+                                wrkMast.setWrkSts(9L);
+                                shuttleProtocol.setTaskNo(0);
+                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
+                                    //閲婃斁灏忚溅浠ょ墝
+                                    shuttleProtocol.setToken(0);
+                                }
+                                break;
+                            case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
+                                wrkMast.setWrkSts(23L);
+                                shuttleProtocol.setTaskNo(0);
+                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
+                                    //閲婃斁灏忚溅浠ょ墝
+                                    shuttleProtocol.setToken(0);
+                                }
+                                break;
+                            case 102://102.灏忚溅绉诲姩鑷崇珯鐐� ==> 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
+                                wrkMast.setWrkSts(103L);
+                                break;
+                            case 104://104.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴�
+                                wrkMast.setWrkSts(105L);
+                                shuttleProtocol.setTaskNo(0);//娓呯悊宸ヤ綔鍙�
+                                break;
+                            case 108://108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
+                                wrkMast.setWrkSts(109L);
+                                break;
+                            case 110://110.灏忚溅绉诲姩涓� ==> 111.灏忚溅绉诲姩瀹屾垚
+                                wrkMast.setWrkSts(111L);
+                                shuttleProtocol.setTaskNo(0);
+                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
+                                    //閲婃斁灏忚溅浠ょ墝
+                                    shuttleProtocol.setToken(0);
+                                }
+                                break;
+                            default:
                         }
 
-                        //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
-                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
-                        //婧愬簱浣嶆竻闆�
-                        shuttleProtocol.setSourceLocNo(null);
-                        //鐩爣搴撲綅娓呴浂
-                        shuttleProtocol.setLocNo(null);
-                        //浠诲姟鎸囦护娓呴浂
-                        shuttleProtocol.setAssignCommand(null);
-                        News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
+                        if (wrkMastMapper.updateById(wrkMast) > 0) {
+                            if (wrkMast.getWrkSts() == 111) {
+                                // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+                                if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) {
+                                    log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
+                                }
+                                // 鍒犻櫎宸ヤ綔涓绘。
+                                if (!wrkMastService.deleteById(wrkMast)) {
+                                    log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo());
+                                }
+                            }
+
+                            //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+                            shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                            //婧愬簱浣嶆竻闆�
+                            shuttleProtocol.setSourceLocNo(null);
+                            //鐩爣搴撲綅娓呴浂
+                            shuttleProtocol.setLocNo(null);
+                            //浠诲姟鎸囦护娓呴浂
+                            shuttleProtocol.setAssignCommand(null);
+                            News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
+                        } else {
+                            News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
+                        }
                     } else {
-                        News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
+                        ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand();
+                        if (!assignCommand.getAuto()) {
+                            //鎵嬪姩妯″紡
+                            //宸ヤ綔鍙锋竻闆�
+                            shuttleProtocol.setTaskNo(0);
+                            //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+                            shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                            //婧愬簱浣嶆竻闆�
+                            shuttleProtocol.setSourceLocNo(null);
+                            //鐩爣搴撲綅娓呴浂
+                            shuttleProtocol.setLocNo(null);
+                            //浠诲姟鎸囦护娓呴浂
+                            shuttleProtocol.setAssignCommand(null);
+                            //娓呴浂浠ょ墝
+                            shuttleProtocol.setToken(0);
+                            News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
+                        }
                     }
-                }else {
-                    ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand();
-                    if (!assignCommand.getAuto()) {
-                        //鎵嬪姩妯″紡
-                        //宸ヤ綔鍙锋竻闆�
-                        shuttleProtocol.setTaskNo(0);
-                        //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
-                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
-                        //婧愬簱浣嶆竻闆�
-                        shuttleProtocol.setSourceLocNo(null);
-                        //鐩爣搴撲綅娓呴浂
-                        shuttleProtocol.setLocNo(null);
-                        //浠诲姟鎸囦护娓呴浂
-                        shuttleProtocol.setAssignCommand(null);
-                        //娓呴浂浠ょ墝
-                        shuttleProtocol.setToken(0);
-                        News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
-                    }
+
                 }
 
             }
-
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -1458,52 +1443,56 @@
      * 鎻愬崌鏈轰换鍔�
      */
     public synchronized void liftIoExecute() {
-        for (LiftSlave liftSlave : slaveProperties.getLift()) {
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
-            if (liftThread == null) {
-                continue;
-            }
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                continue;
-            }
-
-            if (!liftProtocol.isIdle()) {
-                News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftSlave.getId());
-                continue;
-            }
-
-            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚﹁鍗犵敤
-            if (liftProtocol.getToken() != 0) {
-                News.info("{}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗�", liftSlave.getId());
-                continue;
-            }
-
-            //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
-            List<WrkMast> wrkMasts = wrkMastMapper.selectLiftStep223103();
-            if (wrkMasts.isEmpty()) {
-                continue;
-            }
-
-            for (WrkMast wrkMast : wrkMasts) {
-                //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛�
-                WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue());
-                if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) {
-                    News.info("{}鍙锋彁鍗囨満锛岃鍏朵粬浠诲姟{}鍗犵敤涓斿拰褰撳墠浠诲姟{}涓嶇浉鍚岋紝绂佹娲惧彂", liftSlave.getId(), wrkMast1.getWrkNo(), wrkMast.getWrkNo());
+        try {
+            for (LiftSlave liftSlave : slaveProperties.getLift()) {
+                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
+                if (liftThread == null) {
+                    continue;
+                }
+                LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+                if (liftProtocol == null) {
                     continue;
                 }
 
-                boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴�
-                if (!stepIn) {
+                if (!liftProtocol.isIdle()) {
+                    News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftSlave.getId());
                     continue;
                 }
 
-                boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴�
-                if (!stepOut) {
+                //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚﹁鍗犵敤
+                if (liftProtocol.getToken() != 0) {
+                    News.info("{}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗�", liftSlave.getId());
                     continue;
                 }
+
+                //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
+                List<WrkMast> wrkMasts = wrkMastMapper.selectLiftStep223103();
+                if (wrkMasts.isEmpty()) {
+                    continue;
+                }
+
+                for (WrkMast wrkMast : wrkMasts) {
+                    //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛�
+                    WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue());
+                    if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) {
+                        News.info("{}鍙锋彁鍗囨満锛岃鍏朵粬浠诲姟{}鍗犵敤涓斿拰褰撳墠浠诲姟{}涓嶇浉鍚岋紝绂佹娲惧彂", liftSlave.getId(), wrkMast1.getWrkNo(), wrkMast.getWrkNo());
+                        continue;
+                    }
+
+                    boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴�
+                    if (!stepIn) {
+                        continue;
+                    }
+
+                    boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴�
+                    if (!stepOut) {
+                        continue;
+                    }
+                }
+
             }
-
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -1623,8 +1612,12 @@
             NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo());
             if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
                 //鎷f枡鍐嶅洖搴擄紝閲嶆柊鍒嗛厤璁惧宸ヤ綔鍙�
-                Random random = new Random();
-                int deviceWrk = Math.abs((liftCommand.getTaskNo().intValue() + random.nextInt(9999)));//鑾峰彇璁惧宸ヤ綔鍙�
+                int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿
+                BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(String.valueOf(deviceWrk), liftThread.getSlave().getId());
+                if (basLiftOpt != null) {
+                    News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛岃澶囧伐浣滃彿鍑虹幇閲嶅鎯呭喌锛岃鑱旂郴鎶�鏈汉鍛樻敮鎸併��", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                    return false;
+                }
                 liftCommand.setTaskNo((short) deviceWrk);
             }
             ArrayList<NyLiftCommand> commands = new ArrayList<>();
@@ -1691,6 +1684,16 @@
                     News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                     return false;
                 }
+            }
+
+            if (!basDevp.getAutoing().equals("Y")) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夎嚜鍔ㄤ俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo());
+                return false;//鍑哄簱绔欑偣涓嶅彲鍑�
+            }
+
+            if (basDevp.getLoading().equals("Y")) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屽瓨鍦ㄦ湁鐗╀俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo());
+                return false;//鍑哄簱绔欑偣涓嶅彲鍑�
             }
 
             if (!basDevp.getOutEnable().equals("Y")) {
@@ -1763,85 +1766,93 @@
      * 鎻愬崌鏈轰换鍔″畬鎴�
      */
     public synchronized void liftFinished() {
-        for (LiftSlave liftSlave : slaveProperties.getLift()) {
-            //鑾峰彇鎻愬崌鏈轰俊鎭�
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                continue;
-            }
-
-            //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
-            if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id
-                    && liftProtocol.getTaskNo() != 0
-                    && !liftProtocol.getBusy()
-            ) {
-                BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(liftProtocol.getTaskNo().toString());
-                int taskNo = liftProtocol.getTaskNo().intValue();
-                if (basLiftOpt != null) {
-                    taskNo = basLiftOpt.getWrkNo();
+        try {
+            for (LiftSlave liftSlave : slaveProperties.getLift()) {
+                //鑾峰彇鎻愬崌鏈轰俊鎭�
+                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
+                LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+                if (liftProtocol == null) {
+                    continue;
                 }
 
-                //灏嗕换鍔℃。鏍囪涓哄畬鎴�
-                WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(taskNo);
-                if (wrkMast != null) {
-                    switch (wrkMast.getWrkSts().intValue()) {
-                        case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
-                            wrkMast.setWrkSts(4L);
-                            wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
-                            if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                                //閲婃斁鎻愬崌鏈轰护鐗�
-                                liftProtocol.setToken(0);
-                            }
-                            break;
-                        case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴�
-                            wrkMast.setWrkSts(25L);
-                            if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆
-                                wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴�
-                            }else {
-                                if (wrkMast.getMk() == null || !wrkMast.getMk().equals("Y")) {
-                                    //涓嶉渶瑕佺敤鍒版満姊拌噦锛岀洿鎺ヨ浆29.鍑哄簱瀹屾垚
-                                    wrkMast.setWrkSts(29L);
-                                    wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
-                                    wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+                //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
+                if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id
+                        && liftProtocol.getTaskNo() != 0
+                        && !liftProtocol.getBusy()
+                ) {
+                    int taskNo = liftProtocol.getTaskNo().intValue();
+                    if (taskNo >= 20000 && taskNo <= 30000) {
+                        //鎻愬崌鏈鸿澶囧伐浣滃彿锛岄渶瑕佹煡璇㈠搴斾换鍔″彿
+                        BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(liftProtocol.getTaskNo().toString(), liftSlave.getId());
+                        if (basLiftOpt != null) {
+                            taskNo = basLiftOpt.getWrkNo();
+                        }
+                    }
+
+                    //灏嗕换鍔℃。鏍囪涓哄畬鎴�
+                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(taskNo);
+                    if (wrkMast != null) {
+                        switch (wrkMast.getWrkSts().intValue()) {
+                            case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
+                                wrkMast.setWrkSts(4L);
+                                wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+                                if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) {
+                                    //閲婃斁鎻愬崌鏈轰护鐗�
+                                    liftProtocol.setToken(0);
                                 }
-                            }
+                                break;
+                            case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴�
+                                wrkMast.setWrkSts(25L);
+                                if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆
+                                    wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴�
+                                } else {
+                                    if (wrkMast.getMk() == null || !wrkMast.getMk().equals("Y")) {
+                                        //涓嶉渶瑕佺敤鍒版満姊拌噦锛岀洿鎺ヨ浆29.鍑哄簱瀹屾垚
+                                        wrkMast.setWrkSts(29L);
+                                        wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
+                                        wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+                                        wrkMast.setModiTime(new Date());
+                                    }
+                                }
 
-                            if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                                //閲婃斁鎻愬崌鏈轰护鐗�
-                                liftProtocol.setToken(0);
-                            }
+                                if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) {
+                                    //閲婃斁鎻愬崌鏈轰护鐗�
+                                    liftProtocol.setToken(0);
+                                }
 
-                            break;
-                        case 106://106.鎻愬崌鏈烘惉杩愪腑 ==> 107.鎻愬崌鏈烘惉杩愬畬鎴�
-                            wrkMast.setWrkSts(107L);
-                            break;
-                        default:
-                    }
+                                break;
+                            case 106://106.鎻愬崌鏈烘惉杩愪腑 ==> 107.鎻愬崌鏈烘惉杩愬畬鎴�
+                                wrkMast.setWrkSts(107L);
+                                break;
+                            default:
+                        }
 
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵��
-                        liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
-                        //浠诲姟鎸囦护娓呴浂
-                        liftProtocol.setAssignCommand(null);
-                        News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
-                    } else {
-                        News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
-                    }
-                }else {
-                    LiftAssignCommand assignCommand = liftProtocol.getAssignCommand();
-                    if (assignCommand != null) {
-                        if (!assignCommand.getAuto()) {
-                            //鎵嬪姩鎿嶄綔
+                        if (wrkMastMapper.updateById(wrkMast) > 0) {
                             //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵��
                             liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
                             //浠诲姟鎸囦护娓呴浂
                             liftProtocol.setAssignCommand(null);
-                            News.info("鎻愬崌鏈哄凡纭鎵嬪姩鎿嶄綔銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
+                            News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
+                        } else {
+                            News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
+                        }
+                    } else {
+                        LiftAssignCommand assignCommand = liftProtocol.getAssignCommand();
+                        if (assignCommand != null) {
+                            if (!assignCommand.getAuto()) {
+                                //鎵嬪姩鎿嶄綔
+                                //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵��
+                                liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
+                                //浠诲姟鎸囦护娓呴浂
+                                liftProtocol.setAssignCommand(null);
+                                News.info("鎻愬崌鏈哄凡纭鎵嬪姩鎿嶄綔銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
+                            }
                         }
                     }
                 }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -1849,40 +1860,44 @@
      * 搴撲綅绉昏浆
      */
     public synchronized void locToLocExecute() {
-        //鑾峰彇鍑哄叆搴撳伐浣滄。
+        try {
+            //鑾峰彇鍑哄叆搴撳伐浣滄。
 //        List<WrkMast> wrkMasts = wrkMastMapper.selectInOutWrkMast();
 //        if (wrkMasts.size() > 0) {
 //            //鏈夊嚭鍏ュ簱浠诲姟锛屽繀椤荤瓑寰呬换鍔℃墽琛屽畬姣曞啀鎵ц搴撲綅绉昏浆
 //            return;
 //        }
 
-        //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗�
-        List<WrkMast> wrkMasts1 = wrkMastMapper.selectLocToLocWrkMast();
-        for (WrkMast wrkMast : wrkMasts1) {
-            if (Utils.getLev(wrkMast.getSourceLocNo()) == Utils.getLev(wrkMast.getLocNo())) {
-                boolean step1 = this.locToLocExecuteStep1(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞�
-                if (!step1) {
-                    continue;
-                }
-            }else {
-                //璺ㄦゼ灞傚簱浣嶇Щ杞�
-                boolean step2 = this.locToLocExecuteStep2(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙�
-                if (!step2) {
-                    continue;
-                }
+            //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗�
+            List<WrkMast> wrkMasts1 = wrkMastMapper.selectLocToLocWrkMast();
+            for (WrkMast wrkMast : wrkMasts1) {
+                if (Utils.getLev(wrkMast.getSourceLocNo()) == Utils.getLev(wrkMast.getLocNo())) {
+                    boolean step1 = this.locToLocExecuteStep1(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞�
+                    if (!step1) {
+                        continue;
+                    }
+                } else {
+                    //璺ㄦゼ灞傚簱浣嶇Щ杞�
+                    boolean step2 = this.locToLocExecuteStep2(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙�
+                    if (!step2) {
+                        continue;
+                    }
 
-                boolean step3 = this.locToLocExecuteStep3(wrkMast);//鎻愬崌鏈烘惉杩愯揣鐗�
-                if (!step3) {
-                    continue;
-                }
+                    boolean step3 = this.locToLocExecuteStep3(wrkMast);//鎻愬崌鏈烘惉杩愯揣鐗�
+                    if (!step3) {
+                        continue;
+                    }
 
-                boolean step4 = this.locToLocExecuteStep4(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鐩爣搴撲綅
-                if (!step4) {
-                    continue;
+                    boolean step4 = this.locToLocExecuteStep4(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鐩爣搴撲綅
+                    if (!step4) {
+                        continue;
+                    }
+
                 }
 
             }
-
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -2395,68 +2410,69 @@
      * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
      */
     public void storeEmptyPlt(){
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻绌烘澘鍏ュ簱鍙�
-            for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
-                // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
-                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
-                if (staProtocol == null) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-                // 绔欑偣鏉′欢鍒ゆ柇
-                if (staProtocol.isAutoing()
-                        && staProtocol.isLoading()
-                        && staProtocol.isInEnable()
-                        && staProtocol.isEmptyMk()
-                        && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo() >= 9990 || staProtocol.getWorkNo() <= 9999))
-                        && staProtocol.isPakMk()) {
+        try {
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 閬嶅巻绌烘澘鍏ュ簱鍙�
+                for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
+                    // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
+                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                    StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
+                    if (staProtocol == null) {
+                        continue;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+                    // 绔欑偣鏉′欢鍒ゆ柇
+                    if (staProtocol.isAutoing()
+                            && staProtocol.isLoading()
+                            && staProtocol.isInEnable()
+                            && staProtocol.isEmptyMk()
+                            && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo() >= 9990 || staProtocol.getWorkNo() <= 9999))
+                            && staProtocol.isPakMk()) {
 
-                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                    String barcode = null;
-                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode());
-                    if (barcodeThread != null) {
-                        String barcode0 = barcodeThread.getBarcode();
-                        if(!Cools.isEmpty(barcode0)) {
+                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                        String barcode = null;
+                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode());
+                        if (barcodeThread != null) {
+                            String barcode0 = barcodeThread.getBarcode();
+                            if (!Cools.isEmpty(barcode0)) {
 //                            News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", emptyInSta.getBarcode(), barcode0);
-                            if(!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) {
-                                barcode = barcode0;
+                                if (!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) {
+                                    barcode = barcode0;
+                                }
                             }
                         }
-                    }
 
-                    if (!Cools.isEmpty(barcode)) {
-                        WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode);//鏉$爜瀛樺湪宸ヤ綔妗�
-                        if (wrkMast != null) {
-                            continue;
-                        }
-                    }
-
-                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, emptyInSta.getLed());
-
-                    try {
-                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-
-                        SearchLocParam param = new SearchLocParam();
-                        param.setIoType(10);
                         if (!Cools.isEmpty(barcode)) {
-                            param.setBarcode(barcode);
+                            WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode);//鏉$爜瀛樺湪宸ヤ綔妗�
+                            if (wrkMast != null) {
+                                continue;
+                            }
                         }
-                        param.setSourceStaNo(emptyInSta.getStaNo());
+
+                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, emptyInSta.getLed());
+
+                        try {
+                            LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+
+                            SearchLocParam param = new SearchLocParam();
+                            param.setIoType(10);
+                            if (!Cools.isEmpty(barcode)) {
+                                param.setBarcode(barcode);
+                            }
+                            param.setSourceStaNo(emptyInSta.getStaNo());
 //                        param.setLocType1(locTypeDto.getLocType1());
-                        String response = new HttpHandler.Builder()
-                                .setUri(wmsUrl)
-                                .setPath("/rpc/pakin/loc/v1")
-                                .setJson(JSON.toJSONString(param))
-                                .build()
-                                .doPost();
-                        JSONObject jsonObject = JSON.parseObject(response);
-                        Integer code = jsonObject.getInteger("code");
-                        if (code.equals(200)) {
-                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-                            barcodeThread.setBarcode("");
+                            String response = new HttpHandler.Builder()
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/pakin/loc/v2")
+                                    .setJson(JSON.toJSONString(param))
+                                    .build()
+                                    .doPost();
+                            JSONObject jsonObject = JSON.parseObject(response);
+                            Integer code = jsonObject.getInteger("code");
+                            if (code.equals(200)) {
+                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+                                barcodeThread.setBarcode("");
 //                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
 //                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
 //                            staProtocol.setStaNo(dto.getStaNo().shortValue());
@@ -2465,24 +2481,27 @@
 //                            if (!result) {
 //                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
 //                            }
-                        } else {
-                            if (ledThread != null) {
-                                String errorMsg = jsonObject.getString("msg");
-                                if (!Cools.isEmpty(errorMsg)) {
-                                    MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errorMsg));
+                            } else {
+                                if (ledThread != null) {
+                                    String errorMsg = jsonObject.getString("msg");
+                                    if (!Cools.isEmpty(errorMsg)) {
+                                        MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errorMsg));
+                                    }
                                 }
+                                News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
                             }
-                            News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         }
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+
                     }
 
+
                 }
-
-
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -2490,75 +2509,76 @@
      * AGV琛ヨ揣 => 鐢熸垚鍏ュ簱閫氱煡妗�
      */
     public void robotGenerateAgvTask() {
-//妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 鑾峰彇鍏ュ簱绔欎俊鎭�
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-            StaProtocol staProtocol = devpThread.getStation().get(300);
-            if (staProtocol == null) {
-                continue;
-            }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0) {
-                //鏌ヨ鏄惁鏈夊伐浣滄。
-                WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
-                if (wrkMast == null) {
+        try {
+            //妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(300);
+                if (staProtocol == null) {
                     continue;
                 }
-
-                if (wrkMast.getWrkSts() != 25) {//25.鎻愬崌鏈烘惉杩愬畬鎴�
-                    continue;
-                }
-
-                if (wrkMast.getMk() != null && wrkMast.getMk().equals("Y")) {//鏍囪涓篩琛ㄧず闇�瑕佺敤鍒版満姊拌噦鎷f枡
-                    Short targetSta = null;//鐩爣绔�
-                    //鍒ゆ柇鏈烘鑷傛嫞鏂欑珯鏄惁绌洪棽
-                    StaProtocol staProtocol303 = devpThread.getStation().get(303);
-                    StaProtocol staProtocol317 = devpThread.getStation().get(317);
-                    if (staProtocol303.isAutoing() && !staProtocol303.isLoading()) {
-                        //鑷姩銆佹棤鐗�
-                        targetSta = (short) 303;
-                    } else if (staProtocol317.isAutoing() && !staProtocol317.isLoading()) {
-                        //鑷姩銆佹棤鐗�
-                        targetSta = (short) 317;
-                    } else {
-                        continue;//娌℃湁绌洪棽绔欑偣
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0) {
+                    //鏌ヨ鏄惁鏈夊伐浣滄。
+                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
+                    if (wrkMast == null) {
+                        continue;
                     }
 
-                    if (wrkMast.getStaNo() != 303 && wrkMast.getStaNo() != 317) {
-                        //鍚慉GV鍙戣捣缁勬墭璇锋眰
-                        try {
-                            HashMap<String, Object> param = new HashMap<>();
-                            param.put("wrkNo", wrkMast.getWrkNo());
-                            String response = new HttpHandler.Builder()
-                                    .setUri(wmsUrl)
-                                    .setPath("/rpc/replenishment")
-                                    .setJson(JSON.toJSONString(param))
-                                    .build()
-                                    .doPost();
-                            JSONObject jsonObject = JSON.parseObject(response);
-                            Integer code = jsonObject.getInteger("code");
-                            if (code.equals(200)) {//AGV缁勬墭鎴愬姛
-                                //瑕嗙洊宸ヤ綔妗g洰鏍囩珯
-                                wrkMast.setStaNo(targetSta.intValue());
-                                wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
-                                wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
-                                if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                    //鍚�300绔欏啓鍏ョ洰鏍囩珯
-                                    staProtocol = staProtocol.clone();
-                                    staProtocol.setStaNo(targetSta);//绉诲姩鍒扮洰鏍囩珯
-                                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                                    try {
-                                        Thread.sleep(500);
-                                    } catch (Exception e) {
-                                        e.printStackTrace();
-                                    }
-                                    continue;
-                                }
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    if (wrkMast.getWrkSts() != 25) {//25.鎻愬崌鏈烘惉杩愬畬鎴�
+                        continue;
+                    }
+
+                    if (wrkMast.getMk() != null && wrkMast.getMk().equals("Y")) {//鏍囪涓篩琛ㄧず闇�瑕佺敤鍒版満姊拌噦鎷f枡
+                        Short targetSta = null;//鐩爣绔�
+                        //鍒ゆ柇鏈烘鑷傛嫞鏂欑珯鏄惁绌洪棽
+                        StaProtocol staProtocol303 = devpThread.getStation().get(303);
+                        StaProtocol staProtocol317 = devpThread.getStation().get(317);
+                        if (staProtocol303.isAutoing() && !staProtocol303.isLoading()) {
+                            //鑷姩銆佹棤鐗�
+                            targetSta = (short) 303;
+                        } else if (staProtocol317.isAutoing() && !staProtocol317.isLoading()) {
+                            //鑷姩銆佹棤鐗�
+                            targetSta = (short) 317;
+                        } else {
+                            continue;//娌℃湁绌洪棽绔欑偣
                         }
+
+                        if (wrkMast.getStaNo() != 303 && wrkMast.getStaNo() != 317) {
+                            //鍚慉GV鍙戣捣缁勬墭璇锋眰
+                            try {
+                                HashMap<String, Object> param = new HashMap<>();
+                                param.put("wrkNo", wrkMast.getWrkNo());
+                                String response = new HttpHandler.Builder()
+                                        .setUri(wmsUrl)
+                                        .setPath("/rpc/replenishment")
+                                        .setJson(JSON.toJSONString(param))
+                                        .build()
+                                        .doPost();
+                                JSONObject jsonObject = JSON.parseObject(response);
+                                Integer code = jsonObject.getInteger("code");
+                                if (code.equals(200)) {//AGV缁勬墭鎴愬姛
+                                    //瑕嗙洊宸ヤ綔妗g洰鏍囩珯
+                                    wrkMast.setStaNo(targetSta.intValue());
+                                    wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
+                                    wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+                                    if (wrkMastMapper.updateById(wrkMast) > 0) {
+                                        //鍚�300绔欏啓鍏ョ洰鏍囩珯
+                                        staProtocol = staProtocol.clone();
+                                        staProtocol.setStaNo(targetSta);//绉诲姩鍒扮洰鏍囩珯
+                                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                                        try {
+                                            Thread.sleep(500);
+                                        } catch (Exception e) {
+                                            e.printStackTrace();
+                                        }
+                                        continue;
+                                    }
+                                }
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            }
 
 //                        //瑕嗙洊宸ヤ綔妗g洰鏍囩珯
 //                        wrkMast.setStaNo(targetSta.intValue());
@@ -2576,9 +2596,12 @@
 //                            }
 //                            continue;
 //                        }
+                        }
                     }
                 }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -2586,54 +2609,60 @@
      * AGV琛ヨ揣 => 鏈烘鑷傛嫞鏂�
      */
     public void agvRestockByRobot() {
-        //妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 鑾峰彇鍏ュ簱绔欎俊鎭�
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-            StaProtocol staProtocol303 = devpThread.getStation().get(303);
-            StaProtocol staProtocol317 = devpThread.getStation().get(317);
-            if (staProtocol303 == null || staProtocol317 == null) {
-                continue;
-            }
-
-            if (staProtocol303.isAutoing() && staProtocol303.isLoading() && staProtocol303.getWorkNo() != 0) {
-                //璋冨害鏈烘鑷�
-                //鏌ヨ鏄惁鏈夊伐浣滄。
-                WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol303.getWorkNo().intValue());
-                if (wrkMast == null) {
-                    continue;
-                }
-                List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
-                if (wrkDetls.isEmpty()) {
+        try {
+            //妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol303 = devpThread.getStation().get(303);
+                StaProtocol staProtocol317 = devpThread.getStation().get(317);
+                if (staProtocol303 == null || staProtocol317 == null) {
                     continue;
                 }
 
-                if (wrkMast.getInvWh() == null) {
-                    wrkMast.setInvWh("Y");//鏍囪宸茬粡涓嬪彂鏈烘鑷備换鍔�
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetls.size(), "303");
+                if (staProtocol303.isAutoing() && staProtocol303.isLoading() && staProtocol303.getWorkNo() != 0) {
+                    //璋冨害鏈烘鑷�
+                    //鏌ヨ鏄惁鏈夊伐浣滄。
+                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol303.getWorkNo().intValue());
+                    if (wrkMast == null) {
+                        continue;
+                    }
+                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+                    if (wrkDetls.isEmpty()) {
+                        continue;
+                    }
+
+                    if (wrkMast.getInvWh() == null) {
+                        boolean result = RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetls.size(), "303");
+                        if (result) {
+                            wrkMast.setInvWh("Y");//鏍囪宸茬粡涓嬪彂鏈烘鑷備换鍔�
+                            wrkMastMapper.updateById(wrkMast);
+                        }
+                    }
+                }
+
+                if (staProtocol317.isAutoing() && staProtocol317.isLoading() && staProtocol317.getWorkNo() != 0) {
+                    //璋冨害鏈烘鑷�
+                    //鏌ヨ鏄惁鏈夊伐浣滄。
+                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol317.getWorkNo().intValue());
+                    if (wrkMast == null) {
+                        continue;
+                    }
+                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+                    if (wrkDetls.isEmpty()) {
+                        continue;
+                    }
+                    if (wrkMast.getInvWh() == null) {
+                        boolean result = RobotUtils.sendTask(staProtocol317.getWorkNo().toString(), wrkDetls.size(), "317");
+                        if (result) {
+                            wrkMast.setInvWh("Y");//鏍囪宸茬粡涓嬪彂鏈烘鑷備换鍔�
+                            wrkMastMapper.updateById(wrkMast);
+                        }
                     }
                 }
             }
-
-            if (staProtocol317.isAutoing() && staProtocol317.isLoading() && staProtocol317.getWorkNo() != 0) {
-                //璋冨害鏈烘鑷�
-                //鏌ヨ鏄惁鏈夊伐浣滄。
-                WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol317.getWorkNo().intValue());
-                if (wrkMast == null) {
-                    continue;
-                }
-                List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
-                if (wrkDetls.isEmpty()) {
-                    continue;
-                }
-                if (wrkMast.getInvWh() == null) {
-                    wrkMast.setInvWh("Y");//鏍囪宸茬粡涓嬪彂鏈烘鑷備换鍔�
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        RobotUtils.sendTask(staProtocol317.getWorkNo().toString(), wrkDetls.size(), "317");
-                    }
-                }
-            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -2641,43 +2670,47 @@
      * AGV琛ヨ揣(閫氱煡AGV鍙栬揣)
      */
     public void agvRestockInto() {
-        //妫�娴�309鍜�312绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗�
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 鑾峰彇鍏ュ簱绔欎俊鎭�
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-            StaProtocol staProtocol309 = devpThread.getStation().get(309);
-            StaProtocol staProtocol312 = devpThread.getStation().get(312);
-            if (staProtocol309 == null || staProtocol312 == null) {
-                continue;
-            }
-
-            if (staProtocol309.isAutoing() && staProtocol309.isLoading() && staProtocol309.isInEnable()) {
-                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 9);//308绔欐潯鐮佸櫒
-                if (barcodeThread == null) {
+        try {
+            //妫�娴�309鍜�312绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗�
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol309 = devpThread.getStation().get(309);
+                StaProtocol staProtocol312 = devpThread.getStation().get(312);
+                if (staProtocol309 == null || staProtocol312 == null) {
                     continue;
                 }
-                String barcode = barcodeThread.getBarcode();
-                if(!Cools.isEmpty(barcode)) {
-                    //閫氱煡AGV鍙栬揣
-                    agvRestockCall("301-1", barcode);
-                    log.info("閫氱煡AGV鍙栬揣锛屾潯鐮佸彿锛�" + barcode);
-                }
-            }
 
-            if (staProtocol312.isAutoing() && staProtocol312.isLoading() && staProtocol312.isInEnable()) {
-                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 10);//311绔欐潯鐮佸櫒
-                if (barcodeThread == null) {
-                    continue;
+                if (staProtocol309.isAutoing() && staProtocol309.isLoading() && staProtocol309.isInEnable()) {
+                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 9);//308绔欐潯鐮佸櫒
+                    if (barcodeThread == null) {
+                        continue;
+                    }
+                    String barcode = barcodeThread.getBarcode();
+                    if (!Cools.isEmpty(barcode)) {
+                        //閫氱煡AGV鍙栬揣
+                        agvRestockCall("301-1", barcode);
+                        log.info("閫氱煡AGV鍙栬揣锛屾潯鐮佸彿锛�" + barcode);
+                    }
                 }
-                String barcode = barcodeThread.getBarcode();
-                if(!Cools.isEmpty(barcode)) {
-                    //閫氱煡AGV鍙栬揣
-                    agvRestockCall("302-1", barcode);
-                    log.info("閫氱煡AGV鍙栬揣锛屾潯鐮佸彿锛�" + barcode);
+
+                if (staProtocol312.isAutoing() && staProtocol312.isLoading() && staProtocol312.isInEnable()) {
+                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 10);//311绔欐潯鐮佸櫒
+                    if (barcodeThread == null) {
+                        continue;
+                    }
+                    String barcode = barcodeThread.getBarcode();
+                    if (!Cools.isEmpty(barcode)) {
+                        //閫氱煡AGV鍙栬揣
+                        agvRestockCall("302-1", barcode);
+                        log.info("閫氱煡AGV鍙栬揣锛屾潯鐮佸彿锛�" + barcode);
+                    }
                 }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -2706,81 +2739,164 @@
         return false;
     }
 
+    //閫氱煡WMS褰撳墠鎷f枡绔欑偣淇℃伅
+    private boolean agvCureentCall(String staNo, String barcode) {
+        try {
+            HashMap<String, Object> param = new HashMap<>();
+            param.put("devNo", staNo);
+            param.put("containerCode", barcode);
+            String response = new HttpHandler.Builder()
+                    .setUri(wmsUrl)
+                    .setPath("/rpc/current/containerCode")
+                    .setJson(JSON.toJSONString(param))
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            News.info("鎮寕绾匡紝WMS杩斿洖缁撴灉锛�" + jsonObject);
+            Integer code = jsonObject.getInteger("code");
+            if (code.equals(200)) {//鍛煎彨AGV
+                return true;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+        }
+        return false;
+    }
+
     /**
      * AGV琛ヨ揣(鎮寕绾块�氱煡AGV鍙栬揣)
      */
     public void agvRestockIntoByHangingWire() {
-        //妫�娴�350鍜�351鎵爜鍣�
-        int[] barcodeStaNo = {11, 12};//11 => 350绔欐壂鐮佸櫒,12 => 351绔欐壂鐮佸櫒
-        for (int staNo : barcodeStaNo) {
-            // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, staNo);
-            if (barcodeThread == null) {
-                continue;
-            }
-            String barcode = barcodeThread.getBarcode();
-            if(!Cools.isEmpty(barcode)) {
-                if (barcode.contains("NoRead")) {
+        try {
+            //妫�娴�350鍜�351鎵爜鍣�
+            int[] barcodeStaNo = {11, 12,14,16,18,20};//11 => 350绔欐壂鐮佸櫒,12 => 351绔欐壂鐮佸櫒
+            for (int staNo : barcodeStaNo) {
+                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, staNo);
+                if (barcodeThread == null) {
                     continue;
                 }
+                String barcode = barcodeThread.getBarcode();
+                if (!Cools.isEmpty(barcode)) {
+                    if (barcode.contains("NoRead")) {
+                        continue;
+                    }
 
-                String agvStaNo = null;
-                if (staNo == 11) {
-                    agvStaNo = "303-1";
-                }else {
-                    agvStaNo = "304-1";
+                    String agvStaNo = null;
+                    if (staNo == 11) {
+                        agvStaNo = "303-1";
+                    } else if(staNo == 12){
+                        agvStaNo = "304-1";
+                    } else if(staNo == 14){
+                        agvStaNo = "311-1";
+                    } else if(staNo == 16){
+                        agvStaNo = "313-1";
+                    } else if(staNo == 18){
+                        agvStaNo = "315-1";
+                    } else if(staNo == 20){
+                        agvStaNo = "317-1";
+                    }
+                    //閫氱煡AGV鍙栬揣
+                    boolean result = agvRestockCall(agvStaNo, barcode);
+                    if (result) {
+                        barcodeThread.setBarcode("");
+                    }
+                    log.info(barcodeThread.getSlave().getId() + "鍙锋壂鐮佸櫒锛岄�氱煡AGV鍙栬揣锛屾潯鐮佸彿锛�" + barcode);
                 }
-                //閫氱煡AGV鍙栬揣
-                boolean result = agvRestockCall(agvStaNo, barcode);
-                if (result) {
-                    barcodeThread.setBarcode("");
-                }
-                log.info(barcodeThread.getSlave().getId() + "鍙锋壂鐮佸櫒锛岄�氱煡AGV鍙栬揣锛屾潯鐮佸彿锛�" + barcode);
             }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * AGV鎷f枡绔欑偣淇℃伅
+     */
+    public void agvCurrentContainerCodeInfoWire() {
+        try {
+            //妫�娴�350鍜�351鎵爜鍣�
+            int[] barcodeStaNo = {13, 15,17,19};//11 => 350绔欐壂鐮佸櫒,12 => 351绔欐壂鐮佸櫒
+            for (int staNo : barcodeStaNo) {
+                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, staNo);
+                if (barcodeThread == null) {
+                    continue;
+                }
+                String barcode = barcodeThread.getBarcode();
+                if (!Cools.isEmpty(barcode)) {
+                    if (barcode.contains("NoRead")) {
+                        continue;
+                    }
+
+                    String agvStaNo = null;
+                    if (staNo == 13) {
+                        agvStaNo = "CS-310";
+                    } else if(staNo == 15){
+                        agvStaNo = "CS-311";
+                    } else if(staNo == 17){
+                        agvStaNo = "CS-312";
+                    } else if(staNo == 19){
+                        agvStaNo = "CS-313";
+                    }
+                    //閫氱煡WMS褰撳墠瀹瑰櫒鐮�
+                    boolean result = agvCureentCall(agvStaNo, barcode);
+                    if (result) {
+                        barcodeThread.setBarcode("");
+                    }
+                    log.info(barcodeThread.getSlave().getId() + "鍙锋壂鐮佸櫒锛岄�氱煡AGV鍙栬揣锛屾潯鐮佸彿锛�" + barcode);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
     // 300绔欐嫞鏂�
     public void pick300() {
-        //妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 鑾峰彇鍏ュ簱绔欎俊鎭�
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-            StaProtocol staProtocol = devpThread.getStation().get(300);
-            if (staProtocol == null) {
-                continue;
-            }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0) {
-                //鏌ヨ鏄惁鏈夊伐浣滄。
-                WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
-                if (wrkMast == null) {
+        try {
+            //妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(300);
+                if (staProtocol == null) {
                     continue;
                 }
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0) {
+                    //鏌ヨ鏄惁鏈夊伐浣滄。
+                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
+                    if (wrkMast == null) {
+                        continue;
+                    }
 
-                if (wrkMast.getWrkSts() != 29) {//29.鍑哄簱瀹屾垚
-                    continue;
-                }
+                    if (wrkMast.getWrkSts() != 29) {//29.鍑哄簱瀹屾垚
+                        continue;
+                    }
 
-                if (wrkMast.getMk() == null) {
-                    Integer sourceStaNo = wrkMast.getSourceStaNo();//婧愮珯
-                    Integer staNo = wrkMast.getStaNo();//鐩爣绔�
-                    //瑕嗙洊宸ヤ綔妗g洰鏍囩珯
-                    wrkMast.setStaNo(sourceStaNo);
-                    wrkMast.setSourceStaNo(staNo);
-                    wrkMast.setMk("N");
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        //鍚�300绔欏啓鍏ョ洰鏍囩珯
-                        staProtocol = staProtocol.clone();
-                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());//绉诲姩鍒扮洰鏍囩珯
-                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                        try {
-                            Thread.sleep(500);
-                        } catch (Exception e) {
-                            e.printStackTrace();
+                    if (wrkMast.getMk() == null) {
+                        Integer sourceStaNo = wrkMast.getSourceStaNo();//婧愮珯
+                        Integer staNo = wrkMast.getStaNo();//鐩爣绔�
+                        //瑕嗙洊宸ヤ綔妗g洰鏍囩珯
+                        wrkMast.setStaNo(sourceStaNo);
+                        wrkMast.setSourceStaNo(staNo);
+                        wrkMast.setMk("N");
+                        if (wrkMastMapper.updateById(wrkMast) > 0) {
+                            //鍚�300绔欏啓鍏ョ洰鏍囩珯
+                            staProtocol = staProtocol.clone();
+                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());//绉诲姩鍒扮洰鏍囩珯
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            try {
+                                Thread.sleep(500);
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
                         }
                     }
                 }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -2788,152 +2904,229 @@
      * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
      */
     public void ledExecute() {
-        for (LedSlave led : slaveProperties.getLed()) {
-            // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-            // 鍛戒护闆嗗悎
-            List<LedCommand> commands = new ArrayList<>();
-            // 宸ヤ綔妗i泦鍚�
-            List<WrkMast> wrkMasts = new ArrayList<>();
-            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();
-                }
-                // 鑾峰彇宸ヤ綔妗f暟鎹�
-                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
-                wrkMasts.add(wrkMast);
-                // 缁勮鍛戒护
-                LedCommand ledCommand = new LedCommand();
-                ledCommand.setWorkNo(wrkMast.getWrkNo());
-                ledCommand.setIoType(wrkMast.getIoType());
-                // 鍑哄簱妯″紡
-                switch (wrkMast.getIoType()) {
-                    case 101:
-                        ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
-                        break;
-                    case 103:
-                        ledCommand.setTitle("鎷f枡鍑哄簱");
-                        break;
-                    case 104:
-                        ledCommand.setTitle("骞舵澘鍑哄簱");
-                        break;
-                    case 107:
-                        ledCommand.setTitle("鐩樼偣鍑哄簱");
-                        break;
-                    case 110:
-                        ledCommand.setTitle("绌烘澘鍑哄簱");
-                        ledCommand.setEmptyMk(true);
-                        break;
-                    default:
-                        News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
-                        break;
-                }
-                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
-                ledCommand.setLocNo(wrkMast.getLocNo());
-                ledCommand.setStaNo(wrkMast.getStaNo());
-                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
-                    //for (WrkDetl wrkDetl : wrkDetls) {
-                    //    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
-                    //
-                    //    locDetls.forEach(locDetl1 -> {
-                    //        //宸ヤ綔妗d腑瀛樺湪璇ョ墿鏂欏垯璺宠繃
-                    //        String suppCode = "";
-                    //
-                    //        if (wrkDetl.getMatnr().equals(locDetl1.getMatnr())) {
-                    //            Double anfme = 0D;
-                    //            if (locDetl != null) {
-                    //                anfme = locDetl.getAnfme();
-                    //            }
-                    //            if (wrkDetl.getSuppCode() != null) {
-                    //                suppCode = wrkDetl.getSuppCode();
-                    //            }
-                    //            ledCommand.getMatDtos()
-                    //                    .add(new MatDto(wrkDetl.getMatnr()
-                    //                            , wrkDetl.getMaktx()
-                    //                            , wrkDetl.getAnfme()
-                    //                            , (wrkDetl.getAnfme()-anfme)
-                    //                            , wrkDetl.getSpecs()
-                    //                            , suppCode));
-                    //        } else {
-                    //            if (locDetl1.getSuppCode() != null) {
-                    //                suppCode = locDetl1.getSuppCode();
-                    //            }
-                    //            ledCommand.getMatDtos()
-                    //                    .add(new MatDto(locDetl1.getMatnr()
-                    //                            , locDetl1.getMaktx()
-                    //                            , 0D
-                    //                            , locDetl1.getAnfme()
-                    //                            , locDetl1.getSpecs()
-                    //                            , suppCode));
-                    //        }
-                    //    });
-                    //    //LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
-                    //}
-                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
-                    locDetls.forEach(locDetl -> {
-                        Wrapper<WrkDetl> wrapper = new EntityWrapper<WrkDetl>().eq("matnr", locDetl.getMatnr()).eq("wrk_no",wrkMast.getWrkNo());
-                        Utils.wapperSetCondition(wrapper,"batch",locDetl.getBatch());
-                        Utils.wapperSetCondition(wrapper,"three_code",locDetl.getThreeCode());
-                        Utils.wapperSetCondition(wrapper,"dead_time",locDetl.getDeadTime());
-                        Utils.wapperSetCondition(wrapper,"supp_code",locDetl.getSuppCode());//鏂欑鐮�
-                        WrkDetl detl = wrkDetlService.selectOne(wrapper);
-                        if (Cools.isEmpty(detl)) {
-                            String suppCode = "";
-                            if (locDetl.getSuppCode() != null) {
-                                suppCode = locDetl.getSuppCode();
-                            }
-                            ledCommand.getMatDtos().add(new MatDto(locDetl.getMatnr(), locDetl.getMaktx(), 0D, locDetl.getAnfme(), locDetl.getSpecs(), suppCode));
-                        } else {
-                            String suppCode = "";
-                            if (detl.getSuppCode() != null) {
-                                suppCode = detl.getSuppCode();
-                            }
-                            ledCommand.getMatDtos().add(new MatDto(detl.getMatnr(), detl.getMaktx(), detl.getAnfme(), (locDetl.getAnfme() - detl.getAnfme()), detl.getSpecs(), suppCode));
+        try {
+            for (LedSlave led : slaveProperties.getLed()) {
+                // 鑾峰彇杈撻�佺嚎plc绾跨▼
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+                // 鍛戒护闆嗗悎
+                List<LedCommand> commands = new ArrayList<>();
+                // 宸ヤ綔妗i泦鍚�
+                List<WrkMast> wrkMasts = new ArrayList<>();
+                List<WrkMastLog> wrkMastLogs = 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();
+                    }
+                    // 鑾峰彇宸ヤ綔妗f暟鎹�
+                    WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
+                    Integer wrkNo = staProtocol.getWorkNo().intValue();
+                    Integer ioType = null;
+                    String sourceLocNo = null;
+                    String locNo = null;
+                    Integer wrkStaNo = null;
+                    String barcode = null;
+                    if (wrkMast == null) {
+                        //鏌ヨ鍘嗗彶妗�
+                        WrkMastLog wrkMastLog = wrkMastLogMapper.selectLatestByWorkNo(staProtocol.getWorkNo().intValue());
+                        if (wrkMastLog == null) {
+                            continue;
                         }
-                    });
-                }
-                commands.add(ledCommand);
-            }
-            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
-            // 鑾峰彇LED绾跨▼
-            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-            // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
-            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
-                continue;
-            }
-            // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
-            if (!commands.isEmpty()) {
-                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);
-                }
-            }
+                        ioType = wrkMastLog.getIoType();
+                        sourceLocNo = wrkMastLog.getSourceLocNo();
+                        locNo = wrkMastLog.getLocNo();
+                        wrkStaNo = wrkMastLog.getStaNo();
+                        barcode = wrkMastLog.getBarcode();
+                        wrkMastLogs.add(wrkMastLog);
+                    }else {
+                        if (wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) {
+                            continue;
+                        }
+                        ioType = wrkMast.getIoType();
+                        sourceLocNo = wrkMast.getSourceLocNo();
+                        locNo = wrkMast.getLocNo();
+                        wrkStaNo = wrkMast.getStaNo();
+                        barcode = wrkMast.getBarcode();
+                        wrkMasts.add(wrkMast);
+                    }
+                    // 缁勮鍛戒护
+                    LedCommand ledCommand = new LedCommand();
+                    ledCommand.setWorkNo(wrkNo);
+                    ledCommand.setIoType(ioType);
+                    // 鍑哄簱妯″紡
+                    switch (ioType) {
+                        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("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkNo, ioType);
+                            break;
+                    }
+                    ledCommand.setSourceLocNo(sourceLocNo);
+                    ledCommand.setLocNo(locNo);
+                    ledCommand.setStaNo(wrkStaNo);
+                    ledCommand.setBarcode(barcode);
+                    if (ioType != 110 && ioType != 10) {
+                        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
+                        wrkDetls.forEach(wrkDetl -> {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), wrkDetl.getStock(), wrkDetl.getSpecs(), wrkDetl.getSuppCode()));
+                        });
 
-            try {
-                // 淇敼涓绘。led鏍囪
-                for (WrkMast wrkMast : wrkMasts) {
-                    wrkMast.setOveMk("Y");
-                    wrkMast.setModiTime(new Date());
-                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+//                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
+//                        if (ioType == 101) {
+//                            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
+//                            wrkDetls.forEach(wrkDetl -> {
+//                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), 0D, wrkDetl.getSpecs(), wrkDetl.getSuppCode()));
+//                            });
+////                            locDetls.forEach(locDetl -> {
+////                                Wrapper<WrkDetl> wrapper = new EntityWrapper<WrkDetl>().eq("matnr", locDetl.getMatnr()).eq("wrk_no", wrkNo);
+////                                Utils.wapperSetCondition(wrapper, "batch", locDetl.getBatch());
+////                                Utils.wapperSetCondition(wrapper, "three_code", locDetl.getThreeCode());
+////                                Utils.wapperSetCondition(wrapper, "dead_time", locDetl.getDeadTime());
+////                                Utils.wapperSetCondition(wrapper, "supp_code", locDetl.getSuppCode());//鏂欑鐮�
+////                                List<WrkDetl> detl = wrkDetlService.selectList(wrapper);
+////                                if (Cools.isEmpty(detl)) {
+////                                    String suppCode = "";
+////                                    if (locDetl.getSuppCode() != null) {
+////                                        suppCode = locDetl.getSuppCode();
+////                                    }
+////                                    ledCommand.getMatDtos().add(new MatDto(locDetl.getMatnr(), locDetl.getMaktx(), 0D, locDetl.getAnfme(), locDetl.getSpecs(), suppCode));
+////                                } else {
+////                                    //鍑哄簱鏁伴噺绱
+////                                    Double conut = 0.0;
+////                                    for (WrkDetl wrkDetl : detl) {
+////                                        conut = conut + wrkDetl.getAnfme();
+////                                    }
+////
+////                                    for (WrkDetl wrkDetl : detl) {
+////                                        String suppCode = "";
+////                                        if (wrkDetl.getSuppCode() != null) {
+////                                            suppCode = wrkDetl.getSuppCode();
+////                                        }
+////                                        ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), (locDetl.getAnfme() - conut), wrkDetl.getSpecs(), suppCode, wrkDetl.getOrderNo()));
+////                                    }
+////                                }
+////
+////                            });
+//                        } else {
+//                            locDetls.forEach(locDetl -> {
+//                                Wrapper<WrkDetl> wrapper = new EntityWrapper<WrkDetl>().eq("matnr", locDetl.getMatnr()).eq("wrk_no", wrkNo);
+//                                Utils.wapperSetCondition(wrapper, "batch", locDetl.getBatch());
+//                                Utils.wapperSetCondition(wrapper, "three_code", locDetl.getThreeCode());
+//                                Utils.wapperSetCondition(wrapper, "dead_time", locDetl.getDeadTime());
+//                                Utils.wapperSetCondition(wrapper, "supp_code", locDetl.getSuppCode());//鏂欑鐮�
+//                                List<WrkDetl> detl = wrkDetlService.selectList(wrapper);
+//                                if (Cools.isEmpty(detl)) {
+//                                    String suppCode = "";
+//                                    if (locDetl.getSuppCode() != null) {
+//                                        suppCode = locDetl.getSuppCode();
+//                                    }
+//                                    ledCommand.getMatDtos().add(new MatDto(locDetl.getMatnr(), locDetl.getMaktx(), 0D, locDetl.getAnfme(), locDetl.getSpecs(), suppCode));
+//                                } else {
+//                                    //鍑哄簱鏁伴噺绱
+//                                    Double conut = 0.0;
+//                                    for (WrkDetl wrkDetl : detl) {
+//                                        conut = conut + wrkDetl.getAnfme();
+//                                    }
+//
+//                                    for (WrkDetl wrkDetl : detl) {
+//                                        String suppCode = "";
+//                                        if (wrkDetl.getSuppCode() != null) {
+//                                            suppCode = wrkDetl.getSuppCode();
+//                                        }
+//                                        ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), (wrkDetl.getStock() - conut), wrkDetl.getSpecs(), suppCode, wrkDetl.getOrderNo()));
+//                                    }
+//                                }
+//
+//                            });
+//                        }
+//
+//
+//                        if (ioType == 107) {
+//                            locDetls = new ArrayList<>();
+//                            ledCommand.setMatDtos(new ArrayList<>());
+//                        }
+//
+//                        if (locDetls.isEmpty() && ioType != 101) {
+//                            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
+//                            wrkDetls.forEach(wrkDetl -> {
+//                                if (wrkDetl.getAnfme() > 0D) {
+//                                    ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), wrkDetl.getAnfme(), wrkDetl.getSpecs(), wrkDetl.getSuppCode()));
+//                                }
+//                            });
+//
+//                            if (wrkDetls.isEmpty()) {//浠庡巻鍙叉。鏌ヨ
+//                                List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectLatestByWorkNo(wrkNo, barcode);
+//                                for (WrkDetlLog wrkDetlLog : wrkDetlLogs) {
+//                                    if (wrkDetlLog.getAnfme() > 0D) {
+//                                        ledCommand.getMatDtos().add(new MatDto(wrkDetlLog.getMatnr(), wrkDetlLog.getMaktx(), wrkDetlLog.getAnfme(), wrkDetlLog.getAnfme(), wrkDetlLog.getSpecs(), wrkDetlLog.getSuppCode()));
+//                                    }
+//                                }
+//                            }
+//                        }
+                    }
+
+                    commands.add(ledCommand);
+                }
+                Set<Integer> workNos = null;
+                if (!wrkMasts.isEmpty()) {
+                    workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
+                }else {
+                    workNos = wrkMastLogs.stream().map(WrkMastLog::getWrkNo).collect(Collectors.toSet());
+                }
+                // 鑾峰彇LED绾跨▼
+                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
+                // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
+                if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
+                    continue;
+                }
+                // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
+                if (!commands.isEmpty()) {
+                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
+                        log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                        continue;
+                    } else {
+                        ledThread.setLedMk(false);
                     }
                 }
 
-                // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
-                ledThread.setWorkNos(workNos);
+                try {
+                    // 淇敼涓绘。led鏍囪
+                    for (WrkMast wrkMast : wrkMasts) {
+                        wrkMast.setOveMk("Y");
+                        wrkMast.setModiTime(new Date());
+                        if (wrkMastMapper.updateById(wrkMast) == 0) {
+                            throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                        }
+                    }
 
-            } catch (Exception e) {
-                e.printStackTrace();
-                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
+                    ledThread.setWorkNos(workNos);
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                }
+
             }
-
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -2941,7 +3134,8 @@
      * 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
      */
     public void ledReset() {
-//        for (LedSlave led : slaveProperties.getLed()) {
+        try {
+            //        for (LedSlave led : slaveProperties.getLed()) {
 //
 //            // 鑾峰彇杈撻�佺嚎plc绾跨▼
 //            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -2971,31 +3165,34 @@
 //                }
 //            }
 //        }
-        for (LedSlave led : slaveProperties.getLed()) {
-            // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-            // 鍛戒护闆嗗悎
-            boolean reset = true;
-            for (Integer staNo : led.getStaArr()) {
-                // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (staProtocol == null) {
-                    continue;
+            for (LedSlave led : slaveProperties.getLed()) {
+                // 鑾峰彇杈撻�佺嚎plc绾跨▼
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+                // 鍛戒护闆嗗悎
+                boolean reset = true;
+                for (Integer staNo : led.getStaArr()) {
+                    // 鑾峰彇鍙夎溅绔欑偣
+                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                    if (staProtocol == null) {
+                        continue;
+                    }
+                    if (staProtocol.isLoading()) {
+                        reset = false;
+                        break;
+                    }
                 }
-                if (staProtocol.isLoading()) {
-                    reset = false;
-                    break;
+                // 鑾峰彇led绾跨▼
+                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
+                // led鏄剧ず榛樿鍐呭
+                if (reset) {
+                    ledThread.setLedMk(true);
+                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
+                        log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    }
                 }
             }
-            // 鑾峰彇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(2, new ArrayList<>()))) {
-                    log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                }
-            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -3003,80 +3200,84 @@
      * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
      */
     public synchronized void loopShuttleCharge() {
-        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                continue;
-            }
-
-            //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
-            if (!shuttleProtocol.isRequireCharge()) {
-                continue;
-            }
-
-            WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttleProtocol.getShuttleNo().intValue());
-            if (wrkCharge != null) {//宸叉湁鍏呯數浠诲姟
-                continue;
-            }
-
-            //灏忚溅鎵�鍦ㄦゼ灞�
-            int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
-            ShuttleChargeType shuttleCharge = null;
-
-            //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
-            for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
-                if (lev != Utils.getLev(chargeType.locNo)) {
-                    continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
+        try {
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+                if (shuttleProtocol == null) {
+                    continue;
                 }
 
-                //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
-                if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
-                    shuttleCharge = chargeType;
-                    break;
+                //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
+                if (!shuttleProtocol.isRequireCharge()) {
+                    continue;
                 }
-            }
 
-            if (shuttleCharge == null) {
-                //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
-                //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
+                WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttleProtocol.getShuttleNo().intValue());
+                if (wrkCharge != null) {//宸叉湁鍏呯數浠诲姟
+                    continue;
+                }
+
+                //灏忚溅鎵�鍦ㄦゼ灞�
+                int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
+                ShuttleChargeType shuttleCharge = null;
+
+                //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
                 for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
-                    if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
-                        //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
-                        int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞�
-                        boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
-                        if (checkLevHasShuttle) {
-                            //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
-                            continue;
-                        }
+                    if (lev != Utils.getLev(chargeType.locNo)) {
+                        continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
+                    }
 
+                    //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
+                    if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
                         shuttleCharge = chargeType;
                         break;
                     }
                 }
-            }
 
-            if (shuttleCharge == null) {
-                continue;
-            }
+                if (shuttleCharge == null) {
+                    //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
+                    //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
+                    for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
+                        if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
+                            //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                            int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞�
+                            boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
+                            if (checkLevHasShuttle) {
+                                //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                                continue;
+                            }
 
-            String chargeLocNo = shuttleCharge.locNo;
-            wrkCharge = new WrkCharge();
-            wrkCharge.setShuttleNo(shuttle.getId());
-            wrkCharge.setCharge(shuttleCharge.id);
-            wrkCharge.setWrkNo(commonService.getChargeWorkNo(4));
-            wrkCharge.setWrkSts(51L);   // 51.鍑嗗鍏呯數
-            wrkCharge.setIoPri((double) 10);
-            wrkCharge.setLocNo(chargeLocNo);
-            wrkCharge.setMemo("charge");
-            wrkCharge.setAppeTime(new Date());
-            if (!wrkChargeService.insert(wrkCharge)) {
-                News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
-                continue;
-            }
+                            shuttleCharge = chargeType;
+                            break;
+                        }
+                    }
+                }
 
-            News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", shuttle.getId());
+                if (shuttleCharge == null) {
+                    continue;
+                }
+
+                String chargeLocNo = shuttleCharge.locNo;
+                wrkCharge = new WrkCharge();
+                wrkCharge.setShuttleNo(shuttle.getId());
+                wrkCharge.setCharge(shuttleCharge.id);
+                wrkCharge.setWrkNo(commonService.getChargeWorkNo(4));
+                wrkCharge.setWrkSts(51L);   // 51.鍑嗗鍏呯數
+                wrkCharge.setIoPri((double) 10);
+                wrkCharge.setLocNo(chargeLocNo);
+                wrkCharge.setMemo("charge");
+                wrkCharge.setAppeTime(new Date());
+                if (!wrkChargeService.insert(wrkCharge)) {
+                    News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
+                    continue;
+                }
+
+                News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", shuttle.getId());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -3084,157 +3285,168 @@
      * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
      */
     public synchronized void executeShuttleCharge() {
-        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-            WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttle.getId());
-            if (wrkCharge == null) {
-                continue;
-            }
-
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkCharge.getShuttleNo());
-            if (shuttleThread == null) {
-                continue;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                continue;
-            }
-
-            if (wrkCharge.getWrkSts() == 51) {
-                if (!shuttleProtocol.isIdleNoCharge()) {
+        try {
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttle.getId());
+                if (wrkCharge == null) {
                     continue;
                 }
 
-                if (!shuttleProtocol.getCurrentLocNo().equals(wrkCharge.getLocNo())) {
-                    //灏忚溅涓嶅湪鍏呯數妗╀綅缃�
-                    shuttleDispatchUtils.dispatchShuttle(wrkCharge.getWrkNo(), wrkCharge.getLocNo(), shuttle.getId());//璋冨害灏忚溅鍘诲厖鐢垫々
+                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkCharge.getShuttleNo());
+                if (shuttleThread == null) {
+                    continue;
+                }
+                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+                if (shuttleProtocol == null) {
                     continue;
                 }
 
-                //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠�
-                NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), true);
-                ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-                commands.add(chargeCommand);
-                //鍒涘缓鍒嗛厤鍛戒护
-                ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-                assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-                assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
-                assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
-                assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-                assignCommand.setCommands(commands);//杩愯鍛戒护
-
-                wrkCharge.setWrkSts(52L);//51.鐢熸垚鍏呯數浠诲姟 => 52.灏忚溅鍘诲厖鐢典腑
-                wrkCharge.setModiTime(new Date());
-                if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-                    //涓嬪彂浠诲姟
-                    MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                }
-            } else if (wrkCharge.getWrkSts() == 52) {
-                //妫�娴嬪皬杞︽槸鍚︽弧鐢�
-
-                //鑾峰彇婊$數闃堝��
-                int maxPower = 95;
-                EntityWrapper<Config> wrapper = new EntityWrapper<>();
-                wrapper.eq("code", "chargeMaxValue");
-                Config config = configService.selectOne(wrapper);
-                if (config != null) {
-                    maxPower = Integer.parseInt(config.getValue());
-                }
-
-                if (shuttleProtocol.getPowerPercent() < maxPower) {
-                    continue;
-                }
-
-                //***************鍒ゆ柇鏄惁婊″厖鏍″噯***************
-                EntityWrapper<Config> wrapper1 = new EntityWrapper<>();
-                wrapper.eq("code", "shuttleMaxPowerVerify");
-                Config config1 = configService.selectOne(wrapper1);
-                if (config1 != null) {
-                    if (config1.getValue().equals("true")) {
-                        if (shuttleProtocol.getVoltage() < 5630) {
-                            continue;//鐢靛帇涓嶅缁х画鍏呯數
-                        }
-                    }
-                }
-                //***************鍒ゆ柇鏄惁婊″厖鏍″噯***************
-
-                //灏忚溅婊$數锛岀粨鏉熷厖鐢典换鍔�
-                NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), false);
-                ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-                commands.add(chargeCommand);
-                //鍒涘缓鍒嗛厤鍛戒护
-                ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-                assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-                assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
-                assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
-                assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-                assignCommand.setCommands(commands);//杩愯鍛戒护
-
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                try {
-                    Thread.sleep(3000);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-
-                wrkCharge.setWrkSts(53L);//52.灏忚溅鍘诲厖鐢典腑 => 53.灏忚溅鍏呯數瀹屾垚
-                wrkCharge.setModiTime(new Date());
-                if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE.id);
-                    shuttleProtocol.setTaskNo(0);
-                    shuttleProtocol.setPakMk(false);
-                }
-            } else if (wrkCharge.getWrkSts() == 53) {
-                if (shuttleProtocol.getChargState() == 0) {//灏忚溅澶勪簬鏈厖鐢电姸鎬�
-                    boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkCharge.getLocNo()), shuttleThread.getSlave().getId(), shuttleThread);
-                    if (!result) {
+                if (wrkCharge.getWrkSts() == 51) {
+                    if (!shuttleProtocol.isIdleNoCharge()) {
                         continue;
                     }
 
-                    wrkCharge.setWrkSts(60L);//53.灏忚溅鍏呯數瀹屾垚 => 60.鍏呯數浠诲姟瀹屾垚
+                    if (shuttleProtocol.getSuspendState() == 1) {
+                        continue;//绠″埗涓�
+                    }
+
+                    if (!shuttleProtocol.getCurrentLocNo().equals(wrkCharge.getLocNo())) {
+                        //灏忚溅涓嶅湪鍏呯數妗╀綅缃�
+                        shuttleDispatchUtils.dispatchShuttle(wrkCharge.getWrkNo(), wrkCharge.getLocNo(), shuttle.getId());//璋冨害灏忚溅鍘诲厖鐢垫々
+                        continue;
+                    }
+
+                    //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠�
+                    NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), true);
+                    ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
+                    commands.add(chargeCommand);
+                    //鍒涘缓鍒嗛厤鍛戒护
+                    ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+                    assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+                    assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
+                    assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
+                    assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+                    assignCommand.setCommands(commands);//杩愯鍛戒护
+
+                    wrkCharge.setWrkSts(52L);//51.鐢熸垚鍏呯數浠诲姟 => 52.灏忚溅鍘诲厖鐢典腑
                     wrkCharge.setModiTime(new Date());
                     if (wrkChargeMapper.updateById(wrkCharge) > 0) {
+                        //涓嬪彂浠诲姟
+                        MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+                    }
+                } else if (wrkCharge.getWrkSts() == 52) {
+                    //妫�娴嬪皬杞︽槸鍚︽弧鐢�
 
+                    //鑾峰彇婊$數闃堝��
+                    int maxPower = 95;
+                    EntityWrapper<Config> wrapper = new EntityWrapper<>();
+                    wrapper.eq("code", "chargeMaxValue");
+                    Config config = configService.selectOne(wrapper);
+                    if (config != null) {
+                        maxPower = Integer.parseInt(config.getValue());
+                    }
+
+                    if (shuttleProtocol.getPowerPercent() < maxPower) {
+                        continue;
+                    }
+
+                    //***************鍒ゆ柇鏄惁婊″厖鏍″噯***************
+                    EntityWrapper<Config> wrapper1 = new EntityWrapper<>();
+                    wrapper.eq("code", "shuttleMaxPowerVerify");
+                    Config config1 = configService.selectOne(wrapper1);
+                    if (config1 != null) {
+                        if (config1.getValue().equals("true")) {
+                            if (shuttleProtocol.getVoltage() < 5630) {
+                                continue;//鐢靛帇涓嶅缁х画鍏呯數
+                            }
+                        }
+                    }
+                    //***************鍒ゆ柇鏄惁婊″厖鏍″噯***************
+
+                    //灏忚溅婊$數锛岀粨鏉熷厖鐢典换鍔�
+                    NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), false);
+                    ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
+                    commands.add(chargeCommand);
+                    //鍒涘缓鍒嗛厤鍛戒护
+                    ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+                    assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+                    assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
+                    assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
+                    assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+                    assignCommand.setCommands(commands);//杩愯鍛戒护
+
+                    //涓嬪彂浠诲姟
+                    MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+                    try {
+                        Thread.sleep(3000);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+
+                    wrkCharge.setWrkSts(53L);//52.灏忚溅鍘诲厖鐢典腑 => 53.灏忚溅鍏呯數瀹屾垚
+                    wrkCharge.setModiTime(new Date());
+                    if (wrkChargeMapper.updateById(wrkCharge) > 0) {
+                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE.id);
+                        shuttleProtocol.setTaskNo(0);
+                        shuttleProtocol.setPakMk(false);
+                    }
+                } else if (wrkCharge.getWrkSts() == 53) {
+                    if (shuttleProtocol.getChargState() == 0) {//灏忚溅澶勪簬鏈厖鐢电姸鎬�
+                        boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkCharge.getLocNo()), shuttleThread.getSlave().getId(), shuttleThread);
+                        if (!result) {
+                            continue;
+                        }
+
+                        wrkCharge.setWrkSts(60L);//53.灏忚溅鍏呯數瀹屾垚 => 60.鍏呯數浠诲姟瀹屾垚
+                        wrkCharge.setModiTime(new Date());
+                        if (wrkChargeMapper.updateById(wrkCharge) > 0) {
+
+                        }
                     }
                 }
+
             }
-
+        } catch (Exception e) {
+            e.printStackTrace();
         }
-
     }
 
     /**
      * 鎵ц灏忚溅绉诲簱浠诲姟
      */
     public synchronized void shuttleMoveExecute() {
-        //鏌ヨ灏忚溅绉诲簱浠诲姟
-        List<WrkMast> wrkMasts = wrkMastMapper.selectShuttleMoveWrk();
-        for (WrkMast wrkMast : wrkMasts) {
-            boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐�
-            if (!stepMoveSta) {
-                continue;
-            }
+        try {
+            //鏌ヨ灏忚溅绉诲簱浠诲姟
+            List<WrkMast> wrkMasts = wrkMastMapper.selectShuttleMoveWrk();
+            for (WrkMast wrkMast : wrkMasts) {
+                boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐�
+                if (!stepMoveSta) {
+                    continue;
+                }
 
-            boolean stepIntoLift = this.shuttleMoveExecuteStepIntoLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈�
-            if (!stepIntoLift) {
-                continue;
-            }
+                boolean stepIntoLift = this.shuttleMoveExecuteStepIntoLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈�
+                if (!stepIntoLift) {
+                    continue;
+                }
 
-            boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑
-            if (!stepLiftMove) {
-                continue;
-            }
+                boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑
+                if (!stepLiftMove) {
+                    continue;
+                }
 
-            boolean stepOutLift = this.shuttleMoveExecuteStepOutLift(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈�
-            if (!stepOutLift) {
-                continue;
-            }
+                boolean stepOutLift = this.shuttleMoveExecuteStepOutLift(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈�
+                if (!stepOutLift) {
+                    continue;
+                }
 
-            boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑
-            if (!stepMoveLoc) {
-                continue;
-            }
+                boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑
+                if (!stepMoveLoc) {
+                    continue;
+                }
 
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -3307,7 +3519,7 @@
                 return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢�
             }
             //灏濊瘯閿佸畾鐩爣绔欒矾寰�
-            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo().intValue(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
             if (!result2) {
                 News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;//璺緞閿佸畾澶辫触
@@ -3316,6 +3528,17 @@
 
             //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
             NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.NORMAL.id);
+            if (result == null) {
+                //璺緞鑾峰彇澶辫触锛岄渶瑕佽В閿佷笂闈㈤攣瀹氱殑璺緞
+                //灏濊瘯瑙i攣鐩爣绔欒矾寰�
+                boolean result3 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo().intValue(), targetNodes, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
+                if (!result3) {
+                    News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮В閿佸け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                    return false;//璺緞瑙i攣澶辫触
+                }
+                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;//璺緞瑙i攣澶辫触
+            }
             List<NyShuttleHttpCommand> commands = result.getCommands();
 
             ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
@@ -3432,8 +3655,12 @@
                 //鑾峰彇鎻愬崌鏈哄懡浠わ紝璋冨害鎻愬崌鏈哄埌婧愮珯浣嶇疆
                 NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceLiftSta.getStaNo(), sourceLiftSta.getStaNo(), wrkMast.getWrkNo());
 
-                Random random = new Random();
-                int deviceWrk = Math.abs((liftCommand.getTaskNo().intValue() + random.nextInt(9999)));//鑾峰彇璁惧宸ヤ綔鍙�
+                int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿
+                BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(String.valueOf(deviceWrk), liftThread.getSlave().getId());
+                if (basLiftOpt != null) {
+                    News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛岃澶囧伐浣滃彿鍑虹幇閲嶅鎯呭喌锛岃鑱旂郴鎶�鏈汉鍛樻敮鎸併��", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                    return false;
+                }
                 liftCommand.setTaskNo((short) deviceWrk);//鏇存崲闅忔満浠诲姟鍙�
 
                 ArrayList<NyLiftCommand> commands = new ArrayList<>();
@@ -3794,7 +4021,7 @@
 
                 if (wrkMast.getWrkSts() == 111) {
                     // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-                    if (wrkMastLocMapper.save(wrkMast.getWrkNo()) <= 0) {
+                    if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) {
                         log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
                     }
                     // 鍒犻櫎宸ヤ綔涓绘。
@@ -3872,63 +4099,36 @@
         return true;
     }
 
-    /**
-     * 鍑哄叆搴撴ā寮忓垏鎹�
-     */
-    public synchronized void outAndIn() {
-        try {
-            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-            for (DevpSlave devp : slaveProperties.getDevp()) {
-                for (DevpSlave.Sta inSta : devp.getInSta()) {
-                    Thread.sleep(500);
-                    boolean a=true,b=true;
-                    List<WrkMast> wrkMasts = wrkMastMapper.selectAll(inSta.getStaNo());
-                    if (Cools.isEmpty(wrkMasts)){
-                        b=false;
-                    }else {
-                        for (WrkMast wrkMast:wrkMasts){
-                            if (wrkMast.getSourceStaNo() > wrkMast.getStaNo()){
-                                a=false;
-                                break;
-                            }
-                        }
-                    }
-                    switch (inSta.getStaNo()) {
-                        case 102://1F
-                            if (a && b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 11));
-                            }else if (b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 12));
-                            }else {
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 10));
-                            }
-                            break;
-                        case 202://2F
-                            if (a && b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 21));
-                            }else if (b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 22));
-                            }else {
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 20));
-                            }
-                            break;
-                        case 302://3F
-                            if (a && b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 31));
-                            }else if (b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 32));
-                            }else {
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 30));
-                            }
-                            break;
-                    }
-                }
+    //鎵弿璁惧PakMk鏍囪鏄惁瓒呮椂
+    public synchronized void scanDevicePakMk() {
+        //鎵弿灏忚溅
+        for (ShuttleSlave slave : slaveProperties.getShuttle()) {
+            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
+            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            if (shuttleProtocol == null) {
+                continue;
             }
 
-        } catch (Exception e) {
-            e.printStackTrace();
+            if ((System.currentTimeMillis() - shuttleProtocol.getSendTime() > (1000*60*5)) && shuttleProtocol.getPakMk()) {
+                //璁惧瓒呰繃5鍒嗛挓杩樻病澶嶄綅鏍囪
+                shuttleProtocol.setPakMk(false);//澶嶄綅鏍囪
+            }
         }
-    }
 
+        //鎵弿鎻愬崌鏈�
+        for (LiftSlave slave : slaveProperties.getLift()) {
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId());
+            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+            if (liftProtocol == null) {
+                continue;
+            }
+
+            if ((System.currentTimeMillis() - liftProtocol.getSendTime() > (1000*60*5)) && liftProtocol.getPakMk()) {
+                //璁惧瓒呰繃5鍒嗛挓杩樻病澶嶄綅鏍囪
+                liftProtocol.setPakMk(false);//澶嶄綅鏍囪
+            }
+        }
+
+    }
 
 }

--
Gitblit v1.9.1