From ed265ddfb8f08f69af064a9adf65fcbf06289ffe Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 11 二月 2025 14:07:54 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 5605 +++++++++++++++++++++-------------------------------------
 1 files changed, 2,041 insertions(+), 3,564 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 0db902b..f37188e 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,40 +1,35 @@
 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.core.common.SpringUtils;
-import com.core.exception.CoolException;
+import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.NotifyUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.*;
-import com.zy.common.model.enums.WrkChargeType;
+import com.zy.common.model.enums.NavigationMapType;
 import com.zy.common.service.CommonService;
-import com.zy.common.service.erp.ErpService;
 import com.zy.common.utils.*;
-import com.zy.core.CrnThread;
-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.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.*;
-import java.util.stream.Collectors;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -42,7 +37,6 @@
  */
 @Slf4j
 @Service("mainService")
-@Transactional
 public class MainServiceImpl {
 
     @Value("${wms.url}")
@@ -50,2414 +44,1368 @@
     @Autowired
     private SlaveProperties slaveProperties;
     @Autowired
-    private WrkMastMapper wrkMastMapper;
+    private WrkMastService wrkMastService;
     @Autowired
-    private WrkDetlService wrkDetlService;
+    private WrkMastLogMapper wrkMastLogMapper;
     @Autowired
     private LocMastService locMastService;
     @Autowired
-    private LocDetlService locDetlService;
-    @Autowired
-    private StaDescService staDescService;
-    @Autowired
-    private BasCrnpService basCrnpService;
-    @Autowired
     private BasDevpService basDevpService;
     @Autowired
-    private BasErrLogService basErrLogService;
+    private BasShuttleErrLogService basShuttleErrLogService;
     @Autowired
-    private BasSteErrLogService basSteErrLogService;
+    private BasLiftErrLogService basLiftErrLogService;
     @Autowired
-    private BasCrnErrorMapper basCrnErrorMapper;
+    private BasShuttleErrService basShuttleErrService;
     @Autowired
-    private BasSteService basSteService;
-    @Autowired
-    private WrkChargeService wrkChargeService;
-    @Autowired
-    private BasSteErrService basSteErrService;
+    private BasLiftErrService basLiftErrService;
     @Autowired
     private CommonService commonService;
     @Autowired
-    private WrkChargeMapper wrkChargeMapper;
+    private BasMapService basMapService;
     @Autowired
-    private ErpService erpService;
+    private BasLiftService basLiftService;
     @Autowired
-    private OrderMapper orderMapper;
-    @Autowired
-    private OrderDetlMapper orderDetlMapper;
+    private ShuttleDispatchUtils shuttleDispatchUtils;
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private BasLiftOptService basLiftOptService;
+    @Autowired
+    private ConfigService configService;
+    @Autowired
+    private NavigateMapUtils navigateMapUtils;
+    @Autowired
+    private NavigateMapData navigateMapData;
+    @Autowired
+    private NavigateUtils navigateUtils;
+    @Autowired
+    private ShuttleOperaUtils shuttleOperaUtils;
+    @Autowired
+    private ShuttleAction shuttleAction;
+    @Autowired
+    private ForkLiftAction forkLiftAction;
+    @Autowired
+    private NotifyUtils notifyUtils;
 
-    /**
-     * 缁勬墭
-     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
-     */
-    public void generateStoreWrkFile() {
-        // 鏍规嵁杈撻�佺嚎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))
-                        && staProtocol.isPakMk()) {
 
-                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                    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));
-
-                        // 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枡/骞舵澘浠诲姟
-//                    if (null != wrkMastMapper.selectPickStepByBarcode(barcode)) {
+//    /**
+//     * 缁勬墭
+//     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗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;
 //                    }
-
-                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
-//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
-//                    if (wrkMast != null) {
-//                        News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.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/v1")
-                                .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绔欑偣淇℃伅澶辫触");
-                            }
-                        } 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));
-                                }
-                            }
-                            News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
-                        } else if (code == 700) {
-                            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 寮傚父鏄剧ず
-                            if (ledThread != null) {
-                                String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒";
-                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-                            }
-                        }
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * wms鍏ュ簱
-     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 1 ==>> 2
-     */
-    @Deprecated
-    public void generateStoreWrkFile0() {
-        // 鏍规嵁杈撻�佺嚎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();
-                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-                if (staProtocol.isAutoing() && staProtocol.isLoading()
-                        && staProtocol.isInEnable()
-                        && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
-                        && staProtocol.isPakMk()) {
-
-                    // 灏哄妫�娴嬪紓甯�
-                    boolean back = false;
-                    String errMsg = "";
-                    if (staProtocol.isFrontErr()) {
-                        errMsg = "鍓嶈秴闄�";
-                        back = true;
-                    }
-                    if (!back && staProtocol.isBackErr()) {
-                        errMsg = "鍚庤秴闄�";
-                        back = true;
-                    }
-                    if (!back && staProtocol.isHighErr()) {
-                        errMsg = "楂樿秴闄�";
-                        back = true;
-                    }
-                    if (!back && staProtocol.isLeftErr()) {
-                        errMsg = "宸﹁秴闄�";
-                        back = true;
-                    }
-                    if (!back && staProtocol.isRightErr()) {
-                        errMsg = "鍙宠秴闄�";
-                        back = true;
-                    }
-                    if (!back && staProtocol.isWeightErr()) {
-                        errMsg = "瓒呴噸";
-                        back = true;
-                    }
-                    if (!back && staProtocol.isBarcodeErr()) {
-                        errMsg = "鎵爜澶辫触";
-                        back = true;
-                    }
-
-                    // 閫�鍥�
-                    if (back) {
-                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
-                        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) {
-                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
-                        }
-                        continue;
-                    }
-
-                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
-                    WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
-                    if (wrkMast == null) { continue; }
-
-                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-
-                    // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
-                    devpThread.setPakMk(staProtocol.getSiteId(), false);
-                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                    if (result) {
-                        // 鏇存柊宸ヤ綔涓绘。
-                        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
-                        wrkMast.setModiTime(new Date());
-                        if (wrkMastMapper.updateById(wrkMast) == 0) {
-                            News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
-                        }
-                    } else {
-                        News.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
-     */
-    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.isInEnable()
-                        // 0 - 9990 鎴栬�� 9996
-                        && (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990)
-                        && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue())
-                        && staProtocol.isPakMk()){
-
-                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-//                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
-//                    if (barcodeThread == null) {
-//                        continue;
-//                    }
-
-                    WrkMast wrkMast = null;
-                    if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990) {
-                        wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo());
-                        if (null == wrkMast) {
-                            continue;
-                        }
-                    } else {
-                        continue;
-                    }
-//                    if (staProtocol.getWorkNo() == 9996) {
+//
+//                    // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+//                    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("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", 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));
+//                        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, pickSta.getLed());
+//                                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
 //                                if (ledThread != null) {
 //                                    String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-//                                    MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+//                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
 //                                }
 //                                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));
+////                        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, pickSta.getLed());
-//                            if (ledThread != null) {
-//                                String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-//                                MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
-//                            }
+////                        // 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;
 //                        }
-//                        wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode);
-//                        if (null == wrkMast) {
-//                            News.error("{}鏉$爜閿欒锛屾殏鏃犳嫞鏂欎换鍔★紒", barcode);
+//
+//                        // 杩囨护鐩樼偣/鎷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 ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
-                        || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) {
-                        continue;
-                    }
+//                }
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
 
-                    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巻鍙叉。澶辫触");
+//    /**
+//     * 鎷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;
 //                        }
-                            // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-                            if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
-                                throw new CoolException(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-                            }
+//                        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;
+////                            }
+////
+////                            if (!locMast.getLocSts().equals("F")) {
+////                                flag = true;
+////                                th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�";
+////                                break;
+////                            }
+////                        }
+////                        if (flag) {
+////                            News.info(th);
+////                            continue;
+////                        }
+////                        //*********************鍚屽簱浣嶇粍鏍¢獙*********************
+//
+////                        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+////                        if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
+////                            News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+////                            continue;
+////                        }
+//
+//                        try {
+//                            LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣�
+//                            SearchLocParam param = new SearchLocParam();
+//                            param.setWrkNo(wrkMast.getWrkNo());
+//                            param.setBarcode(wrkMast.getBarcode());
+//                            param.setIoType(wrkMast.getIoType());
+//                            param.setSourceStaNo(pickSta.getStaNo());
+//                            param.setLiftNo(pickSta.getLiftNo());
+//                            param.setLocType1(locMast.getLocType1());
+//                            String response = new HttpHandler.Builder()
+//                                    .setUri(wmsUrl)
+//                                    .setPath("/rpc/pakin/loc/v2")
+//                                    .setJson(JSON.toJSONString(param))
+//                                    .build()
+//                                    .doPost();
+//                            JSONObject jsonObject = JSON.parseObject(response);
+//                            Integer code = jsonObject.getInteger("code");
+//                            if (code.equals(200)) {
+//                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+//
+////                                //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯
+////                                LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo()));
+////                                if (liftStaProtocol == null) {
+////                                    News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触");
+////                                    continue;
+////                                }
+////
+////                                // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+////                                wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54
+////                                wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+////                                wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯
+////                                wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔�
+////                                wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅
+////                                wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
+////                                wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌�
+////                                wrkMast.setModiTime(new Date());
+////                                if (wrkMastMapper.updateById(wrkMast) == 0) {
+////                                    News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+////                                    continue;
+////                                }
+//                            } else if (code == 500) {
+//                                News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
+//                            }
+//                        } catch (Exception e) {
+//                            e.printStackTrace();
+//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                        }
+//                    }
+//                }
+//
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
 
-                            String sourceLocNo = wrkMast.getSourceLocNo().trim();
-                            // 鏇存柊宸ヤ綔妗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.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
-                            wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
-                            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暟鎹姸鎬佸け璐�");
-                            }
-
-                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂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());
-                            }
-
-                        } 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));
-                                }
-                            }
-                            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();
-                    }
-
-                }
-            }
-
-        }
-    }
+//    /**
+//     * 鐩樼偣鍐嶅叆搴�
+//     */
+//    @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();
+//        }
+//    }
 
     /**
-     * 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
+     * 鍒濆鍖栧疄鏃跺湴鍥�
      */
