From 4ec87f4d9d873487adda85686a1bfd7fa620f857 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期六, 12 四月 2025 08:41:31 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 2577 ++++++++++++++++++++++-------------------------------------
 1 files changed, 985 insertions(+), 1,592 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 3760f91..1c9de47 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,34 +1,45 @@
 package com.zy.asrs.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
 import com.zy.asrs.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.MapNode;
+import com.zy.common.model.SearchLocParam;
+import com.zy.common.model.StartupDto;
 import com.zy.common.model.enums.NavigationMapType;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.*;
 import com.zy.core.News;
-import com.zy.core.action.ForkLiftAction;
 import com.zy.core.action.ShuttleAction;
+import com.zy.core.cache.MessageQueue;
 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.DevpSlave;
+import com.zy.core.model.LiftSlave;
+import com.zy.core.model.ShuttleSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.ShuttleAssignCommand;
+import com.zy.core.model.command.ShuttleCommand;
 import com.zy.core.model.protocol.*;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.*;
+import com.zy.system.entity.Config;
 import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -38,18 +49,10 @@
 @Service("mainService")
 public class MainServiceImpl {
 
-    @Value("${wms.url}")
-    private String wmsUrl;
     @Autowired
     private SlaveProperties slaveProperties;
     @Autowired
     private WrkMastService wrkMastService;
-    @Autowired
-    private WrkMastLogMapper wrkMastLogMapper;
-    @Autowired
-    private LocMastService locMastService;
-    @Autowired
-    private BasDevpService basDevpService;
     @Autowired
     private BasShuttleErrLogService basShuttleErrLogService;
     @Autowired
@@ -63,493 +66,248 @@
     @Autowired
     private BasMapService basMapService;
     @Autowired
-    private BasLiftService basLiftService;
-    @Autowired
     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;
+    @Autowired
+    private BasShuttleChargeService basShuttleChargeService;
+    @Autowired
+    private TransportLiftInServiceImpl transportLiftInService;
+    @Autowired
+    private TransportLiftOutServiceImpl transportLiftOutService;
+    @Autowired
+    private ShuttleMoveServiceImpl shuttleMoveService;
+    @Autowired
+    private NoLiftInServiceImpl noLiftInService;
+    @Autowired
+    private NoLiftOutServiceImpl noLiftOutService;
 
 
-//    /**
-//     * 缁勬墭
-//     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
-//     */
-//    public void generateStoreWrkFile() {
-//        try {
-//            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-//            for (DevpSlave devp : slaveProperties.getDevp()) {
-//                // 閬嶅巻鍏ュ簱鍙�
-//                for (DevpSlave.Sta inSta : devp.getInSta()) {
-//                    // 鑾峰彇鍏ュ簱绔欎俊鎭�
-//                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-//                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
-//                    if (staProtocol == null) {
-//                        continue;
-//                    } else {
-//                        staProtocol = staProtocol.clone();
-//                    }
-//                    Short workNo = staProtocol.getWorkNo();
-//                    // 灏哄妫�娴嬪紓甯�
-//                    boolean back = false;
-//                    String errMsg = "寮傚父锛�";
-//                    if (staProtocol.isFrontErr()) {
-//                        errMsg = errMsg + "鍓嶈秴闄愶紱";
-//                        back = true;
-//                    }
-//                    if (staProtocol.isBackErr()) {
-//                        errMsg = errMsg + "鍚庤秴闄�";
-//                        back = true;
-//                    }
-//                    if (staProtocol.isHighErr()) {
-//                        errMsg = errMsg + "楂樿秴闄�";
-//                        back = true;
-//                    }
-//                    if (staProtocol.isLeftErr()) {
-//                        errMsg = errMsg + "宸﹁秴闄�";
-//                        back = true;
-//                    }
-//                    if (staProtocol.isRightErr()) {
-//                        errMsg = errMsg + "鍙宠秴闄�";
-//                        back = true;
-//                    }
-//                    if (staProtocol.isWeightErr()) {
-//                        errMsg = errMsg + "瓒呴噸";
-//                        back = true;
-//                    }
-//                    if (staProtocol.isBarcodeErr()) {
-//                        errMsg = errMsg + "鎵爜澶辫触";
-//                        back = true;
-//                    }
-//                    // 閫�鍥�
-//                    if (back) {
-//                        // led 寮傚父鏄剧ず
-//                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-//                        if (ledThread != null) {
-//                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
-//                        }
-//                        continue;
-//                    }
-//
-//                    // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-//                    if (staProtocol.isAutoing() && staProtocol.isLoading()
-//                            && staProtocol.isInEnable()
-//                            && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
-//                    ) {
-//
-//                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-//                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
-//                        if (barcodeThread == null) {
-//                            continue;
-//                        }
-//                        String barcode = barcodeThread.getBarcode();
-//                        if (!Cools.isEmpty(barcode)) {
-////                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-//                            if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) {
-////                            staProtocol.setWorkNo((short) 32002);
-////                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
-////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-////                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//
-//                                // led 寮傚父鏄剧ず
-//                                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-//                                if (ledThread != null) {
-//                                    String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-//                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-//                                }
-//                                continue;
-//                            }
-//                        } else {
-////                        staProtocol.setWorkNo((short) 32002);
-////                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
-////                        devpThread.setPakMk(staProtocol.getSiteId(), false);
-////                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//
-////                        // led 寮傚父鏄剧ず
-////                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-////                        if (ledThread != null) {
-////                            String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-////                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-////                        }
-//                            continue;
-//                        }
-//
-//                        // 杩囨护鐩樼偣/鎷f枡/骞舵澘浠诲姟
-//                        WrkMast wrkMast1 = wrkMastMapper.selectPickStepByBarcode(barcode);
-//                        if (null != wrkMast1) {
-//                            continue;
-//                        }
-//
-//                        // 鍒ゆ柇閲嶅宸ヤ綔妗�
-//                        WrkMast wrkMast2 = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
-//                        if (wrkMast2 != null) {
-//                            News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast2.getWrkNo());
-//                            continue;
-//                        }
-//
-//                        try {
-//                            LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-//                            SearchLocParam param = new SearchLocParam();
-//                            param.setBarcode(barcode);
-//                            param.setIoType(1);
-//                            param.setSourceStaNo(inSta.getStaNo());
-//                            param.setLocType1(locTypeDto.getLocType1());
-//                            String response = new HttpHandler.Builder()
-//                                    .setUri(wmsUrl)
-//                                    .setPath("/rpc/pakin/loc/v2")
-//                                    .setJson(JSON.toJSONString(param))
-//                                    .build()
-//                                    .doPost();
-//                            JSONObject jsonObject = JSON.parseObject(response);
-//                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-//                            Integer code = jsonObject.getInteger("code");
-//                            if (code.equals(200)) {
-//                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-//                                // plc 澶勭悊
-//                                barcodeThread.setBarcode("");
-////                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-////                            staProtocol.setStaNo(dto.getStaNo().shortValue());
-////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-////
-////                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-////                            if (!result) {
-////                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-////                            }
-//
-//                                // 鍒ゆ柇閲嶅宸ヤ綔妗�
-//                                WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
-//                                if (wrkMast == null) {
-//                                    continue;
-//                                }
-//
-//                                // 鏇存柊宸ヤ綔涓绘。
-//                                wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
-//                                wrkMast.setModiTime(new Date());
-//                                if (wrkMastMapper.updateById(wrkMast) == 0) {
-//                                    News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
-//                                }
-//
-//                            } else if (code == 500) {
-//                                if (ledThread != null) {
-//                                    String errorMsg = jsonObject.getString("msg");
-//                                    if (!Cools.isEmpty(errorMsg)) {
-//                                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-//                                        ledThread.setLedMk(false);
-//                                    }
-//                                }
-//                                News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
-//                            } else if (code == 700) {
-////                            staProtocol.setWorkNo((short) 32002);
-////                            staProtocol.setRollback102(1);//102绔欏洖閫�淇″彿
-////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-////                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(5, staProtocol));
-//
-//                                // led 寮傚父鏄剧ず
-//                                if (ledThread != null) {
-//                                    String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒";
-//                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-//                                    ledThread.setLedMk(false);
-//                                }
-//                            }
-//                        } catch (Exception e) {
-//                            e.printStackTrace();
-//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-//                        }
-//                    }
-//                }
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
+    private boolean isInEnable(DevpThread devpThread, Integer staNo) {
+        if (staNo == null) {
+            return false;
+        }
+        // 鑾峰彇鍏ュ簱绔欎俊鎭�
+        switch (staNo) {
+            case 1011:
+            case 1012:
+                devpThread.getStation().get(1012).isInEnable();
+                break;
+            case 1021:
+            case 1022:
+            case 1023:
+                devpThread.getStation().get(1022).isInEnable();
+                break;
+            case 1031:
+            case 1032:
+                devpThread.getStation().get(1032).isInEnable();
+                break;
+            case 1025:
+            case 1026:
+                devpThread.getStation().get(1025).isInEnable();
+                break;
+            case 1013:
+            case 1014:
+            case 1015:
+                devpThread.getStation().get(1014).isInEnable();
+                break;
+        }
+        return false;
+    }
 
-//    /**
-//     * 鎷f枡銆佸苟鏉垮啀鍏ュ簱
-//     */
-//    @Transactional
-//    public synchronized void stnToCrnStnPick(){
-//        try {
-//            for (DevpSlave devp : slaveProperties.getDevp()) {
-//                // 閬嶅巻鎷f枡鍏ュ簱鍙�
-//                for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
-//                    // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
-//                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-//                    StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
-//                    if (staProtocol == null) {
-//                        continue;
-//                    } else {
-//                        staProtocol = staProtocol.clone();
-//                    }
-//                    if (staProtocol.isAutoing()
-//                            && staProtocol.isLoading()
-//                            && staProtocol.isInEnable()
-////                        && (staProtocol.getWorkNo() > 0)
-//                            && staProtocol.isPakMk()) {
-//
-//                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-//                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
-//                        if (barcodeThread == null) {
-//                            continue;
-//                        }
-//                        String barcode = barcodeThread.getBarcode();
-//                        if (Cools.isEmpty(barcode)) {
-//                            continue;
-//                        }
-//                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
-//                            continue;
-//                        }
-//
-//                        WrkMast wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode);
-//                        if (wrkMast == null) {//鎵句笉鍒板伐浣滄。
-//                            continue;
-//                        }
-//
-//                        if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104)
-//                                || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
-//                            continue;
-//                        }
-//
-////                        //*********************鍚屽簱浣嶇粍鏍¢獙*********************
-////                        boolean flag = false;
-////                        String th = "";
-////                        List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo());
-////                        for (String loc : innerLoc) {
-////                            LocMast locMast = locMastService.selectById(loc);
-////                            if (locMast == null) {
-////                                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();
-//        }
-//    }
-
-//    /**
-//     * 鐩樼偣鍐嶅叆搴�
-//     */
-//    @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();
-//        }
-//    }
+    private boolean isOutEnable(DevpThread devpThread, Integer staNo) {
+        if (staNo == null) {
+            return false;
+        }
+        // 鑾峰彇鍏ュ簱绔欎俊鎭�
+        switch (staNo) {
+            case 1011:
+            case 1012:
+                devpThread.getStation().get(1012).isOutEnable();
+                break;
+            case 1021:
+            case 1022:
+            case 1023:
+                devpThread.getStation().get(1022).isOutEnable();
+                break;
+            case 1031:
+            case 1032:
+                devpThread.getStation().get(1032).isOutEnable();
+                break;
+            case 1025:
+            case 1026:
+                devpThread.getStation().get(1025).isOutEnable();
+                break;
+            case 1013:
+            case 1014:
+            case 1015:
+                devpThread.getStation().get(1014).isOutEnable();
+                break;
+        }
+        return false;
+    }
 
     /**
-     * 鍒濆鍖栧疄鏃跺湴鍥�
+     * 缁勬墭
+     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
      */
-    public synchronized void initRealtimeBasMap() {
+    public synchronized void generateInboundWrk() {
         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);
-
-                        if (!basMapService.insert(basMap)) {
-                            log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
+            DevpSlave devpSlave = slaveProperties.getDevp().get(0);
+            // 閬嶅巻鍏ュ簱鍙�
+            for (DevpSlave.Sta inSta : devpSlave.getInSta()) {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.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) {
+                        ledThread.error(errMsg);
+                    }
+                    continue;
+                }
+                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                if (staProtocol.isAutoing() && staProtocol.isLoading()
+                        && isInEnable(devpThread, inSta.getStaNo())
+                        && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
+                        && staProtocol.isPakMk()
+                ) {
+                    String barcode = staProtocol.getBarcode();
+                    if (!Cools.isEmpty(barcode)) {
+                        News.info("鏉$爜鎵弿鍣ㄦ娴嬫潯鐮佷俊鎭細{}", barcode);
+                    }
+                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                            .eq("source_sta_no", inSta.getStaNo())
+                            .eq("wrk_sts", WrkStsType.NEW_INBOUND)
+                            .eq("barcode", barcode));
+                    if (wrkMast != null) {
+                        News.error("宸ヤ綔妗e凡瀛樺湪,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
+                        if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) {
+                            MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol));
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast));
                         }
