From 0ac76f7d8101903e1d050116f7d3835ce1303dfa Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 06 一月 2025 17:00:37 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 4692 +++++++++++++++++++++++------------------------------------
 1 files changed, 1,821 insertions(+), 2,871 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 d44fec1..bbf300e 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,9 +1,6 @@
 package com.zy.asrs.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.core.common.Cools;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
@@ -12,24 +9,22 @@
 import com.zy.common.model.enums.NavigationMapType;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.*;
-import com.zy.core.DevpThread;
 import com.zy.core.News;
-import com.zy.core.cache.MessageQueue;
+import com.zy.core.action.ForkLiftAction;
+import com.zy.core.action.ShuttleAction;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.dispatcher.ShuttleDispatchUtils;
 import com.zy.core.enums.*;
 import com.zy.core.model.*;
 import com.zy.core.model.command.*;
 import com.zy.core.model.protocol.*;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.*;
-import com.zy.system.entity.Config;
 import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.*;
 
@@ -46,8 +41,6 @@
     @Autowired
     private SlaveProperties slaveProperties;
     @Autowired
-    private WrkMastMapper wrkMastMapper;
-    @Autowired
     private WrkMastService wrkMastService;
     @Autowired
     private LocMastService locMastService;
@@ -62,11 +55,7 @@
     @Autowired
     private BasShuttleErrService basShuttleErrService;
     @Autowired
-    private WrkChargeService wrkChargeService;
-    @Autowired
     private CommonService commonService;
-    @Autowired
-    private WrkChargeMapper wrkChargeMapper;
     @Autowired
     private BasMapService basMapService;
     @Autowired
@@ -85,673 +74,447 @@
     private NavigateMapUtils navigateMapUtils;
     @Autowired
     private NavigateMapData navigateMapData;
+    @Autowired
+    private NavigateUtils navigateUtils;
+    @Autowired
+    private ShuttleOperaUtils shuttleOperaUtils;
+    @Autowired
+    private ShuttleAction shuttleAction;
+    @Autowired
+    private ForkLiftAction forkLiftAction;
 
 
-    /**
-     * 缁勬墭
-     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
-     */
-    public void generateStoreWrkFile() {
-        try {
-            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-            for (DevpSlave devp : slaveProperties.getDevp()) {
-                // 閬嶅巻鍏ュ簱鍙�
-                for (DevpSlave.Sta inSta : devp.getInSta()) {
-                    // 鑾峰彇鍏ュ簱绔欎俊鎭�
-                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
-                    if (staProtocol == null) {
-                        continue;
-                    } else {
-                        staProtocol = staProtocol.clone();
-                    }
-                    Short workNo = staProtocol.getWorkNo();
-                    // 灏哄妫�娴嬪紓甯�
-                    boolean back = false;
-                    String errMsg = "寮傚父锛�";
-                    if (staProtocol.isFrontErr()) {
-                        errMsg = errMsg + "鍓嶈秴闄愶紱";
-                        back = true;
-                    }
-                    if (staProtocol.isBackErr()) {
-                        errMsg = errMsg + "鍚庤秴闄�";
-                        back = true;
-                    }
-                    if (staProtocol.isHighErr()) {
-                        errMsg = errMsg + "楂樿秴闄�";
-                        back = true;
-                    }
-                    if (staProtocol.isLeftErr()) {
-                        errMsg = errMsg + "宸﹁秴闄�";
-                        back = true;
-                    }
-                    if (staProtocol.isRightErr()) {
-                        errMsg = errMsg + "鍙宠秴闄�";
-                        back = true;
-                    }
-                    if (staProtocol.isWeightErr()) {
-                        errMsg = errMsg + "瓒呴噸";
-                        back = true;
-                    }
-                    if (staProtocol.isBarcodeErr()) {
-                        errMsg = errMsg + "鎵爜澶辫触";
-                        back = true;
-                    }
-                    // 閫�鍥�
-                    if (back) {
-                        // led 寮傚父鏄剧ず
-                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-                        if (ledThread != null) {
-                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
-                        }
-                        continue;
-                    }
-
-                    // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-                    if (staProtocol.isAutoing() && staProtocol.isLoading()
-                            && staProtocol.isInEnable()
-                            && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
-                    ) {
-
-                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
-                        if (barcodeThread == null) {
-                            continue;
-                        }
-                        String barcode = barcodeThread.getBarcode();
-                        if (!Cools.isEmpty(barcode)) {
-//                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-                            if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) {
-//                            staProtocol.setWorkNo((short) 32002);
-//                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
-//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-
-                                // led 寮傚父鏄剧ず
-                                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-                                if (ledThread != null) {
-                                    String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-                                }
-                                continue;
-                            }
-                        } else {
-//                        staProtocol.setWorkNo((short) 32002);
-//                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
-//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-
+//    /**
+//     * 缁勬墭
+//     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
+//     */
+//    public void generateStoreWrkFile() {
+//        try {
+//            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+//            for (DevpSlave devp : slaveProperties.getDevp()) {
+//                // 閬嶅巻鍏ュ簱鍙�
+//                for (DevpSlave.Sta inSta : devp.getInSta()) {
+//                    // 鑾峰彇鍏ュ簱绔欎俊鎭�
+//                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+//                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+//                    if (staProtocol == null) {
+//                        continue;
+//                    } else {
+//                        staProtocol = staProtocol.clone();
+//                    }
+//                    Short workNo = staProtocol.getWorkNo();
+//                    // 灏哄妫�娴嬪紓甯�
+//                    boolean back = false;
+//                    String errMsg = "寮傚父锛�";
+//                    if (staProtocol.isFrontErr()) {
+//                        errMsg = errMsg + "鍓嶈秴闄愶紱";
+//                        back = true;
+//                    }
+//                    if (staProtocol.isBackErr()) {
+//                        errMsg = errMsg + "鍚庤秴闄�";
+//                        back = true;
+//                    }
+//                    if (staProtocol.isHighErr()) {
+//                        errMsg = errMsg + "楂樿秴闄�";
+//                        back = true;
+//                    }
+//                    if (staProtocol.isLeftErr()) {
+//                        errMsg = errMsg + "宸﹁秴闄�";
+//                        back = true;
+//                    }
+//                    if (staProtocol.isRightErr()) {
+//                        errMsg = errMsg + "鍙宠秴闄�";
+//                        back = true;
+//                    }
+//                    if (staProtocol.isWeightErr()) {
+//                        errMsg = errMsg + "瓒呴噸";
+//                        back = true;
+//                    }
+//                    if (staProtocol.isBarcodeErr()) {
+//                        errMsg = errMsg + "鎵爜澶辫触";
+//                        back = true;
+//                    }
+//                    // 閫�鍥�
+//                    if (back) {
 //                        // led 寮傚父鏄剧ず
 //                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
 //                        if (ledThread != null) {
-//                            String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-//                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+//                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
 //                        }
-                            continue;
-                        }
-
-                        // 杩囨护鐩樼偣/鎷f枡/骞舵澘浠诲姟
-                        WrkMast wrkMast1 = wrkMastMapper.selectPickStepByBarcode(barcode);
-                        if (null != wrkMast1) {
-                            continue;
-                        }
-
-                        // 鍒ゆ柇閲嶅宸ヤ綔妗�
-                        WrkMast wrkMast2 = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
-                        if (wrkMast2 != null) {
-                            News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast2.getWrkNo());
-                            continue;
-                        }
-
-                        try {
-                            LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-                            SearchLocParam param = new SearchLocParam();
-                            param.setBarcode(barcode);
-                            param.setIoType(1);
-                            param.setSourceStaNo(inSta.getStaNo());
-                            param.setLocType1(locTypeDto.getLocType1());
-                            String response = new HttpHandler.Builder()
-                                    .setUri(wmsUrl)
-                                    .setPath("/rpc/pakin/loc/v2")
-                                    .setJson(JSON.toJSONString(param))
-                                    .build()
-                                    .doPost();
-                            JSONObject jsonObject = JSON.parseObject(response);
-                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-                            Integer code = jsonObject.getInteger("code");
-                            if (code.equals(200)) {
-                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-                                // plc 澶勭悊
-                                barcodeThread.setBarcode("");
-//                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-//                            staProtocol.setStaNo(dto.getStaNo().shortValue());
-//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                        continue;
+//                    }
 //
-//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//                            if (!result) {
-//                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-//                            }
-
-                                // 鍒ゆ柇閲嶅宸ヤ綔妗�
-                                WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
-                                if (wrkMast == null) {
-                                    continue;
-                                }
-
-                                // 鏇存柊宸ヤ綔涓绘。
-                                wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
-                                wrkMast.setModiTime(new Date());
-                                if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                    News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
-                                }
-
-                            } else if (code == 500) {
-                                if (ledThread != null) {
-                                    String errorMsg = jsonObject.getString("msg");
-                                    if (!Cools.isEmpty(errorMsg)) {
-                                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-                                        ledThread.setLedMk(false);
-                                    }
-                                }
-                                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绔欏洖閫�淇″彿
-//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(5, staProtocol));
-
-                                // led 寮傚父鏄剧ず
-                                if (ledThread != null) {
-                                    String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒";
-                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-                                    ledThread.setLedMk(false);
-                                }
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 鎷f枡銆佸苟鏉垮啀鍏ュ簱
-     */
-    @Transactional
-    public synchronized void stnToCrnStnPick(){
-        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()) {
-
-                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                        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) {
+//                    // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+//                    if (staProtocol.isAutoing() && staProtocol.isLoading()
+//                            && staProtocol.isInEnable()
+//                            && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
+//                    ) {
+//
+//                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+//                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
+//                        if (barcodeThread == null) {
+//                            continue;
+//                        }
+//                        String barcode = barcodeThread.getBarcode();
+//                        if (!Cools.isEmpty(barcode)) {
+////                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+//                            if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) {
+////                            staProtocol.setWorkNo((short) 32002);
+////                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+////                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//
+//                                // led 寮傚父鏄剧ず
+//                                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+//                                if (ledThread != null) {
+//                                    String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
+//                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+//                                }
 //                                continue;
 //                            }
+//                        } else {
+////                        staProtocol.setWorkNo((short) 32002);
+////                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
+////                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+////                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
 //
-//                            if (!locMast.getLocSts().equals("F")) {
-//                                flag = true;
-//                                th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�";
-//                                break;
+////                        // led 寮傚父鏄剧ず
+////                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+////                        if (ledThread != null) {
+////                            String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
+////                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+////                        }
+//                            continue;
+//                        }
+//
+//                        // 杩囨护鐩樼偣/鎷f枡/骞舵澘浠诲姟
+//                        WrkMast wrkMast1 = wrkMastMapper.selectPickStepByBarcode(barcode);
+//                        if (null != wrkMast1) {
+//                            continue;
+//                        }
+//
+//                        // 鍒ゆ柇閲嶅宸ヤ綔妗�
+//                        WrkMast wrkMast2 = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
+//                        if (wrkMast2 != null) {
+//                            News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast2.getWrkNo());
+//                            continue;
+//                        }
+//
+//                        try {
+//                            LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+//                            SearchLocParam param = new SearchLocParam();
+//                            param.setBarcode(barcode);
+//                            param.setIoType(1);
+//                            param.setSourceStaNo(inSta.getStaNo());
+//                            param.setLocType1(locTypeDto.getLocType1());
+//                            String response = new HttpHandler.Builder()
+//                                    .setUri(wmsUrl)
+//                                    .setPath("/rpc/pakin/loc/v2")
+//                                    .setJson(JSON.toJSONString(param))
+//                                    .build()
+//                                    .doPost();
+//                            JSONObject jsonObject = JSON.parseObject(response);
+//                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+//                            Integer code = jsonObject.getInteger("code");
+//                            if (code.equals(200)) {
+//                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+//                                // plc 澶勭悊
+//                                barcodeThread.setBarcode("");
+////                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
+////                            staProtocol.setStaNo(dto.getStaNo().shortValue());
+////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+////
+////                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+////                            if (!result) {
+////                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+////                            }
+//
+//                                // 鍒ゆ柇閲嶅宸ヤ綔妗�
+//                                WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
+//                                if (wrkMast == null) {
+//                                    continue;
+//                                }
+//
+//                                // 鏇存柊宸ヤ綔涓绘。
+//                                wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
+//                                wrkMast.setModiTime(new Date());
+//                                if (wrkMastMapper.updateById(wrkMast) == 0) {
+//                                    News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+//                                }
+//
+//                            } else if (code == 500) {
+//                                if (ledThread != null) {
+//                                    String errorMsg = jsonObject.getString("msg");
+//                                    if (!Cools.isEmpty(errorMsg)) {
+//                                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+//                                        ledThread.setLedMk(false);
+//                                    }
+//                                }
+//                                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绔欏洖閫�淇″彿
+////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+////                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(5, staProtocol));
+//
+//                                // led 寮傚父鏄剧ず
+//                                if (ledThread != null) {
+//                                    String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒";
+//                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+//                                    ledThread.setLedMk(false);
+//                                }
 //                            }
+//                        } 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;
-//                        }
-
-                        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();
-                        }
-                    }
-                }
-
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 鐩樼偣鍐嶅叆搴�
-     */
-    @Transactional
-    public synchronized void stnToCrnStnPlate(){
-        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()) {
-
-                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                        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 ((wrkMast.getIoType() != 107)
-                                || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
-                            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(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;
-//                                }
-//
-//                                // 鏇存柊宸ヤ綔妗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);
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                        }
-
-                    }
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
+//                    }
+//                }
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
 
 //    /**
-//     * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
+//     * 鎷f枡銆佸苟鏉垮啀鍏ュ簱
 //     */
 //    @Transactional
 //    public synchronized void stnToCrnStnPick(){
-//        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.getWorkNo() > 0 && staProtocol.getWorkNo() < 9999)
-////                        && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue())
-//                        && 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 (staProtocol.isAutoing()
+//                            && staProtocol.isLoading()
+//                            && staProtocol.isInEnable()
+////                        && (staProtocol.getWorkNo() > 0)
+//                            && staProtocol.isPakMk()) {
 //
-//                    WrkMast wrkMast = null;
-//                    wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode);
-//                    if (wrkMast == null) {
-//                        continue;
-//                    }
-////                    if (staProtocol.getWorkNo() == 9996) {
-////                        String barcode = barcodeThread.getBarcode();
-////                        if(!Cools.isEmpty(barcode)) {
-////                            News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
-////                            if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
-////                                staProtocol.setWorkNo((short) 32002);
-////                                staProtocol.setStaNo(pickSta.getBackSta().shortValue());
-////                                devpThread.setPakMk(staProtocol.getSiteId(), false);
-////                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-////
-////                                // led 寮傚父鏄剧ず
-////                                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
-////                                if (ledThread != null) {
-////                                    String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-////                                    MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
-////                                }
+//                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+//                        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) {
 ////                                continue;
 ////                            }
-////                        } else {
-////                            staProtocol.setWorkNo((short) 32002);
-////                            staProtocol.setStaNo(pickSta.getBackSta().shortValue());
-////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-////                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
 ////
-////                            // led 寮傚父鏄剧ず
-////                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
-////                            if (ledThread != null) {
-////                                String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-////                                MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+////                            if (!locMast.getLocSts().equals("F")) {
+////                                flag = true;
+////                                th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�";
+////                                break;
 ////                            }
+////                        }
+////                        if (flag) {
+////                            News.info(th);
 ////                            continue;
 ////                        }
-////                        wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode);
-////                        if (null == wrkMast) {
-////                            News.error("{}鏉$爜閿欒锛屾殏鏃犳嫞鏂欎换鍔★紒", barcode);
+////                        //*********************鍚屽簱浣嶇粍鏍¢獙*********************
+//
+////                        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+////                        if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
+////                            News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+////                            continue;
 ////                        }
-////                    }
 //
-//                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
-//                        || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) {
-//                        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);
 //
-//                    // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-//                    if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
-//                        throw new CoolException(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-//                    }
-//
-//                    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.getStaNo()); // 婧愮珯
-////                            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) {
-//                        throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-//                    }
-//                    if (wrkMastMapper.setSteEmpty(wrkMast.getWrkNo()) == 0) {
-//                        throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-//                    }
-//
-//                    // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
-//                    LocMast locMast = locMastService.selectById(sourceLocNo);
-//                    locMast.setLocSts("Q");
-//                    locMast.setModiTime(new Date());
-//                    if (!locMastService.updateById(locMast)) {
-//                        throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
-//                    }
-//                    barcodeThread.setBarcode("");//娓呯悊鏉$爜
-//
-////                    try {
-////                        // 璁块棶 WMS 鑾峰彇鍏ュ簱搴撲綅
-////                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-////                        SearchLocParam param = new SearchLocParam();
-////                        param.setWrkNo(wrkMast.getWrkNo());
-////                        param.setIoType(wrkMast.getIoType());
-////                        param.setSourceStaNo(pickSta.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);
-////                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
-////                        Integer code = jsonObject.getInteger("code");
-////                        if (code.equals(200)) {
-////                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-////
-//////                            // 鑾峰彇鐩爣绔�
-//////                            Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-//////                                    .eq("type_no", wrkMast.getIoType() - 50)
-//////                                    .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
-//////                                    .eq("crn_no", dto.getCrnNo()); // 鍫嗗灈鏈哄彿
-//////                            StaDesc staDesc = staDescService.selectOne(wrapper);
-//////                            if (Cools.isEmpty(staDesc)) {
-//////                                News.error("鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
-//////                                continue;
-//////                            }
-//////                            // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
-//////                            Integer staNo = staDesc.getCrnStn();
-////
-////                            // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
-//////                        if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
-//////                            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
-//////                        }
-////                            // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-////                            if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
-////                                throw new CoolException(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-////                            }
-////
-////                            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.getStaNo()); // 婧愮珯
-//////                            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) {
-////                                throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-////                            }
-////                            if (wrkMastMapper.setSteEmpty(wrkMast.getWrkNo()) == 0) {
-////                                throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-////                            }
-////
-////                            // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
-////                            LocMast locMast = locMastService.selectById(sourceLocNo);
-////                            locMast.setLocSts("Q");
-////                            locMast.setModiTime(new Date());
-////                            if (!locMastService.updateById(locMast)) {
-////                                throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
-////                            }
-////
-//////                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-//////                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-//////                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
-//////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-//////                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//////                            if (!result) {
-//////                                News.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿{}]", devp.getId());
-//////                            }
-////
-////                            barcodeThread.setBarcode("");//娓呯悊鏉$爜
-////
-////                        } else if (code == 500){
-////                            if (ledThread != null) {
-////                                String errorMsg = jsonObject.getString("msg");
-////                                if (!Cools.isEmpty(errorMsg)) {
-////                                    MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+////                                //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯
+////                                LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo()));
+////                                if (liftStaProtocol == null) {
+////                                    News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触");
+////                                    continue;
 ////                                }
-////                            }
-////                            News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
-////                        } else {
-//////                            staProtocol.setWorkNo((short) 32002);
-//////                            staProtocol.setStaNo(pickSta.getBackSta().shortValue());
-//////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-//////                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
 ////
-////                            // led 寮傚父鏄剧ず
-////                            if (ledThread != null) {
-////                                String errorMsg = jsonObject.getString("msg");
-//////                                String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒";
-////                                MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
-////                            }
-////                        }
-////
-////                    } catch (Exception e) {
-////                        e.printStackTrace();
-////                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-////                    }
+////                                // 鏇存柊宸ヤ綔妗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();
+//                        }
+//                    }
+//                }
 //
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+
+//    /**
+//     * 鐩樼偣鍐嶅叆搴�
+//     */
+//    @Transactional
+//    public synchronized void stnToCrnStnPlate(){
+//        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()) {
+//
+//                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+//                        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 ((wrkMast.getIoType() != 107)
+//                                || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+//                            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(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;
+////                                }
+////
+////                                // 鏇存柊宸ヤ綔妗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);
+//                            }
+//                        } catch (Exception e) {
+//                            e.printStackTrace();
+//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                        }
+//
+//                    }
 //                }
 //            }
-//
+//        } catch (Exception e) {
+//            e.printStackTrace();
 //        }
 //    }
 
@@ -790,1349 +553,871 @@
         }
     }
 