-    public void crnStnToOutStn() {
-        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
-            // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
-            for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
-                // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
-                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
-                if (staProtocol == null) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
-                    // 鏌ヨ宸ヤ綔妗�
-                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep16(staProtocol.getSiteId());
-                    if (wrkMast == null) {
-                        continue;
-                    }
-                    // 鍒ゆ柇宸ヤ綔妗f潯浠�
-                    if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
-                        continue;
-                    }
-                    // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
-                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
-                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-                    if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
-                        // 绉诲姩涓�
-                        continue;
-                    }
-                    //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
-                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
-                            && crnProtocol.statusType == CrnStatusType.WAITING
-                            && crnProtocol.forkPosType == CrnForkPosType.HOME) {
+    public synchronized void initRealtimeBasMap() {
+        try {
+            for (int i = 1; i <= 4; i++) {//鎬诲叡鍥涘眰妤�
+                Object data = redisUtil.get(RedisKeyType.MAP.key + i);
+                if (data == null) {//redis鍦板浘鏁版嵁涓虹┖锛屼粠鏁版嵁搴撲腑鑾峰彇
+                    BasMap basMap = basMapService.selectLatestMap(i);
+                    if (basMap == null) {
+                        //鏁版嵁搴撲腑涔熶笉瀛樺湪鍦板浘鏁版嵁锛屼粠鍦板浘鏂囦欢涓幏鍙�
+                        //杞藉叆鍦板浘
+                        List<List<MapNode>> lists = navigateMapData.getJsonData(i, -1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
 
-                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                        //瀛樺叆鏁版嵁搴�
+                        basMap = new BasMap();
+                        basMap.setData(JSON.toJSONString(lists));
+                        basMap.setCreateTime(new Date());
+                        basMap.setUpdateTime(new Date());
+                        basMap.setLev(i);
 
-                        // 涓嬪彂绔欑偣淇℃伅
-                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
-                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
-                            continue;
+                        if (!basMapService.insert(basMap)) {
+                            log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
                         }
-
-                        // 鏇存柊宸ヤ綔妗g姸鎬佷负 17.鍑哄簱瀹屾垚
-                        wrkMast.setWrkSts(17L);
-                        wrkMast.setCrnEndTime(new Date());
-                        if (wrkMastMapper.updateById(wrkMast) != 0) {
-                            // 澶嶄綅鍫嗗灈鏈�
-                            crnThread.setResetFlag(true);
-                        } else {
-                            News.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负 17.鍑哄簱瀹屾垚 澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
-                        }
-
                     }
 
+                    //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
+                    redisUtil.set(RedisKeyType.MAP.key + i, JSON.toJSONString(basMap));
                 }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
-    /**
-     * 鍏ュ嚭搴�  ===>>  鍥涘悜绌挎杞﹀叆鍑哄簱浣滀笟涓嬪彂
-     */
-    public synchronized void shuttleIoExecute() {
-        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻鍏ュ簱绔�
-            for (DevpSlave.StaRack rackInStn : devp.getRackInStn()) {
-                // 鑾峰彇鍏ュ簱绔欎俊鎭�
-                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+//    /**
+//     * 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
+//     */
+//    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();
+//        }
+//    }
 
-                StaProtocol staProtocol = devpThread.getStation().get(rackInStn.getStaNo());
-                StaProtocol staProtocol105 = devpThread.getStation().get(105);
-                staProtocol105.setWorkNo((short) 752);
-                staProtocol105.setStaNo((short) 100);
+//    /**
+//     * 鍏ュ簱-灏忚溅鎼叆搴撲腑
+//     * 濡傞渶涓绘柟娉曟墽琛宑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;
+//    }
 
-                StaProtocol staProtocol106 = devpThread.getStation().get(106);
-                staProtocol106.setWorkNo((short) 753);
-                staProtocol106.setStaNo((short) 100);
-
-                if (staProtocol == null) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-                Short workNo = staProtocol.getWorkNo();
-
-                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-                if (true || staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) {
-                    WrkMast wrkMast = wrkMastMapper.selectRackInStep48(workNo, staProtocol.getSiteId());
-                    if (wrkMast != null) {
-                        if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 8) {
-                            ShuttleThread shuttleThread = null;
-                            HashMap<String, Object> searchIdleShuttle = null;
-                            if (wrkMast.getWrkSts() == 4) {
-                                //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅
-                                searchIdleShuttle = this.searchIdleShuttle(wrkMast);
-                                shuttleThread = (ShuttleThread) searchIdleShuttle.get("result");
-                            }else {
-                                //鐘舵��8锛屽洓鍚戠┛姊溅宸插湪鎻愬崌鏈哄彛锛岀瓑寰呭懡浠よ繘琛屽叆搴撴惉杩愬姩浣�
-                                Integer shuttleNo = wrkMast.getShuttleNo();//鍥涘悜绌挎杞﹀彿
-                                shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
-                            }
-
-                            if (shuttleThread == null) {
-                                continue;
-                            }
-
-                            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-                            if (!shuttleProtocol.isIdle()) {
-                                continue;
-                            }
-
-                            wrkMast.setShuttleNo(shuttleProtocol.getShuttleNo().intValue());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
-
-                            //鍒嗛厤浠诲姟鍙�
-                            shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());
-                            //鍒嗛厤婧愬簱浣�
-                            shuttleProtocol.setSourceLocNo(wrkMast.getSourceLocNo());
-
-                            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-                            //鍥涘悜绌挎杞﹀彿
-                            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
-                            //浠诲姟鍙�
-                            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-                            //鍏ュ嚭搴撴ā寮�
-                            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());
-                            //婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-                            String currentLocNo = shuttleProtocol.getCurrentLocNo();
-                            assignCommand.setSourceLocNo(currentLocNo);
-
-                            if (wrkMast.getWrkSts() == 8 || Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) {
-                                //鍚屼竴灞�
-                                //鍒嗛厤鐩爣搴撲綅
-                                shuttleProtocol.setLocNo(wrkMast.getLocNo());
-                                //鐩爣搴撲綅
-                                assignCommand.setLocNo(wrkMast.getLocNo());
-                                wrkMast.setWrkSts(9L);//灏忚溅鍏ュ簱涓�
-                            }else {
-                                //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿
-
-                                //灏忚溅褰撳墠灞傞珮
-                                Integer currentLev = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length()));
-
-                                //鑾峰彇鎻愬崌鏈�
-                                LiftSlave liftSlave = slaveProperties.getLift().get(0);
-                                //鎻愬崌鏈哄簱浣嶅彿
-                                String liftLocNo = liftSlave.getLiftLocNo(currentLev);
-                                shuttleProtocol.setLocNo(liftLocNo);
-                                //鐩爣搴撲綅
-                                assignCommand.setLocNo(liftLocNo);
-                                wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵��
-                            }
-
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                //涓嬪彂浠诲姟
-                                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                            }
-                        }
-
-                    }
-                }
-
-            }
-        }
-
-    }
-
-    /**
-     * 鎼滅储绌洪棽涓旀渶杩戠殑鍥涘悜绌挎杞�
-     */
-    public HashMap<String,Object> searchIdleShuttle(WrkMast wrkMast) {
-        HashMap<String, Object> map = new HashMap<>();
-        String locNo = wrkMast.getWrkSts() < 10 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();//搴撲綅鍙�
-        LocMast locMast = locMastService.queryByLoc(locNo);//鎵惧埌搴撲綅璁板綍
-        String lay = locNo.substring(locNo.length() - 2, locNo.length());//褰撳墠宸ヤ綔妗e簱浣嶅眰楂�
-        ShuttleThread recentShuttle = null;//褰撳墠璺濈鏈�杩戠殑鍥涘悜绌挎杞︾嚎绋�
-
-        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                continue;
-            }
-            if (!shuttleProtocol.isIdle()) {
-                continue;
-            }
-
-            String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿
-            String shuttleLocNoLay = shuttleLocNo.substring(shuttleLocNo.length() - 2, shuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂�
-            if (lay.equals(shuttleLocNoLay)) {
-                //褰撳墠鍥涘悜绌挎杞﹀拰宸ヤ綔妗d换鍔″湪鍚屼竴灞傦紝鍒欒皟閰嶈杞﹁締
-                map.put("sameLay", true);//鍚屼竴灞�
-                map.put("result", shuttleThread);
-                return map;
-            }
-
-            //鏇存柊褰撳墠鏈�杩戠殑鍥涘悜绌挎杞�
-            if (recentShuttle == null) {
-                recentShuttle = shuttleThread;
-            }else {
-                ShuttleProtocol recentShuttleProtocol = recentShuttle.getShuttleProtocol();//鐩墠鏈�杩戠┛姊溅
-                String recentShuttleLocNo = recentShuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿
-                String recentShuttleLocNoLay = recentShuttleLocNo.substring(recentShuttleLocNo.length() - 2, recentShuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂�
-
-                int recentShuttleLocNoLayInt = Integer.parseInt(recentShuttleLocNoLay);
-                int layInt = Integer.parseInt(lay);
-                int shuttleLocNoLayInt = Integer.parseInt(shuttleLocNoLay);
-                int i = Math.abs(layInt - recentShuttleLocNoLayInt);//宸ヤ綔妗fゼ灞傚噺鏈�杩戠┛姊溅妤煎眰锛屽彇缁濆鍊�
-                int j = Math.abs(layInt - shuttleLocNoLayInt);//宸ヤ綔妗fゼ灞傚噺褰撳墠绌挎杞︽ゼ灞傦紝鍙栫粷瀵瑰��
-                if (i < j) {
-                    //鏇存柊鏈�杩戠┛姊溅
-                    recentShuttle = shuttleThread;
-                } else if (i == j) {
-                    //妤煎眰鐩稿悓鎯呭喌
-                    //鎵捐窛绂诲嚭搴撶偣鏈�杩戠殑杞�
-
-                    if (!(recentShuttleProtocol.isIdle() && shuttleProtocol.isIdle())) {
-                        //鍙鏈変竴杈嗚溅涓嶆槸绌洪棽鍒欎笉杩涜璋冨害
-                        map.put("sameLay", false);//涓嶅悓灞�
-                        map.put("result", null);
-                        return map;
-                    }
-
-                    //鑾峰彇鎻愬崌鏈�
-                    LiftSlave liftSlave = slaveProperties.getLift().get(0);
-                    //鎻愬崌鏈哄簱浣嶅彿
-                    String recentLiftLocNo = liftSlave.getLiftLocNo(recentShuttleLocNoLayInt);
-                    String shuttleLiftLocNo = liftSlave.getLiftLocNo(shuttleLocNoLayInt);
-
-                    //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒版彁鍗囨満璺緞
-                    List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentShuttleLocNo, recentLiftLocNo, ShuttleTaskModeType.PAK_IN.id);
-                    //褰撳墠妤煎眰鍥涘悜绌挎杞﹀埌鎻愬崌鏈鸿矾寰�
-                    List<NavigateNode> shuttlePath = NavigateUtils.calc(shuttleLocNo, shuttleLiftLocNo, ShuttleTaskModeType.PAK_IN.id);
-                    //鍒ゆ柇鍝竴涓矾寰勬渶鐭�
-                    if (shuttlePath.size() < recentShuttlePath.size()) {
-                        //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅
-                        recentShuttle = shuttleThread;
-                    }
-                }
-            }
-        }
-
-        map.put("sameLay", false);//涓嶅悓灞�
-        map.put("result", recentShuttle);
-        return map;
-    }
+//    /**
+//     * 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
+//     */
+//    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;
+//    }
 
     /**
      * 鍥涘悜绌挎杞︿换鍔″畬鎴�
      */
     public synchronized void shuttleFinished() {
-        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-            //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
-            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                continue;
-            }
-
-            //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭
-            if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id && shuttleProtocol.getTaskNo() != 0) {
-                //灏嗕换鍔℃。鏍囪涓哄畬鎴�
-                WrkMast wrkMast = wrkMastMapper.selectByWorkNo59(shuttleProtocol.getTaskNo().intValue());
-                if (wrkMast != null) {
-                    switch (wrkMast.getWrkSts().intValue()) {
-                        case 9:
-                            wrkMast.setWrkSts(14L);
-                            break;
-                        case 5:
-                            wrkMast.setWrkSts(6L);
-                            break;
-                        default:
-                    }
-
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
-                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
-                        //浠诲姟鍙锋竻闆�
-                        shuttleProtocol.setTaskNo((short) 0);
-                        //婧愬簱浣嶆竻闆�
-                        shuttleProtocol.setSourceLocNo(null);
-                        //鐩爣搴撲綅娓呴浂
-                        shuttleProtocol.setLocNo(null);
-                        //鏍囪澶嶄綅
-                        shuttleProtocol.setPakMk(true);
-                        //浠诲姟鎸囦护娓呴浂
-                        shuttleProtocol.setAssignCommand(null);
-                        News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
-                    } else {
-                        News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
-                    }
-                }
-
-            }
-        }
-    }
-
-    /**
-     * 鎻愬崌鏈轰换鍔�
-     */
-    public synchronized void liftIoExecute() {
-        for (LiftSlave liftSlave : slaveProperties.getLift()) {
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
-            if (liftThread == null) {
-                continue;
-            }
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                continue;
-            }
-
-            //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂茬姸鎬�
-            if (!liftProtocol.isIdle()) {
-                continue;
-            }
-
-            //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
-            WrkMast wrkMast = wrkMastMapper.selectLiftStep6();
-            if (wrkMast == null) {
-                continue;
-            }
-
-            //缁欐彁鍗囨満鍒嗛厤浠诲姟
-            liftProtocol.setLiftLock(true);//閿佸畾鎻愬崌鏈�
-            liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
-            liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿
-            liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
-
-            //鎵惧埌鍥涘悜绌挎杞︾殑绾跨▼
-            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, liftProtocol.getShuttleNo().intValue());
-            if (shuttleThread == null) {
-                continue;
-            }
-            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                continue;
-            }
-
-            //鍛戒护list
-            ArrayList<LiftCommand> commands = new ArrayList<>();
-
-            //褰撳墠绌挎杞﹀簱浣嶅彿
-            String currentLocNo = shuttleProtocol.getCurrentLocNo();
-            //褰撳墠绌挎杞︽ゼ灞�
-            int currentLocNoLey = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length()));
-
-            //宸ヤ綔妗g洰鏍囧簱浣嶅彿
-            String wrkMastLocNo = wrkMast.getLocNo();
-            //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞�
-            int wrkMastLocNoLey = Integer.parseInt(wrkMastLocNo.substring(wrkMastLocNo.length() - 2, wrkMastLocNo.length()));
-
-            //鎻愬崌鏈哄綋鍓嶆ゼ灞�
-            int liftLev = liftProtocol.getLev().intValue();
-            if (liftLev != currentLocNoLey) {
-                //涓嶅悓妤煎眰
-                LiftCommand command1 = new LiftCommand();
-                command1.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿
-                command1.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙�
-                command1.setRun((short) 1);//鍗囬檷
-                command1.setDistPosition((short) currentLocNoLey);//鐩爣妤煎眰(绌挎杞︽墍鍦ㄦゼ灞�)
-                command1.setLiftLock(true);//閿佸畾鎻愬崌鏈�
-
-                commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
-            }
-
-            //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩杩涙潵
-            LiftCommand command2 = new LiftCommand();
-            command2.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿
-            command2.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙�
-            command2.setRun((short) 6);//杈撻�佺嚎杩愪綔
-            command2.setLiftLock(true);//閿佸畾鎻愬崌鏈�
-
-            commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list
-
-            //鎻愬崌鏈烘惉杩愬洓鍚戠┛姊溅
-            LiftCommand command3 = new LiftCommand();
-            command3.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿
-            command3.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙�
-            command3.setRun((short) 1);//鍗囬檷
-            command3.setDistPosition((short) wrkMastLocNoLey);//宸ヤ綔妗g洰鏍囨ゼ灞�
-            command3.setLiftLock(true);//閿佸畾鎻愬崌鏈�
-
-            commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list
-
-            //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲嚭鍘�
-            //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩杩涙潵
-            LiftCommand command4 = new LiftCommand();
-            command4.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿
-            command4.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙�
-            command4.setRun((short) 3);//杈撻�佺嚎杩愪綔
-            command4.setLiftLock(true);//閿佸畾鎻愬崌鏈�
-
-            commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list
-
-            wrkMast.setWrkSts(7L);//绉诲姩浠诲姟
-            //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣�
-            LiftAssignCommand assignCommand = new LiftAssignCommand();
-            assignCommand.setCommands(commands);
-            assignCommand.setLiftNo(liftProtocol.getLiftNo());
-            assignCommand.setTaskNo(liftProtocol.getTaskNo());
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
-            }
-        }
-    }
-
-    /**
-     * 鎻愬崌鏈轰换鍔″畬鎴�
-     */
-    public synchronized void liftFinished() {
-        for (LiftSlave liftSlave : slaveProperties.getLift()) {
-            //鑾峰彇鎻愬崌鏈轰俊鎭�
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                continue;
-            }
-
-            //鎻愬崌鏈轰负绛夊緟纭
-            if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id && liftProtocol.getTaskNo() != 0) {
-                //灏嗕换鍔℃。鏍囪涓哄畬鎴�
-                WrkMast wrkMast = wrkMastMapper.selectByWorkNo7(liftProtocol.getTaskNo().intValue());
-                if (wrkMast != null) {
-                    wrkMast.setWrkSts(8L);
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵��
-                        liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
-                        //浠诲姟鍙锋竻闆�
-                        liftProtocol.setTaskNo((short) 0);
-                        //鏍囪澶嶄綅
-                        liftProtocol.setPakMk(true);
-                        //浠诲姟鎸囦护娓呴浂
-                        liftProtocol.setAssignCommand(null);
-                        News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
-                    } else {
-                        News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
-     */
-    public synchronized void crnIoExecute(){
-        for (CrnSlave crn : slaveProperties.getCrn()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
-            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) { continue; }
-            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
-            if (basCrnp == null) {
-                News.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
-                continue;
-            }
-            // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
-                // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
-                if (crnProtocol.getLastIo().equals("I")) {
-                    if (basCrnp.getInEnable().equals("Y")) {
-                        //  鍏ュ簱
-                        if (this.crnStnToLoc(crn, crnProtocol)) {
-                        }
-                        crnProtocol.setLastIo("O");
-                    } else if (basCrnp.getOutEnable().equals("Y")) {
-                        //  鍑哄簱
-                        if (this.locToCrnStn(crn, crnProtocol)) {
-                        }
-                        crnProtocol.setLastIo("I");
-                    }
-                }
-                // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
-                else if (crnProtocol.getLastIo().equals("O")) {
-                    if (basCrnp.getOutEnable().equals("Y")) {
-                        //  鍑哄簱
-                        if (this.locToCrnStn(crn, crnProtocol)) {
-                        }
-                        crnProtocol.setLastIo("I");
-                    } else if (basCrnp.getInEnable().equals("Y")) {
-                        //  鍏ュ簱
-                        if (this.crnStnToLoc(crn, crnProtocol)) {
-                        }
-                        crnProtocol.setLastIo("O");
-                    }
-                }
-                // 搴撲綅绉昏浆
-//                this.locToLoc(crn, crnProtocol);
-                // 婕旂ず
-//                this.steMoveDemo(crn, crnProtocol);
-            }
-        }
-    }
-
-    /**
-     * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
-     */
-    public boolean crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){
-        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
-            boolean flag = false;
-            // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
-            if (staProtocol == null) {
-                continue;
-            } else {
-                staProtocol = staProtocol.clone();
-            }
-            // 鏌ヨ绔欑偣璇︾粏淇℃伅
-            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
-            if (staDetl == null) {
-                News.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
-                continue;
-            }
-            // 鑾峰彇宸ヤ綔鐘舵�佷负 2,3,4,5,6 鐨勫叆搴撳伐浣滄。
-            WrkMast wrkMast = wrkMastMapper.selectPakInStep23456(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
-            if(null == wrkMast) {
-//                News.error("{}绔欑偣鏌ヨ鏃犲緟鍏ュ簱鏁版嵁 宸ヤ綔鍙�={}", crnStn.getStaNo(), staProtocol.getWorkNo());
-                continue;
-            }
-
-            // 鍚屽簱浣嶇粍杩涜鏍¢獙
-            List<String> groupLocNo = Utils.getGroupLocNo(wrkMast.getLocNo());
-            if (!Cools.isEmpty(groupLocNo)) {
-                if (null != wrkMastMapper.selectPakoutWorkingByGroupLoc(groupLocNo)) {
+        try {
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+                ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+                ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+                if (shuttleProtocol == null) {
                     continue;
                 }
-            }
 
-            if (wrkMast.getWrkSts() < 3) {
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
-                        && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) {
-                    flag = true;
-                }
-                if (!flag) {
-                    continue;
-                }
-            }
-            // 鑾峰彇搴撲綅淇℃伅
-            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
-            if (locMast == null) {
-                News.error("鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
-                continue;
-            }
-            if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
-                News.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
-                continue;
-            }
-
-            List<LocMast> locMasts = null;
-            boolean sign=false;
-            if (locMast.getRow1()>=5){
-                locMasts=locMastService.selectList(new EntityWrapper<LocMast>().ge("row1", 5)
-                        .eq("bay1",locMast.getBay1()).eq("lev1",locMast.getLev1()));
-                for (LocMast locMast1:locMasts){
-                    if (locMast1.getRow1()>locMast.getRow1()){
-                        if (!locMast1.getLocSts().equals("F") && !locMast1.getLocSts().equals("D")){
-                            if (!locMast1.getLocSts().equals("X")){
-                                sign=true;
-                                break;
-                            }
-                        }
-                    }else if (locMast1.getRow1()<locMast.getRow1()){
-                        if (locMast1.getLocSts().equals("F") || locMast1.getLocSts().equals("D")){
-                            News.error("褰撳墠宸ヤ綔妗g洰鏍囧簱浣嶆墍鍦ㄦ帓鍓嶈竟瀛樺湪璐х墿锛�", wrkMast.getWrkNo());
-                            sign=true;
-                            break;
-                        }
-                    }
-                }
-            }else {
-                locMasts=locMastService.selectList(new EntityWrapper<LocMast>().le("row1", 4)
-                        .eq("bay1",locMast.getBay1()).eq("lev1",locMast.getLev1()));
-                for (LocMast locMast1:locMasts){
-                    if (locMast1.getRow1()>locMast.getRow1()){
-                        if (locMast1.getLocSts().equals("F") || locMast1.getLocSts().equals("D")){
-                            News.error("褰撳墠宸ヤ綔妗g洰鏍囧簱浣嶆墍鍦ㄦ帓鍓嶈竟瀛樺湪璐х墿锛�", wrkMast.getWrkNo());
-                            sign=true;
-                            break;
-                        }
-                    }else if (locMast1.getRow1()<locMast.getRow1()){
-                        if (!locMast1.getLocSts().equals("F") && !locMast1.getLocSts().equals("D")){
-                            if (!locMast1.getLocSts().equals("X")){
-                                sign=true;
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-            if (sign){
-                continue;
-            }
-
-            // 妫�娴嬫槸鍚﹀瓨鍦ㄥ嚭搴撲换鍔�
-            if (null != wrkMastMapper.selectPakout(slave.getId(), null)) {
-                News.error("{}鍏ュ簱浠诲姟鏃犳硶浣滀笟锛屽洜瀛樺湪鍑哄簱涓换鍔�!", wrkMast.getWrkNo());
-                continue;
-            }
-
-            // 缃《浠诲姟
-            if (wrkMast.getIoPri()<8000){
-                wrkMast.setIoPri(wrkMast.getIoPri()+9000d);
-            }
-            wrkMastMapper.updateById(wrkMast);
-
-                // 鐩爣搴撲綅 ===>> 鏈�澶栧眰搴撲綅
-            if (locMastService.isOutMost(wrkMast.getLocNo(), true)) {
-                // 鍒ゆ柇灏忚溅鏄惁鍦ㄦ渶澶栧眰搴撲綅锛屽鏋滄槸鍒欐惉璧帮紝濡傛灉涓嶆槸锛屽垯鐩存帴鍫嗗灈鏈哄叆搴�
-                Integer steNo = this.hasCar(wrkMast.getLocNo());
-                // 鏈夊皬杞�
-                if (steNo != null) {
-                    // 灏忚溅琛岃蛋鍒板爢鍨涙満寰呮惉绉荤偣
-                    if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
-                        // 娌℃湁鍏朵粬浠诲姟
-                        if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
-                            this.letCarBeReady(wrkMast, steNo, wrkMast.getLocNo());
-                            return true;
-                        }
-                    }
-                    // 灏忚溅鎼蛋
-                    if (wrkMast.getWrkSts() == 3L) {
-                        this.carMoveOut(wrkMast, steNo, crnProtocol);
-                        return true;
-                    }
-                    // 娌℃湁灏忚溅
-                } else {
-
-                    // 褰撳墠鍏ュ簱搴撲綅缁勬病鏈夊皬杞� 鍫嗗灈鏈哄垯鍘荤珯鐐瑰彇璐у叆搴�
-                    // case 1锛氫粠濮嬭嚦缁堝簱浣嶇粍閮芥病鏈夊皬杞︼紝娌℃湁杩佸嚭灏忚溅鍔ㄤ綔锛屾墍浠ュ伐浣滅姸鎬� = 2
-                    // case 2锛氬爢鍨涙満宸茬粡鎼嚭灏忚溅锛屾湁杩佸嚭灏忚溅鍔ㄤ綔锛屾墍浠ュ伐浣滅姸鎬� = 6
-                    if ((wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) || wrkMast.getWrkSts() == 6L) {
-
-                        // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-                        if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬�
+                if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id  //浠诲姟瀹屾垚绛夊緟纭
+                        && shuttleProtocol.getTaskNo() != 0
+                ) {
+                    //灏嗕换鍔℃。鏍囪涓哄畬鎴�
+                    WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
+                    if (wrkMast != null) {
+                        if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) {
+                            //302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) {
+                            //308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) {
+                            //310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//瑙﹀彂閫氱煡
+                        } else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
+                            //204.灏忚溅鍏呯數涓� ==> 205.灏忚溅鍏呯數瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        } else if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts) {
+                            //502.灏忚溅鎼繍涓� ==> 509.绉诲簱瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_DELIVERY);//瑙﹀彂閫氱煡
+                        } else {
                             continue;
                         }
+//                        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 302:
+//                                wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);
+//                                break;
+//                            case WrkStsType.MOVE_SHUTTLE.sts:
+//                                wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
+//                                shuttleThread.setSyncTaskNo(0);
+//                                break;
+//                            default:
+//                        }
 
-                        // 鍫嗗灈鏈哄叆搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                        CrnCommand crnCommand = new CrnCommand();
-                        crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                        crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
-                        crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
-                        crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
-                        crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
-                        crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-                        crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-                        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                            News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                        if (wrkMastService.updateById(wrkMast)) {
+                            //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+                            shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                            News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
                         } else {
-                            // 淇敼宸ヤ綔妗g姸鎬�  7.鍚婅溅鍏ュ簱涓�
-                            Date now = new Date();
-                            wrkMast.setWrkSts(7L);
-                            wrkMast.setCrnStrTime(now);
-                            wrkMast.setModiTime(now);
-                            if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                News.error("淇敼宸ヤ綔妗g姸鎬� {} => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo());
-                            } else {
-                                return true;
+                            News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
+                        }
+                    } else {
+                        Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo());
+                        if(object != null){
+                            ShuttleAssignCommand assignCommand = JSON.parseObject(object.toString(), ShuttleAssignCommand.class);
+                            if (!assignCommand.getAuto()) {
+                                //鎵嬪姩妯″紡
+                                //宸ヤ綔鍙锋竻闆�
+                                shuttleThread.setTaskNo(0);
+                                //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+                                shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                                News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
                             }
                         }
                     }
-
                 }
 
-            // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅
-            } else {
-                // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏皢绌挎杞︾Щ鑷虫渶澶栧眰锛岀瓑寰呭爢鍨涙満鏀捐揣锛涘鏋滀笉鏄紝鍒欏爢鍨涙満瀵绘壘绌挎杞︼紝骞舵斁缃綋鍓嶇粍鏈�澶栧眰
-                Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
-                // 鏈夊皬杞�
-                if (steNo != null) {
-                    // 灏忚溅琛岃蛋鍒板緟鏈轰綅
-                    if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
-                        // 娌℃湁鍏朵粬浠诲姟
-                        if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
-                            this.letCarBeWaiting(wrkMast, steNo, wrkMast.getLocNo());
-                        } else {
-                            return true;
-                        }
-                    }
-                    // 鍫嗗灈鏈哄皢璐ф斁鑷冲皬杞︿笂 3.灏忚溅寰呮惉锛堝皬杞︿笉鐢ㄦ惉杩愶紝宸茬粡鍦ㄥ綋鍓嶇粍搴撲綅锛� / 6.灏忚溅寰呭叆  ===>> 7.鍚婅溅鍏ュ簱涓�
-                    if (wrkMast.getWrkSts() == 3L || wrkMast.getWrkSts() == 6L) {
-                        // 灏忚溅澶勪簬绌洪棽
-                        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-                        SteProtocol steProtocol = steThread.getSteProtocol();
-                        if (steProtocol == null) { continue; }
-                        if (steProtocol.isIdle()) {
-
-                            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-                            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
-                                continue;
-                            }
-                            // 鍫嗗灈鏈哄叆搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                            CrnCommand crnCommand = new CrnCommand();
-                            crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
-                            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
-                            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
-                            crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue());     // 鐩爣搴撲綅鎺�
-                            crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-                            crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-                            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                                News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
-                            } else {
-                                // 淇敼宸ヤ綔妗g姸鎬�  3.灏忚溅寰呮惉 ===>> 7.鍚婅溅鍏ュ簱涓�
-                                Date now = new Date();
-                                wrkMast.setWrkSts(7L);
-                                wrkMast.setCrnStrTime(now);
-                                wrkMast.setModiTime(now);
-                                if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                    News.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉/6.灏忚溅寰呭叆 => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                                } else {
-                                    return true;
-                                }
-                            }
-                        }
-                    }
-                // 娌℃湁灏忚溅
-                } else {
-                    if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
-                        // 瀵绘壘褰撳墠鍫嗗灈鏈哄搴旂殑灏忚溅
-                        SteThread steThread = queryIdleCar(wrkMast);
-                        if (steThread != null) {
-                            // 娌℃湁鍏朵粬浠诲姟
-                            if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
-                                // 璁╁皬杞︾瓑寰呮惉杩愬緟缁�
-                                this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getLocNo());
-                                return true;
-                            }
-                        }
-                    }
-                    // 鍫嗗灈鏈烘惉杩愬皬杞�
-                    if (wrkMast.getWrkSts() == 3L) {
-                        this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
-                        return true;
-                    }
-                }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
-        return false;
     }
 
     /**
-     * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
+     * 鎵ц绉诲簱浠诲姟
      */