+                        continue;
                     }
 
-                    //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
-                    redisUtil.set(RedisKeyType.MAP.key + i, JSON.toJSONString(basMap));
+                    try {
+                        String wmsUrl = "127.0.0.1:8080/fyxcwms";
+                        SearchLocParam param = new SearchLocParam();
+                        param.setBarcode(barcode);
+                        param.setIoType(1);
+                        param.setSourceStaNo(inSta.getStaNo());
+                        param.setLocType1(staProtocol.getLocType1().shortValue());
+                        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)) {
+                            MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol));
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast));
+
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+
+//                                String wmsLocNo = dto.getLocNo();
+//                                int row = Integer.parseInt(wmsLocNo.substring(0, 2));
+//                                int bay = Integer.parseInt(wmsLocNo.substring(2, 5));
+//                                int lev = Integer.parseInt(wmsLocNo.substring(5, 7));
+//                                String wcsLocNo = Utils.getLocNo(row, bay, lev);
+//
+//                                CreateInTaskParam createInTaskParam = new CreateInTaskParam();
+//                                createInTaskParam.setTaskNo(String.valueOf(dto.getWorkNo()));
+//                                createInTaskParam.setDestLoc(wcsLocNo);
+//                                createInTaskParam.setOriginSite(dto.getSourceStaNo().toString());
+//                                createInTaskParam.setDestSite(dto.getStaNo().toString());
+//                                createInTaskParam.setPriority(11);
+//                                createInTaskParam.setBarcode(barcode);
+//
+//                                R result = openUtils.createInTask(createInTaskParam);
+//                                News.info("鍒涘缓鍏ュ簱浠诲姟锛屼换鍔℃暟鎹�={}锛學MS鍝嶅簲={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject), JSON.toJSON(result));
+//                                try{
+//                                    String msg = "";
+//                                    HashMap<String, String> hashMap = new HashMap<>();
+//                                    hashMap.put("msg", msg);
+//                                    hashMap.put("sta", inSta.getStaNo().toString());
+//                                    new HttpHandler.Builder()
+//                                            .setUri(wmsUrl)
+//                                            .setPath("/rpc/led/getError")
+//                                            .setJson(JSON.toJSONString(hashMap))
+//                                            .build()
+//                                            .doPost();
+//                                }catch (Exception e){
+//
+//                                }
+                        } else {
+                            String msg = jsonObject.getString("msg");
+                            HashMap<String, String> hashMap = new HashMap<>();
+                            hashMap.put("msg", msg);
+                            hashMap.put("sta", inSta.getStaNo().toString());
+                            new HttpHandler.Builder()
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/led/getError")
+                                    .setJson(JSON.toJSONString(hashMap))
+                                    .build()
+                                    .doPost();
+                            News.error("鍏ュ簱鐢宠澶辫触锛屼换鍔℃暟鎹�={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject));
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
                 }
             }
         } catch (Exception e) {
@@ -557,271 +315,395 @@
         }
     }
 