-    /**
-     * 浠巖edis涓噸鍚换鍔�
-     */
-    public synchronized void restartTaskFromRedis() {
-        HashMap<Object, Object> map = redisUtil.getRedis();
-        for (Object key : map.keySet()) {
-            if (key.toString().contains(RedisKeyType.LIFT.key)) {//鎻愬崌鏈轰换鍔�
-                LiftRedisCommand redisCommand = JSON.parseObject(map.get(key).toString(), LiftRedisCommand.class);
-                if (redisCommand == null) {
-                    continue;
-                }
-
-                Short liftNo = redisCommand.getLiftNo();
-                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo.intValue());
-                if (liftThread == null) {
-                    continue;
-                }
-                LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-                if (liftProtocol == null) {
-                    continue;
-                }
-                if (!liftProtocol.isIdle()) {
-                    continue;
-                }
-
-                //鎻愬崌鏈哄浜庣┖闂茬姸鎬侊紝杩涜浠诲姟鐨勬仮澶�
-                liftProtocol.setTaskNo(redisCommand.getWrkNo());//灏嗘彁鍗囨満绾跨▼鍒嗛厤浠诲姟鍙�
-                liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//宸ヤ綔鐘舵��
-
-            }else if(key.toString().contains(RedisKeyType.SHUTTLE.key)){//鍥涘悜绌挎杞︿换鍔�
-                ShuttleRedisCommand redisCommand = JSON.parseObject(map.get(key).toString(), ShuttleRedisCommand.class);
-                if (redisCommand == null) {
-                    continue;
-                }
-
-                Short shuttleNo = redisCommand.getShuttleNo();
-                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo.intValue());
-                if (shuttleThread == null) {
-                    continue;
-                }
-                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-                if (shuttleProtocol == null) {
-                    continue;
-                }
-                if (!shuttleProtocol.isIdle()) {
-                    continue;
-                }
-
-                //鍥涘悜绌挎杞﹀浜庣┖闂茬姸鎬侊紝杩涜浠诲姟鐨勬仮澶�
-                shuttleProtocol.setTaskNo(redisCommand.getWrkNo().intValue());//灏嗗洓鍚戠┛姊溅绾跨▼鍒嗛厤浠诲姟鍙�
-                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);//宸ヤ綔鐘舵��
-            }
-        }
-
-    }
-
-    /**
-     * 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
-     */
-    public synchronized void shuttleInExecute() {
-        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;//绔欑偣涓嶅瓨鍦�
-                }
-
-                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢锛岃嚜鍔ㄣ�佺┖闂层�佹湁鐗�
-                if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) {
-                    News.info("{}浠诲姟锛岃緭閫佺珯鐐圭姸鎬佷笉婊¤冻鍏ュ簱銆傝緭閫佺珯鐐�:{}", wrkMast.getWrkNo(), JSON.toJSONString(liftStaProtocol));
-                    continue;
-                }
-
-                boolean step1 = this.shuttleInExecuteStep1(wrkMast, liftStaProtocol);//灏忚溅鎼叆搴撲腑
-                if (!step1) {
-                    continue;
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
 //    /**
 //     * 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
 //     */
 //    public synchronized void shuttleInExecute() {
-//        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-//        for (DevpSlave devp : slaveProperties.getDevp()) {
-//            // 閬嶅巻鍏ュ簱绔�
-//            for (DevpSlave.StaRack staRack : devp.getRackInStn()) {
-//                // 鑾峰彇鍏ュ簱绔欎俊鎭�
-//                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-//                StaProtocol staProtocol = devpThread.getStation().get(staRack.getStaNo());
-//                if (staProtocol == null) {
-//                    continue;
-//                } else {
-//                    staProtocol = staProtocol.clone();
-//                }
-//                Short workNo = staProtocol.getWorkNo();
-//                BasDevp basDevp = basDevpService.selectById(staProtocol.getSiteId());
-//                if (basDevp == null) {
-//                    continue;//绔欑偣淇℃伅涓嶅瓨鍦�
+//        try {
+//            List<WrkMast> wrkMasts = wrkMastMapper.selectInStep4();
+//            for (WrkMast wrkMast : wrkMasts) {
+//                //鑾峰彇婧愮珯
+//                BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo());
+//                if (sourceBasDevp == null) {
+//                    continue;//绔欑偣涓嶅瓨鍦�
 //                }
 //
-//                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢锛岃嚜鍔ㄣ�佹湁鐗┿�佸洓鍚戠┛姊溅鍙彇淇″彿
-//                if (!(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isShuttleTakeEnable())) {
+//                //鑾峰彇鐩爣绔�
+//                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;
 //                }
 //
-//                WrkMast wrkMast = wrkMastMapper.selectRackInStep4(workNo, staProtocol.getSiteId());
-//                if (wrkMast == null) {
-//                    continue;
-//                }
-//
-//                boolean step1 = this.shuttleInExecuteStep1(wrkMast, basDevp);//灏忚溅鎼叆搴撲腑
+//                boolean step1 = this.shuttleInExecuteStep1(wrkMast, liftStaProtocol);//灏忚溅鎼叆搴撲腑
 //                if (!step1) {
 //                    continue;
 //                }
-//
 //            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
 //        }
-//
 //    }
 
-    /**
-     * 鍏ュ簱-灏忚溅鎼叆搴撲腑
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    public boolean shuttleInExecuteStep1(WrkMast wrkMast, LiftStaProtocol liftStaProtocol) {
-        if (wrkMast.getWrkSts() == 4) {
-            if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
-                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
-                News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
-                return false;
-            }
+//    /**
+//     * 鍏ュ簱-灏忚溅鎼叆搴撲腑
+//     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+//     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+//     */
+//    public boolean shuttleInExecuteStep1(WrkMast wrkMast, LiftStaProtocol liftStaProtocol) {
+//        if (wrkMast.getWrkSts() == 4) {
+//            if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+//                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+//                News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
+//                return false;
+//            }
+//
+//            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+//            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+//            if (shuttleThread == null) {
+//                return false;
+//            }
+//            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+//            if (shuttleProtocol == null) {
+//                return false;
+//            }
+//            if (!shuttleThread.isIdle()) {
+//                News.info("{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;
+//            }
+////            //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
+////            if (shuttleProtocol.getToken() != 0) {
+////                News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+////                return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
+////            }
+//
+//            //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟
+//            WrkMast hasMoveWorking = wrkMastMapper.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+//            if (hasMoveWorking != null) {
+//                News.info("{}浠诲姟锛寋}灏忚溅锛屽瓨鍦ㄧЩ鍔ㄤ换鍔★紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔�
+//            }
+//
+//            //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣�
+//            if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
+//                //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
+//                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+//                News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;
+//            }
+//
+//            //灏忚溅宸叉姷杈捐緭閫佺珯鐐逛綅缃紝杩涜鎼繍璐х墿
+//            ShuttleOperaResult result = ShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo());
+//            if (result == null) {//璺緞璁$畻澶辫触
+//                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;
+//            }
+//
+//            //鍒涘缓鍒嗛厤鍛戒护
+//            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+//            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+//            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+//            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id);//鍏ュ簱妯″紡
+//            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+//            assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
+//            assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
+//
+//            wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓�
+//            wrkMast.setModiTime(new Date());
+////            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
+//            if (wrkMastMapper.updateById(wrkMast) > 0) {
+//                //涓嬪彂浠诲姟
+//                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+//            }
+//
+//            return false;
+//        }
+//        return true;
+//    }
 
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                return false;
-            }
-            if (!shuttleProtocol.isIdle()) {
-                News.info("{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-            //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
-            if (shuttleProtocol.getToken() != 0) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
-            }
+//    /**
+//     * 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
+//     */
+//    public synchronized void shuttleOutExecute() {
+//        try {
+//            for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) {
+//                boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
+//                if (!step1) {
+//                    continue;
+//                }
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    /**
+//     * 鍑哄簱-灏忚溅鎼嚭搴撲腑
+//     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+//     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+//     */
+//    public boolean shuttleOutExecuteStep1(WrkMast wrkMast) {
+//        //21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
+//        if (wrkMast.getWrkSts() == 21) {
+//            EntityWrapper<StaDesc> wrapper = new EntityWrapper<>();
+//            wrapper.eq("type_no", wrkMast.getIoType());//璺緞绫诲瀷
+//            wrapper.eq("stn_no", wrkMast.getStaNo());//鍑哄簱绔欑偣缂栧彿
+//            StaDesc staDesc = staDescService.selectOne(wrapper);
+//            if (staDesc == null) {
+//                News.info("{}浠诲姟锛屽嚭搴撹矾寰勪笉瀛樺湪", wrkMast.getWrkNo());
+//                return false;//鍑哄簱璺緞涓嶅瓨鍦�
+//            }
+//
+//            //鑾峰彇鍑哄簱绔欑偣
+//            BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
+//            if (basDevp == null) {
+//                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);
+//            if (!liftWrkMasts.isEmpty()) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽瓨鍦ㄥ叆搴撲换鍔★紝绯荤粺绂佹鍑哄簱", wrkMast.getWrkNo(), liftNo);
+//                return false;//瀛樺湪鍏ュ簱浠诲姟锛岀姝㈠嚭搴�
+//            }
+//
+//            //鍚屽簱浣嶇粍鏍¢獙
+//            List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo());
+//            List<LocMast> outerLocMasts = locMastService.selectNotEmptyLocNos(outerLoc);
+//            if (!outerLocMasts.isEmpty()) {
+//                News.info("{}浠诲姟锛屾祬搴撲綅瀛樺湪璐х墿锛岀郴缁熺瓑寰呬腑", wrkMast.getWrkNo());
+//                return false;//娴呭簱浣嶅瓨鍦ㄦ湭鎵ц浠诲姟
+//            }
+//
+//            //鑾峰彇婧愮珯
+//            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo()));
+//            if (liftStaProtocol == null) {
+//                return false;//鎵句笉鍒扮珯鐐�
+//            }
+//
+//            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && !liftStaProtocol.getHasTray())) {
+//                News.info("{}浠诲姟锛寋}鍐呴儴杈撻�佺珯锛屼笉婊¤冻鑷姩銆佺┖闂层�佹棤鎵樼洏鐘舵��", wrkMast.getWrkNo(), liftStaProtocol.getStaNo());
+//                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;
+//            }
+//
+//            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+//            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+//            if (shuttleThread == null) {
+//                return false;
+//            }
+//            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+//            if (shuttleProtocol == null) {
+//                return false;
+//            }
+//            if (!shuttleProtocol.isIdle()) {
+//                News.info("{}浠诲姟锛寋}灏忚溅锛屽繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;
+//            }
+//            //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
+//            if (shuttleProtocol.getToken() != 0) {
+//                News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
+//            }
+//
+//            //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
+//            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+//                //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
+//                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+//                News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;
+//            }
+//
+//            //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿
+//            ShuttleOperaResult result = ShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), liftStaProtocol.getLocNo());//灏嗚揣鐗╂惉杩愯嚦鎻愬崌鏈鸿緭閫佺珯鐐�
+//            if (result == null) {//鍑哄簱璺緞璁$畻澶辫触
+//                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;
+//            }
+//
+//            //鍒涘缓鍒嗛厤鍛戒护
+//            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+//            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+//            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
+//            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());//鍑哄簱妯″紡
+//            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+//            assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
+//            assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
+//
+//            wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
+//            wrkMast.setModiTime(new Date());
+//            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
+//            if (wrkMastMapper.updateById(wrkMast) > 0) {
+//                //涓嬪彂浠诲姟
+//                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+//            }
+//            return false;
+//        }
+//        return true;
+//    }
 
-            //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟
-            WrkMast hasMoveWorking = wrkMastMapper.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
-            if (hasMoveWorking != null) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽瓨鍦ㄧЩ鍔ㄤ换鍔★紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔�
-            }
+//    /**
+//     * 鍥涘悜绌挎杞︿换鍔″畬鎴�
+//     */
+//    public synchronized void shuttleFinished() {
+//        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 (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 {
+//                        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();
+//        }
+//    }
 