-    public synchronized boolean locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
-        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
-            // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
-            WrkMast wrkMast = wrkMastMapper.selectPakOutStep111215(slave.getId(), crnStn.getStaNo());
-            if (wrkMast == null) {
-                continue;
-            }
-            // 宸ヤ綔妗g姸鎬佸垽鏂�
-            if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null){
-                News.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
-                continue;
-            }
-            // 鑾峰彇婧愬簱浣嶄俊鎭�
-            LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
-            if (!sourceSta.getLocSts().equals("R") &&!sourceSta.getLocSts().equals("P")) {
-                News.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
-                continue;
-            }
-            List<LocMast> locMasts = null;
-            boolean sign=false;
-            if (sourceSta.getRow1()>=5){
-                locMasts=locMastService.selectList(new EntityWrapper<LocMast>().ge("row1", 5)
-                        .eq("bay1",sourceSta.getBay1()).eq("lev1",sourceSta.getLev1()));
-                for (LocMast locMast1:locMasts){
-                    if (locMast1.getRow1()<sourceSta.getRow1()){
-                        if (!locMast1.getLocSts().equals("O")){
-                            News.error("褰撳墠宸ヤ綔妗f簮搴撲綅鎵�鍦ㄦ帓鍓嶈竟瀛樺湪璐х墿锛�", wrkMast.getWrkNo());
-                            sign=true;
-                            break;
-                        }
-                    }
-                }
-            }else {
-                locMasts=locMastService.selectList(new EntityWrapper<LocMast>().le("row1", 4)
-                        .eq("bay1",sourceSta.getBay1()).eq("lev1",sourceSta.getLev1()));
-                for (LocMast locMast1:locMasts){
-                    if (locMast1.getRow1()>sourceSta.getRow1()){
-                        if (!locMast1.getLocSts().equals("O")){
-                            News.error("褰撳墠宸ヤ綔妗g洰鏍囧簱浣嶆墍鍦ㄦ帓鍓嶈竟瀛樺湪璐х墿锛�", wrkMast.getWrkNo());
-                            sign=true;
-                            break;
-                        }
-                    }
-                }
-            }
-            if (sign){
-                continue;
-            }
-
-            // 鍚屽簱浣嶇粍杩涜鏍¢獙
-            List<String> groupLocNo = Utils.getGroupLocNo(wrkMast.getSourceLocNo());
-            if (!Cools.isEmpty(groupLocNo)) {
-                if (null != wrkMastMapper.selectPakinWorkingByGroupLoc(groupLocNo)) {
-                    continue;
-                }
-            }
-
-            // 鍒ゆ柇鏄惁鏈夊悓搴撲綅缁勭殑鍑哄簱浠诲姟锛屽鏋滄湁锛屽垯鏆傚仠
-            List<String> outsideLoc = Utils.getGroupOutsideLoc(wrkMast.getSourceLocNo());
-            if (!Cools.isEmpty(outsideLoc)) {
-                if (!Cools.isEmpty(wrkMastMapper.selectWorkingOfPakOutBySource(outsideLoc))) {
-//                    News.warn("{}宸ヤ綔妗e嚭搴撳け璐ワ紝鍘熷洜锛氬灞傚簱浣峽}姝e湪鎵ц鍑哄簱浠诲姟锛�", wrkMast.getWrkNo(), JSON.toJSONString(outsideLoc));
-                    continue;
-                }
-            }
-
-            // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
-            if (staProtocol == null) {
-                continue;
-            } else {
-                staProtocol = staProtocol.clone();
-            }
-            // 鏌ヨ绔欑偣璇︾粏淇℃伅
-            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
-            if (staDetl == null) {
-                News.error("鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
-                continue;
-            }
-            // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-            if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() !=null && staDetl.getCanouting().equals("Y")
-                    && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
-                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-
-                // 鍫嗗灈鏈烘帶鍒惰繃婊�
-                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+    public synchronized void shuttleLocMoveExecute() {
+        try {
+            //鏌ヨ绉诲簱浠诲姟
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts));
+            for (WrkMast wrkMast : wrkMasts) {
+                boolean stepToTarget = this.shuttleLocMoveExecuteToTarget(wrkMast);//绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣
+                if (!stepToTarget) {
                     continue;
                 }
 
-                // 杩囨护
-                if (null != wrkMastMapper.selectPakin(slave.getId(), null)) {
-                    News.error("{}鍑哄簱浠诲姟鏃犳硶浣滀笟锛屽洜瀛樺湪鍏ュ簱涓换鍔�!", wrkMast.getWrkNo());
-                    continue;
-                }
-
-                // 缃《浠诲姟
-                if (wrkMast.getIoPri()<8000){
-                    wrkMast.setIoPri(wrkMast.getIoPri()+8999d);
-                }
-                wrkMastMapper.updateById(wrkMast);
-
-                // 鏈�澶栧眰搴撲綅锛岀洿鎺ュ爢鍨涙満鍑哄簱
-                if (locMastService.isOutMost(wrkMast.getSourceLocNo(), false)) {
-                    // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
-                        continue;
-                    }
-
-                    // 鍫嗗灈鏈哄嚭搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                    CrnCommand crnCommand = new CrnCommand();
-                    crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                    crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 婧愬簱浣嶆帓
-                    crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 婧愬簱浣嶅垪
-                    crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
-                    crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
-                    crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
-                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                        News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
-                    } else {
-                        // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 16.鍚婅溅鍑哄簱涓�
-                        Date now = new Date();
-                        wrkMast.setWrkSts(16L);
-                        wrkMast.setCrnStrTime(now);
-                        wrkMast.setModiTime(now);
-                        if (wrkMastMapper.updateById(wrkMast) == 0) {
-                            News.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                        } else {
-                            return true;
-                        }
-                    }
-                    // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満鍑哄簱
-                } else {
-                    // 褰撳墠缁勫簱浣嶆槸鍚︽湁绌挎杞�
-                    Integer steNo = this.hasCarOfIdle(wrkMast.getSourceLocNo());
-                    // 鏈夊皬杞�
-                    if (steNo != null) {
-                        if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
-
-                            // 缁欑┛姊溅涓嬪彂鍛戒护 璁╁叾灏嗚揣鐗╂尓鑷冲爢鍨涙満鎼繍鐐�
-                            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-                            SteProtocol steProtocol = steThread.getSteProtocol();
-                            if (steProtocol == null) { continue; }
-                            if (steProtocol.isIdle()) {
-
-                                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                                SteCommand steCommand = new SteCommand();
-                                steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-                                steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
-                                steCommand.setTaskMode(SteTaskModeType.findOutByLoc(wrkMast.getSourceLocNo())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
-
-                                steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue());
-                                steCommand.setBay(steProtocol.getBay());
-                                steCommand.setLev(steProtocol.getLev());
-
-                                if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                                    News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-                                } else {
-                                    // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 14.灏忚溅鎼嚭搴�
-                                    Date now = new Date();
-                                    wrkMast.setWrkSts(14L);
-                                    wrkMast.setSteNo(steNo);
-                                    wrkMast.setCrnStrTime(now);
-                                    wrkMast.setModiTime(now);
-                                    LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
-                                    Integer outCrnNo = locMastService.getOutCrnNo(locMast);
-                                    wrkMast.setCrnNo(outCrnNo);
-                                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                        News.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 14.灏忚溅鎼嚭搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                                    } else {
-                                        return true;
-                                    }
-                                }
-                            }
-                        }
-                        if (wrkMast.getWrkSts() == 15L) {
-                            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-                            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
-                                continue;
-                            }
-
-                            // 鍫嗗灈鏈哄嚭搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                            CrnCommand crnCommand = new CrnCommand();
-                            crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                            crnCommand.setSourcePosX(Utils.getGroupRow(sourceSta.getRow1(), false).shortValue());     // 婧愬簱浣嶆帓
-                            crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 婧愬簱浣嶅垪
-                            crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 婧愬簱浣嶅眰
-                            crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
-                            crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
-                            crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
-                            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                                News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
-                            } else {
-                                // 淇敼宸ヤ綔妗g姸鎬� 15.绛夊緟鍚婅溅 => 16.鍚婅溅鍑哄簱涓�
-                                Date now = new Date();
-                                wrkMast.setWrkSts(16L);
-                                wrkMast.setCrnStrTime(now);
-                                wrkMast.setModiTime(now);
-                                if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                    News.error("淇敼宸ヤ綔妗g姸鎬� 15.绛夊緟鍚婅溅 => 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                                } else {
-                                    return true;
-                                }
-                            }
-                        }
-
-                        // 娌℃湁灏忚溅
-                    } else {
-                        if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
-                            // 瀵绘壘鏈�杩戠殑灏忚溅
-                            SteThread steThread = queryIdleCar(wrkMast);
-                            if (steThread != null) {
-                                // 娌℃湁鍏朵粬浠诲姟
-                                if (null == wrkMastMapper.selectPakout(slave.getId(), steNo)) {
-                                    // 璁╁皬杞︾瓑寰呮惉杩愬緟缁�
-                                    this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getSourceLocNo());
-                                    return true;
-                                }
-                            }
-                        }
-                        // 鍫嗗灈鏈烘惉杩愬皬杞�
-                        if (wrkMast.getWrkSts() == 12L) {
-                            this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
-                            return true;
-                        }
-                    }
-                }
             }