-//    /**
-//     * 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
-//     */
-//    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();
-//        }
-//    }
 
-//    /**
-//     * 鍏ュ簱-灏忚溅鎼叆搴撲腑
-//     * 濡傞渶涓绘柟娉曟墽琛宑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;
-//    }
-
-//    /**
-//     * 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
-//     */
-//    public synchronized void shuttleOutExecute() {
-//        try {
-//            for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) {
-//                boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
-//                if (!step1) {
+    /**
+     * 鍑哄簱鍒板嚭搴撳彛
+     */
+    public synchronized void stnToOutStn() {
+        DevpSlave devpSlave = slaveProperties.getDevp().get(0);
+        // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
+        for (DevpSlave.Sta outSta : devpSlave.getOutSta()) {
+            // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId());
+            StaProtocol staProtocol = devpThread.getStation().get(outSta.getStaNo());
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
+                // 鏌ヨ宸ヤ綔妗�
+//                WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
+//                if (wrkMast == null) {
 //                    continue;
 //                }
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
+//                // 鍒ゆ柇宸ヤ綔妗f潯浠�
+//                if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
 //
-//    /**
-//     * 鍑哄簱-灏忚溅鎼嚭搴撲腑
-//     * 濡傞渶涓绘柟娉曟墽琛宑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;
-//            }
+
+                //  鍒ゆ柇杈撻�佺嚎鍜屽皬杞︾姸鎬佺姸鎬佺瓑寰呯‘璁�
+//                if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
+//                        && crnProtocol.statusType == CrnStatusType.WAITING
+//                        && crnProtocol.forkPosType == CrnForkPosType.HOME) {
+//                    log.info("鍫嗗灈鏈哄嚭搴撳畬鎴� - 寮�濮嬫墽琛�");
 //
-//            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-//            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;
-//            }
+//                    // 涓嬪彂绔欑偣淇℃伅
+//                    staProtocol.setWorkNo(wrkMast.getWrkNo());
+//                    staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(), wrkMast.getSourceStaNo()));
+//                    if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+//                        log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂澶辫触");
+//                        continue;
+//                    } else {
+//                        log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂鎴愬姛");
+//                    }
 //
-//            //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿
-//            ShuttleOperaResult result = ShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), liftStaProtocol.getLocNo());//灏嗚揣鐗╂惉杩愯嚦鎻愬崌鏈鸿緭閫佺珯鐐�
-//            if (result == null) {//鍑哄簱璺緞璁$畻澶辫触
-//                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-//                return false;
-//            }
+//                    // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
+//                    wrkMast.setWrkSts(14L);
+//                    wrkMast.setCrnEndTime(new Date());
+//                    if (wrkMastMapper.updateById(wrkMast) != 0) {
+//                        // 澶嶄綅鍫嗗灈鏈�
+//                        log.error("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,{}", wrkMast.getWrkNo());
+//                        crnThread.setResetFlag(true);
+//                    } else {
+//                        News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+//                    }
 //
-//            //鍒涘缓鍒嗛厤鍛戒护
-//            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;
-//    }
+//                } else {
+//                    News.errorNoLog("" + mark + " - 6" + " - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
+//                            + " 鍫嗗灈鏈虹姸鎬侊細" + crnProtocol.modeType + "==鑷姩AUTO锛�" + CrnModeType.AUTO
+//                            + "銆佸爢鍨涙満浠诲姟鍙凤細" + crnProtocol.getTaskNo() + "==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue()
+//                            + "銆佺姸鎬佹灇涓撅細" + crnProtocol.statusType + "==WAITING锛�90 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
+//                            + "銆佽揣鍙変綅缃細" + crnProtocol.forkPosType + "==HOME锛�0  // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME);
+//                }
+
+            }
+        }
+    }
+
+
+    /**
+     * 鍒濆鍖栧疄鏃跺湴鍥�
+     */
+    public synchronized void initRealtimeBasMap() {
+        try {
+
+            List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true));
+            for (BasMap basMap : basMaps) {
+                Integer lev = basMap.getLev();
+                Object data = redisUtil.get(RedisKeyType.MAP.key + lev);
+                if (data == null) {//redis鍦板浘鏁版嵁涓虹┖
+                    //杞藉叆鍦板浘
+                    List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
+
+                    //瀛樺叆鏁版嵁搴�
+                    basMap.setData(JSON.toJSONString(lists));
+                    basMap.setCreateTime(new Date());
+                    basMap.setUpdateTime(new Date());
+                    if (!basMapService.updateById(basMap)) {
+                        log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
+                    }
+
+                    //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
+                    redisUtil.set(RedisKeyType.MAP.key + lev, JSON.toJSONString(basMap));
+                }
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
+     */
+    public synchronized void shuttleInExecute() {
+        try {
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                    .in("wrk_sts"
+                            , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
+                    ));
+            for (WrkMast wrkMast : wrkMasts) {
+                boolean step1 = this.shuttleInExecuteStep1(wrkMast);//灏忚溅鎼叆搴撲腑
+                if (!step1) {
+                    continue;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鍏ュ簱-灏忚溅鎼叆搴撲腑
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    public boolean shuttleInExecuteStep1(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) {
+            //鑾峰彇鐩爣绔�
+            ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+            if (liftSta == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
+                return false;
+            }
+
+            if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", 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.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟
+            WrkMast hasMoveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+            if (hasMoveWorking != null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}鍙峰皬杞︼紝瀛樺湪绉诲姩浠诲姟锛岀姝㈡淳鍙戜换鍔�", wrkMast.getShuttleNo());
+                return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔�
+            }
+
+            //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣�
+            if (!shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) {
+                //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
+                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+                News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                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(liftSta.getLocNo(), 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.INBOUND_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓�  4.鎻愬崌鏈烘惉杩愬畬鎴� ==> 5.灏忚溅鎼繍涓�
+            wrkMast.setModiTime(new Date());
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+                //瑙﹀彂閫氱煡
+                notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_TRANSPORT);
+                return false;
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
+     */
+    public synchronized void shuttleOutExecute() {
+        try {
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                    .in("wrk_sts"
+                            , WrkStsType.NEW_OUTBOUND.sts
+                    ));
+            for (WrkMast wrkMast : wrkMasts) {
+                boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
+                if (!step1) {
+                    continue;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鍑哄簱-灏忚溅鎼嚭搴撲腑
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    public boolean shuttleOutExecuteStep1(WrkMast wrkMast) {
+        //101.鐢熸垚鍑哄簱浠诲姟 => 102.灏忚溅鎼繍涓�
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) {
+            Integer liftNo = wrkMast.getLiftNo();
+            if (liftNo == null) {
+                //閫氳繃杈撻�佺嚎绔欏彿鑾峰彇鎻愬崌鏈哄彿
+                liftNo = ForkLiftUtils.getConveyorBindLiftNo(wrkMast.getStaNo());
+                if (liftNo == null) {
+                    News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
+                    return false;
+                }
+
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
+                WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftNo);
+                if (liftWrkMast != null) {
+                    if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚�
+                        News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftNo);
+                        return false;
+                    }
+                }
+
+                wrkMast.setLiftNo(liftNo);
+                wrkMast.setModiTime(new Date());
+                wrkMastService.updateById(wrkMast);
+                return false;
+            }
+
+            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
+            if (forkLiftThread == null) {
+                return false;
+            }
+            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+            if (forkLiftProtocol == null) {
+                return false;
+            }
+
+            //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡嚭搴撴ā寮�
+            if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo());
+                return false;
+            }
+
+            //鑾峰彇婧愮珯
+            ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo()));
+            if (liftSta == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
+                return false;
+            }
+
+            if (liftSta.getHasCar()) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getStaNo());
+                return false;
+            }
+
+            if (liftSta.getHasTray()) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.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.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size());
+                        return false;
+                    }
+                }
+                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", 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.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
+            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+                //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
+                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                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(), liftSta.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.OUTBOUND_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓�  101.鐢熸垚鍑哄簱浠诲姟 ==> 102.灏忚溅鎼繍涓�
+            wrkMast.setSourceStaNo(liftSta.getStaNo());
+            wrkMast.setModiTime(new Date());
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+                //瑙﹀彂閫氱煡
+                notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_TRANSPORT);
+                return false;
+            }
+            return false;
+        }
+        return true;
+    }
 
     /**
      * 鍥涘悜绌挎杞︿换鍔″畬鎴�
@@ -843,53 +725,120 @@
                     //灏嗕换鍔℃。鏍囪涓哄畬鎴�
                     WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
                     if (wrkMast != null) {
-                        if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) {
+                        if (wrkMast.getWrkSts() == WrkStsType.INBOUND_SHUTTLE_RUN.sts) {
+                            //5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN.sts) {
+                            //102.灏忚溅鎼繍涓� ==> 103.灏忚溅鎼繍瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else 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_IN_LIFT.sts) {
+                            //304.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE.sts);
+                            shuttleThread.setSyncTaskNo(0);
                         } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) {
                             //308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
+                            if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+                                continue;//灏忚溅鏈埌杈剧洰鏍囧眰
+                            }
                             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);//瑙﹀彂閫氱煡
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//瑙﹀彂閫氱煡
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_TRANSPORT_LIFT.sts) {
+                            //灏忚溅绉诲姩鑷崇珯鐐� ==> 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE_TRANSPORT_LIFT.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_TRANSPORT_LIFT.sts) {
+                            //灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 灏忚溅杩佸叆鎻愬崌鏈哄畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE_TRANSPORT_LIFT.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_TRANSPORT_LIFT.sts) {
+                            //灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE_TRANSPORT_LIFT.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE_TRANSPORT_LIFT.sts) {
+                            //灏忚溅鏀捐揣涓� ==> 灏忚溅鏀捐揣瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE_TRANSPORT_LIFT.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_TRANSPORT_LIFT_OUT.sts) {
+                            //灏忚溅绉诲姩鑷崇珯鐐� ==> 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE_TRANSPORT_LIFT_OUT.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_TRANSPORT_LIFT_OUT.sts) {
+                            //灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 灏忚溅杩佸叆鎻愬崌鏈哄畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE_TRANSPORT_LIFT_OUT.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_TRANSPORT_LIFT_OUT.sts) {
+                            //灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 灏忚溅鏀捐揣瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE_TRANSPORT_LIFT_OUT.sts);
+                            shuttleThread.setSyncTaskNo(0);
                         } 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 {
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        }
+//                        else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_1.sts) {
+//                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_2.sts);
+//                            shuttleThread.setSyncTaskNo(0);
+//                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+//                        }
+                        else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_3.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_4.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_7.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_8.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_11.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_12.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_13.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_14.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        }  else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_12.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_13.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_10.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_11.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_8.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_9.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_6.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_7.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_4.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_5.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_2.sts) {
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_3.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        }
+
+
+
+                        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:
-//                        }
 
                         if (wrkMastService.updateById(wrkMast)) {
                             //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
@@ -900,7 +849,7 @@
                         }
                     } else {
                         Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo());
-                        if(object != null){
+                        if (object != null) {
                             ShuttleAssignCommand assignCommand = JSON.parseObject(object.toString(), ShuttleAssignCommand.class);
                             if (!assignCommand.getAuto()) {
                                 //鎵嬪姩妯″紡
@@ -920,385 +869,213 @@
         }
     }
 
-//    /**
-//     * 鎻愬崌鏈轰换鍔�
-//     */
-//    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() {
+    public synchronized void shuttleLocMoveExecute() {
         try {
-            for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+            //鏌ヨ绉诲簱浠诲姟
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts, WrkStsType.LOC_MOVE_SHUTTLE_TAKE.sts, WrkStsType.LOC_MOVE_SHUTTLE_PUT.sts));
+            for (WrkMast wrkMast : wrkMasts) {
+                boolean stepTake = this.shuttleLocMoveExecuteTake(wrkMast);//绉诲簱浠诲姟-灏忚溅鍙栬揣涓�
+                if (!stepTake) {
+                    continue;
+                }
+
+                boolean stepPut = this.shuttleLocMoveExecutePut(wrkMast);//绉诲簱浠诲姟-灏忚溅鍙栬揣涓�
+                if (!stepPut) {
+                    continue;
+                }
+
+                boolean stepComplete = this.shuttleLocMoveComplete(wrkMast);//绉诲簱浠诲姟-浠诲姟瀹屾垚
+                if (!stepComplete) {
+                    continue;
+                }
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 绉诲簱浠诲姟-灏忚溅鍙栬揣涓�
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleLocMoveExecuteTake(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
+        Date now = new Date();
+
+        //灏忚溅绉诲姩鑷崇珯鐐�  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 ? "鎴愬姛" : "澶辫触");
+
+                if (result) {
+                    wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_TAKE.sts);//灏忚溅鎼繍涓�  501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鍙栬揣涓�
+                    wrkMast.setModiTime(now);
+                    wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+                    if (wrkMastService.updateById(wrkMast)) {
+                        return false;
+                    }
+                }
+
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 绉诲簱浠诲姟-灏忚溅鏀捐揣涓�
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleLocMoveExecutePut(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
+        Date now = new Date();
+
+        //灏忚溅绉诲姩鑷崇珯鐐�  502.灏忚溅鍙栬揣涓� ==> 503.灏忚溅鏀捐揣涓�
+        if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_TAKE.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 (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鍙栬揣浣嶇疆", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                return false;
+            }
+
+            boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getLocNo(), wrkMast.getShuttleNo(), "TRANSPORT");//璋冨害灏忚溅鏀捐揣
+            News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
+
+            if (result) {
+                wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_PUT.sts);//灏忚溅鎼繍涓�  502.灏忚溅鍙栬揣涓� ==> 503.灏忚溅鏀捐揣涓�
+                wrkMast.setModiTime(now);
+                wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+                if (wrkMastService.updateById(wrkMast)) {
+                    return false;
+                }
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 绉诲簱浠诲姟-浠诲姟瀹屾垚
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleLocMoveComplete(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
+        Date now = new Date();
+
+        //灏忚溅绉诲姩鑷崇珯鐐�  503.灏忚溅鏀捐揣涓� ==> 509.绉诲簱瀹屾垚
+        if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_PUT.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 (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鏀捐揣浣嶇疆", wrkMast.getWrkNo());
+                return false;
+            }
+
+            if (shuttleProtocol.getHasLift()) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀浜庨《鍗囩姸鎬�", wrkMast.getWrkNo());
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);//灏忚溅鎼繍涓�  503.灏忚溅鏀捐揣涓� ==> 509.绉诲簱瀹屾垚
+            wrkMast.setModiTime(now);
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            if (wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 鎻愬崌鏈轰换鍔″畬鎴�
+     */
+    public synchronized void liftFinished() {
+        try {
+            for (LiftSlave slave : slaveProperties.getLift()) {
                 //鑾峰彇鎻愬崌鏈轰俊鎭�
-                ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
-                ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
-                if (forkLiftProtocol == null) {
+                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId());
+                if (liftThread == null) {
+                    continue;
+                }
+                LiftProtocol liftProtocol = liftThread.getStatus();
+                if (liftProtocol == null) {
                     continue;
                 }
 
                 //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
-                if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id
-                        && forkLiftProtocol.getWrkNo() != 0
+                if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id
+                        && liftProtocol.getTaskNo() != 0
                 ) {
                     //灏嗕换鍔℃。鏍囪涓哄畬鎴�
-                    WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+                    WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo());
                     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:
+                        if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN.sts) {
+                            //3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts);
+                            wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+                        } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_LIFT_RUN.sts) {
+                            //104.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
+                            wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN.sts) {
+                            //306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_SHUTTLE_TRANSPORT_LIFT.sts) {
+                            //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT.sts);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_TARGET_TRANSPORT_LIFT.sts) {
+                            //鎻愬崌鏈鸿嚦鏀捐揣灞� ==> 鎻愬崌鏈鸿嚦鏀捐揣灞傚畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_TARGET_COMPLETE_TRANSPORT_LIFT.sts);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_SHUTTLE_TRANSPORT_LIFT_OUT.sts) {
+                            //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT_OUT.sts);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_5.sts) {
+                            //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_6.sts);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_9.sts) {
+                            //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_10.sts);
+                        }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_8.sts) {
+                            //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_9.sts);
+                        }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_4.sts) {
+                            //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_5.sts);
                         }
 
                         wrkMast.setModiTime(new Date());
                         if (wrkMastService.updateById(wrkMast)) {
-                            forkLiftThread.reset();
-                            News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
+                            liftThread.setSyncTaskNo(0);
+                            liftThread.setProtocolStatus(LiftProtocolStatusType.IDLE);
+                            News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
                         } else {
-                            News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo());
+                            News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
                         }
                     }
                 }