-            //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣�
-            if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
-                //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
-                News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
-            //灏忚溅宸叉姷杈捐緭閫佺珯鐐逛綅缃紝杩涜鎼繍璐х墿
-            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo());
-            if (result == null) {//璺緞璁$畻澶辫触
-                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
-            //鍒涘缓鍒嗛厤鍛戒护
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ簱妯″紡
-            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-            assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
-            assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
-
-            wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓�
-            wrkMast.setModiTime(new Date());
-            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-            }
-
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
-     */
-    public synchronized void shuttleOutExecute() {
-        try {
-            for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) {
-                boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
-                if (!step1) {
-                    continue;
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 鍑哄簱-灏忚溅鎼嚭搴撲腑
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    public boolean shuttleOutExecuteStep1(WrkMast wrkMast) {
-        //21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
-        if (wrkMast.getWrkSts() == 21) {
-            EntityWrapper<StaDesc> wrapper = new EntityWrapper<>();
-            wrapper.eq("type_no", wrkMast.getIoType());//璺緞绫诲瀷
-            wrapper.eq("stn_no", wrkMast.getStaNo());//鍑哄簱绔欑偣缂栧彿
-            StaDesc staDesc = staDescService.selectOne(wrapper);
-            if (staDesc == null) {
-                News.info("{}浠诲姟锛屽嚭搴撹矾寰勪笉瀛樺湪", wrkMast.getWrkNo());
-                return false;//鍑哄簱璺緞涓嶅瓨鍦�
-            }
-
-            //鑾峰彇鍑哄簱绔欑偣
-            BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
-            if (basDevp == null) {
-                return false;//鍑哄簱绔欑偣涓嶅瓨鍦�
-            }
-
+//    /**
+//     * 鎻愬崌鏈轰换鍔�
+//     */
+//    public synchronized void liftIoExecute() {
+//        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;
+//                }
+//
+//                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());
+//                        continue;
+//                    }
+//
+//                    boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴�
+//                    if (!stepIn) {
+//                        continue;
+//                    }
+//
+//                    boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴�
+//                    if (!stepOut) {
+//                        continue;
+//                    }
+//                }
+//
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    /**
+//     * 鎻愬崌鏈哄叆搴�
+//     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+//     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+//     */
+//    private boolean liftIoExecuteStepIn(WrkMast wrkMast) {
+//        //--------------------------------------鎻愬崌鏈哄叆搴�-----------------------------------------//
+//        Date now = new Date();
+//
+//        //2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑
+//        if (wrkMast.getWrkSts() == 2) {
+//            //鑾峰彇婧愮珯
+//            BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo());
+//            if (sourceBasDevp == null) {
+//                return false;//鎵句笉鍒扮珯鐐�
+//            }
+//
+//            if (!sourceBasDevp.getInEnable().equals("Y")) {
+//                News.info("{}浠诲姟锛寋}婧愮珯锛屾病鏈夊彲鍏ヤ俊鍙�", wrkMast.getWrkNo(), sourceBasDevp.getDevNo());
+//                return false;//绔欑偣涓嶅彲鍏�
+//            }
+//
+//            Integer barcodeId = Utils.getBarcodeIdByStaNo(wrkMast.getSourceStaNo());
+//            if (barcodeId == null) {
+//                News.info("{}浠诲姟锛寋}婧愮珯锛屾壘涓嶅埌鍙敤鏉$爜鍣↖D", wrkMast.getWrkNo(), sourceBasDevp.getDevNo());
+//                return false;//绔欑偣涓嶅彲鍏�
+//            }
+//
+//            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
+//            if (barcodeThread == null) {
+//                News.info("{}浠诲姟锛寋}婧愮珯锛屾潯鐮佸櫒{}绾跨▼涓虹┖", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId);
+//                return false;//绔欑偣涓嶅彲鍏�
+//            }
+//            String barcode = barcodeThread.getBarcode();
+//            if(!Cools.isEmpty(barcode)) {
+//                if(!("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode))) {
+//                    //瀛樺湪鏉$爜鍊硷紝鍒ゆ柇鏄惁鍜屽綋鍓嶅伐浣滄。涓�鑷�
+//                    if (!barcode.equals(wrkMast.getBarcode())) {
+//                        News.info("{}浠诲姟,{}绔欑偣锛屾潯鐮佸櫒{}鍊納}涓庡伐浣滄。鏉$爜鍊納}涓嶄竴鑷达紝绯荤粺璺宠繃鎵ц", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId, barcode,wrkMast.getBarcode());
+//                        return false;//绔欑偣涓嶅彲鍏�
+//                    }
+//                }
+//            }else {
+//                return false;
+//            }
+//
+//            //鍒ゆ柇鎻愬崌鏈烘暣涓笁妤兼槸鍚﹂兘澶勪簬鍏ュ簱妯″紡
+//            Integer outInModel1 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 1);
+//            Integer outInModel2 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 5);
+//            Integer outInModel3 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 8);
+//            if (outInModel1 == null || outInModel2 == null || outInModel3 == null) {
+//                News.info("{}浠诲姟锛屾病鏈夊嚭鍏ュ簱妯″紡", wrkMast.getWrkNo());
+//                return false;//涓嶅瓨鍦ㄥ嚭鍏ュ簱妯″紡
+//            }
+//
+//            if (outInModel1 == 2 || outInModel2 == 2 && outInModel3 == 2) {
+//                News.info("{}浠诲姟锛屾湁绔欑偣澶勪簬鍑哄簱妯″紡锛岀姝㈠叆搴�", wrkMast.getWrkNo());
+//                return false;//鍙鏈変竴涓浜庡嚭搴撴ā寮忥紝绂佹鍏ュ簱
+//            }
+//
+//            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, sourceBasDevp.getLiftNo());
+//            if (liftThread == null) {
+//                return false;
+//            }
+//            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+//            if (liftProtocol == null) {
+//                return false;
+//            }
+//            if (!liftProtocol.isIdle()) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+//                return false;
+//            }
+//            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
+//            if (liftProtocol.getToken() != 0) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+//                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
+//            }
+//
+//            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
+//            if (liftProtocol.getHasCar()) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夊皬杞︼紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+//                return false;//鏈夊皬杞︼紝绂佹娲惧彂
+//            }
+//
+//            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩�
+//            if (liftProtocol.getHasTray()) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+//                return false;//鏈夋墭鐩橈紝绂佹娲惧彂
+//            }
+//
+//            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
+//            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
+//            if (liftWrkMast != null) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+//                return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+//            }
+//
+//            //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿)
+//            Integer startSta = Integer.parseInt(sourceBasDevp.getQrCodeValue());
+//            //鑾峰彇鎻愬崌鏈虹珯鐐�
+//            LiftStaProtocol targetStaProtocol = NyLiftUtils.getLiftStaByLev(liftThread.getSlave().getId(), Utils.getLev(wrkMast.getLocNo()));
+//            if (targetStaProtocol == null) {
+//                return false;//绔欑偣涓嶅瓨鍦�
+//            }
+//
+//            if (targetStaProtocol.getHasTray()) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛寋}绔欑偣锛屾彁鍗囨満绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo(), targetStaProtocol.getStaNo());
+//                return false;//鎻愬崌鏈虹珯鐐规湁鎵樼洏锛岀姝㈡淳鍙�
+//            }
+//
+//            Integer targetSta = targetStaProtocol.getStaNo();
+//
+//            //鑾峰彇鎻愬崌鏈哄懡浠�
+//            NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo());
+//            if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
+//                //鎷f枡鍐嶅洖搴擄紝閲嶆柊鍒嗛厤璁惧宸ヤ綔鍙�
+//                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<>();
+//            commands.add(liftCommand);
+//
+//            //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+//            LiftAssignCommand assignCommand = new LiftAssignCommand();
+//            assignCommand.setCommands(commands);
+//            assignCommand.setLiftNo(liftProtocol.getLiftNo());
+//            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
+//            assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue());
+//
+//            wrkMast.setWrkSts(3L);//2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑
+//            wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
+//            wrkMast.setModiTime(now);
+//            liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
+//            if (wrkMastMapper.updateById(wrkMast) > 0) {
+//                //涓嬪彂浠诲姟
+//                MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
+//            }
+//
+//            return false;
+//        }
+//        return true;
+//    }
+//
+//    /**
+//     * 鎻愬崌鏈哄嚭搴�
+//     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+//     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+//     */
+//    private boolean liftIoExecuteStepOut(WrkMast wrkMast) {
+//        //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------//
+//        Date now = new Date();
+//
+//        //23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑
+//        if (wrkMast.getWrkSts() == 23) {
+//            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+//            if (shuttleThread == null) {
+//                return false;
+//            }
+//
+//            //鑾峰彇鍑哄簱绔欑偣(鐩爣绔�)
+//            BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
+//            if (basDevp == null) {
+//                News.info("{}浠诲姟锛屽嚭搴撶珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
+//                return false;//鍑哄簱绔欑偣涓嶅瓨鍦�
+//            }
+//
+//            //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿)
+//            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo()));
+//            if (liftStaProtocol == null) {
+//                News.info("{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
+//                return false;//鎵句笉鍒扮珯鐐�
+//            }
+//            Integer startSta = liftStaProtocol.getStaNo();
+//
+//            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+//            if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
+//                //灏忚溅杩樺湪杈撻�佺珯鐐�
+//                //璋冨害灏忚溅閬胯
+//                boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread);
+//                if (!result) {
+//                    News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                    return false;
+//                }
+//            }
+//
 //            if (!basDevp.getAutoing().equals("Y")) {
-//                News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鏄嚜鍔ㄧ姸鎬�",wrkMast.getWrkNo(),basDevp.getDevNo());
-//                return false;//涓嶆槸鑷姩鐘舵��
+//                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")) {
-//                News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), basDevp.getDevNo());
+//                News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo());
 //                return false;//鍑哄簱绔欑偣涓嶅彲鍑�
 //            }
-
-            Integer liftNo = basDevp.getLiftNo();//鎼滅储鍑哄簱鎻愬崌鏈烘槸鍚﹀瓨鍦ㄥ叆搴撲换鍔★紝濡傚瓨鍦ㄧ姝㈠嚭搴�
-            List<WrkMast> liftWrkMasts = wrkMastMapper.selectInWrkMastByLiftNo(liftNo);
-            if (!liftWrkMasts.isEmpty()) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽瓨鍦ㄥ叆搴撲换鍔★紝绯荤粺绂佹鍑哄簱", wrkMast.getWrkNo(), liftNo);
-                return false;//瀛樺湪鍏ュ簱浠诲姟锛岀姝㈠嚭搴�
-            }
-
-            //鍚屽簱浣嶇粍鏍¢獙
-            List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo());
-            List<LocMast> outerLocMasts = locMastService.selectNotEmptyLocNos(outerLoc);
-            if (!outerLocMasts.isEmpty()) {
-                News.info("{}浠诲姟锛屾祬搴撲綅瀛樺湪璐х墿锛岀郴缁熺瓑寰呬腑", wrkMast.getWrkNo());
-                return false;//娴呭簱浣嶅瓨鍦ㄦ湭鎵ц浠诲姟
-            }
-
-            //鑾峰彇婧愮珯
-            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo()));
-            if (liftStaProtocol == null) {
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-
-            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && !liftStaProtocol.getHasTray())) {
-                News.info("{}浠诲姟锛寋}鍐呴儴杈撻�佺珯锛屼笉婊¤冻鑷姩銆佺┖闂层�佹棤鎵樼洏鐘舵��", wrkMast.getWrkNo(), liftStaProtocol.getStaNo());
-                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;
-            }
-
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                return false;
-            }
-            if (!shuttleProtocol.isIdle()) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-            //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
-            if (shuttleProtocol.getToken() != 0) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
-            }
-
-            //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
-            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
-                //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
-                News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
-            //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿
-            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), liftStaProtocol.getLocNo());//灏嗚揣鐗╂惉杩愯嚦鎻愬崌鏈鸿緭閫佺珯鐐�
-            if (result == null) {//鍑哄簱璺緞璁$畻澶辫触
-                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
-            //鍒涘缓鍒嗛厤鍛戒护
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());//鍑哄簱妯″紡
-            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-            assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
-            assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
-
-            wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
-            wrkMast.setModiTime(new Date());
-            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-            }
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 鍥涘悜绌挎杞︿换鍔″畬鎴�
-     */
-    public synchronized void shuttleFinished() {
-        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 (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 {
-                        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();
-        }
-    }
-
-    /**
-     * 鎻愬崌鏈轰换鍔�
-     */
-    public synchronized void liftIoExecute() {
-        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;
-                }
-
-                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());
-                        continue;
-                    }
-
-                    boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴�
-                    if (!stepIn) {
-                        continue;
-                    }
-
-                    boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴�
-                    if (!stepOut) {
-                        continue;
-                    }
-                }
-
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 鎻愬崌鏈哄叆搴�
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean liftIoExecuteStepIn(WrkMast wrkMast) {
-        //--------------------------------------鎻愬崌鏈哄叆搴�-----------------------------------------//
-        Date now = new Date();
-
-        //2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑
-        if (wrkMast.getWrkSts() == 2) {
-            //鑾峰彇婧愮珯
-            BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo());
-            if (sourceBasDevp == null) {
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-
-            if (!sourceBasDevp.getInEnable().equals("Y")) {
-                News.info("{}浠诲姟锛寋}婧愮珯锛屾病鏈夊彲鍏ヤ俊鍙�", wrkMast.getWrkNo(), sourceBasDevp.getDevNo());
-                return false;//绔欑偣涓嶅彲鍏�
-            }
-
-            Integer barcodeId = Utils.getBarcodeIdByStaNo(wrkMast.getSourceStaNo());
-            if (barcodeId == null) {
-                News.info("{}浠诲姟锛寋}婧愮珯锛屾壘涓嶅埌鍙敤鏉$爜鍣↖D", wrkMast.getWrkNo(), sourceBasDevp.getDevNo());
-                return false;//绔欑偣涓嶅彲鍏�
-            }
-
-            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
-            if (barcodeThread == null) {
-                News.info("{}浠诲姟锛寋}婧愮珯锛屾潯鐮佸櫒{}绾跨▼涓虹┖", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId);
-                return false;//绔欑偣涓嶅彲鍏�
-            }
-            String barcode = barcodeThread.getBarcode();
-            if(!Cools.isEmpty(barcode)) {
-                if(!("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode))) {
-                    //瀛樺湪鏉$爜鍊硷紝鍒ゆ柇鏄惁鍜屽綋鍓嶅伐浣滄。涓�鑷�
-                    if (!barcode.equals(wrkMast.getBarcode())) {
-                        News.info("{}浠诲姟,{}绔欑偣锛屾潯鐮佸櫒{}鍊納}涓庡伐浣滄。鏉$爜鍊納}涓嶄竴鑷达紝绯荤粺璺宠繃鎵ц", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId, barcode,wrkMast.getBarcode());
-                        return false;//绔欑偣涓嶅彲鍏�
-                    }
-                }
-            }else {
-                return false;
-            }
-
-            //鍒ゆ柇鎻愬崌鏈烘暣涓笁妤兼槸鍚﹂兘澶勪簬鍏ュ簱妯″紡
-            Integer outInModel1 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 1);
-            Integer outInModel2 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 5);
-            Integer outInModel3 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 8);
-            if (outInModel1 == null || outInModel2 == null || outInModel3 == null) {
-                News.info("{}浠诲姟锛屾病鏈夊嚭鍏ュ簱妯″紡", wrkMast.getWrkNo());
-                return false;//涓嶅瓨鍦ㄥ嚭鍏ュ簱妯″紡
-            }
-
-            if (outInModel1 == 2 || outInModel2 == 2 && outInModel3 == 2) {
-                News.info("{}浠诲姟锛屾湁绔欑偣澶勪簬鍑哄簱妯″紡锛岀姝㈠叆搴�", wrkMast.getWrkNo());
-                return false;//鍙鏈変竴涓浜庡嚭搴撴ā寮忥紝绂佹鍏ュ簱
-            }
-
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, sourceBasDevp.getLiftNo());
-            if (liftThread == null) {
-                return false;
-            }
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                return false;
-            }
-            if (!liftProtocol.isIdle()) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;
-            }
-            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
-            if (liftProtocol.getToken() != 0) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
-            }
-
-            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
-            if (liftProtocol.getHasCar()) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夊皬杞︼紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//鏈夊皬杞︼紝绂佹娲惧彂
-            }
-
-            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩�
-            if (liftProtocol.getHasTray()) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//鏈夋墭鐩橈紝绂佹娲惧彂
-            }
-
-            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
-            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
-            if (liftWrkMast != null) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
-            }
-
-            //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿)
-            Integer startSta = Integer.parseInt(sourceBasDevp.getQrCodeValue());
-            //鑾峰彇鎻愬崌鏈虹珯鐐�
-            LiftStaProtocol targetStaProtocol = NyLiftUtils.getLiftStaByLev(liftThread.getSlave().getId(), Utils.getLev(wrkMast.getLocNo()));
-            if (targetStaProtocol == null) {
-                return false;//绔欑偣涓嶅瓨鍦�
-            }
-
-            if (targetStaProtocol.getHasTray()) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛寋}绔欑偣锛屾彁鍗囨満绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo(), targetStaProtocol.getStaNo());
-                return false;//鎻愬崌鏈虹珯鐐规湁鎵樼洏锛岀姝㈡淳鍙�
-            }
-
-            Integer targetSta = targetStaProtocol.getStaNo();
-
-            //鑾峰彇鎻愬崌鏈哄懡浠�
-            NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo());
-            if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
-                //鎷f枡鍐嶅洖搴擄紝閲嶆柊鍒嗛厤璁惧宸ヤ綔鍙�
-                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<>();
-            commands.add(liftCommand);
-
-            //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
-            LiftAssignCommand assignCommand = new LiftAssignCommand();
-            assignCommand.setCommands(commands);
-            assignCommand.setLiftNo(liftProtocol.getLiftNo());
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-            assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue());
-
-            wrkMast.setWrkSts(3L);//2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑
-            wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
-            wrkMast.setModiTime(now);
-            liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
-            }
-
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 鎻愬崌鏈哄嚭搴�
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean liftIoExecuteStepOut(WrkMast wrkMast) {
-        //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------//
-        Date now = new Date();
-
-        //23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑
-        if (wrkMast.getWrkSts() == 23) {
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-
-            //鑾峰彇鍑哄簱绔欑偣(鐩爣绔�)
-            BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
-            if (basDevp == null) {
-                News.info("{}浠诲姟锛屽嚭搴撶珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
-                return false;//鍑哄簱绔欑偣涓嶅瓨鍦�
-            }
-
-            //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿)
-            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo()));
-            if (liftStaProtocol == null) {
-                News.info("{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-            Integer startSta = liftStaProtocol.getStaNo();
-
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
-                //灏忚溅杩樺湪杈撻�佺珯鐐�
-                //璋冨害灏忚溅閬胯
-                boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread);
-                if (!result) {
-                    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")) {
-                News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo());
-                return false;//鍑哄簱绔欑偣涓嶅彲鍑�
-            }
-
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basDevp.getLiftNo());
-            if (liftThread == null) {
-                return false;
-            }
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                return false;
-            }
-
-            if (!liftProtocol.isIdle()) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;
-            }
-            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
-            if (liftProtocol.getToken() != 0) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
-            }
-            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
-            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
-            if (liftWrkMast != null) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
-            }
-
-            //鑾风洰鏍囩珯婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐�
-            BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo());
-            if (targetBasDevp == null) {
-                News.info("{}浠诲姟锛寋}绔欑偣锛岀珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), wrkMast.getStaNo());
-                return false;//绔欑偣涓嶅瓨鍦�
-            }
-            //鑾峰彇鐗涚溂鎻愬崌鏈虹珯鐐圭紪鍙�(鐩爣缂栧彿)
-            Integer targetSta = Integer.parseInt(targetBasDevp.getQrCodeValue());
-
-            //鑾峰彇鎻愬崌鏈哄懡浠�
-            NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftThread.getSlave().getId(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo());
-
-            ArrayList<NyLiftCommand> commands = new ArrayList<>();
-            commands.add(liftCommand);
-
-            //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
-            LiftAssignCommand assignCommand = new LiftAssignCommand();
-            assignCommand.setCommands(commands);
-            assignCommand.setLiftNo(liftProtocol.getLiftNo());
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-            assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue());
-
-            wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑
-            wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
-            wrkMast.setModiTime(now);
-            liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
-            }
-
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 鎻愬崌鏈轰换鍔″畬鎴�
-     */
-    public synchronized void liftFinished() {
-        try {
-            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()
-                ) {
-                    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);
-                                }
-
-                                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()) {
-                                //鎵嬪姩鎿嶄綔
-                                //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵��
-                                liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
-                                //浠诲姟鎸囦护娓呴浂
-                                liftProtocol.setAssignCommand(null);
-                                News.info("鎻愬崌鏈哄凡纭鎵嬪姩鎿嶄綔銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 搴撲綅绉昏浆
-     */
-    public synchronized void locToLocExecute() {
-        try {
-            //鑾峰彇鍑哄叆搴撳伐浣滄。
-//        List<WrkMast> wrkMasts = wrkMastMapper.selectInOutWrkMast();
-//        if (wrkMasts.size() > 0) {
-//            //鏈夊嚭鍏ュ簱浠诲姟锛屽繀椤荤瓑寰呬换鍔℃墽琛屽畬姣曞啀鎵ц搴撲綅绉昏浆
-//            return;
+//
+//            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basDevp.getLiftNo());
+//            if (liftThread == null) {
+//                return false;
+//            }
+//            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+//            if (liftProtocol == null) {
+//                return false;
+//            }
+//
+//            if (!liftProtocol.isIdle()) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+//                return false;
+//            }
+//            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
+//            if (liftProtocol.getToken() != 0) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+//                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
+//            }
+//            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
+//            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
+//            if (liftWrkMast != null) {
+//                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+//                return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+//            }
+//
+//            //鑾风洰鏍囩珯婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐�
+//            BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo());
+//            if (targetBasDevp == null) {
+//                News.info("{}浠诲姟锛寋}绔欑偣锛岀珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), wrkMast.getStaNo());
+//                return false;//绔欑偣涓嶅瓨鍦�
+//            }
+//            //鑾峰彇鐗涚溂鎻愬崌鏈虹珯鐐圭紪鍙�(鐩爣缂栧彿)
+//            Integer targetSta = Integer.parseInt(targetBasDevp.getQrCodeValue());
+//
+//            //鑾峰彇鎻愬崌鏈哄懡浠�
+//            NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftThread.getSlave().getId(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo());
+//
+//            ArrayList<NyLiftCommand> commands = new ArrayList<>();
+//            commands.add(liftCommand);
+//
+//            //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+//            LiftAssignCommand assignCommand = new LiftAssignCommand();
+//            assignCommand.setCommands(commands);
+//            assignCommand.setLiftNo(liftProtocol.getLiftNo());
+//            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
+//            assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue());
+//
+//            wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑
+//            wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
+//            wrkMast.setModiTime(now);
+//            liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
+//            if (wrkMastMapper.updateById(wrkMast) > 0) {
+//                //涓嬪彂浠诲姟
+//                MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
+//            }
+//
+//            return false;
 //        }
+//        return true;
+//    }
+//
+//    /**
+//     * 鎻愬崌鏈轰换鍔″畬鎴�
+//     */
+//    public synchronized void liftFinished() {
+//        try {
+//            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()
+//                ) {
+//                    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);
+//                                }
+//
+//                                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()) {
+//                                //鎵嬪姩鎿嶄綔
+//                                //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵��
+//                                liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
+//                                //浠诲姟鎸囦护娓呴浂
+//                                liftProtocol.setAssignCommand(null);
+//                                News.info("鎻愬崌鏈哄凡纭鎵嬪姩鎿嶄綔銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
+//                            }
+//                        }
+//                    }
+//                }
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
 
-            //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗�
-            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;
-                    }
+//    /**
+//     * 寮傚父淇℃伅璁板綍
+//     */
+//    public void recErr() {
+//        try {
+//            this.recShuttleErr();
+//            this.recLiftErr();
+//        } catch (Exception e) {
+//            News.error("recErr fail", e);
+//        }
+//    }
 
-                    boolean step3 = this.locToLocExecuteStep3(wrkMast);//鎻愬崌鏈烘惉杩愯揣鐗�
-                    if (!step3) {
-                        continue;
-                    }
-
-                    boolean step4 = this.locToLocExecuteStep4(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鐩爣搴撲綅
-                    if (!step4) {
-                        continue;
-                    }
-
-                }
-
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 鍚屾ゼ灞傚簱浣嶇Щ杞�
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean locToLocExecuteStep1(WrkMast wrkMast) {
-        if (wrkMast.getWrkSts() == 21) {//21.鐢熸垚鍑哄簱浠诲姟
-            if (wrkMast.getShuttleNo() == null) {
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣
-                return false;
-            }
-
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                return false;
-            }
-            if (!shuttleProtocol.isIdle()) {
-                return false;
-            }
-
-            //鍒ゆ柇灏忚溅鏄惁鍒拌揪婧愬簱浣�
-            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
-                //灏忚溅涓嶅湪婧愬簱浣嶄綅缃�
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣
-                return false;
-            }
-
-            //灏忚溅宸叉姷杈炬簮搴撲綅锛岃繘琛屾惉杩愯揣鐗�
-            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getLocNo());
-            if (result == null) {//璺緞璁$畻澶辫触
-                return false;
-            }
-
-            //鍒涘缓鍒嗛厤鍛戒护
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ簱妯″紡
-            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-            assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
-            assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
-
-            wrkMast.setWrkSts(5L);//21.鐢熸垚鍑哄簱浠诲姟 => 5.灏忚溅鎼繍涓�
-            wrkMast.setModiTime(new Date());
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-            }
-
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 璺ㄦゼ灞傚簱浣嶇Щ杞�-璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙�
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean locToLocExecuteStep2(WrkMast wrkMast) {
-        if (wrkMast.getWrkSts() == 21) {//21.鐢熸垚鍑哄簱浠诲姟
-            if (wrkMast.getShuttleNo() == null) {
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣
-                return false;
-            }
-
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                return false;
-            }
-            if (!shuttleProtocol.isIdle()) {
-                return false;
-            }
-
-            //鍒ゆ柇灏忚溅鏄惁鍒拌揪婧愬簱浣�
-            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
-                //灏忚溅涓嶅湪婧愬簱浣嶄綅缃�
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣
-                return false;
-            }
-
-            //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐�
-            LiftStaProtocol liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId(), Utils.getLev(wrkMast.getLocNo()));
-            if (liftSta == null) {
-                return false;//娌℃湁鍙敤涓旂┖闂茬殑杈撻�佺珯鐐�
-            }
-            //婧愮珯
-            Integer sourceStaNo = liftSta.getStaNo();
-            //鎻愬崌鏈哄彿*100+鐩爣妤煎眰=鐩爣绔欑偣
-            Integer staNo = liftSta.getLiftNo() * 100 + Utils.getLev(wrkMast.getLocNo());//鐩爣绔�
-
-            //灏忚溅宸叉姷杈炬簮搴撲綅锛屽皢璐х墿鎼繍鍒拌緭閫佺珯鐐�
-            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), liftSta.getLocNo());
-            if (result == null) {//璺緞璁$畻澶辫触
-                return false;
-            }
-
-            //鍒涘缓鍒嗛厤鍛戒护
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_LOC_TO_LOC.id.shortValue());//搴撲綅绉昏浆妯″紡
-            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-            assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
-            assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
-
-            wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
-            wrkMast.setSourceStaNo(sourceStaNo);//婧愮珯
-            wrkMast.setStaNo(staNo);//鐩爣绔�
-            wrkMast.setModiTime(new Date());
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-            }
-
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 璺ㄦゼ灞傚簱浣嶇Щ杞�-鎻愬崌鏈烘惉杩愯揣鐗�
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean locToLocExecuteStep3(WrkMast wrkMast) {
-        Date now = new Date();
-        if (wrkMast.getWrkSts() == 23) {//23.灏忚溅鎼繍瀹屾垚
-            //婧愮珯
-            Integer sourceStaNo = wrkMast.getSourceStaNo();
-            //鐩爣绔�
-            Integer staNo = wrkMast.getStaNo();
-            if (sourceStaNo == null || staNo == null) {
-                return false;//婧愮珯鎴栫洰鏍囩珯涓虹┖
-            }
-
-            int liftNo = staNo / 100;//鑾峰彇鎻愬崌鏈哄彿
-
-            //鑾峰彇鎻愬崌鏈虹嚎绋�
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
-            if (liftThread == null) {
-                return false;
-            }
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                return false;
-            }
-
-            //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐�
-            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo()));
-            if (liftStaProtocol == null) {
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-
-            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) {
-                return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹湁鎵樼洏
-            }
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
-                //灏忚溅杩樺湪杈撻�佺珯鐐�
-                //璋冨害灏忚溅閬胯
-                boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread);
-                if (!result) {
-                    return false;
-                }
-            }
-
-            if (!liftProtocol.isIdle()) {
-                return false;
-            }
-
-            //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛�
-            WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue());
-            if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) {
-                return false;
-            }
-
-            //鑾峰彇鎻愬崌鏈哄懡浠�
-            NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceStaNo, staNo, wrkMast.getWrkNo());
-
-            ArrayList<NyLiftCommand> commands = new ArrayList<>();
-            commands.add(liftCommand);
-
-            //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
-            LiftAssignCommand assignCommand = new LiftAssignCommand();
-            assignCommand.setCommands(commands);
-            assignCommand.setLiftNo(liftProtocol.getLiftNo());
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-            assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue());
-
-            wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑
-            wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
-            wrkMast.setShuttleNo(null);//娓呯┖灏忚溅鍙凤紝绛夎揣鐗╂惉杩愬畬鎴愬悗锛屽埌鐩爣妤煎眰閲嶆柊鎼滅储灏忚溅
-            wrkMast.setModiTime(now);
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
-            }
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 璺ㄦゼ灞傚簱浣嶇Щ杞�-璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鐩爣搴撲綅
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean locToLocExecuteStep4(WrkMast wrkMast) {
-        if (wrkMast.getWrkSts() == 4) {//4.鎻愬崌鏈烘惉杩愬畬鎴�
-            //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐�
-            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(wrkMast.getLiftNo(), Utils.getLev(wrkMast.getLocNo()));
-            if (liftStaProtocol == null) {
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-
-            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) {
-                return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹湁鎵樼洏
-            }
-
-            if (wrkMast.getShuttleNo() == null) {
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐�
-                return false;
-            }
-
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                return false;
-            }
-            if (!shuttleProtocol.isIdle()) {
-                return false;
-            }
-
-            //鍒ゆ柇灏忚溅鏄惁鍒拌揪鐩爣杈撻�佺珯鐐�
-            if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
-                //灏忚溅涓嶅湪鐩爣杈撻�佺珯鐐�
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐�
-                return false;
-            }
-
-            //灏忚溅宸叉姷杈剧洰鏍囪緭閫佺珯鐐癸紝灏嗚揣鐗╂惉杩愬埌鐩爣搴撲綅
-            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getLocNo());
-            if (result == null) {//璺緞璁$畻澶辫触
-                return false;
-            }
-
-            //鍒涘缓鍒嗛厤鍛戒护
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_LOC_TO_LOC.id.shortValue());//搴撲綅绉昏浆妯″紡
-            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-            assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
-            assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
-
-            wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓�
-            wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
-            wrkMast.setModiTime(new Date());
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-            }
-
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 寮傚父淇℃伅璁板綍
-     */
-    public void recErr() {
-        try {
-            this.recShuttleErr();
-            this.recLiftErr();
-        } catch (Exception e) {
-            News.error("recErr fail", e);
-        }
-    }
-
-    /**
-     * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰�
-     */
-    private void recShuttleErr() {
-        Date now = new Date();
-        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
-            // 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
-            if (shuttleThread == null) {
-                continue;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                continue;
-            }
-
-            if (shuttleProtocol.getTaskNo() != 0) {
-                //鏈変换鍔�
-                BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo());
-                // 鏈夊紓甯�
-                if (latest == null) {
-                    if (shuttleProtocol.getErrState() != null && shuttleProtocol.getErrState() == 1) {
-                        WrkMast wrkMast = wrkMastMapper.selectById(shuttleProtocol.getTaskNo());
-                        if (wrkMast == null) {
-                            continue;
-                        }
-                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode());
-                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
-                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
-                                null,    // 缂栧彿
-                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
-                                now,    // 鍙戠敓鏃堕棿
-                                null,    // 缁撴潫鏃堕棿
-                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
-                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
-                                null,    // plc
-                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
-                                wrkMast.getStaNo(),    // 鐩爣绔�
-                                wrkMast.getSourceStaNo(),    // 婧愮珯
-                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
-                                wrkMast.getBarcode(),    // 鏉$爜
-                                shuttleProtocol.getErrCode(),    // 寮傚父鐮�
-                                errName,    // 寮傚父
-                                1,    // 寮傚父鎯呭喌
-                                now,    // 娣诲姞鏃堕棿
-                                null,    // 娣诲姞浜哄憳
-                                now,    // 淇敼鏃堕棿
-                                null,    // 淇敼浜哄憳
-                                "浠诲姟涓紓甯�",    // 澶囨敞
-                                JSON.toJSONString(shuttleProtocol)    // 绯荤粺鐘舵�佹暟鎹�
-                        );
-                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
-                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
-                        }
-                    }
-                } else {
-                    // 寮傚父淇
-                    if (shuttleProtocol.getErrState() == null || shuttleProtocol.getErrState() == 0) {
-                        latest.setEndTime(now);
-                        latest.setUpdateTime(now);
-                        latest.setStatus(2);
-                        if (!basShuttleErrLogService.updateById(latest)) {
-                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
-                        }
-                    }
-                }
-            }else {
-//                //鏃犱换鍔�
-//                BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId());
+//    /**
+//     * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰�
+//     */
+//    private void recShuttleErr() {
+//        Date now = new Date();
+//        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+//            // 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+//            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
+//            if (shuttleThread == null) {
+//                continue;
+//            }
+//            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+//            if (shuttleProtocol == null) {
+//                continue;
+//            }
+//
+//            if (shuttleProtocol.getTaskNo() != 0) {
+//                //鏈変换鍔�
+//                BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo());
 //                // 鏈夊紓甯�
-//                if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) {
-//                    // 璁板綍鏂板紓甯�
-//                    if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) {
-//                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue());
+//                if (latest == null) {
+//                    if (shuttleProtocol.getErrState() != null && shuttleProtocol.getErrState() == 1) {
+//                        WrkMast wrkMast = wrkMastMapper.selectById(shuttleProtocol.getTaskNo());
+//                        if (wrkMast == null) {
+//                            continue;
+//                        }
+//                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode());
 //                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
 //                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
 //                                null,    // 缂栧彿
-//                                null,    // 宸ヤ綔鍙�
+//                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
 //                                now,    // 鍙戠敓鏃堕棿
 //                                null,    // 缁撴潫鏃堕棿
-//                                null,    // 宸ヤ綔鐘舵��
-//                                null,    // 鍏ュ嚭搴撶被鍨�
+//                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+//                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
 //                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
 //                                null,    // plc
-//                                null,    // 鐩爣搴撲綅
-//                                null,    // 鐩爣绔�
-//                                null,    // 婧愮珯
-//                                null,    // 婧愬簱浣�
-//                                null,    // 鏉$爜
-//                                (int)shuttleProtocol.getStatusErrorCode(),    // 寮傚父鐮�
+//                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
+//                                wrkMast.getStaNo(),    // 鐩爣绔�
+//                                wrkMast.getSourceStaNo(),    // 婧愮珯
+//                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+//                                wrkMast.getBarcode(),    // 鏉$爜
+//                                shuttleProtocol.getErrCode(),    // 寮傚父鐮�
 //                                errName,    // 寮傚父
 //                                1,    // 寮傚父鎯呭喌
 //                                now,    // 娣诲姞鏃堕棿
 //                                null,    // 娣诲姞浜哄憳
 //                                now,    // 淇敼鏃堕棿
 //                                null,    // 淇敼浜哄憳
-//                                "鏃犱换鍔″紓甯�"    // 澶囨敞
+//                                "浠诲姟涓紓甯�",    // 澶囨敞
+//                                JSON.toJSONString(shuttleProtocol)    // 绯荤粺鐘舵�佹暟鎹�
 //                        );
 //                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
 //                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
 //                        }
 //                    }
-//                    // 鏃犲紓甯�
 //                } else {
 //                    // 寮傚父淇
-//                    if (latest != null && latest.getStatus() == 1) {
+//                    if (shuttleProtocol.getErrState() == null || shuttleProtocol.getErrState() == 0) {
 //                        latest.setEndTime(now);
 //                        latest.setUpdateTime(now);
 //                        latest.setStatus(2);
@@ -2141,195 +1426,243 @@
 //                        }
 //                    }
 //                }
-            }
-        }
-    }
-
-    /**
-     * 鎻愬崌鏈哄紓甯镐俊鎭褰�
-     */
-    private void recLiftErr() {
-        Date now = new Date();
-        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.getTaskNo() != 0) {
-                //鏈変换鍔�
-                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(liftSlave.getId(), liftProtocol.getTaskNo().intValue());
-                // 鏈夊紓甯�
-                if (latest == null) {
-                    if (liftProtocol.getDeviceError() != null && liftProtocol.getDeviceError()) {
-                        WrkMast wrkMast = wrkMastMapper.selectById(liftProtocol.getTaskNo());
-                        if (wrkMast == null) {
-                            continue;
-                        }
-
-                        String errName = "";
-                        if (liftProtocol.getFrontOverrun()) {
-                            errName = "鍓嶈秴闄�";
-                        } else if (liftProtocol.getBackOverrun()) {
-                            errName = "鍚庤秴闄�";
-                        } else if (liftProtocol.getLeftOverrun()) {
-                            errName = "宸﹁秴闄�";
-                        } else if (liftProtocol.getRightOverrun()) {
-                            errName = "鍙宠秴闄�";
-                        } else if (liftProtocol.getOverHeight()) {
-                            errName = "瓒呴珮";
-                        } else if (liftProtocol.getOverWeight()) {
-                            errName = "瓒呴噸";
-                        }
-
-                        BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
-                                null,    // 缂栧彿
-                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
-                                now,    // 鍙戠敓鏃堕棿
-                                null,    // 缁撴潫鏃堕棿
-                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
-                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-                                liftSlave.getId(),    // 鎻愬崌鏈�
-                                null,    // plc
-                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
-                                wrkMast.getStaNo(),    // 鐩爣绔�
-                                wrkMast.getSourceStaNo(),    // 婧愮珯
-                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
-                                wrkMast.getBarcode(),    // 鏉$爜
-                                null,    // 寮傚父鐮�
-                                errName,    // 寮傚父
-                                1,    // 寮傚父鎯呭喌
-                                now,    // 娣诲姞鏃堕棿
-                                null,    // 娣诲姞浜哄憳
-                                now,    // 淇敼鏃堕棿
-                                null,    // 淇敼浜哄憳
-                                "浠诲姟涓紓甯�",    // 澶囨敞
-                                JSON.toJSONString(liftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
-                        );
-                        if (!basLiftErrLogService.insert(basLiftErrLog)) {
-                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", liftSlave.getId(), errName);
-                        }
-                    }
-                } else {
-                    // 寮傚父淇
-                    if (liftProtocol.getDeviceError() == null || !liftProtocol.getDeviceError()) {
-                        latest.setEndTime(now);
-                        latest.setUpdateTime(now);
-                        latest.setStatus(2);
-                        if (!basLiftErrLogService.updateById(latest)) {
-                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", liftSlave.getId(), latest.getId());
-                        }
-                    }
-                }
-            }
-        }
-    }
+//            }else {
+////                //鏃犱换鍔�
+////                BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId());
+////                // 鏈夊紓甯�
+////                if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) {
+////                    // 璁板綍鏂板紓甯�
+////                    if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) {
+////                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue());
+////                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
+////                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
+////                                null,    // 缂栧彿
+////                                null,    // 宸ヤ綔鍙�
+////                                now,    // 鍙戠敓鏃堕棿
+////                                null,    // 缁撴潫鏃堕棿
+////                                null,    // 宸ヤ綔鐘舵��
+////                                null,    // 鍏ュ嚭搴撶被鍨�
+////                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
+////                                null,    // plc
+////                                null,    // 鐩爣搴撲綅
+////                                null,    // 鐩爣绔�
+////                                null,    // 婧愮珯
+////                                null,    // 婧愬簱浣�
+////                                null,    // 鏉$爜
+////                                (int)shuttleProtocol.getStatusErrorCode(),    // 寮傚父鐮�
+////                                errName,    // 寮傚父
+////                                1,    // 寮傚父鎯呭喌
+////                                now,    // 娣诲姞鏃堕棿
+////                                null,    // 娣诲姞浜哄憳
+////                                now,    // 淇敼鏃堕棿
+////                                null,    // 淇敼浜哄憳
+////                                "鏃犱换鍔″紓甯�"    // 澶囨敞
+////                        );
+////                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
+////                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
+////                        }
+////                    }
+////                    // 鏃犲紓甯�
+////                } else {
+////                    // 寮傚父淇
+////                    if (latest != null && latest.getStatus() == 1) {
+////                        latest.setEndTime(now);
+////                        latest.setUpdateTime(now);
+////                        latest.setStatus(2);
+////                        if (!basShuttleErrLogService.updateById(latest)) {
+////                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
+////                        }
+////                    }
+////                }
+//            }
+//        }
+//    }
+//
+//    /**
+//     * 鎻愬崌鏈哄紓甯镐俊鎭褰�
+//     */
+//    private void recLiftErr() {
+//        Date now = new Date();
+//        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.getTaskNo() != 0) {
+//                //鏈変换鍔�
+//                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(liftSlave.getId(), liftProtocol.getTaskNo().intValue());
+//                // 鏈夊紓甯�
+//                if (latest == null) {
+//                    if (liftProtocol.getDeviceError() != null && liftProtocol.getDeviceError()) {
+//                        WrkMast wrkMast = wrkMastMapper.selectById(liftProtocol.getTaskNo());
+//                        if (wrkMast == null) {
+//                            continue;
+//                        }
+//
+//                        String errName = "";
+//                        if (liftProtocol.getFrontOverrun()) {
+//                            errName = "鍓嶈秴闄�";
+//                        } else if (liftProtocol.getBackOverrun()) {
+//                            errName = "鍚庤秴闄�";
+//                        } else if (liftProtocol.getLeftOverrun()) {
+//                            errName = "宸﹁秴闄�";
+//                        } else if (liftProtocol.getRightOverrun()) {
+//                            errName = "鍙宠秴闄�";
+//                        } else if (liftProtocol.getOverHeight()) {
+//                            errName = "瓒呴珮";
+//                        } else if (liftProtocol.getOverWeight()) {
+//                            errName = "瓒呴噸";
+//                        }
+//
+//                        BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
+//                                null,    // 缂栧彿
+//                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+//                                now,    // 鍙戠敓鏃堕棿
+//                                null,    // 缁撴潫鏃堕棿
+//                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+//                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+//                                liftSlave.getId(),    // 鎻愬崌鏈�
+//                                null,    // plc
+//                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
+//                                wrkMast.getStaNo(),    // 鐩爣绔�
+//                                wrkMast.getSourceStaNo(),    // 婧愮珯
+//                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+//                                wrkMast.getBarcode(),    // 鏉$爜
+//                                null,    // 寮傚父鐮�
+//                                errName,    // 寮傚父
+//                                1,    // 寮傚父鎯呭喌
+//                                now,    // 娣诲姞鏃堕棿
+//                                null,    // 娣诲姞浜哄憳
+//                                now,    // 淇敼鏃堕棿
+//                                null,    // 淇敼浜哄憳
+//                                "浠诲姟涓紓甯�",    // 澶囨敞
+//                                JSON.toJSONString(liftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
+//                        );
+//                        if (!basLiftErrLogService.insert(basLiftErrLog)) {
+//                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", liftSlave.getId(), errName);
+//                        }
+//                    }
+//                } else {
+//                    // 寮傚父淇
+//                    if (liftProtocol.getDeviceError() == null || !liftProtocol.getDeviceError()) {
+//                        latest.setEndTime(now);
+//                        latest.setUpdateTime(now);
+//                        latest.setStatus(2);
+//                        if (!basLiftErrLogService.updateById(latest)) {
+//                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", liftSlave.getId(), latest.getId());
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//    }
 
     // -------------------------------------------------------------------------------
 