-        }
-        return false;
-    }
-
-    /**
-     * 搴撲綅绉昏浆
-     */
-    @Deprecated
-    public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){
-        // 鑾峰彇宸ヤ綔妗d俊鎭�
-        WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
-        if (null == wrkMast) {
-            return;
-        }
-        // 鑾峰彇婧愬簱浣嶄俊鎭�
-        LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
-        if (null == sourceLoc) {
-            News.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈡簮搴撲綅澶辫触锛佸伐浣滃彿={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
-            return;
-        }
-        // 婧愬簱浣�  搴撲綅鐘舵�佸垽鏂�
-        if (!sourceLoc.getLocSts().equals("R") && !sourceLoc.getLocSts().equals("S")) {
-            return;
-        }
-        // 鑾峰彇鐩爣搴撲綅淇℃伅
-        LocMast loc = locMastService.selectById(wrkMast.getLocNo());
-        if (null == loc) {
-            News.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo());
-            return;
-        }
-        // 鑾峰彇鍫嗗灈鏈轰俊鎭� 骞� 鍒ゆ柇鏄惁鍙叆鍑�
-        BasCrnp basCrnp = basCrnpService.selectById(slave.getId());
-        if (!basCrnp.getInEnable().equals("Y") && !basCrnp.getOutEnable().equals("Y")) {
-            return;
-        }
-
-        // 鍫嗗灈鏈烘帶鍒惰繃婊�
-        if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
-            return;
-        }
-
-        // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-        if (wrkMastMapper.selectWorking(slave.getId()) != null) {
-            return;
-        }
-
-        // 缃《浠诲姟
-        wrkMast.setIoPri((double) 9999);
-        wrkMastMapper.updateById(wrkMast);
-
-        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-        CrnCommand crnCommand = new CrnCommand();
-        crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-        crnCommand.setSourcePosX(sourceLoc.getRow1().shortValue());     // 婧愬簱浣嶆帓
-        crnCommand.setSourcePosY(sourceLoc.getBay1().shortValue());     // 婧愬簱浣嶅垪
-        crnCommand.setSourcePosZ(sourceLoc.getLev1().shortValue());     // 婧愬簱浣嶅眰
-        crnCommand.setDestinationPosX(loc.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
-        crnCommand.setDestinationPosY(loc.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-        crnCommand.setDestinationPosZ(loc.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-            News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
-        } else {
-            // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 16.鍚婅溅鍑哄簱涓�
-            Date now = new Date();
-            wrkMast.setWrkSts(16L);
-            wrkMast.setCrnStrTime(now);
-            wrkMast.setModiTime(now);
-            if (wrkMastMapper.updateById(wrkMast) == 0) {
-                News.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-            }
-        }
-
-    }
-
-    /**
-     * 褰撳墠搴撲綅缁勬槸鍚﹀瓨鍦ㄧ┖闂插皬杞�
-     */
-    public Integer hasCar(String locNo) {
-        for (SteSlave ste : slaveProperties.getSte()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            BasSte basSte = basSteService.selectById(ste.getId());
-            if (Cools.isEmpty(steProtocol, basSte)) { continue; }
-            if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(basSte.getRow(), true))
-                    && basSte.getBay() == Utils.getBay(locNo)
-                    && basSte.getLev() == Utils.getLev(locNo)) {
-                return ste.getId();
-            }
-        }
-        return null;
-    }
-
-    /**
-     * 褰撳墠搴撲綅缁勬槸鍚﹀瓨鍦ㄥ叾浠栧皬杞�
-     */
-    public Integer existOtherSte(String locNo, Integer steNo) {
-        Integer otherSteNo = null;
-        for (SteSlave ste : slaveProperties.getSte()) {
-            if (ste.getId().equals(steNo)) { continue; }
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) { continue; }
-            if (steProtocol.isEnable()) {
-                BasSte basSte = basSteService.selectById(ste.getId());
-                if (basSte != null) {
-                    if ((Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(basSte.getRow(), true))
-                            && basSte.getBay() == Utils.getBay(locNo)
-                            && basSte.getLev() == Utils.getLev(locNo))
-                        ||
-                        (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true))
-                                && steProtocol.getBay() == Utils.getBay(locNo)
-                                && steProtocol.getLev() == Utils.getLev(locNo))
-                    ) {
-                        otherSteNo = ste.getId();
-                        break;
-                    }
-                }
-            }
-        }
-        return otherSteNo;
-    }
-
-    /**
-     * 褰撳墠搴撲綅缁勬槸鍚﹀瓨鍦ㄧ┖闂插皬杞�
-     */
-    public Integer hasCarOfIdle(String locNo) {
-        for (SteSlave ste : slaveProperties.getSte()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) { continue; }
-            if (steProtocol.isIdle()) {
-                if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true))
-                        && steProtocol.getBay() == Utils.getBay(locNo)
-                        && steProtocol.getLev() == Utils.getLev(locNo)) {
-                    return steProtocol.getSteNo().intValue();
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * 鏌ユ壘褰撳墠搴撲綅鏈�閫傚悎鐨勭┛姊溅鏉ヤ綔涓�
-     */
-    public SteThread queryIdleCar(WrkMast wrkMast) {
-        List<BasSte> basStes = basSteService.selectList(new EntityWrapper<>());
-        int val = 0;
-        SteThread result = null;
-        for (BasSte basSte : basStes) {
-            // 鑾峰彇绌挎杞︿俊鎭�
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, basSte.getSteNo());
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) { continue; }
-            if (!steProtocol.isIdle()) { continue; }
-//            if (steProtocol.getRow() == 1) { continue; }
-            String locNo = wrkMast.getWrkSts() < 10 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();
-            // 濡傛灉鍦ㄥ悓涓�涓簱浣嶇粍
-            if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true))
-                    && steProtocol.getBay().intValue() == Utils.getBay(locNo)
-                    && steProtocol.getLev().intValue() == Utils.getLev(locNo)) {
-                return steThread;
-            }
-            LocMast locMast = locMastService.selectById(locNo);
-            int lev = locMast.getLev1();
-            int bay = locMast.getBay1();
-            int levAbs = Math.abs(lev - steProtocol.getLev());
-            int bayAbs = Math.abs(bay - steProtocol.getBay());
-            if (val == 0) {
-                val = levAbs + bayAbs;
-                result = steThread;
-            } else {
-                if ((levAbs + bayAbs) < val) {
-                    val = levAbs + bayAbs;
-                    result = steThread;
-                }
-            }
-        }
-        return result;
-    }
-
-    public SteThread queryIdleCar(CrnProtocol crnProtocol) {
-        List<BasSte> basStes = basSteService.selectList(new EntityWrapper<>());
-        int val = 0;
-        SteThread result = null;
-        for (BasSte basSte : basStes) {
-            // 鑾峰彇绌挎杞︿俊鎭�
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, basSte.getSteNo());
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) { continue; }
-            if (!steProtocol.isIdle()) { continue; }
-            if (steProtocol.getRow() == 1) { continue;}
-            int lev = crnProtocol.getLevel();
-            int bay = crnProtocol.getBay();
-            int levAbs = Math.abs(lev - steProtocol.getLev());
-            int bayAbs = Math.abs(bay - steProtocol.getBay());
-            if (val == 0) {
-                val = levAbs + bayAbs;
-                result = steThread;
-            } else {
-                if ((levAbs + bayAbs) < val) {
-                    val = levAbs + bayAbs;
-                    result = steThread;
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * 璁╁皬杞﹁璧拌嚦寰呮満浣�
-     */
-    public void letCarBeWaiting(WrkMast wrkMast, Integer steNo, String locNo) {
-        // 鑾峰彇绌挎杞︿俊鎭�
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
-        if (steProtocol.isIdle()) {
-
-            // 濡傛灉澶勪簬寰呮満浣�
-            if (steProtocol.locaType.equals(SteLocaType.A_WAITING) || steProtocol.locaType.equals(SteLocaType.B_WAITING)) {
-                // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
-                wrkMast.setWrkSts(3L);
-                wrkMast.setSteNo(steNo);
-                wrkMast.setModiTime(new Date());
-                if (wrkMastMapper.updateById(wrkMast) == 0) {
-                    News.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                }
-            } else {
-                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                SteCommand steCommand = new SteCommand();
-                steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-                steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
-                steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 浠诲姟妯″紡:  琛岃蛋鑷冲緟鏈轰綅
-
-                steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
-                steCommand.setBay(steProtocol.getBay());
-                steCommand.setLev(steProtocol.getLev());
-
-                if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                    News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-                } else {
-                    // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
-                    wrkMast.setSteNo(steNo);
-                    wrkMast.setModiTime(new Date());
-                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        News.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                    }
-                }
-            }
-        }
-    }
-
-    public void letCarBeWaiting(WrkCharge wrkCharge, Integer steNo) {
-        // 鑾峰彇绌挎杞︿俊鎭�
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
-
-        if (!basSteService.updatePakMk(steNo, "Y")) {
-            News.error("淇敼绌挎杞︿綔涓氱姸鎬� 澶辫触锛侊紒锛岀┛姊溅={}", steNo);
-            return;
-        }
-
-        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-        SteCommand steCommand = new SteCommand();
-        steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-        steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-        steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol.getRow().intValue())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
-
-        steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
-        steCommand.setBay(steProtocol.getBay());
-        steCommand.setLev(steProtocol.getLev());
-
-        if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-            News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-        } else {
-            // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
-            wrkCharge.setSteNo(steNo);
-            wrkCharge.setModiTime(new Date());
-            if (!wrkChargeService.updateById(wrkCharge)) {
-                News.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
     /**
-     * 璁╁皬杞︿粠 杩滅偣 ====>> 绉诲姩鍒拌繎鐐�
-     *  绛夊緟鍫嗗灈鏈烘惉杩�
+     * 绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
      */
-    public void letCarBeReady(WrkMast wrkMast, Integer steNo, String locNo) {
-        // 鑾峰彇绌挎杞︿俊鎭�
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
-        if (steProtocol.isIdle()) {
-
-            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-            SteCommand steCommand = new SteCommand();
-            steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-            steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
-            steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol)); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
-
-            steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
-            steCommand.setBay(steProtocol.getBay());
-            steCommand.setLev(steProtocol.getLev());
-
-            if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-            } else {
-                // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
-                wrkMast.setSteNo(steNo);
-                wrkMast.setModiTime(new Date());
-                if (wrkMastMapper.updateById(wrkMast) == 0) {
-                    News.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                }
-            }
-        }
-    }
-
-    /**
-     * 璁╁皬杞︿粠 杩滅偣 ====>> 绉诲姩鍒拌繎鐐�
-     *  绛夊緟鍫嗗灈鏈烘惉杩�
-     */
-    public void letCarBeReady(WrkCharge wrkCharge, Integer steNo) {
-        // 鑾峰彇绌挎杞︿俊鎭�
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
-        if (steProtocol.isIdle()) {
-
-            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-            SteCommand steCommand = new SteCommand();
-            steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-            steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-            steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol)); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
-
-            steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
-            steCommand.setBay(steProtocol.getBay());
-            steCommand.setLev(steProtocol.getLev());
-
-            if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-            } else {
-                // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
-                wrkCharge.setSteNo(steNo);
-                wrkCharge.setModiTime(new Date());
-                if (!wrkChargeService.updateById(wrkCharge)) {
-                    News.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                }
-            }
-        }
-    }
-
-    /**
-     * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈烘惉鍏ュ皬杞�
-     */
-    public void carMoveIn(WrkMast wrkMast, Integer steNo, CrnProtocol crnProtocol) {
-        // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
-        if (steProtocol.isIdle()) {
-            // 鍫嗗灈鏈虹┖闂�
-            if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
-                LocMast locMast;
-                // 鍏ュ簱鎼�
-                if (wrkMast.getWrkSts() <= 10) {
-
-                    // 鍒ゆ柇琚Щ搴撲綅鏄惁瀛樺湪鍏朵粬灏忚溅
-                    Integer otherSte = existOtherSte(wrkMast.getLocNo(), steNo);
-                    if (otherSte != null) {
-                        News.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", steNo, wrkMast.getLocNo(), otherSte);
-                        return;
-                    }
-
-                    locMast = locMastService.selectById(wrkMast.getLocNo());
-                    // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
-                    CrnCommand crnCommand = new CrnCommand();
-                    crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                    crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                    crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
-                    crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
-                    crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue());     // 鐩爣搴撲綅鎺�
-                    crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-                    crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                        News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
-                    } else {
-                        // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                        steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo(), true), locMast.getBay1(), locMast.getLev1());
-                        // 淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 4.杩佸叆灏忚溅
-                        Date now = new Date();
-                        wrkMast.setWrkSts(4L);
-                        wrkMast.setCrnStrTime(now);
-                        wrkMast.setModiTime(now);
-                        if (wrkMastMapper.updateById(wrkMast) == 0) {
-                            News.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 4.杩佸叆灏忚溅 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                        }
-                    }
-                // 鍑哄簱鎼�
-                } else {
-                    // 鍒ゆ柇琚Щ搴撲綅鏄惁瀛樺湪鍏朵粬灏忚溅
-                    Integer otherSte = existOtherSte(wrkMast.getSourceLocNo(), steNo);
-                    if (otherSte != null) {
-                        News.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", steNo, wrkMast.getSourceLocNo(), otherSte);
-                        return;
-                    }
-
-                    locMast = locMastService.selectById(wrkMast.getSourceLocNo());
-                    // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
-                    CrnCommand crnCommand = new CrnCommand();
-                    crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                    crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                    crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
-                    crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
-                    crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue());     // 鐩爣搴撲綅鎺�
-                    crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-                    crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                        News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
-                    } else {
-                        // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                        steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo(), true), locMast.getBay1(), locMast.getLev1());
-                        // 淇敼宸ヤ綔妗g姸鎬� 12.灏忚溅寰呮惉 => 13.杩佸叆灏忚溅
-                        Date now = new Date();
-                        wrkMast.setWrkSts(13L);
-                        wrkMast.setCrnStrTime(now);
-                        wrkMast.setModiTime(now);
-                        if (wrkMastMapper.updateById(wrkMast) == 0) {
-                            News.error("淇敼宸ヤ綔妗g姸鎬� 12.灏忚溅寰呮惉 => 13.杩佸叆灏忚溅 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                        }
-                    }
-                }
-            }
-
-        }
-    }
-
-    /**
-     * 鍏ュ簱  ===>>  鍫嗗灈鏈烘惉鍑哄皬杞�
-     */
-    public void carMoveOut(WrkMast wrkMast, Integer steNo, CrnProtocol crnProtocol) {
-        // 鑾峰彇绌挎杞︿俊鎭�
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
-        // 绌挎杞︾┖闂�
-        if (steProtocol.isIdle()) {
-            // 鍫嗗灈鏈虹┖闂�
-            if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
-
-                BasSte basSte = basSteService.selectById(steNo);
-                if (basSte == null) {
-                    News.error("{}鍙风┛姊溅鍦ㄦ暟鎹簱涓嶅瓨鍦紒锛侊紒", steNo);
-                    return;
-                }
-
-                String idleLocNo = basSte.getIdleLoc();
-
-                // 鍒ゆ柇琚Щ搴撲綅鏄惁瀛樺湪鍏朵粬灏忚溅
-                Integer otherSte = existOtherSte(idleLocNo, steNo);
-                if (otherSte != null) {
-                    News.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", steNo, idleLocNo, otherSte);
-                    return;
-                }
-
-                // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
-                CrnCommand crnCommand = new CrnCommand();
-                crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-                crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
-                crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
-                crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                crnCommand.setDestinationPosX(Utils.getGroupRow(idleLocNo, true).shortValue());     // 鐩爣搴撲綅鎺�
-                crnCommand.setDestinationPosY((short) Utils.getBay(idleLocNo));     // 鐩爣搴撲綅鍒�
-                crnCommand.setDestinationPosZ((short) Utils.getLev(idleLocNo));     // 鐩爣搴撲綅灞�
-                if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                    News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
-                } else {
-                    // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                    steThread.modifyPos(Utils.getGroupRow(idleLocNo, true), Utils.getBay(idleLocNo), Utils.getLev(idleLocNo));
-                    // 淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 5.杩佸嚭灏忚溅
-                    Date now = new Date();
-                    wrkMast.setWrkSts(5L);
-                    wrkMast.setCrnStrTime(now);
-                    wrkMast.setModiTime(now);
-                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        News.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 5.杩佸嚭灏忚溅 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                    }
-                }
-            }
-        }
-    }
-
-
-    /**
-     * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
-     */
-    @Transactional
-    public void storeFinished() {
-        for (CrnSlave crn : slaveProperties.getCrn()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
-            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) { continue; }
-            //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
-            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
-                // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
-                WrkMast wrkMast = wrkMastMapper.selectCrnWaiting(crnProtocol.getTaskNo().intValue());
-                if (wrkMast == null) {
-
-                    // 鍏呯數浠诲姟
-                    WrkCharge wrkCharge = wrkChargeService.selectById(crnProtocol.getTaskNo());
-                    if (wrkCharge == null) {
-                        News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
-                        wrkMast = wrkMastMapper.selectCrnWaiting2(crnProtocol.getTaskNo().intValue());
-                        if (wrkMast.getIoType() != 11) {
-                            // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                // 鍫嗗灈鏈哄浣�
-                                crnThread.setResetFlag(true);
-                                News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵��,澶嶄綅锛屼絾鏈壘鍒板伐浣滄。銆傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
-                            } else {
-                                News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵��,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
-                            }
-                        }
-                        continue;
-                    } else {
-                        // 灏忚溅鎼嚦鎸囧畾搴撲綅瀹屾垚
-                        if (wrkCharge.getWrkSts() == 23) {
-                            // 23.鍚婅溅鎼繍 ===>> 24.灏忚溅鍒拌揪
-                            wrkCharge.setWrkSts(24L);
-                            if (!wrkChargeService.updateById(wrkCharge)) {
-                                News.error("淇敼鍏呯數浠诲姟鐘舵�� 23.鍚婅溅鎼繍 ===>> 24.灏忚溅鍒拌揪 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                            } else {
-                                // 鍫嗗灈鏈哄浣�
-                                crnThread.setResetFlag(true);
-                                // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo());
-                                if (!steThread.confirmPos()) {
-                                    News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬厖鐢典换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo());
-                                }
-                            }
-                        } else if (wrkCharge.getWrkSts() == 27) {
-                            // 鍫嗗灈鏈哄浣�
-                            crnThread.setResetFlag(true);
-                            // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo());
-                            if (steThread.confirmPos()) {
-                                // 27.鏀捐嚦鍏呯數浣� ===>> 28.鍏呯數灏辩华
-                                wrkCharge.setWrkSts(28L);
-                                if (!wrkChargeService.updateById(wrkCharge)) {
-                                    News.error("淇敼鍏呯數浠诲姟鐘舵�� 27.鏀捐嚦鍏呯數浣� ===>> 28.鍏呯數灏辩华 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                                }
-                            } else {
-                                News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬厖鐢典换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo());
-                            }
-                        } else if (wrkCharge.getWrkSts() == 34) {
-                            // 34.鍚婅溅鎼繍 ===>> 35.灏忚溅灏辩华
-                            wrkCharge.setWrkSts(35L);
-                            if (!wrkChargeService.updateById(wrkCharge)) {
-                                News.error("淇敼鍏呯數浠诲姟鐘舵�� 34.鍚婅溅鎼繍 ===>> 35.灏忚溅灏辩华 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                            } else {
-                                // 鍫嗗灈鏈哄浣�
-                                crnThread.setResetFlag(true);
-                                // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo());
-                                if (!steThread.confirmPos()) {
-                                    News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬厖鐢典换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo());
-                                }
-                            }
-                        } else if (wrkCharge.getWrkSts() == 42) {
-                            // 42.鍚婅溅鎼繍 ===>> 43.灏忚溅鍒拌揪
-                            wrkCharge.setWrkSts(43L);
-                            if (!wrkChargeService.updateById(wrkCharge)) {
-                                News.error("淇敼澶嶄綅浠诲姟鐘舵�� 42.鍚婅溅鎼繍 ===>> 43.灏忚溅鍒拌揪 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                            } else {
-                                // 鍫嗗灈鏈哄浣�
-                                crnThread.setResetFlag(true);
-                                // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo());
-                                if (!steThread.confirmPos()) {
-                                    News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬浣嶄换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo());
-                                }
-                            }
-                        } else if (wrkCharge.getWrkSts() == 46) {
-                            // 46.鏀捐嚦寰呮満浣� ===>> 47.澶嶄綅鎴愬姛
-                            wrkCharge.setWrkSts(47L);
-                            if (!wrkChargeService.updateById(wrkCharge)) {
-                                News.error("淇敼澶嶄綅浠诲姟鐘舵�� 46.鏀捐嚦寰呮満浣� ===>> 47.澶嶄綅鎴愬姛 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                            } else {
-                                // 鍫嗗灈鏈哄浣�
-                                crnThread.setResetFlag(true);
-                                // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo());
-                                if (!steThread.confirmPos()) {
-                                    News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬浣嶄换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo());
-                                }
-                            }
-                        }
-                    }
-
-                }
-                if (wrkMast == null) { continue; }
-                if (wrkMast.getIoType() != 11) {
-                    // 鍏ュ簱 ==>> 璐х墿鎼叆搴�
-                    if (wrkMast.getWrkSts() == 7){
-                        // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴�
-                        if (locMastService.isOutMost(wrkMast.getLocNo(), true)) {
-                            // ==> 9.鍏ュ簱瀹屾垚
-                            wrkMast.setWrkSts(9L);
-                            Date now = new Date();
-                            wrkMast.setCrnEndTime(now);
-                            wrkMast.setModiTime(now);
-                            // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                // 鍫嗗灈鏈哄浣�
-                                crnThread.setResetFlag(true);
-                            } else {
-                                News.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 9.鍏ュ簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                            }
-                        } else {
-                            // 缁欑┛姊溅涓嬪彂鍛戒护
-                            Integer steNo = wrkMast.getSteNo();
-                            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-                            SteProtocol steProtocol = steThread.getSteProtocol();
-                            if (steProtocol == null) { continue; }
-                            if (steProtocol.isIdle()) {
-                                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                                SteCommand steCommand = new SteCommand();
-                                steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-                                steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
-                                steCommand.setTaskMode(SteTaskModeType.findInByLoc(wrkMast.getLocNo())); // 浠诲姟妯″紡: 鎼叆搴�
-                                if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                                    News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-                                } else {
-                                    // 淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 8.灏忚溅鎼叆搴�
-                                    wrkMast.setWrkSts(8L);
-                                    Date now = new Date();
-                                    wrkMast.setCrnEndTime(now);
-                                    wrkMast.setModiTime(now);
-                                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                        // 鍫嗗灈鏈哄浣�
-                                        crnThread.setResetFlag(true);
-                                    } else {
-                                        News.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 8.灏忚溅鎼叆搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                                    }
-                                }
-                            }
-                        }
-                    // 鍏ュ簱 ===>> 杩佸叆灏忚溅 瀹屾垚
-                    } else if (wrkMast.getWrkSts() == 4) {
-                        // 4.杩佸叆灏忚溅 ==> 6.灏忚溅寰呭叆
-                        wrkMast.setWrkSts(6L);
-                        Date now = new Date();
-                        wrkMast.setCrnEndTime(now);
-                        wrkMast.setModiTime(now);
-                        // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                        if (wrkMastMapper.updateById(wrkMast) > 0) {
-                            // 鍫嗗灈鏈哄浣�
-                            crnThread.setResetFlag(true);
-                            // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkMast.getSteNo());
-                            if (!steThread.confirmPos()) {
-                                News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬伐浣滄。浠诲姟鍙凤細{}", wrkMast.getSteNo(), wrkMast.getWrkNo());
-                            }
-                            // 绌挎杞﹀幓寰呮満浣�
-                            BasSte basSte = basSteService.selectById(wrkMast.getSteNo());
-                            SteCommand steCommand = new SteCommand();
-                            steCommand.setSteNo(wrkMast.getSteNo()); // 绌挎杞︾紪鍙�
-                            steCommand.setTaskNo(9999); // 宸ヤ綔鍙�
-                            steCommand.setTaskMode(SteTaskModeType.findWaiting(basSte.getRow())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
-//                        steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
-//                        steCommand.setBay(steProtocol.getBay());
-//                        steCommand.setLev(steProtocol.getLev());
-                            if (!MessageQueue.offer(SlaveType.Ste, wrkMast.getSteNo(), new Task(2, steCommand))) {
-                                News.error("绌挎杞﹀緟鏈轰綅鍛戒护涓嬪彂澶辫触锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getSteNo(), JSON.toJSON(steCommand));
-                            }
-                        } else {
-                            News.error("淇敼宸ヤ綔妗g姸鎬� 4.杩佸叆灏忚溅 => 6.灏忚溅寰呭叆 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                        }
-                        // 鍏ュ簱 ===>> 杩佸嚭灏忚溅 瀹屾垚
-                    } else if (wrkMast.getWrkSts() == 5) {
-                        // 5.杩佸嚭灏忚溅 ==> 6.灏忚溅寰呭叆
-                        wrkMast.setWrkSts(6L);
-                        Date now = new Date();
-                        wrkMast.setCrnEndTime(now);
-                        wrkMast.setModiTime(now);
-                        // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                        if (wrkMastMapper.updateById(wrkMast) > 0) {
-                            // 鍫嗗灈鏈哄浣�
-                            crnThread.setResetFlag(true);
-                            // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkMast.getSteNo());
-                            if (!steThread.confirmPos()) {
-                                News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬伐浣滄。浠诲姟鍙凤細{}", wrkMast.getSteNo(), wrkMast.getWrkNo());
-                            }
-                            // 绌挎杞﹀幓寰呮満浣�
-                            BasSte basSte = basSteService.selectById(wrkMast.getSteNo());
-                            SteCommand steCommand = new SteCommand();
-                            steCommand.setSteNo(wrkMast.getSteNo()); // 绌挎杞︾紪鍙�
-                            steCommand.setTaskNo(9999); // 宸ヤ綔鍙�
-                            steCommand.setTaskMode(SteTaskModeType.findWaiting(basSte.getRow())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
-//                        steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
-//                        steCommand.setBay(steProtocol.getBay());
-//                        steCommand.setLev(steProtocol.getLev());
-                            if (!MessageQueue.offer(SlaveType.Ste, wrkMast.getSteNo(), new Task(2, steCommand))) {
-                                News.error("绌挎杞﹀緟鏈轰綅鍛戒护涓嬪彂澶辫触锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getSteNo(), JSON.toJSON(steCommand));
-                            }
-                        } else {
-                            News.error("淇敼宸ヤ綔妗g姸鎬� 5.杩佸嚭灏忚溅 => 6.灏忚溅寰呭叆 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                        }
-                        // 鍑哄簱 ===>> 杩佸叆灏忚溅 瀹屾垚
-                    } else if (wrkMast.getWrkSts() == 13) {
-                        // 缁欑┛姊溅涓嬪彂鍛戒护
-                        Integer steNo = wrkMast.getSteNo();
-                        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-                        SteProtocol steProtocol = steThread.getSteProtocol();
-                        if (steProtocol == null) { continue; }
-                        // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                        if (!steThread.confirmPos()) {
-                            News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬伐浣滄。浠诲姟鍙凤細{}", wrkMast.getSteNo(), wrkMast.getWrkNo());
-                        }
-                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                        SteCommand steCommand = new SteCommand();
-                        steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-                        steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
-                        steCommand.setTaskMode(SteTaskModeType.findOutByLoc(wrkMast.getSourceLocNo())); // 浠诲姟妯″紡:  鎼嚭搴�
-                        if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                            News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-                        } else {
-                            // 13.杩佸叆灏忚溅 ==> 14.灏忚溅鎼嚭搴�
-                            wrkMast.setWrkSts(14L);
-                            Date now = new Date();
-                            wrkMast.setCrnEndTime(now);
-                            wrkMast.setModiTime(now);
-                            LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
-                            Integer outCrnNo = locMastService.getOutCrnNo(locMast);
-                            wrkMast.setCrnNo(outCrnNo);
-                            // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                // 鍫嗗灈鏈哄浣�
-                                crnThread.setResetFlag(true);
-                            } else {
-                                News.error("淇敼宸ヤ綔妗g姸鎬� 13.杩佸叆灏忚溅 ==> 14.灏忚溅鎼嚭搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                            }
-                        }
-                        // 绉诲簱 ===>> 鍫嗗灈鏈烘惉鑷崇洰鏍囧簱浣嶇粍 瀹屾垚
-                    } else if (wrkMast.getWrkSts() == 16) {
-                        // 16.鍚婅溅鍑哄簱涓� ==> 17.鍑哄簱瀹屾垚
-                        wrkMast.setWrkSts(17L);
-                        Date now = new Date();
-                        wrkMast.setCrnEndTime(now);
-                        wrkMast.setModiTime(now);
-                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
-                        Integer outCrnNo = locMastService.getOutCrnNo(locMast);
-                        wrkMast.setCrnNo(outCrnNo);
-                        // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                        if (wrkMastMapper.updateById(wrkMast) > 0) {
-                            // 鍫嗗灈鏈哄浣�
-                            crnThread.setResetFlag(true);
-                        } else {
-                            News.error("淇敼宸ヤ綔妗g姸鎬� 16.鍚婅溅鍑哄簱涓� ==> 17.鍑哄簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
-     */
-    public synchronized void carGenerateStore() {
+    private boolean shuttleLocMoveExecuteToTarget(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
         Date now = new Date();
-        for (SteSlave ste : slaveProperties.getSte()) {
-            // 鑾峰彇绌挎杞︿俊鎭�
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) { continue; }
-            if (steProtocol.getWaiting() && steProtocol.getTaskNo() != 0) {
-                if (steProtocol.getTaskNo() == 9999) {
-                    steThread.setResetFlag(true);
-                } else {
-                    // 鏌ヨ鏄惁鏈夊緟鍏ュ簱鐨勪换鍔�
-                    WrkMast wrkMast = wrkMastMapper.selectCarWaiting(steProtocol.getTaskNo().intValue());
-                    if (wrkMast == null) {
-                        // 鍏呯數浠诲姟
-                        WrkCharge wrkCharge = wrkChargeService.selectById(steProtocol.getTaskNo());
-                        if (wrkCharge == null) {
-                            continue;
-                        } else {
-                            if (wrkCharge.getWrkSts() == 21) {
-                                // 21.鍑嗗鍏呯數 ===>> 22.灏忚溅寰呮惉
-                                wrkCharge.setWrkSts(22L);
-                                if (!wrkChargeService.updateById(wrkCharge)) {
-                                    News.error("淇敼鍏呯數浠诲姟鐘舵�� 21.鍑嗗鍏呯數 ===>> 22.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                                } else {
-                                    steThread.setResetFlag(true);
-                                }
-                            } else if (wrkCharge.getWrkSts() == 25) {
-                                // 25.灏忚溅璧拌 ===>> 26.绛夊緟鍏呯數
-                                wrkCharge.setWrkSts(26L);
-                                if (!wrkChargeService.updateById(wrkCharge)) {
-                                    News.error("淇敼鍏呯數浠诲姟鐘舵�� 25.灏忚溅璧拌 ===>> 26.绛夊緟鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                                } else {
-                                    steThread.setResetFlag(true);
-                                }
-                            }
-//                            else if (wrkCharge.getWrkSts() == 29) {
-//                                // 29.寮�濮嬪厖鐢� ===>> 30.瀹屾垚鍏呯數
-//                                wrkCharge.setWrkSts(30L);
-//                                if (!wrkChargeService.updateById(wrkCharge)) {
-//                                    News.error("淇敼鍏呯數浠诲姟鐘舵�� 29.寮�濮嬪厖鐢� ===>> 30.瀹屾垚鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-//                                } else {
-//                                    steThread.setResetFlag(true);
-//                                }
-//                            }
-                            else if (wrkCharge.getWrkSts() == 32) {
-                                // 32.灏忚溅璧拌 ===>> 33.灏忚溅寰呮惉
-                                wrkCharge.setWrkSts(33L);
-                                if (!wrkChargeService.updateById(wrkCharge)) {
-                                    News.error("淇敼婕旂ず浠诲姟鐘舵�� 32.灏忚溅璧拌 ===>> 33.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                                } else {
-                                    steThread.setResetFlag(true);
-                                }
-                            } else if (wrkCharge.getWrkSts() == 36) {
-                                // 36.灏忚溅璧拌 ===>> 37.婕旂ず瀹屾垚
-                                wrkCharge.setWrkSts(37L);
-                                if (!wrkChargeService.updateById(wrkCharge)) {
-                                    News.error("淇敼婕旂ず浠诲姟鐘舵�� 36.灏忚溅璧拌 ===>> 37.婕旂ず瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                                } else {
-                                    steThread.setResetFlag(true);
-                                }
-                            }  else if (wrkCharge.getWrkSts() == 44) {
-                                // 44.灏忚溅璧拌 ===>> 45.灏忚溅寰呮惉
-                                wrkCharge.setWrkSts(45L);
-                                if (!wrkChargeService.updateById(wrkCharge)) {
-                                    News.error("淇敼婕旂ず浠诲姟鐘舵�� 44.灏忚溅璧拌 ===>> 45.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                                } else {
-                                    steThread.setResetFlag(true);
-                                }
-                            }
-                        }
-                    }
 
-                    if (wrkMast == null) { continue; }
-                    switch (wrkMast.getWrkSts().intValue()) {
-                        case 2:
-                            // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉
-                            wrkMast.setWrkSts(3L);
-                            wrkMast.setModiTime(now);
-                            if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                News.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                            } else {
-                                steThread.setResetFlag(true);
-                            }
-                            break;
-                        case 8:
-                            // 淇敼宸ヤ綔妗g姸鎬� 8.灏忚溅鎼叆搴� => 9.鍏ュ簱瀹屾垚
-                            wrkMast.setWrkSts(9L);
-                            wrkMast.setModiTime(now);
-                            if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                News.error("淇敼宸ヤ綔妗g姸鎬� 8.灏忚溅鎼叆搴� => 9.鍏ュ簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                            } else {
-                                steThread.setResetFlag(true);
-                            }
-                            break;
-                        case 11:
-                            if (wrkMast.getIoType() != 11) {
-                                // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.灏忚溅寰呮惉
-                                wrkMast.setWrkSts(12L);
-                            } else {
-                                if (Cools.isEmpty(wrkMast.getMk())) {
-                                    News.error("绉诲簱宸ヤ綔妗f病鏈夋祦绋嬫爣璁帮紒锛侊紝宸ヤ綔鍙�={}", wrkMast.getWrkNo());
-                                } else {
-                                    if (wrkMast.getMk().equals("I")) {
-                                        String locNo = wrkMast.getLocNo();
-                                        if (Utils.getGroupRow(locNo, false).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), false))
-                                                && steProtocol.getBay() == Utils.getBay(locNo)
-                                                && steProtocol.getLev() == Utils.getLev(locNo)) {
-                                            // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 6.灏忚溅寰呭叆
-                                            wrkMast.setWrkSts(6L);
-                                        } else {
-                                            // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 3.灏忚溅寰呮惉
-                                            wrkMast.setWrkSts(3L);
-                                        }
-                                    } else if (wrkMast.getMk().equals("O")) {
-                                        // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.灏忚溅寰呮惉
-                                        wrkMast.setWrkSts(12L);
-                                    }
-                                }
-                            }
-                            wrkMast.setModiTime(now);
-                            if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                News.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                            } else {
-                                steThread.setResetFlag(true);
-                            }
-                            break;
-                        case 14:
-                            // 淇敼宸ヤ綔妗g姸鎬� 14.灏忚溅鎼嚭搴� => 15.绛夊緟鍚婅溅
-                            wrkMast.setWrkSts(15L);
-                            wrkMast.setModiTime(now);
-                            if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                News.error("淇敼宸ヤ綔妗g姸鎬� 14.灏忚溅鎼嚭搴� => 15.绛夊緟鍚婅溅 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                            } else {
-                                steThread.setResetFlag(true);
-                            }
-                            break;
+        //灏忚溅绉诲姩鑷崇珯鐐�  501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓�
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) {
+            if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣
+                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 (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鍙栬揣浣嶇疆", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                return false;
+            }
+
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setAuto(true);//鑷姩妯″紡
+
+            //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
+            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
+            if (commands == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true);
+            if (liftCommand == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false);
+            if (liftCommand2 == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇涓嬮檷鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            commands.add(0, liftCommand.get(0));
+            commands.add(liftCommand2.get(0));
+            assignCommand.setCommands(commands);
+
+            wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓�  501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓�
+            wrkMast.setModiTime(now);
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+                //瑙﹀彂閫氱煡
+                notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVING);
+                return false;
+            }
+            return false;
+        }
+        return true;
+    }
+
+//    /**
+//     * 鎻愬崌鏈轰换鍔�
+//     */
+//    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 forkLiftFinished() {
+        try {
+            for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+                //鑾峰彇鎻愬崌鏈轰俊鎭�
+                ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
+                ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+                if (forkLiftProtocol == null) {
+                    continue;
+                }
+
+                //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
+                if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id
+                        && forkLiftProtocol.getWrkNo() != 0
+                ) {
+                    //灏嗕换鍔℃。鏍囪涓哄畬鎴�
+                    WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+                    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());
+//                                    }
+//                                }
+//                                break;
+                            case 306://306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴�
+                                wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts);
+                                forkLiftThread.setSyncTaskNo(0);
+                                break;
+                            default:
+                        }
+
+                        wrkMast.setModiTime(new Date());
+                        if (wrkMastService.updateById(wrkMast)) {
+                            forkLiftThread.reset();
+                            News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
+                        } else {
+                            News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo());
+                        }
                     }
                 }
             }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -2466,120 +1414,78 @@
      */
     public void recErr() {
         try {
-            this.recCrnErr();
-            this.recSteErr();
+            this.recShuttleErr();
+            this.recLiftErr();
         } catch (Exception e) {
             News.error("recErr fail", e);
         }
     }
 
     /**
-     * 鍫嗗灈鏈哄紓甯镐俊鎭褰�
+     * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰�
      */
-    private void recCrnErr(){
+    private void recShuttleErr() {
         Date now = new Date();
-        for (CrnSlave crn : slaveProperties.getCrn()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
-            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) {
+        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+            // 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
+            if (shuttleThread == null) {
                 continue;
             }
-            // 鏈変换鍔�
-            if (crnProtocol.getTaskNo() != 0) {
-                BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                continue;
+            }
+
+            if (shuttleProtocol.getTaskNo() != 0) {
+                //鏈変换鍔�
+                BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo());
                 // 鏈夊紓甯�
                 if (latest == null) {
-                    if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
-                        WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo());
+                    if (shuttleProtocol.getErrorCode() != null && Integer.parseInt(shuttleProtocol.getErrorCode()) != 0) {
+                        WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
                         if (wrkMast == null) {
                             continue;
                         }
-                        BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
-                        String errName = crnError==null? "鏈煡寮傚父":crnError.getErrName();
-                        BasErrLog basErrLog = new BasErrLog(
+                        int errorCode = Integer.parseInt(shuttleProtocol.getErrorCode());
+                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(errorCode);
+                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
+                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
                                 null,    // 缂栧彿
                                 wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
                                 now,    // 鍙戠敓鏃堕棿
                                 null,    // 缁撴潫鏃堕棿
                                 wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
                                 wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-                                crn.getId(),    // 鍫嗗灈鏈�
+                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
                                 null,    // plc
                                 wrkMast.getLocNo(),    // 鐩爣搴撲綅
                                 wrkMast.getStaNo(),    // 鐩爣绔�
                                 wrkMast.getSourceStaNo(),    // 婧愮珯
                                 wrkMast.getSourceLocNo(),    // 婧愬簱浣�
                                 wrkMast.getBarcode(),    // 鏉$爜
-                                (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
+                                errorCode,    // 寮傚父鐮�
                                 errName,    // 寮傚父
                                 1,    // 寮傚父鎯呭喌
                                 now,    // 娣诲姞鏃堕棿
                                 null,    // 娣诲姞浜哄憳
                                 now,    // 淇敼鏃堕棿
                                 null,    // 淇敼浜哄憳
-                                "浠诲姟涓紓甯�"    // 澶囨敞
+                                "浠诲姟涓紓甯�",    // 澶囨敞
+                                JSON.toJSONString(shuttleProtocol)    // 绯荤粺鐘舵�佹暟鎹�
                         );
-                        if (!basErrLogService.insert(basErrLog)) {
-                            News.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
                         }
                     }
                 } else {
                     // 寮傚父淇
-                    if (crnProtocol.getAlarm() == null || crnProtocol.getAlarm() == 0) {
+                    if (shuttleProtocol.getErrorCode() == null || Integer.parseInt(shuttleProtocol.getErrorCode()) == 0) {
                         latest.setEndTime(now);
                         latest.setUpdateTime(now);
                         latest.setStatus(2);
-                        if (!basErrLogService.updateById(latest)) {
-                            News.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
-                        }
-                    }
-                }
-            // 鏃犱换鍔�
-            } else {
-                BasErrLog latest = basErrLogService.findLatest(crn.getId());
-                // 鏈夊紓甯�
-                if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
-                    // 璁板綍鏂板紓甯�
-                    if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
-                        BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
-                        String errName = crnError==null? "鏈煡寮傚父":crnError.getErrName();
-                        BasErrLog basErrLog = new BasErrLog(
-                                null,    // 缂栧彿
-                                null,    // 宸ヤ綔鍙�
-                                now,    // 鍙戠敓鏃堕棿
-                                null,    // 缁撴潫鏃堕棿
-                                null,    // 宸ヤ綔鐘舵��
-                                null,    // 鍏ュ嚭搴撶被鍨�
-                                crn.getId(),    // 鍫嗗灈鏈�
-                                null,    // plc
-                                null,    // 鐩爣搴撲綅
-                                null,    // 鐩爣绔�
-                                null,    // 婧愮珯
-                                null,    // 婧愬簱浣�
-                                null,    // 鏉$爜
-                                (int)crnProtocol.getAlarm(),    // 寮傚父鐮�
-                                errName,    // 寮傚父
-                                1,    // 寮傚父鎯呭喌
-                                now,    // 娣诲姞鏃堕棿
-                                null,    // 娣诲姞浜哄憳
-                                now,    // 淇敼鏃堕棿
-                                null,    // 淇敼浜哄憳
-                                "鏃犱换鍔″紓甯�"    // 澶囨敞
-                        );
-                        if (!basErrLogService.insert(basErrLog)) {
-                            News.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
-                        }
-                    }
-                // 鏃犲紓甯�
-                } else {
-                    // 寮傚父淇
-                    if (latest != null && latest.getStatus() == 1) {
-                        latest.setEndTime(now);
-                        latest.setUpdateTime(now);
-                        latest.setStatus(2);
-                        if (!basErrLogService.updateById(latest)) {
-                            News.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+                        if (!basShuttleErrLogService.updateById(latest)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
                         }
                     }
                 }
@@ -2588,1253 +1494,824 @@
     }
 
     /**
-     * 绌挎杞﹀紓甯镐俊鎭褰�
+     * 鎻愬崌鏈哄紓甯镐俊鎭褰�
      */
-    private void recSteErr(){
+    private void recLiftErr() {
         Date now = new Date();
-        for (SteSlave ste : slaveProperties.getSte()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) {
+        for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+            // 鑾峰彇鎻愬崌鏈轰俊鎭�
+            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
+            if (forkLiftThread == null) {
                 continue;
             }
-            // 鏈変换鍔�
-            if (steProtocol.getTaskNo() != 0) {
-                BasSteErrLog latest = basSteErrLogService.findLatestByTaskNo(ste.getId(), steProtocol.getTaskNo().intValue());
+            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+            if (forkLiftProtocol == null) {
+                continue;
+            }
+
+            if (forkLiftProtocol.getTaskNo() != 0) {
+                //鏈変换鍔�
+                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(forkLiftSlave.getId(), forkLiftProtocol.getTaskNo());
                 // 鏈夊紓甯�
                 if (latest == null) {
-                    if (steProtocol.getAlarm() != null && steProtocol.isAlarm()) {
-                        WrkMast wrkMast = wrkMastMapper.selectById(steProtocol.getTaskNo());
+                    if (forkLiftProtocol.getErrorCode() != null && forkLiftProtocol.getErrorCode() != 0) {
+                        WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
                         if (wrkMast == null) {
                             continue;
                         }
-                        BasSteErr steErr = basSteErrService.selectById(steProtocol.getAlarm());
-                        String errName = steErr==null? "鏈煡寮傚父":steErr.getErrName();
-                        BasSteErrLog basSteErrLog = new BasSteErrLog(
+
+                        BasLiftErr basLiftErr = basLiftErrService.queryByCode(forkLiftProtocol.getErrorCode());
+                        String errName = basLiftErr==null? "鏈煡寮傚父":basLiftErr.getErrName();
+
+                        BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
                                 null,    // 缂栧彿
                                 wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
                                 now,    // 鍙戠敓鏃堕棿
                                 null,    // 缁撴潫鏃堕棿
                                 wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
                                 wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-                                ste.getId(),    // 鍫嗗灈鏈�
+                                forkLiftSlave.getId(),    // 鎻愬崌鏈�
                                 null,    // plc
                                 wrkMast.getLocNo(),    // 鐩爣搴撲綅
                                 wrkMast.getStaNo(),    // 鐩爣绔�
                                 wrkMast.getSourceStaNo(),    // 婧愮珯
                                 wrkMast.getSourceLocNo(),    // 婧愬簱浣�
                                 wrkMast.getBarcode(),    // 鏉$爜
-                                (int) steProtocol.getAlarm(),    // 寮傚父鐮�
+                                null,    // 寮傚父鐮�
                                 errName,    // 寮傚父
                                 1,    // 寮傚父鎯呭喌
                                 now,    // 娣诲姞鏃堕棿
                                 null,    // 娣诲姞浜哄憳
                                 now,    // 淇敼鏃堕棿
                                 null,    // 淇敼浜哄憳
-                                "浠诲姟涓紓甯�"    // 澶囨敞
+                                "浠诲姟涓紓甯�",    // 澶囨敞
+                                JSON.toJSONString(forkLiftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
                         );
-                        if (!basSteErrLogService.insert(basSteErrLog)) {
-                            News.error("绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", ste.getId(), errName);
+                        if (!basLiftErrLogService.insert(basLiftErrLog)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", forkLiftSlave.getId(), errName);
                         }
                     }
                 } else {
                     // 寮傚父淇
-                    if (steProtocol.getAlarm() == null || !steProtocol.isAlarm()) {
+                    if (forkLiftProtocol.getErrorCode() == null || forkLiftProtocol.getErrorCode() == 0) {
                         latest.setEndTime(now);
                         latest.setUpdateTime(now);
                         latest.setStatus(2);
-                        if (!basSteErrLogService.updateById(latest)) {
-                            News.error("绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", ste.getId(), latest.getId());
-                        }
-                    }
-                }
-                // 鏃犱换鍔�
-            } else {
-                BasSteErrLog latest = basSteErrLogService.findLatest(ste.getId());
-                // 鏈夊紓甯�
-                if (steProtocol.getAlarm() != null && steProtocol.isAlarm()) {
-                    // 璁板綍鏂板紓甯�
-                    if (latest == null || (latest.getErrCode() != steProtocol.getAlarm().intValue())) {
-                        BasSteErr steErr = basSteErrService.selectById(steProtocol.getAlarm());
-                        String errName = steErr==null? "鏈煡寮傚父":steErr.getErrName();
-                        BasSteErrLog basSteErrLog = new BasSteErrLog(
-                                null,    // 缂栧彿
-                                null,    // 宸ヤ綔鍙�
-                                now,    // 鍙戠敓鏃堕棿
-                                null,    // 缁撴潫鏃堕棿
-                                null,    // 宸ヤ綔鐘舵��
-                                null,    // 鍏ュ嚭搴撶被鍨�
-                                ste.getId(),    // 鍫嗗灈鏈�
-                                null,    // plc
-                                null,    // 鐩爣搴撲綅
-                                null,    // 鐩爣绔�
-                                null,    // 婧愮珯
-                                null,    // 婧愬簱浣�
-                                null,    // 鏉$爜
-                                (int)steProtocol.getAlarm(),    // 寮傚父鐮�
-                                errName,    // 寮傚父
-                                1,    // 寮傚父鎯呭喌
-                                now,    // 娣诲姞鏃堕棿
-                                null,    // 娣诲姞浜哄憳
-                                now,    // 淇敼鏃堕棿
-                                null,    // 淇敼浜哄憳
-                                "鏃犱换鍔″紓甯�"    // 澶囨敞
-                        );
-                        if (!basSteErrLogService.insert(basSteErrLog)) {
-                            News.error("绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", ste.getId(), errName);
-                        }
-                    }
-                    // 鏃犲紓甯�
-                } else {
-                    // 寮傚父淇
-                    if (latest != null && latest.getStatus() == 1) {
-                        latest.setEndTime(now);
-                        latest.setUpdateTime(now);
-                        latest.setStatus(2);
-                        if (!basSteErrLogService.updateById(latest)) {
-                            News.error("绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", ste.getId(), latest.getId());
+                        if (!basLiftErrLogService.updateById(latest)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", forkLiftSlave.getId(), latest.getId());
                         }
                     }
                 }
             }
         }
     }
-
 
     // -------------------------------------------------------------------------------
 
-    /**
-     * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
-     */
-    public void storeEmptyPlt(){
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻绌烘澘鍏ュ簱鍙�
-            for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
-                // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
-                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
-                if (staProtocol == null) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-                // 绔欑偣鏉′欢鍒ゆ柇
-                if (staProtocol.isAutoing()
-                        && staProtocol.isLoading()
-                        && staProtocol.isInEnable()
-                        && staProtocol.isEmptyMk()
-                        && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo() >= 9990 || staProtocol.getWorkNo() <= 9999))
-                        && staProtocol.isPakMk()) {
-
-                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                    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;
-                            }
-                        }
-                    }
-
-                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, emptyInSta.getLed());
-
-                    try {
-                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-
-                        SearchLocParam param = new SearchLocParam();
-                        param.setIoType(10);
-                        if (!Cools.isEmpty(barcode)) {
-                            param.setBarcode(barcode);
-                        }
-                        param.setSourceStaNo(emptyInSta.getStaNo());
-//                        param.setLocType1(locTypeDto.getLocType1());
-                        String response = new HttpHandler.Builder()
-                                .setUri(wmsUrl)
-                                .setPath("/rpc/pakin/loc/v1")
-                                .setJson(JSON.toJSONString(param))
-                                .build()
-                                .doPost();
-                        JSONObject jsonObject = JSON.parseObject(response);
-                        Integer code = jsonObject.getInteger("code");
-                        if (code.equals(200)) {
-                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-
-                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂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/v1", JSON.toJSONString(param), response);
-                        }
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                    }
-
-                }
-
-
-            }
-        }
-    }
-
-    /**
-     * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
-     */
-    public void ledExecute() {
-        for (LedSlave led : slaveProperties.getLed()) {
-            // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-            // 鍛戒护闆嗗悎
-            List<LedCommand> commands = new ArrayList<>();
-            // 宸ヤ綔妗i泦鍚�
-            List<WrkMast> wrkMasts = new ArrayList<>();
-            for (Integer staNo : led.getStaArr()) {
-                // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-                // 鑾峰彇宸ヤ綔妗f暟鎹�
-                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
-                wrkMasts.add(wrkMast);
-                // 缁勮鍛戒护
-                LedCommand ledCommand = new LedCommand();
-                ledCommand.setWorkNo(wrkMast.getWrkNo());
-                ledCommand.setIoType(wrkMast.getIoType());
-                // 鍑哄簱妯″紡
-                switch (wrkMast.getIoType()) {
-                    case 101:
-                        ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
-                        break;
-                    case 103:
-                        ledCommand.setTitle("鎷f枡鍑哄簱");
-                        break;
-                    case 104:
-                        ledCommand.setTitle("骞舵澘鍑哄簱");
-                        break;
-                    case 107:
-                        ledCommand.setTitle("鐩樼偣鍑哄簱");
-                        break;
-                    case 110:
-                        ledCommand.setTitle("绌烘澘鍑哄簱");
-                        ledCommand.setEmptyMk(true);
-                        break;
-                    default:
-                        News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
-                        break;
-                }
-                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
-                ledCommand.setLocNo(wrkMast.getLocNo());
-                ledCommand.setStaNo(wrkMast.getStaNo());
-                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
-                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
-                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(),wrkDetl.getSpecs())));
-                }
-                commands.add(ledCommand);
-            }
-            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
-            // 鑾峰彇LED绾跨▼
-            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-            // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
-            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
-                continue;
-            }
-            // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
-            if (!commands.isEmpty()) {
-                if (led.getId()>3){
-                    if (!MessageQueue.offer(SlaveType.Led, led.getId()-3, new Task(1, commands))) {
-                        log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId()-3, led.getIp(), led.getPort());
-                        continue;
-                    }else {
-                        ledThread.setLedMk(false);
-                    }
-                }else {
-                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
-                        log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                        continue;
-                    }else {
-                        ledThread.setLedMk(false);
-                    }
-                }
-            }
-
-            try {
-                // 淇敼涓绘。led鏍囪
-                for (WrkMast wrkMast : wrkMasts) {
-                    wrkMast.setOveMk("Y");
-                    wrkMast.setModiTime(new Date());
-                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
-                    }
-                }
-
-                // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
-                ledThread.setWorkNos(workNos);
-
-            } catch (Exception e) {
-                e.printStackTrace();
-                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-            }
-
-        }
-    }
-
-    /**
-     * 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
-     */
-    public void ledReset() {
-        for (LedSlave led : slaveProperties.getLed()) {
-
-            // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-            // 鍛戒护闆嗗悎
-            boolean reset = true;
-            for (Integer staNo : led.getStaArr()) {
-                // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (staProtocol == null) {
-                    continue;
-                }
-                if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
-                    reset = false;
-                    break;
-                }
-            }
-            // 鑾峰彇led绾跨▼
-            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-            // led鏄剧ず榛樿鍐呭
-            if (reset && !ledThread.isLedMk()) {
-                ledThread.setLedMk(true);
-                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
-                    News.error(" - {}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                } else {
-
-                }
-            }
-        }
-        for (LedSlave led : slaveProperties.getLed()) {
-            // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-            // 鍛戒护闆嗗悎
-            boolean reset = true;
-            for (Integer staNo : led.getStaArr()) {
-                // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (staProtocol == null) { continue; }
-                if (staProtocol.getWorkNo() != 0) {
-                    reset = false;
-                    break;
-                }
-            }
-            // 鑾峰彇led绾跨▼
-            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-            // led鏄剧ず榛樿鍐呭
-            if (reset && !ledThread.isLedMk()) {
-                ledThread.setLedMk(true);
-                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
-                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                }
-            }
-        }
-    }
-
-    /**
-     * 灏忚溅鐢甸噺妫�娴� ===>> 鍙戣捣鍏呯數
-     */
-    @SuppressWarnings("serial")
-    public synchronized void loopSteCharge() {
-        if (!Cools.isEmpty(wrkMastMapper.selectAllC())){
-            return;
-        }
-        if (null != wrkChargeService.selectWorking(null, WrkChargeType.reset)) {
-            return;
-        }
-        if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) {
-            return;
-        }
-        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-        for (SteSlave ste : slaveProperties.getSte()) {
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            BasSte basSte = basSteService.selectById(ste.getId());
-            if (Cools.isEmpty(steProtocol, basSte)) { continue; }
-            try {
-                // 鍦ㄧ嚎 绌洪棽   鏃犱綔涓氭爣璁�   涓嶅湪鍏呯數
-                if (steProtocol.getMode() == 0
-                        || !steProtocol.statusType.equals(SteStatusType.IDLE)
-                        || basSte.getPakMk().equals("Y")
-                        || basSte.getAutoCharge().equals("N")
-//                        || steProtocol.getChargeStatus() == 1
-                ) {
-                    continue;
-                }
-                if (!steProtocol.isEnable()) {
-                    continue;
-                }
-                if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) {
-                    continue;
-                }
-                WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.charge);
-
-                if (wrkCharge == null && steProtocol.getChargeStatus() == 0) {
-                    // 瀵绘壘绌洪棽鍏呯數妗�
-                    SteChargeType steCharge = null;
-                    do {
-                        String locNo;
-                        if (devpThread.charge0) {
-                            SteChargeType first = SteChargeType.FIRST;
-                            locNo = first.locNo;
-                            if (basSteService.hasCarOfLocNo(locNo) == null
-                                && wrkChargeService.selectWorkingOfCharge(first.ssbm) == null) {
-                                steCharge = first;
-                                break;
-                            }
-                        }
-//                        if (!devpThread.charge1) {
-//                            SteChargeType second = SteChargeType.SECOND;
-//                            locNo = second.locNo;
-//                            if (basSteService.hasCarOfLocNo(locNo) == null
-//                                && wrkChargeService.selectWorkingOfCharge(second.ssbm) == null) {
-//                                steCharge = second;
-//                                break;
+//    /**
+//     * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
+//     */
+//    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 (!devpThread.charge2) {
-//                            SteChargeType third = SteChargeType.THIRD;
-//                            locNo = third.locNo;
-//                            if (basSteService.hasCarOfLocNo(locNo) == null
-//                                && wrkChargeService.selectWorkingOfCharge(third.ssbm) == null) {
-//                                steCharge = third;
-//                                break;
+//
+//                        if (!Cools.isEmpty(barcode)) {
+//                            WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode);//鏉$爜瀛樺湪宸ヤ綔妗�
+//                            if (wrkMast != null) {
+//                                continue;
 //                            }
 //                        }
-                        break;
-                    } while (false);
-
-                    if (steCharge == null) {
-//                        News.warn("{}鍙峰皬杞︺�愮數閲忥細{}銆戝厖鐢靛け璐ワ紝鍘熷洜锛氭病鏈夌┖闂插厖鐢垫々銆�", ste.getId(), steProtocol.getCharge());
-                        continue;
-                    }
-                    String chargeLocNo = steCharge.locNo;
-                    wrkCharge = new WrkCharge();
-                    wrkCharge.setSteNo(ste.getId());
-                    wrkCharge.setCharge(steCharge.ssbm);
-                    wrkCharge.setWrkNo(commonService.getChargeWorkNo(4));
-                    wrkCharge.setWrkSts(21L);   // 21.鍑嗗鍏呯數
-                    wrkCharge.setCrnNo(1);  // 鍥哄畾1鍙峰爢鍨涙満
-                    wrkCharge.setIoPri((double) 10);
-                    wrkCharge.setLocNo(chargeLocNo);
-                    wrkCharge.setMemo("charge");
-                    wrkCharge.setAppeTime(new Date());
-                    if (!wrkChargeService.insert(wrkCharge)) {
-                        News.error("淇濆瓨{}鍙风┛姊溅鍏呯數浠诲姟澶辫触!!!", ste.getId());
-                        continue;
-                    }
-
-                    // 澶勪簬鍏呯數搴撲綅缁�
-                    if ( 0<steProtocol.getRow().intValue() && steProtocol.getRow().intValue()<=4
-                            && steProtocol.getBay().intValue() == Utils.getBay(chargeLocNo)
-                            && steProtocol.getLev().intValue() == Utils.getLev(chargeLocNo)) {
-                        // 淇敼宸ヤ綔妗g姸鎬� 21.鍑嗗鍏呯數 => 24.灏忚溅鍒拌揪
-                        wrkCharge.setWrkSts(24L);
-                        wrkCharge.setModiTime(new Date());
-                        if (!wrkChargeService.updateById(wrkCharge)) {
-                            News.error("淇敼鍏呯數浠诲姟鐘舵�� 21.鍑嗗鍏呯數 => 24.灏忚溅鍒拌揪 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                        }
-                    } else {
-                        this.letCarBeWaiting(wrkCharge, ste.getId());
-                    }
-
-                    break;
-                }
-            } catch (Exception e) {
-                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                News.error("loopSteCharge fail", e);
-            }
-        }
-    }
+//
+//                        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();
+//        }
+//    }
 
     /**
-     * 鎵ц灏忚溅鍏呯數浠诲姟
+     * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
      */