@@ -1348,7 +1125,7 @@
                         }
                         int errorCode = Integer.parseInt(shuttleProtocol.getErrorCode());
                         BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(errorCode);
-                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
+                        String errName = basShuttleErr == null ? "鏈煡寮傚父" : basShuttleErr.getErrName();
                         BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
                                 null,    // 缂栧彿
                                 wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
@@ -1397,30 +1174,30 @@
      */
     private void recLiftErr() {
         Date now = new Date();
-        for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+        for (LiftSlave slave : slaveProperties.getLift()) {
             // 鑾峰彇鎻愬崌鏈轰俊鎭�
-            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
-            if (forkLiftThread == null) {
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId());
+            if (liftThread == null) {
                 continue;
             }
-            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
-            if (forkLiftProtocol == null) {
+            LiftProtocol liftProtocol = liftThread.getStatus();
+            if (liftProtocol == null) {
                 continue;
             }
 
-            if (forkLiftProtocol.getTaskNo() != 0) {
+            if (liftProtocol.getTaskNo() != 0) {
                 //鏈変换鍔�
-                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(forkLiftSlave.getId(), forkLiftProtocol.getTaskNo());
+                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(slave.getId(), liftProtocol.getTaskNo());
                 // 鏈夊紓甯�
                 if (latest == null) {
-                    if (forkLiftProtocol.getErrorCode() != null && forkLiftProtocol.getErrorCode() != 0) {
-                        WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+                    if (liftProtocol.getErrorCode() != null && !liftProtocol.getErrorCode().equals("0")) {
+                        WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo());
                         if (wrkMast == null) {
                             continue;
                         }
 
-                        BasLiftErr basLiftErr = basLiftErrService.queryByCode(forkLiftProtocol.getErrorCode());
-                        String errName = basLiftErr==null? "鏈煡寮傚父":basLiftErr.getErrName();
+                        BasLiftErr basLiftErr = basLiftErrService.queryByCode(Integer.parseInt(liftProtocol.getErrorCode()));
+                        String errName = basLiftErr == null ? "鏈煡寮傚父" : basLiftErr.getErrName();
 
                         BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
                                 null,    // 缂栧彿
@@ -1429,7 +1206,7 @@
                                 null,    // 缁撴潫鏃堕棿
                                 wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
                                 wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-                                forkLiftSlave.getId(),    // 鎻愬崌鏈�
+                                slave.getId(),    // 鎻愬崌鏈�
                                 null,    // plc
                                 wrkMast.getLocNo(),    // 鐩爣搴撲綅
                                 wrkMast.getStaNo(),    // 鐩爣绔�
@@ -1444,20 +1221,20 @@
                                 now,    // 淇敼鏃堕棿
                                 null,    // 淇敼浜哄憳
                                 "浠诲姟涓紓甯�",    // 澶囨敞
-                                JSON.toJSONString(forkLiftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
+                                JSON.toJSONString(liftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
                         );
                         if (!basLiftErrLogService.insert(basLiftErrLog)) {
-                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", forkLiftSlave.getId(), errName);
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", slave.getId(), errName);
                         }
                     }
                 } else {
                     // 寮傚父淇
-                    if (forkLiftProtocol.getErrorCode() == null || forkLiftProtocol.getErrorCode() == 0) {
+                    if (liftProtocol.getErrorCode() == null || liftProtocol.getErrorCode().equals("0")) {
                         latest.setEndTime(now);
                         latest.setUpdateTime(now);
                         latest.setStatus(2);
                         if (!basLiftErrLogService.updateById(latest)) {
-                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", forkLiftSlave.getId(), latest.getId());
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", slave.getId(), latest.getId());
                         }
                     }
                 }
@@ -1465,112 +1242,17 @@
         }
     }
 
-    // -------------------------------------------------------------------------------
-
-//    /**
-//     * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
-//     */
-//    public void storeEmptyPlt(){
-//        try {
-//            for (DevpSlave devp : slaveProperties.getDevp()) {
-//                // 閬嶅巻绌烘澘鍏ュ簱鍙�
-//                for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
-//                    // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
-//                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-//                    StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
-//                    if (staProtocol == null) {
-//                        continue;
-//                    } else {
-//                        staProtocol = staProtocol.clone();
-//                    }
-//                    // 绔欑偣鏉′欢鍒ゆ柇
-//                    if (staProtocol.isAutoing()
-//                            && staProtocol.isLoading()
-//                            && staProtocol.isInEnable()
-//                            && staProtocol.isEmptyMk()
-//                            && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo() >= 9990 || staProtocol.getWorkNo() <= 9999))
-//                            && staProtocol.isPakMk()) {
-//
-//                        // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-//                        String barcode = null;
-//                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode());
-//                        if (barcodeThread != null) {
-//                            String barcode0 = barcodeThread.getBarcode();
-//                            if (!Cools.isEmpty(barcode0)) {
-////                            News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", emptyInSta.getBarcode(), barcode0);
-//                                if (!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) {
-//                                    barcode = barcode0;
-//                                }
-//                            }
-//                        }
-//
-//                        if (!Cools.isEmpty(barcode)) {
-//                            WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode);//鏉$爜瀛樺湪宸ヤ綔妗�
-//                            if (wrkMast != null) {
-//                                continue;
-//                            }
-//                        }
-//
-//                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, emptyInSta.getLed());
-//
-//                        try {
-//                            LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-//
-//                            SearchLocParam param = new SearchLocParam();
-//                            param.setIoType(10);
-//                            if (!Cools.isEmpty(barcode)) {
-//                                param.setBarcode(barcode);
-//                            }
-//                            param.setSourceStaNo(emptyInSta.getStaNo());
-////                        param.setLocType1(locTypeDto.getLocType1());
-//                            String response = new HttpHandler.Builder()
-//                                    .setUri(wmsUrl)
-//                                    .setPath("/rpc/pakin/loc/v2")
-//                                    .setJson(JSON.toJSONString(param))
-//                                    .build()
-//                                    .doPost();
-//                            JSONObject jsonObject = JSON.parseObject(response);
-//                            Integer code = jsonObject.getInteger("code");
-//                            if (code.equals(200)) {
-//                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-//                                barcodeThread.setBarcode("");
-////                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-////                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-////                            staProtocol.setStaNo(dto.getStaNo().shortValue());
-////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-////                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-////                            if (!result) {
-////                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-////                            }
-//                            } 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 loopShuttleCharge() {
         try {
+
+            List<BasShuttleCharge> charges = basShuttleChargeService.selectList(new EntityWrapper<BasShuttleCharge>().orderBy("charge_id", true));
+            if (charges.isEmpty()) {
+                return;//鏃犲厖鐢垫々
+            }
+
             for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
                 //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
                 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
@@ -1591,17 +1273,21 @@
 
                 //灏忚溅鎵�鍦ㄦゼ灞�
                 int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
-                ShuttleChargeType shuttleCharge = null;
+                BasShuttleCharge shuttleCharge = null;
 
                 //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
-                for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
-                    if (lev != Utils.getLev(chargeType.locNo)) {
+                for (BasShuttleCharge charge : charges) {
+                    if (lev != Utils.getLev(charge.getLocNo())) {
                         continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
                     }
 
+                    if (charge.getStatus() == 0) {
+                        continue;//鍏呯數妗╄绂佺敤
+                    }
+
                     //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
-                    if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
-                        shuttleCharge = chargeType;
+                    if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) {
+                        shuttleCharge = charge;
                         break;
                     }
                 }
@@ -1609,17 +1295,22 @@
                 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) {
-                                //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                    for (BasShuttleCharge charge : charges) {
+                        if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) {
+                            //鍒ゆ柇褰撳墠鍏呯數妗╂槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                            ArrayList<String> locs = new ArrayList<>();
+                            locs.add(charge.getLocNo());
+                            Integer checkHasShuttle = Utils.checkGroupLocHasShuttle(locs);
+                            if (checkHasShuttle != null) {
+                                //褰撳墠鍏呯數妗╂湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
                                 continue;
                             }
 
-                            shuttleCharge = chargeType;
+                            if (charge.getStatus() == 0) {
+                                continue;//鍏呯數妗╄绂佺敤
+                            }
+
+                            shuttleCharge = charge;
                             break;
                         }
                     }
@@ -1629,9 +1320,9 @@
                     continue;
                 }
 
-                String chargeLocNo = shuttleCharge.locNo;
+                String chargeLocNo = shuttleCharge.getLocNo();
                 wrkMast = new WrkMast();
-                wrkMast.setMk(String.valueOf(shuttleCharge.id));
+                wrkMast.setMk(String.valueOf(shuttleCharge.getChargeId()));
                 wrkMast.setWrkNo(commonService.getWorkNo(WrkIoType.SHUTTLE_CHARGE.id));
                 wrkMast.setWrkSts(WrkStsType.NEW_CHARGE.sts);
                 wrkMast.setIoType(WrkIoType.SHUTTLE_CHARGE.id);//300.鍏呯數
@@ -1660,7 +1351,7 @@
             //鏌ヨ灏忚溅鍏呯數浠诲姟
             for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
                 WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId());
-                if(wrkMast == null) {
+                if (wrkMast == null) {
                     continue;
                 }
 
@@ -1746,7 +1437,7 @@
 
             //鍒ゆ柇鏄惁瀛樺湪鏈畬鎴愮殑绉诲姩浠诲姟
             WrkMast moveWrk = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
-            if(moveWrk != null) {
+            if (moveWrk != null) {
                 return false;
             }
 
@@ -1795,7 +1486,7 @@
             //涓嬪彂浠诲姟
             shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
 
-            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_POWER_START);//瑙﹀彂閫氱煡
+            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_START);//瑙﹀彂閫氱煡
             return false;
         }
         return true;
@@ -1846,13 +1537,13 @@
                 return false;
             }
 