-    /**
-     * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
-     */
-    public void storeEmptyPlt(){
-        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)) {
-//                            News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", emptyInSta.getBarcode(), 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);
-                            }
-                            param.setSourceStaNo(emptyInSta.getStaNo());
-//                        param.setLocType1(locTypeDto.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);
-                                barcodeThread.setBarcode("");
-//                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-//                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-//                            staProtocol.setStaNo(dto.getStaNo().shortValue());
-//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//                            if (!result) {
-//                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+//    /**
+//     * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
+//     */
+//    public void storeEmptyPlt(){
+//        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)) {
+////                            News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", emptyInSta.getBarcode(), barcode0);
+//                                if (!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) {
+//                                    barcode = barcode0;
+//                                }
 //                            }
-                            } 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);
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                        }
-
-                    }
-
-
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
+//                        }
+//
+//                        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);
+//                            }
+//                            param.setSourceStaNo(emptyInSta.getStaNo());
+////                        param.setLocType1(locTypeDto.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);
+//                                barcodeThread.setBarcode("");
+////                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+////                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
+////                            staProtocol.setStaNo(dto.getStaNo().shortValue());
+////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+////                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+////                            if (!result) {
+////                                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));
+//                                    }
+//                                }
+//                                News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
+//                            }
+//                        } catch (Exception e) {
+//                            e.printStackTrace();
+//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                        }
+//
+//                    }
+//
+//
+//                }
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
 
     /**
      * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
@@ -2531,220 +1864,220 @@
 //        }
     }
 
-    /**
-     * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
-     */
-    public synchronized void loopShuttleCharge() {
-        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.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;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
-                    }
-
-                    //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
-                    if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
-                        shuttleCharge = chargeType;
-                        break;
-                    }
-                }
-
-                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;
-                            }
-
-                            shuttleCharge = chargeType;
-                            break;
-                        }
-                    }
-                }
-
-                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();
-        }
-    }
-
-    /**
-     * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
-     */
-    public synchronized void executeShuttleCharge() {
-        try {
-            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()) {
-                        continue;
-                    }
-
-                    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 loopShuttleCharge() {
+//        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.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;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
+//                    }
+//
+//                    //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
+//                    if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
+//                        shuttleCharge = chargeType;
+//                        break;
+//                    }
+//                }
+//
+//                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;
+//                            }
+//
+//                            shuttleCharge = chargeType;
+//                            break;
+//                        }
+//                    }
+//                }
+//
+//                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();
+//        }
+//    }
+//
+//    /**
+//     * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
+//     */
+//    public synchronized void executeShuttleCharge() {
+//        try {
+//            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()) {
+//                        continue;
+//                    }
+//
+//                    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();
+//        }
+//    }
 
     /**
      * 鎵ц灏忚溅绉诲簱浠诲姟
@@ -2752,25 +2085,15 @@
     public synchronized void shuttleMoveExecute() {
         try {
             //鏌ヨ灏忚溅绉诲簱浠诲姟
-            List<WrkMast> wrkMasts = wrkMastMapper.selectShuttleMoveWrk();
+            List<WrkMast> wrkMasts = wrkMastService.selectShuttleMoveWrk();
             for (WrkMast wrkMast : wrkMasts) {
                 boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐�
                 if (!stepMoveSta) {
                     continue;
                 }
 
-                boolean stepIntoLift = this.shuttleMoveExecuteStepIntoLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈�
-                if (!stepIntoLift) {
-                    continue;
-                }
-
                 boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑
                 if (!stepLiftMove) {
-                    continue;
-                }
-
-                boolean stepOutLift = this.shuttleMoveExecuteStepOutLift(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈�
-                if (!stepOutLift) {
                     continue;
                 }
 
@@ -2794,284 +2117,92 @@
         //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
         Date now = new Date();
 
-        //灏忚溅绉诲姩鑷崇珯鐐�  101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅绉诲姩鑷崇珯鐐逛腑
-        if (wrkMast.getWrkSts() == 101) {
+        //灏忚溅绉诲姩鑷崇珯鐐�  301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐逛腑
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_MOVE.sts) {
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
             if (shuttleThread == null) {
                 return false;
             }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
             if (shuttleProtocol == null) {
                 return false;
             }
 
             //灏忚溅澶勪簬绌洪棽鐘舵��
-            if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) {
+            if (!shuttleThread.isIdle()) {
                 News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;
             }
 
-            //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
-            if (shuttleProtocol.getToken() != 0) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
-            }
-
-            if (Utils.getLev(wrkMast.getLocNo()) == shuttleProtocol.getPoint().getZ()) {
+            if (Utils.getLev(wrkMast.getLocNo()) == Utils.getLev(shuttleProtocol.getCurrentLocNo())) {
                 //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛屼笉闇�瑕侀�氳繃鎻愬崌鏈鸿皟搴�
-                wrkMast.setWrkSts(109L);// 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
+                wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);// 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
                 wrkMast.setModiTime(now);
-                shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
-                if (wrkMastMapper.updateById(wrkMast) > 0) {
+                if (wrkMastService.updateById(wrkMast)) {
                     //涓嬪彂浠诲姟
-                    return true;//鐩存帴杩涘叆109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
+                    return true;//鐩存帴杩涘叆309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
                 }
                 return false;
             }
 
             //鑾峰彇婧愯緭閫佺珯
-            LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+            ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
             if (liftSta == null) {
                 return false;//鎵句笉鍒扮珯鐐�
             }
 
             //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
-            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftSta.getLiftNo());
+            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftSta.getLiftNo());
             if (liftWrkMast != null) {
                 News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo());
                 return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
             }
 
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setAuto(true);//鑷姩妯″紡
+
+            //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
+            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
+            if (commands == null) {
+                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;//璺緞瑙i攣澶辫触
+            }
+
+            assignCommand.setCommands(commands);
+
             //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
-            List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
+            List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
             if (targetNodes == null) {
                 return false;//鏈幏鍙栧埌鑺傜偣
             }
-            boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(wrkMast.getLocNo()), null);
+            boolean checkPathIsAvailable = navigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo()));
             if (!checkPathIsAvailable) {
                 News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢�
             }
             //灏濊瘯閿佸畾鐩爣绔欒矾寰�
-            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo().intValue(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
             if (!result2) {
                 News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;//璺緞閿佸畾澶辫触
             }
             //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
 
-            //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
-            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();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setAuto(true);//鑷姩妯″紡
-            assignCommand.setCommands(commands);
-            assignCommand.setNodes(result.getNodes());
-
-            wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅绉诲姩鑷崇珯鐐�
+            wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐�
             wrkMast.setModiTime(now);
             wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
-            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
+//            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
+            if (wrkMastService.updateById(wrkMast)) {
                 //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
                 return false;
             }
             return false;
         }
-        return true;
-    }
-
-    /**
-     * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈�
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean shuttleMoveExecuteStepIntoLift(WrkMast wrkMast) {
-        //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------//
-        Date now = new Date();
-
-        //灏忚溅绉诲姩鍒版彁鍗囨満涓�  103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 104.灏忚溅杩佸叆鎻愬崌鏈轰腑
-        if (wrkMast.getWrkSts() == 103) {
-            //鑾峰彇婧愮珯
-            LiftStaProtocol sourceLiftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
-            if (sourceLiftSta == null) {
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-
-            //鑾峰彇鐩爣杈撻�佺珯
-            LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
-            if (liftSta == null) {
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-
-            //鑾峰彇鎻愬崌鏈烘暟鎹�
-            BasLift basLift = basLiftService.selectById(liftSta.getLiftNo());
-            if (basLift == null) {
-                return false;//娌℃湁鎻愬崌鏈烘暟鎹�
-            }
-
-            if (basLift.getPoint() == null) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾病鏈夋彁鍗囨満鐐逛綅鍧愭爣锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), basLift.getLiftNo());
-                return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍�
-            }
-
-            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
-            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo());
-            if (liftWrkMast != null) {
-                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚�
-                    News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), basLift.getLiftNo());
-                    return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
-                }
-            }
-
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSta.getLiftNo());
-            if (liftThread == null) {
-                return false;
-            }
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                return false;
-            }
-
-            if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), basLift.getLiftNo());
-                return false;
-            }
-
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                return false;
-            }
-
-            //灏忚溅澶勪簬绌洪棽鐘舵��
-            if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
-            //灏忚溅浠ょ墝鏄惁琚换鍔$嫭鍗�
-            if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞︿护鐗岃鐙崰锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
-            //鍒ゆ柇鎻愬崌鏈烘ゼ灞�
-            if (liftProtocol.getLev().intValue() != shuttleProtocol.getPoint().getZ()) {
-                //鎻愬崌鏈轰笉鍦ㄥ皬杞︽ゼ灞�
-                //璋冨害鎻愬崌鏈�
-
-                if (liftProtocol.getToken() != 0) {
-                    News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満浠ょ墝琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                    return false;//鎻愬崌鏈轰护鐗岃鍗犵敤
-                }
-
-                //鑾峰彇鎻愬崌鏈哄懡浠わ紝璋冨害鎻愬崌鏈哄埌婧愮珯浣嶇疆
-                NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceLiftSta.getStaNo(), sourceLiftSta.getStaNo(), wrkMast.getWrkNo());
-
-                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<>();
-                commands.add(liftCommand);
-
-                //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
-                LiftAssignCommand assignCommand = new LiftAssignCommand();
-                assignCommand.setCommands(commands);
-                assignCommand.setLiftNo(liftProtocol.getLiftNo());
-                assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-                assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue());
-                assignCommand.setAuto(false);
-
-                wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤
-                wrkMast.setModiTime(now);
-                liftProtocol.setToken(wrkMast.getShuttleNo());//鎻愬崌鏈轰护鐗岀粦瀹氬綋鍓嶅皬杞�
-                if (wrkMastMapper.updateById(wrkMast) > 0) {
-                    //涓嬪彂浠诲姟
-                    MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
-                }
-                return false;//绛夊緟鎻愬崌鏈哄埌灏忚溅妤煎眰
-            }
-
-            if (liftProtocol.getToken() == 0) {//鎻愬崌鏈轰护鐗屾湭琚崰鐢�
-                //鐙崰鎻愬崌鏈�
-                liftProtocol.setToken(wrkMast.getShuttleNo());
-                return false;//绛夊緟涓嬩竴娆℃墽琛�
-            }
-
-            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅
-            if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満浠ょ墝琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
-            }
-
-            //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗�
-            if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞︿护鐗岃鐙崰锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
-            //绔欑偣鑺傜偣
-            NavigateNode staNode = NavigatePositionConvert.locNoToNode(sourceLiftSta.getLocNo());
-
-            //鎻愬崌鏈鸿妭鐐�
-            NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY());
-            liftNode.setZ(staNode.getZ());
-
-            //鑾峰彇灏忚溅杩涙彁鍗囨満琛岃蛋鍛戒护
-            NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), staNode, liftNode, true);
-            List<NyShuttleHttpCommand> commands = new ArrayList<>();
-            commands.add(moveCommand);
-            List<NavigateNode> nodes = new ArrayList<>();//琛岃蛋鑺傜偣璺緞
-            nodes.add(staNode);
-            nodes.add(liftNode);
-
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setAuto(true);//鑷姩妯″紡
-            assignCommand.setCommands(commands);
-            assignCommand.setNodes(nodes);
-
-            wrkMast.setWrkSts(104L);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 104.灏忚溅杩佸叆鎻愬崌鏈轰腑
-            wrkMast.setModiTime(now);
-            wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤
-            liftProtocol.setToken(wrkMast.getShuttleNo());//鎻愬崌鏈轰护鐗岀粦瀹氬綋鍓嶅皬杞�
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                return false;
-            }
-            return false;
-        }
-
         return true;
     }
 
@@ -3084,203 +2215,57 @@
         //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------//
         Date now = new Date();
 
-        //鎻愬崌鏈烘惉杩愪腑  105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 106.鎻愬崌鏈烘惉杩愪腑
-        if (wrkMast.getWrkSts() == 105) {
-
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
-            if (liftThread == null) {
+        //鎻愬崌鏈烘惉杩愪腑  303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
+        if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_COMPLETE.sts) {
+            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, wrkMast.getLiftNo());
+            if (forkLiftThread == null) {
                 return false;
             }
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
+            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+            if (forkLiftProtocol == null) {
                 return false;
             }
-            if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+            if (!forkLiftThread.isIdle()) {
+                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                 return false;
             }
             //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
-            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
+            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
             if (liftWrkMast != null) {
                 if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚�
-                    News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                    News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                     return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
                 }
             }
 
-            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅
-            if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満浠ょ墝鍜屽綋鍓嶅皬杞︿笉涓�鑷达紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂
-            }
-
-            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
-            if (!liftProtocol.getHasCar()) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//鎻愬崌鏈哄唴鏃犲皬杞�
-            }
-
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                return false;
-            }
-
-            //灏忚溅澶勪簬绌洪棽鐘舵��
-            if (!shuttleProtocol.isIdleNoCharge()) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;
-            }
-
-            //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗�
-            if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀綋鍓嶄换鍔℃湭琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
             //鑾峰彇婧愮珯
-            LiftStaProtocol sourceLiftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+            ForkLiftStaProtocol sourceLiftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
             //鑾峰彇鐩爣绔�
-            LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+            ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
             if (sourceLiftSta == null || liftSta == null) {
                 News.info("{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
                 return false;//缂哄皯绔欑偣淇℃伅
             }
 
-            //鑾峰彇鎻愬崌鏈哄懡浠�
-            NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceLiftSta.getStaNo(), liftSta.getStaNo(), wrkMast.getWrkNo());
 
-            ArrayList<NyLiftCommand> commands = new ArrayList<>();
-            commands.add(liftCommand);
+            //鑾峰彇鎻愬崌鏈哄懡浠�
+            List<ForkLiftCommand> liftCommands = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev());
+            ArrayList<ForkLiftCommand> commands = new ArrayList<>();
+            commands.addAll(liftCommands);
 
             //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
             LiftAssignCommand assignCommand = new LiftAssignCommand();
             assignCommand.setCommands(commands);
-            assignCommand.setLiftNo(liftProtocol.getLiftNo());
+            assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue());
             assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-            assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue());
+            assignCommand.setTaskMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
 
-            wrkMast.setWrkSts(106L);//鎻愬崌鏈烘惉杩愪腑  105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 106.鎻愬崌鏈烘惉杩愪腑
-            wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤
+            wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑  303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
             wrkMast.setModiTime(now);
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
+            if (wrkMastService.updateById(wrkMast)) {
                 //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
+                forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
             }
-
-        }
-        return true;
-    }
-
-    /**
-     * 灏忚溅杩佺Щ-灏忚溅杩佸嚭鎻愬崌鏈�
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean shuttleMoveExecuteStepOutLift(WrkMast wrkMast) {
-        //--------------------------------------灏忚溅杩佸嚭鎻愬崌鏈�-----------------------------------------//
-        Date now = new Date();
-        //灏忚溅绉诲姩鍒版彁鍗囨満涓�  107.鎻愬崌鏈烘惉杩愬畬鎴� ==> 108.灏忚溅杩佸嚭鎻愬崌鏈轰腑
-        if (wrkMast.getWrkSts() == 107) {
-
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
-            if (liftThread == null) {
-                return false;
-            }
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                return false;
-            }
-            if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;
-            }
-
-            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
-            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
-            if (liftWrkMast != null) {
-                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚�
-                    News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                    return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
-                }
-            }
-
-            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅
-            if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満浠ょ墝鍜屽綋鍓嶅皬杞︿笉涓�鑷达紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂
-            }
-
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                return false;
-            }
-
-            //灏忚溅澶勪簬绌洪棽鐘舵��
-            if (!shuttleProtocol.isIdleNoCharge()) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
-            //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗�
-            if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞︿护鐗岃鐙崰锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;
-            }
-
-            //鑾峰彇鐩爣绔�
-            LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
-            if (liftSta == null) {
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-
-            //鑾峰彇鎻愬崌鏈烘暟鎹�
-            BasLift basLift = basLiftService.selectById(liftProtocol.getLiftNo().intValue());
-            if (basLift == null) {
-                return false;//娌℃湁鎻愬崌鏈烘暟鎹�
-            }
-            if (basLift.getPoint() == null) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛岀己灏戞彁鍗囨満鐐逛綅鍧愭爣锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-                return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍�
-            }
-
-            NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY());
-            liftNode.setZ(liftSta.getLev());
-
-            List<NyShuttleHttpCommand> commands = new ArrayList<>();
-            //鑾峰彇灏忚溅鏇存柊妤煎眰鍛戒护
-            NyShuttleHttpCommand updateZCommand = NyHttpUtils.getUpdateZCommand(shuttleThread.getSlave().getId(), liftProtocol.getLev().intValue(), wrkMast.getWrkNo());
-            commands.add(updateZCommand);
-
-            //鑾峰彇灏忚溅鍑烘彁鍗囨満琛岃蛋鍛戒护
-            NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), liftNode, NavigatePositionConvert.locNoToNode(liftSta.getLocNo()), false);
-            commands.add(moveCommand);//娣诲姞灏忚溅杩佸嚭鎻愬崌鏈哄懡浠�
-
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setAuto(true);//鑷姩妯″紡
-            assignCommand.setCommands(commands);
-            assignCommand.setNodes(null);
-
-            wrkMast.setWrkSts(108L);//灏忚溅杩佸嚭鎻愬崌鏈轰腑  107.鎻愬崌鏈烘惉杩愬畬鎴� ==> 108.灏忚溅杩佸嚭鎻愬崌鏈轰腑
-            wrkMast.setModiTime(now);
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                return false;
-            }
-            return false;
         }
         return true;
     }
@@ -3294,180 +2279,145 @@
         //--------------------------------------灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑-----------------------------------------//
         Date now = new Date();
 
-        //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
-        if (wrkMast.getWrkSts() == 109) {
+        //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
+        if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts) {
 
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
             if (shuttleThread == null) {
                 return false;
             }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
             if (shuttleProtocol == null) {
                 return false;
             }
 
             //灏忚溅澶勪簬绌洪棽鐘舵��
-            if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) {
+            if (!shuttleThread.isIdle()) {
                 News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;
             }
 
-            //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔�
-            if (shuttleProtocol.getToken() != 0 && !shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞︿护鐗岃鐙崰锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+            //灏忚溅宸茬粡鍦ㄧ洰鏍囧簱浣嶏紝鐩存帴璁ゅ畾灏忚溅绉诲姩浠诲姟瀹屾垚
+            if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+                wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.灏忚溅绉诲姩瀹屾垚
+                wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+                wrkMast.setModiTime(now);
+                wrkMastService.updateById(wrkMast);
+
+                if (wrkMast.getWrkSts() == WrkStsType.COMPLETE_MOVE.sts) {
+                    // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+                    if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) {
+                        log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={}]澶辫触", wrkMast.getWrkNo());
+                    }
+                    // 鍒犻櫎宸ヤ綔涓绘。
+                    if (!wrkMastService.deleteById(wrkMast)) {
+                        log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={}]澶辫触", wrkMast.getWrkNo());
+                    }
+                }
                 return false;
             }
 
-//            //璺ㄦゼ灞傜Щ鍔ㄤ换鍔�
-//            if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setAuto(true);//鑷姩妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+            assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
+
+            List<ShuttleCommand> commands = null;
+            //璺ㄦゼ灞傜Щ鍔ㄤ换鍔�
+            if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+//                //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆
 //                //鑾峰彇鐩爣绔�
 //                LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
 //                if (liftSta == null) {
 //                    return false;//鎵句笉鍒扮珯鐐�
 //                }
 //
-//                //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�***************
 //                List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo());
 //                if (targetNodes == null) {
 //                    return false;//鏈幏鍙栧埌鑺傜偣
 //                }
-//                //灏濊瘯瑙i攣鐩爣绔欒矾寰�
-//                boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
-//                if (!result) {
-//                    return false;//璺緞瑙i攣澶辫触
+//
+//                //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+//                ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+//                for (NavigateNode node : targetNodes) {
+//                    whiteList.add(new int[]{node.getX(), node.getY()});
 //                }
-//                //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�***************
-//            }
-
-            //灏忚溅宸茬粡鍦ㄧ洰鏍囧簱浣嶏紝鐩存帴璁ゅ畾灏忚溅绉诲姩浠诲姟瀹屾垚
-            if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
-                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-                    //閲婃斁灏忚溅浠ょ墝
-                    shuttleProtocol.setToken(0);
-                }
-                wrkMast.setWrkSts(111L);//111.灏忚溅绉诲姩瀹屾垚
-                wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
-                wrkMast.setModiTime(now);
-                wrkMastMapper.updateById(wrkMast);
-
-                shuttleProtocol.setShuttleNo((short) 0);//閲婃斁灏忚溅
-                shuttleProtocol.setToken(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());
-                    }
-                }
-                return false;
-            }
-
-            NyShuttleOperaResult result = null;
-            //璺ㄦゼ灞傜Щ鍔ㄤ换鍔�
-            if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
-                //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆
-                //鑾峰彇鐩爣绔�
-                LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
-                if (liftSta == null) {
-                    return false;//鎵句笉鍒扮珯鐐�
-                }
-
-                List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo());
-                if (targetNodes == null) {
-                    return false;//鏈幏鍙栧埌鑺傜偣
-                }
-
-                //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
-                ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
-                for (NavigateNode node : targetNodes) {
-                    whiteList.add(new int[]{node.getX(), node.getY()});
-                }
-                result = NyShuttleOperaUtils.getStartToTargetCommandsByWhites(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, whiteList);
+//                commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread, whiteList);
             }else {
                 //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
-                result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id);
+                commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
             }
 
-            if (result == null) {
+            if (commands == null) {
                 return false;//璺緞璁$畻澶辫触
             }
-            List<NyShuttleHttpCommand> commands = result.getCommands();
 
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setAuto(true);//鑷姩妯″紡
             assignCommand.setCommands(commands);
-            assignCommand.setNodes(result.getNodes());
-            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
-            assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
 
-            if (wrkMast.getLiftNo() != null) {
-                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
-                if (liftThread == null) {
-                    return false;
-                }
-                LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-                if (liftProtocol == null) {
-                    return false;
-                }
-                if (liftProtocol.getToken().equals(shuttleProtocol.getShuttleNo().intValue())) {
-                    liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗�
-                }
-            }
+//            if (wrkMast.getLiftNo() != null) {
+//                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+//                if (liftThread == null) {
+//                    return false;
+//                }
+//                LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+//                if (liftProtocol == null) {
+//                    return false;
+//                }
+//                if (liftProtocol.getToken().equals(shuttleProtocol.getShuttleNo())) {
+//                    liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗�
+//                }
+//            }
 
-            wrkMast.setWrkSts(110L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
+            wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
             wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
             wrkMast.setModiTime(now);
 
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
+            if (wrkMastService.updateById(wrkMast)) {
                 //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
             }
         }
         return true;
     }
 
-    //鎵弿璁惧PakMk鏍囪鏄惁瓒呮椂
-    public synchronized void scanDevicePakMk() {
-        try {
-            //鎵弿灏忚溅
-            for (ShuttleSlave slave : slaveProperties.getShuttle()) {
-                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
-                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-                if (shuttleProtocol == null) {
-                    continue;
-                }
-
-                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);//澶嶄綅鏍囪
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-    }
+//    //鎵弿璁惧PakMk鏍囪鏄惁瓒呮椂
+//    public synchronized void scanDevicePakMk() {
+//        try {
+//            //鎵弿灏忚溅
+//            for (ShuttleSlave slave : slaveProperties.getShuttle()) {
+//                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
+//                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+//                if (shuttleProtocol == null) {
+//                    continue;
+//                }
+//
+//                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);//澶嶄綅鏍囪
+//                }
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//
+//    }
 
 }

--
Gitblit v1.9.1