-    public synchronized void executeSteCharge() {
-        WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.charge);
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, 1);
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (null == wrkCharge) {
-            try{
-                if (steProtocol.getChargeStatus()==(short)0 && steProtocol.isBrushConnect()){
-                    SteCommand steCommand = new SteCommand();
-                    steCommand.setSteNo(1); // 绌挎杞︾紪鍙�
-                    steCommand.setTaskNo(10060); // 宸ヤ綔鍙�
-                    steCommand.setTaskMode(SteTaskModeType.CLOSE_CHARGE); // 浠诲姟妯″紡: 鏂紑鍏呯數
-                    if (!MessageQueue.offer(SlaveType.Ste, 1, new Task(2, steCommand))) {
-                        News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand));
-                    }
-                }
-            }catch (Exception e){
-                return;
-            }
-            return;
-        }
-        Integer steNo = wrkCharge.getSteNo();
-
-        BasSte basSte = basSteService.selectById(steNo);
-        if (Cools.isEmpty(steProtocol, basSte)) { return; }
-        if (steProtocol.getMode() == 0
-                || !steProtocol.statusType.equals(SteStatusType.IDLE)
-                || basSte.getPakMk().equals("Y")
-                || basSte.getAutoCharge().equals("N")
-//                || steProtocol.getChargeStatus() == 1
-        ) {
-            return;
-        }
-        if (!steProtocol.isEnable()) {
-            return;
-        }
-        if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())+40) {
-            MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 999));//涓柇鍏呯數鏍囪
-            wrkCharge.setWrkSts(30L);
-            if (!wrkChargeService.updateById(wrkCharge)) {
-                News.error("淇敼鍏呯數浠诲姟鐘舵�� 29.寮�濮嬪厖鐢� ===>> 30.瀹屾垚鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-            }else {
-                SteCommand steCommand = new SteCommand();
-                steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙�
-                steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-                steCommand.setTaskMode(SteTaskModeType.CLOSE_CHARGE); // 浠诲姟妯″紡: 鏂紑鍏呯數
-                if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) {
-                    News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand));
-                }
-            }
-            return;
-        }else if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine()) && steProtocol.getChargeStatus()==(short)0 && steProtocol.isBrushConnect()) {
-            MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 999));//涓柇鍏呯數鏍囪
-            wrkCharge.setWrkSts(30L);
-            if (!wrkChargeService.updateById(wrkCharge)) {
-                News.error("淇敼鍏呯數浠诲姟鐘舵�� 29.寮�濮嬪厖鐢� ===>> 30.瀹屾垚鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-            }else {
-                SteCommand steCommand = new SteCommand();
-                steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙�
-                steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-                steCommand.setTaskMode(SteTaskModeType.CLOSE_CHARGE); // 浠诲姟妯″紡: 鏂紑鍏呯數
-                if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) {
-                    News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand));
-                }
-            }
-            return;
-        }
+    public synchronized void loopShuttleCharge() {
         try {
-            // filter
-            if (wrkCharge.getWrkSts() < 28 && steProtocol.getChargeStatus() == 1) {
-                return;
-            }
-
-            // 22.灏忚溅寰呮惉
-            if (wrkCharge.getWrkSts() == 22) {
-
-                // 鍏ュ嚭搴撲换鍔′紭鍏�
-                if (null != wrkMastMapper.selectWorkingByCrn(wrkCharge.getCrnNo())) {
-                    return;
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+                ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+                ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+                if (shuttleProtocol == null) {
+                    continue;
                 }
 
-                LocMast locMast = locMastService.selectById(basSte.getIdleLoc());
+                //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
+                if (!shuttleThread.isRequireCharge()) {
+                    continue;
+                }
 
-                // 鎼皬杞﹁嚦灏忚溅璧板悜閫氶亾
-                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkCharge.getCrnNo());
-                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-                if (crnProtocol == null) { return; }
-                // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-                if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
-                    // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
-                    CrnCommand crnCommand = new CrnCommand();
-                    crnCommand.setCrnNo(wrkCharge.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-                    crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                    crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                    crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
-                    crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
-                    crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue());     // 鐩爣搴撲綅鎺�
-                    crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-                    crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-                    if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) {
-                        News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand));
-                    } else {
-                        // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                        steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo(), true), locMast.getBay1(), locMast.getLev1());
-                        // 淇敼宸ヤ綔妗g姸鎬� 22.灏忚溅寰呮惉 => 23.鍚婅溅鎼繍
-                        Date now = new Date();
-                        wrkCharge.setWrkSts(23L);
-                        wrkCharge.setCrnStrTime(now);
-                        wrkCharge.setModiTime(now);
-                        if (!wrkChargeService.updateById(wrkCharge)) {
-                            News.error("淇敼宸ヤ綔妗g姸鎬� 22.灏忚溅寰呮惉 => 23.鍚婅溅鎼繍 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                        }
+                WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttleProtocol.getShuttleNo());
+                if (wrkMast != null) {//宸叉湁鍏呯數浠诲姟
+                    continue;
+                }
+
+                //灏忚溅鎵�鍦ㄦゼ灞�
+                int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
+                ShuttleChargeType shuttleCharge = null;
+
+                //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
+                for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
+                    if (lev != Utils.getLev(chargeType.locNo)) {
+                        continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
                     }
-                }
 
-            } else if (wrkCharge.getWrkSts() == 24L) {
-                // 灏忚溅琛岄┒閫氶亾
-                if (steProtocol.statusType.equals(SteStatusType.IDLE) && steProtocol.getPakMk().equals("N")) {
-                    if (steProtocol.getChargeStatus() == 1) { return; }
-                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                    SteCommand steCommand = new SteCommand();
-                    steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙�
-                    steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-                    steCommand.setTaskMode(SteTaskModeType.BACK_ORIGIN);  // 鍘诲彸绔�
-
-                    steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue());
-                    steCommand.setBay(steProtocol.getBay());
-                    steCommand.setLev(steProtocol.getLev());
-                    if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) {
-                        News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand));
-                    } else {
-                        // 淇敼宸ヤ綔妗g姸鎬� 24.灏忚溅鍒拌揪 ===> 25.灏忚溅璧拌
-                        wrkCharge.setWrkSts(25L);
-                        Date now = new Date();
-                        wrkCharge.setCrnEndTime(now);
-                        wrkCharge.setModiTime(now);
-                        if (!wrkChargeService.updateById(wrkCharge)) {
-                            News.error("淇敼鍏呯數浠诲姟鐘舵�� 24.灏忚溅鍒拌揪 ===> 25.灏忚溅璧拌 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                        }
-                    }
-                }
-            } else if (wrkCharge.getWrkSts() == 26) {
-                //26.绛夊緟鍏呯數 ===>
-                // 绌挎杞︿笅鍙戝厖鐢典换鍔�
-                SteCommand steCommand = new SteCommand();
-                steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙�
-                steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-                steCommand.setTaskMode(SteTaskModeType.CHARGE_LEFT); // 浠诲姟妯″紡: 鍏呯數
-                if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) {
-                    News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand));
-                } else {
-                    // 28.鍏呯數灏辩华 ===>> 29.寮�濮嬪厖鐢�
-                    wrkCharge.setWrkSts(29L);
-                    if (!wrkChargeService.updateById(wrkCharge)) {
-                        News.error("淇敼鍏呯數浠诲姟鐘舵�� 28.鍏呯數灏辩华 ===>> 29.寮�濮嬪厖鐢� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                    }
-                }
-            } else if (wrkCharge.getWrkSts() == 29) {
-                Float idle2 = steProtocol.isIdle2();
-                String chargeLine = SpringUtils.getBean(BasSteService.class).selectById(1).getChargeLine();
-                if (idle2<(Float.parseFloat(chargeLine)+2)){
-                    MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 666));//鍏呯數鏍囪
-                }else if (idle2 >= 100f){
-                    MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 999));//涓柇鍏呯數鏍囪
-                    // 29.寮�濮嬪厖鐢� ===>> 30.瀹屾垚鍏呯數
-                    wrkCharge.setWrkSts(30L);
-                    if (!wrkChargeService.updateById(wrkCharge)) {
-                        News.error("淇敼鍏呯數浠诲姟鐘舵�� 29.寮�濮嬪厖鐢� ===>> 30.瀹屾垚鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                    }else {
-                        SteCommand steCommand = new SteCommand();
-                        steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙�
-                        steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-                        steCommand.setTaskMode(SteTaskModeType.CLOSE_CHARGE); // 浠诲姟妯″紡: 鏂紑鍏呯數
-                        if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) {
-                            News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand));
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            News.error("executeSteCharge fail", e);
-        }
-    }
-
-    /**
-     * 杞鍏呯數妗╂槸鍚︽湁绌洪棽灏忚溅
-     */
-    @Deprecated
-    public synchronized void queryChargeLocOfComplete() {
-        // 涓庡厖鐢典换鍔′笉鍚屾杩涜
-        if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) { return; }
-        if (null != wrkChargeService.selectWorking(null, WrkChargeType.reset)) { return; }
-        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-        // 妫�绱㈠厖鐢垫々
-        for (SteChargeType value : SteChargeType.values()) {
-            Integer steNo = basSteService.hasCarOfLocNo(value.locNo);
-            if (steNo != null) {
-                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-                SteProtocol steProtocol = steThread.getSteProtocol();
-                BasSte basSte = basSteService.selectById(steNo);
-                if (Cools.isEmpty(steProtocol, basSte)) {
-                    continue;
-                }
-                if (steProtocol.getCharge() < 99) {
-                    continue;
-                }
-                if (steProtocol.getMode() == 0) {
-                    continue;
-                }
-                if (!steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
-                    continue;
-                }
-//                // 1鍙峰厖鐢垫々
-//                if (value.equals(SteChargeType.FIRST) && devpThread.charge0) {
-//                    continue;
-//                }
-//                // 2鍙峰厖鐢垫々
-//                if (value.equals(SteChargeType.SECOND) && devpThread.charge1) {
-//                    continue;
-//                }
-//                // 3鍙峰厖鐢垫々
-//                if (value.equals(SteChargeType.THIRD) && devpThread.charge2) {
-//                    continue;
-//                }
-//                // 灏忚溅鏄惁澶勪簬鍏呯數鐘舵��
-//                if (steProtocol.getChargeStatus() == 1) {
-//                    continue;
-//                }
-                // case 1 : 鑷姩鍏呯數寮�   棣堢數      脳
-                // case 2 : 鑷姩鍏呯數寮�   婊$數      鉁�
-                // case 3 : 鑷姩鍏呯數鍏�   棣堢數      鉁�
-                // case 4 : 鑷姩鍏呯數鍏�   婊$數      鉁�
-                if (basSte.getAutoCharge().equals("Y")
-                        && steProtocol.getCharge() < Float.parseFloat(basSte.getChargeLine())) {
-                    continue;
-                }
-
-                WrkCharge wrkCharge = wrkChargeService.selectWorking(steNo, WrkChargeType.reset);
-
-                if (wrkCharge == null) {
-                    // 寮�濮嬬┛姊溅澶嶄綅浠诲姟
-                    wrkCharge = new WrkCharge();
-                    wrkCharge.setSteNo(steNo);
-                    wrkCharge.setWrkNo(commonService.getChargeWorkNo(6));
-                    wrkCharge.setWrkSts(41L);   // 41.灏忚溅鍑嗗澶嶄綅
-                    wrkCharge.setCrnNo(2);  // 鍥哄畾2鍙峰爢鍨涙満
-                    wrkCharge.setIoPri((double) 10);
-                    wrkCharge.setSourceLocNo(value.locNo);
-                    wrkCharge.setLocNo(basSte.getIdleLoc());
-                    wrkCharge.setMemo("reset");
-                    wrkCharge.setAppeTime(new Date());
-                    if (!wrkChargeService.insert(wrkCharge)) {
-                        News.error("淇濆瓨{}鍙风┛姊溅澶嶄綅浠诲姟澶辫触!!!", steNo);
-                    } else {
+                    //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
+                    if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
+                        shuttleCharge = chargeType;
                         break;
                     }
                 }
-            }
-        }
-    }
 