-            ShuttleChargeType chargeType = ShuttleChargeType.get(Integer.parseInt(wrkMast.getMk()));
-            if(chargeType == null) {
+            BasShuttleCharge basShuttleCharge = basShuttleChargeService.selectOne(new EntityWrapper<BasShuttleCharge>().eq("charge_id", wrkMast.getMk()));
+            if (basShuttleCharge == null) {
                 return false;
             }
 
             //璋冨害灏忚溅鍘诲緟鏈轰綅
-            boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo());
+            boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo());
             if (!dispatched) {
                 return false;
             }
@@ -1875,342 +1566,44 @@
             //鏌ヨ灏忚溅绉诲簱浠诲姟
             List<WrkMast> wrkMasts = wrkMastService.selectShuttleMoveWrk();
             for (WrkMast wrkMast : wrkMasts) {
-                boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐�
-                if (!stepMoveSta) {
-                    continue;
+                if ("TRANSPORT_LIFT".equals(wrkMast.getMk())) {
+                    this.shuttleMoveExecuteTransportLift(wrkMast);
+                } else if ("TRANSPORT_DEVP".equals(wrkMast.getMk())) {
+                    this.shuttleMoveExecuteTransportNoLift(wrkMast);
+                } else {
+                    shuttleMoveService.shuttleMoveExecuteMove(wrkMast);
                 }
-
-                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;
+    private void shuttleMoveExecuteTransportLift(WrkMast wrkMast) {
+        LiftThread liftThread = LiftUtils.getRecentLift(wrkMast.getLocNo());
+        if (liftThread == null) {
+            return;
         }
-        return true;
+
+        String liftLocNo = liftThread.getLiftLocNo(Utils.getLev(wrkMast.getLocNo()));
+        if (Utils.getRow(liftLocNo) == Utils.getRow(wrkMast.getSourceLocNo()) && Utils.getBay(liftLocNo) == Utils.getBay(wrkMast.getSourceLocNo())) {
+            //鍙栬揣浣嶇疆鏄彁鍗囨満
+            transportLiftInService.shuttleMoveExecuteTransportLiftTake(wrkMast);
+        } else {
+            //鏀捐揣浣嶇疆鏄彁鍗囨満
+            transportLiftOutService.shuttleMoveExecuteTransportLiftPut(wrkMast);
+        }
     }
 
-    /**
-     * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愪腑
-     * 濡傞渶涓绘柟娉曟墽琛宑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);
-            }
+    private void shuttleMoveExecuteTransportNoLift(WrkMast wrkMast) {
+        if (12 == Utils.getRow(wrkMast.getSourceLocNo()) && 3 == Utils.getBay(wrkMast.getSourceLocNo())) {
+            //鍏ュ簱
+            noLiftInService.shuttleMoveExecute(wrkMast);
+        } else {
+            //鍑哄簱
+            noLiftOutService.shuttleMoveExecute(wrkMast);
         }
-        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