-    /**
-     * 灏忚溅浠庡厖鐢垫々 鑷� 寰呮満搴撲綅
-     */
-    @Deprecated
-    public synchronized void steFromChargeToIdleLoc() {
-        WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.reset);
-        if (wrkCharge == null) { return; }
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo());
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        BasSte basSte = basSteService.selectById(wrkCharge.getSteNo());
-        if (Cools.isEmpty(steProtocol, basSte)) {
-            return;
-        }
-        // 鎼繍鑷冲浐瀹氶�氶亾
-        if (wrkCharge.getWrkSts() == 41L) {
-            // 鎼皬杞﹁嚦灏忚溅璧板悜閫氶亾
-            List<String> channel = slaveProperties.getChannel();
-            for (String channelLocNo : channel) {
-                Integer otherSte = existOtherSte(channelLocNo, wrkCharge.getSteNo());
-                if (null != otherSte) {
-                    News.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", wrkCharge.getSteNo(), channelLocNo, otherSte);
-                } else {
-                    // 鍥哄畾鍫嗗灈鏈�
-                    int crnNo = 1;
-                    if (null != wrkMastMapper.selectWorkingByCrn(crnNo)) {
-                        return;
-                    }
-
-                    LocMast channelLoc = locMastService.selectById(channelLocNo);
-
-                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnNo);
-                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-                    if (crnProtocol == null) { continue; }
-                    // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-                    if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
-                        // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
-                        CrnCommand crnCommand = new CrnCommand();
-                        crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
-                        crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                        crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                        crnCommand.setSourcePosX(steProtocol.getRow());     // 婧愬簱浣嶆帓
-                        crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
-                        crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                        crnCommand.setDestinationPosX(Utils.getGroupRow(channelLoc.getLocNo(), false).shortValue());     // 鐩爣搴撲綅鎺�
-                        crnCommand.setDestinationPosY(channelLoc.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-                        crnCommand.setDestinationPosZ(channelLoc.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-                        if (!MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, crnCommand))) {
-                            News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand));
-                        } else {
-                            // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                            steThread.modifyPos(Utils.getGroupRow(channelLoc.getLocNo(), false), channelLoc.getBay1(), channelLoc.getLev1());
-                            // 淇敼宸ヤ綔妗g姸鎬� 41.灏忚溅鍑嗗澶嶄綅 => 42.鍚婅溅鎼繍
-                            Date now = new Date();
-                            wrkCharge.setWrkSts(42L);
-                            wrkCharge.setCrnStrTime(now);
-                            wrkCharge.setModiTime(now);
-                            if (!wrkChargeService.updateById(wrkCharge)) {
-                                News.error("淇敼澶嶄綅浠诲姟鐘舵�� 41.灏忚溅鍑嗗澶嶄綅 => 42.鍚婅溅鎼繍 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
+                if (shuttleCharge == null) {
+                    //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
+                    //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
+                    for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
+                        if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
+                            //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                            int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞�
+                            boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
+                            if (checkLevHasShuttle) {
+                                //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                                continue;
                             }
-                        }
-                        break;
-                    }
 
-                }
-            }
-        } else if (wrkCharge.getWrkSts() == 43L) {
-            // 灏忚溅琛岄┒閫氶亾
-            if (steProtocol.statusType.equals(SteStatusType.IDLE) && steProtocol.getPakMk().equals("N")) {
-                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                SteCommand steCommand = new SteCommand();
-                steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙�
-                steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-                steCommand.setTaskMode(SteTaskModeType.BACK_ORIGIN);  // 鍘诲乏绔�
-
-                steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
-                steCommand.setBay(steProtocol.getBay());
-                steCommand.setLev(steProtocol.getLev());
-                if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) {
-                    News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand));
-                } else {
-                    // 淇敼宸ヤ綔妗g姸鎬� 43.灏忚溅鍒拌揪 ===> 44.灏忚溅璧拌
-                    wrkCharge.setWrkSts(44L);
-                    Date now = new Date();
-                    wrkCharge.setCrnEndTime(now);
-                    wrkCharge.setModiTime(now);
-                    if (!wrkChargeService.updateById(wrkCharge)) {
-                        News.error("淇敼澶嶄綅浠诲姟鐘舵�� 43.灏忚溅鍒拌揪 ===> 44.灏忚溅璧拌 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                    }
-                }
-            }
-        } else if (wrkCharge.getWrkSts() == 45L) {
-            if (null != wrkMastMapper.selectWorkingByCrn(wrkCharge.getCrnNo())) {
-                return;
-            }
-
-            LocMast idleLoc = locMastService.selectById(basSte.getIdleLoc());
-
-            Integer otherSte = existOtherSte(idleLoc.getLocNo(), wrkCharge.getSteNo());
-            if (null != otherSte) {
-                News.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", wrkCharge.getSteNo(), idleLoc.getLocNo(), otherSte);
-            } else {
-                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkCharge.getCrnNo());
-                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-                if (crnProtocol == null) { return; }
-                // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-                if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
-                    // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
-                    CrnCommand crnCommand = new CrnCommand();
-                    crnCommand.setCrnNo(wrkCharge.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-                    crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                    crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                    crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
-                    crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
-                    crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX(Utils.getGroupRow(idleLoc.getLocNo(), true).shortValue());     // 鐩爣搴撲綅鎺�
-                    crnCommand.setDestinationPosY(idleLoc.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-                    crnCommand.setDestinationPosZ(idleLoc.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-                    if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) {
-                        News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand));
-                    } else {
-                        // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                        steThread.modifyPos(Utils.getGroupRow(idleLoc.getLocNo(), true), idleLoc.getBay1(), idleLoc.getLev1());
-                        // 淇敼宸ヤ綔妗g姸鎬� 45.灏忚溅寰呮惉 => 46.鏀捐嚦寰呮満浣�
-                        Date now = new Date();
-                        wrkCharge.setWrkSts(46L);
-                        wrkCharge.setCrnStrTime(now);
-                        wrkCharge.setModiTime(now);
-                        if (!wrkChargeService.updateById(wrkCharge)) {
-                            News.error("淇敼宸ヤ綔妗g姸鎬� 45.灏忚溅寰呮惉 => 46.鏀捐嚦寰呮満浣� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
-                        }
-                    }
-                }
-
-            }
-        }
-    }
-
-
-    /**
-     * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堝嚭搴撶増)
-     * tip锛氬悓姝�
-     */
-    private void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc){
-        try {
-            List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
-            LocMast loc = null;
-            for (Integer row : rows) {
-                if (Utils.isDeepLoc(slaveProperties, row)) {
-                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
-
-                    if (loc != null) {
-                        if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
-                            String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
-                            LocMast shallowLoc1 = locMastService.selectById(shallowLocNo);
-                            if (!shallowLoc1.getLocSts().equals("O")) {
-                                loc = null;
-                            }
-                        }
-                    }
-
-                    if (null != loc) {
-                        break;
-                    }
-                }
-            }
-            if (null == loc) {
-                for (Integer row : rows) {
-                    if (Utils.isShallowLoc(slaveProperties, row)) {
-                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
-
-                        if (null != loc) {//瀵瑰簲娣卞簱浣嶉潪鍦ㄥ簱鐘舵��,涓嶈兘绉诲簱
-                            String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
-                            LocMast deepLoc1 = locMastService.selectById(deepLoc);
-                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")) {
-                                loc = null;
-                            }
-                        }
-
-                        if (null != loc) {
+                            shuttleCharge = chargeType;
                             break;
                         }
                     }
                 }
+
+                if (shuttleCharge == null) {
+                    continue;
+                }
+
+                String chargeLocNo = shuttleCharge.locNo;
+                wrkMast = new WrkMast();
+                wrkMast.setMk(String.valueOf(shuttleCharge.id));
+                wrkMast.setWrkNo(commonService.getWorkNo(WrkIoType.SHUTTLE_CHARGE.id));
+                wrkMast.setWrkSts(WrkStsType.NEW_CHARGE.sts);
+                wrkMast.setIoType(WrkIoType.SHUTTLE_CHARGE.id);//300.鍏呯數
+                wrkMast.setIoPri((double) 999);
+                wrkMast.setLocNo(chargeLocNo);
+                wrkMast.setShuttleNo(shuttle.getId());
+                wrkMast.setMemo("charge");
+                wrkMast.setAppeTime(new Date());
+                if (!wrkMastService.insert(wrkMast)) {
+                    News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
+                    continue;
+                }
+
+                News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", shuttle.getId());
             }
-            if (null == loc) {
-                News.error("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
+     */
+    public synchronized void executeShuttleCharge() {
+        try {
+            //鏌ヨ灏忚溅鍏呯數浠诲姟
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId());
+                if(wrkMast == null) {
+                    continue;
+                }
+
+                boolean result1 = this.executeShuttleChargeStepGoToChargeSta(wrkMast);//灏忚溅绛夊緟鍏呯數妗�
+                if (!result1) {
+                    continue;
+                }
+
+                boolean result2 = this.executeShuttleChargeStepArrivalChargeSta(wrkMast);//灏忚溅鍒拌揪鍏呯數妗�
+                if (!result2) {
+                    continue;
+                }
+
+                boolean result3 = this.executeShuttleChargeStepStartCharge(wrkMast);//灏忚溅寮�濮嬪厖鐢�
+                if (!result3) {
+                    continue;
+                }
+
+                boolean result4 = this.executeShuttleChargeStepStopCharge(wrkMast);//灏忚溅鍋滄鍏呯數
+                if (!result4) {
+                    continue;
+                }
+
+                boolean result5 = this.executeShuttleChargeStepLeaveCharge(wrkMast);//灏忚溅绂诲紑鍏呯數妗�
+                if (!result5) {
+                    continue;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 灏忚溅鍓嶅線鍏呯數妗�
+     */
+    private synchronized boolean executeShuttleChargeStepGoToChargeSta(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_CHARGE.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
             }
 
-            // 鑾峰彇宸ヤ綔鍙�
-            int workNo = commonService.getWorkNo(0);
-            // 淇濆瓨宸ヤ綔妗�
-            WrkMast wrkMast = new WrkMast();
-            wrkMast.setWrkNo(workNo);
-            wrkMast.setIoTime(new Date());
-            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
-            wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
-            wrkMast.setIoPri(20D);
-            wrkMast.setCrnNo(crn.getId());
-            wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
-            wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
-            wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
-            wrkMast.setPicking("N"); // 鎷f枡
-            wrkMast.setExitMk("N"); // 閫�鍑�
-            wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
-            wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
-            wrkMast.setLinkMis("N");
-            wrkMast.setAppeTime(new Date());
+            if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+                //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
+                wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);
+                wrkMast.setModiTime(new Date());
+                wrkMastService.updateById(wrkMast);
+                return false;
+            }
+
+            //璋冨害灏忚溅鍘诲厖鐢垫々
+            boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getLocNo(), wrkMast.getShuttleNo());
+            if (!dispatched) {
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN.sts);//灏忚溅鍓嶅線鍏呯數妗�
             wrkMast.setModiTime(new Date());
-            int res = wrkMastMapper.insert(wrkMast);
-            if (res == 0) {
-                News.error("鍙屾繁搴撲綅 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-            }
-            // 宸ヤ綔妗f槑缁嗕繚瀛�
-            if (shallowLoc.getLocSts().equals("F")) {
-                List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
-                for (LocDetl locDetl : locDetls) {
-                    WrkDetl wrkDetl = new WrkDetl();
-                    wrkDetl.sync(locDetl);
-                    wrkDetl.setWrkNo(workNo);
-                    wrkDetl.setIoTime(new Date());
-                    wrkDetl.setAnfme(locDetl.getAnfme());
-                    wrkDetl.setAppeTime(new Date());
-                    wrkDetl.setModiTime(new Date());
-                    if (!wrkDetlService.insert(wrkDetl)) {
-                        News.error("鍙屾繁搴撲綅 --- 淇濆瓨宸ヤ綔妗f槑缁嗗け璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                        throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-                    }
-                }
-            }
-            // 淇敼婧愬簱浣嶇姸鎬�
-            if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
-                shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
-                shallowLoc.setModiTime(new Date());
-                if (!locMastService.updateById(shallowLoc)) {
-                    News.error("鍙屾繁搴撲綅 --- 鏇存柊婧愬簱浣嶇姸鎬佸け璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                    throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
-                }
-            } else {
-                News.error("鍙屾繁搴撲綅 --- 婧愬簱浣嶅嚭搴撳け璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
-            }
-            // 淇敼鐩爣搴撲綅鐘舵��
-            if (loc.getLocSts().equals("O")) {
-                loc.setLocSts("S"); // S.鍏ュ簱棰勭害
-                loc.setModiTime(new Date());
-                if (!locMastService.updateById(loc)) {
-                    News.error("鍙屾繁搴撲綅 --- 鏇存柊鐩爣搴撲綅鐘舵�佸け璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                    throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
-                }
-            } else {
-                News.error("鍙屾繁搴撲綅 --- 绉昏浆澶辫触锛� 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                throw new CoolException("绉昏浆澶辫触");
-            }
-        } catch (Exception e) {
-            News.error("鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
-            e.printStackTrace();
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            wrkMastService.updateById(wrkMast);
+            return false;
         }
-    }
-
-    public List<String> crn2DemoLocs = new ArrayList<String>(); public String crn2LastLoc = "";
-    public synchronized void demo() {
-        if (Cools.isEmpty(crn2DemoLocs)) {
-            crn2DemoLocs = locMastService.getDemoNextLoc(2);
-        }
-        for (CrnSlave crn : slaveProperties.getCrn()) {
-            if (!crn.getDemo()) {
-                continue;
-            }
-            // 蹇呴』涓烘紨绀虹姸鎬�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
-            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) {
-                continue;
-            }
-
-            // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
-
-                // filter
-                if (wrkChargeService.selectCount(new EntityWrapper<WrkCharge>()
-                        .eq("crn_no", crn.getId()).between("wrk_sts", 31, 36)) > 0) {
-                    continue;
-                }
-
-                SteThread steThread = queryIdleCar(crnProtocol);
-                if (Cools.isEmpty(steThread)) {
-                    News.warn("娌℃湁绌洪棽鐨勫皬杞﹁繘琛屾紨绀哄姛鑳�");
-                    continue;
-                }
-                int steNo = steThread.getSlave().getId();
-                SteProtocol steProtocol = steThread.getSteProtocol();
-                BasSte basSte = basSteService.selectById(steNo);
-                if (Cools.isEmpty(steProtocol, basSte)) { continue; }
-
-                // 鍙湁褰撶┛姊溅绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-                if (steProtocol.isIdle()) {
-
-                    String locNo = null;
-                    Iterator<String> iterator = crn2DemoLocs.iterator();
-                    while (iterator.hasNext()) {
-                        String next = iterator.next();
-                        if (!Cools.isEmpty(this.hasCar(next))) { continue; }
-                        String lastLoc = crn2LastLoc;
-                        if (!Cools.isEmpty(lastLoc)) {
-                            if (!lastLoc.substring(2, 7).equals(next.substring(2, 7))
-                                    || !Utils.getGroupRow(lastLoc, true).equals(Utils.getGroupRow(next, true))) {
-                                locNo = next;
-                                iterator.remove();
-                                break;
-                            } else {
-                                iterator.remove();
-                            }
-                        } else {
-                            locNo = next;
-                            iterator.remove();
-                            break;
-                        }
-
-                    }
-                    if (!Cools.isEmpty(locNo)) {
-                        crn2LastLoc = locNo;
-                    }
-
-                    News.info("{}鍙峰爢鍨涙満瀵箋}搴撲綅杩涜婕旂ず", crn.getId(), locNo);
-
-                    String sourceLocNo = Utils.getLocNo(steProtocol.getRow(), steProtocol.getBay(), steProtocol.getLev());
-
-                    WrkCharge wrkCharge = new WrkCharge();
-                    wrkCharge.setCrnNo(crn.getId());
-                    wrkCharge.setSteNo(steNo);
-                    wrkCharge.setWrkNo(commonService.getChargeWorkNo(5));
-                    wrkCharge.setWrkSts(31L);   // 31.鐢熸垚婕旂ずID
-                    wrkCharge.setIoPri((double) 10);
-                    wrkCharge.setSourceLocNo(sourceLocNo);
-                    wrkCharge.setLocNo(locNo);
-                    wrkCharge.setMemo("demo");
-                    if (!wrkChargeService.insert(wrkCharge)) {
-                        News.error("鐢熸垚婕旂ず浠诲姟澶辫触锛屽爢鍨涙満鍙凤細{}锛屽皬杞︼細{}锛屾簮搴撲綅锛歿}锛岀洰鏍囧簱浣嶏細{}", crn.getId(), steNo, sourceLocNo, locNo);
-                    }
-                }
-            }
-        }
+        return true;
     }
 
     /**
-     * 婕旂ず鍙栬揣
+     * 灏忚溅鍒拌揪鍏呯數妗�
      */
-    private void steMoveDemo(CrnSlave slave, CrnProtocol crnProtocol) {
-        // 鑾峰彇宸ヤ綔妗d俊鎭�
-        WrkCharge wrkCharge = wrkChargeService.selectOne(new EntityWrapper<WrkCharge>().eq("crn_no", slave.getId())
-                .in("wrk_sts", 31, 33, 35));
-        if (null == wrkCharge) {
-            return;
-        }
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo());
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (null == steProtocol) { return; }
-        if (steProtocol.isIdle()) {
-            // 31.鐢熸垚婕旂ずID
-            if (wrkCharge.getWrkSts() == 31L) {
-                this.letCarBeReady(wrkCharge, steProtocol.getSteNo().intValue());
-                wrkCharge.setWrkSts(32L);
-                wrkCharge.setModiTime(new Date());
-                if (!wrkChargeService.updateById(wrkCharge)) {
-                    News.error("淇敼婕旂ず浠诲姟{}宸ヤ綔妗� 31.鐢熸垚婕旂ずID ==>> 32.灏忚溅璧拌 澶辫触!", wrkCharge.getWrkNo());
-                }
-            // 33.灏忚溅寰呮惉
-            } else if (wrkCharge.getWrkSts() == 33L) {
-                LocMast locMast = locMastService.selectById(wrkCharge.getLocNo());
-                // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
-                CrnCommand crnCommand = new CrnCommand();
-                crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
-                crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
-                crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
-                crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue());     // 鐩爣搴撲綅鎺�
-                crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-                crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-                if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) {
-                    News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand));
-                } else {
-                    // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                    steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo(), true), locMast.getBay1(), locMast.getLev1());
-                    // 淇敼宸ヤ綔妗g姸鎬� 33.灏忚溅寰呮惉 => 34.鍚婅溅鎼繍
-                    Date now = new Date();
-                    wrkCharge.setWrkSts(34L);
-                    wrkCharge.setCrnStrTime(now);
-                    wrkCharge.setModiTime(now);
-                    if (!wrkChargeService.updateById(wrkCharge)) {
-                        News.error("淇敼婕旂ず浠诲姟{}宸ヤ綔妗� 33.灏忚溅寰呮惉 => 34.鍚婅溅鎼繍 澶辫触!", wrkCharge.getWrkNo());
-                    }
-                }
-                // 35.灏忚溅灏辩华
-            } else if (wrkCharge.getWrkSts() == 35L) {
-
-                int steNo = steProtocol.getSteNo().intValue();
-                if (!basSteService.updatePakMk(steNo, "Y")) {
-                    News.error("淇敼绌挎杞︿綔涓氱姸鎬� 澶辫触锛侊紒锛岀┛姊溅={}", steNo);
-                    return;
-                }
-
-                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                SteCommand steCommand = new SteCommand();
-                steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-                steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-                SteTaskModeType originByLoc = SteTaskModeType.findOriginByLoc(steProtocol.getRow().intValue());
-                if (originByLoc.equals(SteTaskModeType.GO_ORIGIN)) {
-                    originByLoc = SteTaskModeType.BACK_ORIGIN;
-                } else if (originByLoc.equals(SteTaskModeType.BACK_ORIGIN)) {
-                    originByLoc = SteTaskModeType.GO_ORIGIN;
-                } else {
-                    return;
-                }
-                steCommand.setTaskMode(originByLoc);
-
-                steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue());
-                steCommand.setBay(steProtocol.getBay());
-                steCommand.setLev(steProtocol.getLev());
-
-                if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                    News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-                } else {
-                    // 淇敼宸ヤ綔妗g姸鎬� 35.灏忚溅灏辩华 => 36.灏忚溅璧拌
-                    wrkCharge.setWrkSts(36L);
-                    wrkCharge.setModiTime(new Date());
-                    if (!wrkChargeService.updateById(wrkCharge)) {
-                        News.error("淇敼婕旂ず浠诲姟{}宸ヤ綔妗� 35.灏忚溅灏辩华 => 36.灏忚溅璧拌 澶辫触!", wrkCharge.getWrkNo());
-                    }
-                }
+    private synchronized boolean executeShuttleChargeStepArrivalChargeSta(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_RUN.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
             }
-        }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
 
+            //鍒ゆ柇鏄惁瀛樺湪鏈畬鎴愮殑绉诲姩浠诲姟
+            WrkMast moveWrk = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+            if(moveWrk != null) {
+                return false;
+            }
+
+            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+                return false;
+            }
+
+            //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);//灏忚溅鍒拌揪鍏呯數妗�
+            wrkMast.setModiTime(new Date());
+            wrkMastService.updateById(wrkMast);
+
+            return false;
+        }
+        return true;
     }
+
+    //灏忚溅寮�濮嬪厖鐢�
+    private synchronized boolean executeShuttleChargeStepStartCharge(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠�
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//鍑哄簱妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+
+            List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, true);
+            assignCommand.setCommands(commands);//杩愯鍛戒护
+
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_WORKING.sts);
+            wrkMast.setModiTime(new Date());
+            if (!wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+
+            //涓嬪彂浠诲姟
+            shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+
+            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_POWER_START);//瑙﹀彂閫氱煡
+            return false;
+        }
+        return true;
+    }
+
+    //灏忚溅鍋滄鍏呯數
+    private synchronized boolean executeShuttleChargeStepStopCharge(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
+            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.isChargingCompleted()) {
+                return false;
+            }
+
+            //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝仠姝㈠厖鐢靛懡浠�
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//鍑哄簱妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+
+            List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, false);
+            assignCommand.setCommands(commands);//杩愯鍛戒护
+
+            //涓嬪彂浠诲姟
+            shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+            return false;
+        }
+        return true;
+    }
+
+    //灏忚溅绂诲紑鍏呯數妗�
+    private synchronized boolean executeShuttleChargeStepLeaveCharge(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            ShuttleChargeType chargeType = ShuttleChargeType.get(Integer.parseInt(wrkMast.getMk()));
+            if(chargeType == null) {
+                return false;
+            }
+
+            //璋冨害灏忚溅鍘诲緟鏈轰綅
+            boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo());
+            if (!dispatched) {
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.COMPLETE_CHARGE.sts);
+            wrkMast.setModiTime(new Date());
+            if (wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+            return false;
+        }
+        return true;
+    }
+
     /**
-     * 鍑哄叆搴撴ā寮忓垏鎹�
+     * 鎵ц灏忚溅绉诲簱浠诲姟
      */
-    public synchronized void outAndIn() {
+    public synchronized void shuttleMoveExecute() {
         try {
-            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-            for (DevpSlave devp : slaveProperties.getDevp()) {
-                for (DevpSlave.Sta inSta : devp.getInSta()) {
-                    Thread.sleep(500);
-                    boolean a=true,b=true;
-                    List<WrkMast> wrkMasts = wrkMastMapper.selectAll(inSta.getStaNo());
-                    if (Cools.isEmpty(wrkMasts)){
-                        b=false;
-                    }else {
-                        for (WrkMast wrkMast:wrkMasts){
-                            if (wrkMast.getSourceStaNo() > wrkMast.getStaNo()){
-                                a=false;
-                                break;
-                            }
-                        }
-                    }
-                    switch (inSta.getStaNo()) {
-                        case 102://1F
-                            if (a && b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 11));
-                            }else if (b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 12));
-                            }else {
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 10));
-                            }
-                            break;
-                        case 202://2F
-                            if (a && b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 21));
-                            }else if (b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 22));
-                            }else {
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 20));
-                            }
-                            break;
-                        case 302://3F
-                            if (a && b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 31));
-                            }else if (b){
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 32));
-                            }else {
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 30));
-                            }
-                            break;
-                    }
+            //鏌ヨ灏忚溅绉诲簱浠诲姟
+            List<WrkMast> wrkMasts = wrkMastService.selectShuttleMoveWrk();
+            for (WrkMast wrkMast : wrkMasts) {
+                boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐�
+                if (!stepMoveSta) {
+                    continue;
                 }
-            }
 
+                boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑
+                if (!stepLiftMove) {
+                    continue;
+                }
+
+                boolean updateShuttleLocation = this.shuttleMoveExecuteStepUpdateShuttleLocation(wrkMast);//鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍�
+                if (!updateShuttleLocation) {
+                    continue;
+                }
+
+                boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑
+                if (!stepMoveLoc) {
+                    continue;
+                }
+
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
+    /**
+     * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮珯鐐�
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleMoveExecuteStepMoveSta(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
+        Date now = new Date();
+
+        //灏忚溅绉诲姩鑷崇珯鐐�  301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐逛腑
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_MOVE.sts) {
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            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.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            if (Utils.getLev(wrkMast.getLocNo()) == Utils.getLev(shuttleProtocol.getCurrentLocNo())) {
+                //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛屼笉闇�瑕侀�氳繃鎻愬崌鏈鸿皟搴�
+                wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);// 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
+                wrkMast.setModiTime(now);
+                if (wrkMastService.updateById(wrkMast)) {
+                    //涓嬪彂浠诲姟
+                    return true;//鐩存帴杩涘叆309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
+                }
+                return false;
+            }
+
+            //鑾峰彇婧愯緭閫佺珯
+            ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+            if (liftSta == null) {
+                return false;//鎵句笉鍒扮珯鐐�
+            }
+
+            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
+            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftSta.getLiftNo());
+            if (liftWrkMast != null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo());
+                return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+            }
+
+            //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
+            List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
+            if (targetNodes == null) {
+                return false;//鏈幏鍙栧埌鑺傜偣
+            }
+            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(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+            if (!result2) {
+                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                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.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+
+                //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+                navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, false);
+                return false;//璺緞瑙i攣澶辫触
+            }
+
+            assignCommand.setCommands(commands);
+
+            wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐�
+            wrkMast.setModiTime(now);
+            wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+//            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+                //瑙﹀彂閫氱煡
+                notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVING);
+                return false;
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愪腑
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleMoveExecuteStepLiftMove(WrkMast wrkMast) {
+        //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------//
+        Date now = new Date();
+
+        //鎻愬崌鏈烘惉杩愪腑  303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
+        if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_COMPLETE.sts) {
+            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, wrkMast.getLiftNo());
+            if (forkLiftThread == null) {
+                return false;
+            }
+            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+            if (forkLiftProtocol == null) {
+                return false;
+            }
+            if (!forkLiftThread.isIdle()) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
+                return false;
+            }
+            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
+            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
+            if (liftWrkMast != null) {
+                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚�
+                    News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
+                    return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+                }
+            }
+
+            //鑾峰彇婧愮珯
+            ForkLiftStaProtocol sourceLiftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+            //鑾峰彇鐩爣绔�
+            ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+            if (sourceLiftSta == null || liftSta == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
+                return false;//缂哄皯绔欑偣淇℃伅
+            }
+
+            if (liftSta.getHasTray()) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
+                return false;//鏈夋墭鐩樿烦杩�
+            }
+
+            //鑾峰彇鎻愬崌鏈哄懡浠�
+            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(wrkMast.getLiftNo().shortValue());
+            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
+            assignCommand.setTaskMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
+
+            wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑  303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            wrkMast.setModiTime(now);
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍�
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleMoveExecuteStepUpdateShuttleLocation(WrkMast wrkMast) {
+        //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------//
+        Date now = new Date();
+
+        //鎻愬崌鏈烘惉杩愪腑  307.鎻愬崌鏈烘惉杩愬畬鎴� ==> 308.灏忚溅杩佸嚭鎻愬崌鏈轰腑
+        if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts) {
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            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.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.UPDATE_LOCATION.id);//鏇存柊鍧愭爣
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setAuto(true);//鑷姩妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+            assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
+
+            //鏇存柊灏忚溅鍧愭爣
+            ShuttleCommand command = shuttleThread.getUpdateLocationCommand(wrkMast.getWrkNo(), wrkMast.getLocNo());
+            ArrayList<ShuttleCommand> commands = new ArrayList<>();
+            commands.add(command);
+
+            assignCommand.setCommands(commands);
+
+            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT.sts);//灏忚溅杩佸嚭鎻愬崌鏈轰腑
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            wrkMast.setModiTime(now);
+
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleMoveExecuteStepMoveLoc(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑-----------------------------------------//
+        Date now = new Date();
+
+        //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
+        if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts) {
+
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            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.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            //灏忚溅宸茬粡鍦ㄧ洰鏍囧簱浣嶏紝鐩存帴璁ゅ畾灏忚溅绉诲姩浠诲姟瀹屾垚
+            if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+                wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.灏忚溅绉诲姩瀹屾垚
+                wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+                wrkMast.setModiTime(now);
+                wrkMastService.updateById(wrkMast);
+                return false;
+            }
+
+            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())) {
+                //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆
+                List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
+                if (targetNodes == null) {
+                    return false;//鏈幏鍙栧埌鑺傜偣
+                }
+
+                //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+                ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+                for (NavigateNode node : targetNodes) {
+                    whiteList.add(new int[]{node.getX(), node.getY()});
+                }
+                commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, whiteList, assignCommand, shuttleThread);
+            }else {
+                //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
+                commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
+            }
+
+            if (commands == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;//璺緞璁$畻澶辫触
+            }
+
+            assignCommand.setCommands(commands);
+
+            wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
+            wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            wrkMast.setModiTime(now);
+
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+            }
+        }
+        return true;
+    }
 
 }

--
Gitblit v1.9.1