From 88a1fbd68cfb38c921fbf83c92d17b38a4a5975a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 02 八月 2023 09:14:00 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1121 ++++++----------------------------------------------------
 1 files changed, 123 insertions(+), 998 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 9137e22..398e5e0 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -2,10 +2,7 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
-import com.core.common.SpringUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
@@ -13,11 +10,9 @@
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.*;
 import com.zy.common.model.enums.NavigationMapType;
-import com.zy.common.model.enums.WrkChargeType;
 import com.zy.common.service.CommonService;
 import com.zy.common.service.erp.ErpService;
 import com.zy.common.utils.*;
-import com.zy.core.CrnThread;
 import com.zy.core.DevpThread;
 import com.zy.core.News;
 import com.zy.core.cache.MessageQueue;
@@ -97,6 +92,8 @@
     private OrderDetlMapper orderDetlMapper;
     @Autowired
     private BasLiftService basLiftService;
+    @Autowired
+    private ShuttleDispatchUtils shuttleDispatchUtils;
     @Autowired
     private RedisUtil redisUtil;
 
@@ -708,7 +705,7 @@
     public boolean shuttleInExecuteStep1(WrkMast wrkMast, BasDevp basDevp) {
         if (wrkMast.getWrkSts() == 4) {
             if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
-                dispatchShuttle(wrkMast.getWrkNo(), basDevp.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basDevp.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
                 return false;
             }
 
@@ -728,7 +725,7 @@
             //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣�
             if (!shuttleProtocol.getCurrentLocNo().equals(basDevp.getLocNo())) {
                 //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
-                dispatchShuttle(wrkMast.getWrkNo(), basDevp.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basDevp.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
                 return false;
             }
 
@@ -759,435 +756,81 @@
         return true;
     }
 
-    //鑾峰彇璧风偣-缁堢偣鎸囦护
-    public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String locNo, Integer mapType, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
-        //鑾峰彇灏忚溅绉诲姩閫熷害
-        BasShuttle basShuttle = basShuttleService.selectById(assignCommand.getShuttleNo());
-        Integer runSpeed = 1000;
-//        if (basShuttle != null) {
-//            Integer runSpeed1 = basShuttle.getRunSpeed();
-//            if (runSpeed1 != null) {
-//                runSpeed = runSpeed1;
-//            }
-//        }
-
-        //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护
-        List<NavigateNode> calc = NavigateUtils.calc(startLocNo, locNo, mapType, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), Utils.getLev(startLocNo)));
-        List<ShuttleCommand> commands = new ArrayList<>();
-        if (calc == null) {
-            return null;
-        }
-        if (!Utils.checkShuttlePath(calc, shuttleThread.getSlave().getId())) {//妫�娴嬬┛姊溅琛岃蛋璺緞锛屾槸鍚﹀瓨鍦ㄥ叾浠栧皬杞︼紝濡傛湁鍏朵粬灏忚溅鍒欒繘琛岃皟绂�
-            return null;
-        }
-        List<NavigateNode> allNode = new ArrayList<>();
-        allNode.addAll(calc);
-
-        //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
-        //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-        for (ArrayList<NavigateNode> nodes : data) {
-            //寮�濮嬭矾寰�
-            NavigateNode startPath = nodes.get(0);
-
-            //涓棿璺緞
-            NavigateNode middlePath = null;
-            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-            Short middleCodeNum = null;
-            Integer middleToDistDistance = null;//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-            if (nodes.size() > 10) {//涓鐮佷紶鍊掓暟绗笁涓�
-                //涓棿璺緞
-                middlePath = nodes.get(nodes.size() - 3);
-                //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-                middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-            } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓�
-                //涓棿璺緞
-                middlePath = nodes.get(nodes.size() - 2);
-                //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-                middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-            }
-
-            //鐩爣璺緞
-            NavigateNode endPath = nodes.get(nodes.size() - 1);
-            Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
-            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-            Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());
-            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-            Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());
-            //鑾峰彇绉诲姩鍛戒护
-            ShuttleCommand command = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCodeNum, middleToDistDistance, runSpeed);
-            commands.add(command);
-        }
-
-        assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
-        //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-        NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(startLocNo));
-        navigateMapData.writeNavigateNodeToRedisMap(allNode, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-
-        return commands;
-    }
-
-    //鑾峰彇璧风偣-涓偣-缁堢偣鎸囦护
-    public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String middleLocNo, String locNo, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
-        //鑾峰彇灏忚溅绉诲姩閫熷害
-        BasShuttle basShuttle = basShuttleService.selectById(assignCommand.getShuttleNo());
-        Integer runSpeed = 1000;
-//        if (basShuttle != null) {
-//            Integer runSpeed1 = basShuttle.getRunSpeed();
-//            if (runSpeed1 != null) {
-//                runSpeed = runSpeed1;
-//            }
-//        }
-
-        List<NavigateNode> allNode = new ArrayList<>();
-
-        //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护
-        List<NavigateNode> calc = NavigateUtils.calc(startLocNo, middleLocNo, NavigationMapType.NORMAL.id, null);//灏忚溅鏃犺揣锛岃蛋姝e父搴撲綅閫氶亾
-        List<ShuttleCommand> commands = new ArrayList<>();
-
-        if (calc != null) {
-            if (!Utils.checkShuttlePath(calc, shuttleThread.getSlave().getId())) {//妫�娴嬬┛姊溅琛岃蛋璺緞锛屾槸鍚﹀瓨鍦ㄥ叾浠栧皬杞︼紝濡傛湁鍏朵粬灏忚溅鍒欒繘琛岃皟绂�
-                return null;
-            }
-
-            allNode.addAll(calc);
-            //鑾峰彇鍒嗘璺緞
-            ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
-            //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-            for (ArrayList<NavigateNode> nodes : data) {
-                //寮�濮嬭矾寰�
-                NavigateNode startPath = nodes.get(0);
-
-                //涓棿璺緞
-                NavigateNode middlePath = null;
-                //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-                Short middleCodeNum = null;
-                Integer middleToDistDistance = null;//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-                if (nodes.size() > 10) {//涓鐮佷紶鍊掓暟绗笁涓�
-                    //涓棿璺緞
-                    middlePath = nodes.get(nodes.size() - 3);
-                    //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-                    middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                    middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-                } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓�
-                    //涓棿璺緞
-                    middlePath = nodes.get(nodes.size() - 2);
-                    //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-                    middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                    middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-                }
-
-                //鐩爣璺緞
-                NavigateNode endPath = nodes.get(nodes.size() - 1);
-                Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
-
-                //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-                Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());
-                //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-                Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());
-                //鑾峰彇绉诲姩鍛戒护
-                ShuttleCommand command = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCodeNum, middleToDistDistance, runSpeed);
-                commands.add(command);
-            }
-        }
-
-        //灏忚溅鎸囦护鍒拌揪鐩爣浣嶇疆鍚庯紝鍐嶅彂鍑轰竴鏉¢《鍗囨寚浠�
-        commands.add(shuttleThread.getPalletCommand((short) 1));
-
-        //璁$畻灏忚溅涓偣鍒扮粓鐐规墍闇�鍛戒护
-        List<NavigateNode> calc2 = NavigateUtils.calc(middleLocNo, locNo, NavigationMapType.DFX.id, null);//灏忚溅鏈夎揣锛岃蛋绂佺敤杩嘍FX搴撲綅鐨勫湴鍥鹃�氶亾
-        if (calc2 == null) {
-            return null;
-        }
-        if (!Utils.checkShuttlePath(calc2, shuttleThread.getSlave().getId())) {//妫�娴嬬┛姊溅琛岃蛋璺緞锛屾槸鍚﹀瓨鍦ㄥ叾浠栧皬杞︼紝濡傛湁鍏朵粬灏忚溅鍒欒繘琛岃皟绂�
-            return null;
-        }
-        allNode.addAll(calc2);
-
-        //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> data2 = NavigateUtils.getSectionPath(calc2);
-        for (ArrayList<NavigateNode> nodes : data2) {
-            //寮�濮嬭矾寰�
-            NavigateNode startPath = nodes.get(0);
-
-            //涓棿璺緞
-            NavigateNode middlePath = null;
-            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-            Short middleCodeNum = null;
-            Integer middleToDistDistance = null;//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-            if (nodes.size() > 10) {//涓鐮佷紶鍊掓暟绗笁涓�
-                //涓棿璺緞
-                middlePath = nodes.get(nodes.size() - 3);
-                //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-                middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-            } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓�
-                //涓棿璺緞
-                middlePath = nodes.get(nodes.size() - 2);
-                //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-                middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-            }
-
-            //鐩爣璺緞
-            NavigateNode endPath = nodes.get(nodes.size() - 1);
-            Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
-
-            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-            Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());
-            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-            Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());
-            ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCodeNum, middleToDistDistance, runSpeed);
-            commands.add(moveCommand);
-        }
-
-        //灏忚溅鎸囦护鍒拌揪鐩爣浣嶇疆鍚庯紝鍐嶅彂鍑轰竴鏉℃墭鐩樹笅闄嶆寚浠�
-        commands.add(shuttleThread.getPalletCommand((short) 2));
-
-        assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
-        //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-        NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(startLocNo));
-        navigateMapData.writeNavigateNodeToRedisMap(allNode, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-
-        return commands;
-    }
-
     /**
      * 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
      */
     public synchronized void shuttleOutExecute() {
         for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) {
-            //鎻愬彇涓�鏉″緟鍑哄簱浠诲姟
-            if (wrkMast != null) {
-                String outStaLocNo = null;//鍑哄簱绔欑偣搴撲綅鍙�
-                //鑾峰彇鍑哄簱绔欑偣
-                for (DevpSlave devpSlave : slaveProperties.getDevp()) {
-                    for (DevpSlave.StaRack staOutRack : devpSlave.getRackOutStn()) {
-                        if (staOutRack.getStaNo().equals(wrkMast.getStaNo())) {
-                            //鍑哄簱绔欑偣鍜屽伐浣滄。鍑哄簱绔欑偣涓�鑷�
-                            outStaLocNo = CommonUtils.getLocNoFromRBL(staOutRack.getRow(), staOutRack.getBay(), staOutRack.getLev());
-                        }
-                    }
-
-                }
-
-                if (wrkMast.getWrkSts() == 21
-                        || wrkMast.getWrkSts() == 25
-                        || wrkMast.getWrkSts() == 31) {
-                    ShuttleThread shuttleThread = null;
-                    HashMap<String, Object> searchIdleShuttle = null;
-
-                    LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
-                    LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-
-                    if (wrkMast.getWrkSts() == 21) {
-                        if (wrkMast.getShuttleNo() == null) {
-                            //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅
-                            searchIdleShuttle = this.searchIdleShuttle(wrkMast);
-                            shuttleThread = (ShuttleThread) searchIdleShuttle.get("result");
-                            if (shuttleThread == null) {
-                                continue;
-                            }
-                            wrkMast.setShuttleNo(shuttleThread.getSlave().getId());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
-                            wrkMastMapper.updateById(wrkMast);
-                        }else {
-                            //鐩存帴浣跨敤浠诲姟淇濆瓨涓殑灏忚溅
-                            shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-                        }
-                    }else if(wrkMast.getWrkSts() == 25) {//鐘舵��25锛岄渶瑕佸悜灏忚溅涓嬪彂鍛戒护浠庢彁鍗囨満绉诲姩鍑哄幓锛岄渶瑕佸垽鏂彁鍗囨満鐘舵槸鍚︾┖闂层�佹彁鍗囨満鏄惁鍒拌揪鐩爣妤煎眰銆佺洰鏍囨ゼ灞傜珯鐐规槸鍚﹀瓨鍦ㄣ�佺洰鏍囨ゼ灞傜珯鐐规槸鍚︾粰鍑烘彁鍗囨満鍒颁綅淇″彿
-
-                        //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
-                        if (!liftProtocol.isIdleNoTask()) {
-                            try {
-                                Thread.sleep(1000);//浼戠湢1s
-                            } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
-                            }
-                            continue;//鎻愬崌鏈哄繖
-                        }
-                        //鍒ゆ柇鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙锋槸鍚︿竴鑷�
-                        if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
-                            continue;
-                        }
-
-                        //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌浣嶏紝鍒ゆ柇绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙�
-                        String locNo = wrkMast.getSourceLocNo();
-                        int lev = Utils.getLev(locNo);//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞�
-                        Short liftLev = liftProtocol.getLev();//鎻愬崌鏈烘墍鍦ㄦゼ灞�
-                        if (liftLev == null) {//鎻愬崌鏈哄彲鑳藉湪杈撻�佺嚎妤煎眰
-                            continue;
-                        }
-                        if (liftLev.intValue() != lev) {
-                            continue;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傝烦杩�
-                        }
-
-                        Integer staNo = Utils.levToOutInStaNo(lev >= 2 ? lev + 1 : lev);
-                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-                        //鑾峰彇鐩爣绔欎俊鎭�
-                        StaProtocol staProtocol1 = devpThread.getStation().get(staNo);
-                        if (staProtocol1 == null) {
-                            continue;//绔欑偣淇℃伅涓嶅瓨鍦�
-                        }
-                        if (!staProtocol1.isLiftArrival()) {
-                            continue;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse
-                        }
-
-                        //缁х画瀹屾垚涔嬪墠灏忚溅鏈畬鎴愮殑浠诲姟
-                        shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-                    } else if (wrkMast.getWrkSts() == 31) {
-                        //缁х画瀹屾垚涔嬪墠灏忚溅鏈畬鎴愮殑浠诲姟
-                        shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-                    }
-
-                    if (shuttleThread == null) {
-                        continue;
-                    }
-
-                    ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-                    if (shuttleProtocol == null) {
-                        continue;
-                    }
-
-                    if (outStaLocNo == null) {
-                        continue;
-                    }
-
-                    if (wrkMast.getWrkSts() == 21) {
-
-                        if (!shuttleProtocol.isIdle()) {
-                            continue;
-                        }
-
-                        //婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-                        String currentLocNo = shuttleProtocol.getCurrentLocNo();
-
-                        //灏忚溅褰撳墠灞傞珮
-                        Integer currentLev = Utils.getLev(currentLocNo);
-                        //褰撳墠妤煎眰鎻愬崌鏈鸿緭閫佺珯鐐瑰簱浣嶅彿
-                        String liftSiteLocNo = Utils.levToOutInStaLocNo(currentLev);
-
-                        ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-                        //鍥涘悜绌挎杞﹀彿
-                        assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
-                        //浠诲姟鍙�
-                        assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-                        //鍏ュ嚭搴撴ā寮�
-                        assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());
-                        assignCommand.setSourceLocNo(currentLocNo);
-
-                        //鍒ゆ柇灏忚溅鍜屽簱浣嶆槸鍚﹀湪鍚屼竴灞�
-                        if (currentLev == Utils.getLev(wrkMast.getSourceLocNo())) {
-                            //鍚屼竴灞�(灏嗗皬杞︾Щ鍔ㄥ埌璐х墿浣嶇疆)
-
-                            List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftSiteLocNo, assignCommand, shuttleThread);
-                            if (commands == null) {
-                                //鏈壘鍒拌矾寰勶紝绛夊緟涓嬩竴娆�
-                                continue;
-                            }
-
-                            //鍒嗛厤鐩爣搴撲綅
-                            shuttleProtocol.setLocNo(wrkMast.getSourceLocNo());
-                            //鍒嗛厤浠诲姟鍙�
-                            shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());
-                            //鍒嗛厤婧愬簱浣�
-                            shuttleProtocol.setSourceLocNo(currentLocNo);
-                            //鐩爣搴撲綅
-                            assignCommand.setLocNo(wrkMast.getSourceLocNo());
-//                            assignCommand.setCommands(commands);
-                            wrkMast.setWrkSts(26L);//灏忚溅鎼繍涓�
-
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                //涓嬪彂浠诲姟
-                                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                            }
-                        }else {
-                            //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿(灏嗗皬杞︾Щ鍔ㄥ埌鎻愬崌鏈轰綅缃�)
-
-                            //灏忚溅鍒版彁鍗囨満鍙f寚浠�
-                            List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand, shuttleThread);
-                            if (commands == null) {
-                                if (!currentLocNo.equals(liftSiteLocNo)) {//褰撳墠浣嶇疆涔熶笉鍦ㄦ彁鍗囨満鍙�
-                                    continue;//鏈壘鍒拌矾寰�
-                                }
-                                commands = new ArrayList<>();
-                            }
-                            shuttleProtocol.setLocNo(liftSiteLocNo);
-                            //鍒嗛厤浠诲姟鍙�
-                            shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());
-                            //鍒嗛厤婧愬簱浣�
-                            shuttleProtocol.setSourceLocNo(currentLocNo);
-
-                            //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅
-                            BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo);
-                            Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮�
-
-//                            //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护
-//                            ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, null, null, 500);
-//                            commands.add(moveCommand);
-
-                            //鐩爣搴撲綅
-                            assignCommand.setLocNo(liftSiteLocNo);
-//                            assignCommand.setCommands(commands);
-                            wrkMast.setWrkSts(22L);//灏忚溅杩佺Щ鐘舵��
-
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                //涓嬪彂浠诲姟
-                                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                            }
-                        }
-                    } else if (wrkMast.getWrkSts() == 25) {
-                        if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
-                            continue;
-                        }
-
-                        wrkMast.setShuttleNo(shuttleProtocol.getShuttleNo().intValue());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
-
-                        //褰撳墠妤煎眰鎻愬崌鏈鸿緭閫佺珯鐐瑰簱浣嶅彿
-                        String liftSiteLocNo = Utils.levToOutInStaLocNo(liftProtocol.getLev().intValue());
-
-                        ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-                        //鍥涘悜绌挎杞﹀彿
-                        assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
-                        //浠诲姟鍙�
-                        assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-                        //鍏ュ嚭搴撴ā寮�
-                        assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());
-                        assignCommand.setSourceLocNo(liftSiteLocNo);
-
-                        List<ShuttleCommand> commands = this.shuttleAssignCommand(liftSiteLocNo, wrkMast.getSourceLocNo(), liftSiteLocNo, assignCommand, shuttleThread);
-                        if (commands == null) {
-                            continue;//鏈壘鍒拌矾寰�
-                        }
-
-//                        //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
-//                        short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜
-//                        Short distCode = commands.get(0).getStartCodeNum();//鐩爣浜岀淮鐮�
-//                        //鑾峰彇绉诲姩鍛戒护
-//                        ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1600, commands.get(0).getRunDirection(), null, null, 500);
-//                        commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
-
-                        //鍒嗛厤鐩爣搴撲綅
-                        shuttleProtocol.setLocNo(wrkMast.getSourceLocNo());
-                        //鍒嗛厤浠诲姟鍙�
-                        shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());
-                        //鍒嗛厤婧愬簱浣�
-                        shuttleProtocol.setSourceLocNo(liftSiteLocNo);
-                        //鐩爣搴撲綅
-                        assignCommand.setLocNo(wrkMast.getSourceLocNo());
-//                        assignCommand.setCommands(commands);
-                        wrkMast.setWrkSts(26L);//灏忚溅鎼繍涓�
-
-                        if (wrkMastMapper.updateById(wrkMast) > 0) {
-                            //涓嬪彂浠诲姟
-                            MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                        }
-                    }
-
-                }
+            boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
+            if (!step1) {
+                continue;
             }
         }
+    }
+
+    /**
+     * 鍑哄簱-灏忚溅鎼嚭搴撲腑
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    public boolean shuttleOutExecuteStep1(WrkMast wrkMast) {
+        //21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
+        if (wrkMast.getWrkSts() == 21) {
+            if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+                return false;
+            }
+
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+            if (!shuttleProtocol.isIdle()) {
+                return false;
+            }
+
+            //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐�
+            BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getLiftNo());
+            if (targetBasDevp == null) {
+                return false;//缂哄皯绔欑偣淇℃伅
+            }
+
+            //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
+            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+                //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
+                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+                return false;
+            }
+
+            //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿
+            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), targetBasDevp.getLocNo());
+            if (result == null) {//鍑哄簱璺緞璁$畻澶辫触
+                return false;
+            }
+
+            //鍒涘缓鍒嗛厤鍛戒护
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());//鍑哄簱妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+            assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
+            assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
+
+            wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
+            wrkMast.setModiTime(new Date());
+            if (wrkMastMapper.updateById(wrkMast) > 0) {
+                //涓嬪彂浠诲姟
+                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+            }
+            return false;
+        }
+        return true;
     }
 
     /**
@@ -1322,8 +965,8 @@
     public synchronized void shuttleFinished() {
         for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
             //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
-            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
             if (shuttleProtocol == null) {
                 continue;
             }
@@ -1331,7 +974,7 @@
             //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬�
             if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id  //浠诲姟瀹屾垚绛夊緟纭
                     && shuttleProtocol.getTaskNo() != 0
-                    && shuttleProtocol.getBusyStatus() == 0
+                    && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id
             ) {
                 //灏嗕换鍔℃。鏍囪涓哄畬鎴�
                 WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue());
@@ -1340,7 +983,7 @@
                         case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
                             wrkMast.setWrkSts(9L);
                             //浠诲姟鍙锋竻闆�
-                            shuttleProtocol.setTaskNo((short) 0);
+                            shuttleProtocol.setTaskNo(0);
                             break;
                         case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
                             wrkMast.setWrkSts(23L);
@@ -1616,16 +1259,6 @@
                 continue;
             }
 
-            boolean step2 = this.locToLocExecuteStep2(wrkMast);//璋冨害灏忚溅鍒扮洰鏍囨ゼ灞�
-            if (!step2) {
-                continue;
-            }
-
-            boolean step3 = this.locToLocExecuteStep3(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞�
-            if (!step3) {
-                continue;
-            }
-
         }
     }
 
@@ -1646,179 +1279,6 @@
             wrkMast.setShuttleNo(shuttleThread.getSlave().getId());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
             wrkMastMapper.updateById(wrkMast);
         }
-        return true;
-    }
-
-    /**
-     * 璋冨害灏忚溅鍒扮洰鏍囨ゼ灞�
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean locToLocExecuteStep2(WrkMast wrkMast) {
-        if (wrkMast.getWrkSts() == 1 && wrkMast.getShuttleNo() != null) {
-            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
-                return false;//灏忚溅澶勪簬涓嶇┖闂茬姸鎬�
-            }
-
-            String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅褰撳墠搴撲綅鍙�
-            int shuttleLev = Utils.getLev(currentLocNo);//灏忚溅鎵�鍦ㄦゼ灞�
-
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-
-            //鍒ゆ柇灏忚溅鏄惁鍐嶇洰鏍囨ゼ灞�
-            if (shuttleLev != Utils.getLev(wrkMast.getLocNo())) {
-                //灏忚溅鍜岀洰鏍囦笉鍦ㄥ悓涓�妤煎眰
-
-                //鎻愬崌鏈哄彛绔欑偣搴撲綅鍙�
-                String liftSiteLocNo = Utils.levToOutInStaLocNo(shuttleLev);
-
-                //鍒涘缓鍒嗛厤鍛戒护
-                ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-                assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-                assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-                assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ嚭搴撴ā寮�
-                assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-
-                //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞
-                List<ShuttleCommand> commands = this.shuttleAssignCommand(shuttleProtocol.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
-                if (commands == null) {
-                    return false;//鏈壘鍒拌矾寰�
-                }
-
-                //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅
-                BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo);
-                Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮�
-
-//                //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护
-//                ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, null, null, 500);
-//                commands.add(moveCommand);
-
-                //鍒嗛厤鐩爣搴撲綅
-                shuttleProtocol.setLocNo(liftSiteLocNo);
-                //鐩爣搴撲綅
-                assignCommand.setLocNo(liftSiteLocNo);
-//                assignCommand.setCommands(commands);
-                wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵��
-
-                if (wrkMastMapper.updateById(wrkMast) > 0) {
-                    //涓嬪彂浠诲姟
-                    MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                }
-            }
-        }
-        return true;
-    }
-
-    /**
-     * 鍚屾ゼ灞傚簱浣嶇Щ杞�
-     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-     */
-    private boolean locToLocExecuteStep3(WrkMast wrkMast) {
-        if (wrkMast.getShuttleNo() == null) {
-            return false;
-        }
-
-        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-        ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-        if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
-            return false;//灏忚溅澶勪簬涓嶇┖闂茬姸鎬�
-        }
-
-        LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
-        LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-
-        DevpThread devpThread = null;
-        for (DevpSlave devp : slaveProperties.getDevp()){
-            // 鑾峰彇鍏ュ簱绔欎俊鎭�
-            devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-        }
-
-        //鍒ゆ柇灏忚溅鏄惁鍦ㄥ伐浣滄。浠诲姟鐩爣妤煎眰
-        String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅褰撳墠搴撲綅鍙�
-        int shuttleLev = Utils.getLev(currentLocNo);//灏忚溅鎵�鍦ㄦゼ灞�
-        if (shuttleLev != Utils.getLev(wrkMast.getLocNo())) {
-            return false;//涓嶅湪鍚屼竴妤煎眰
-        }
-
-        if (wrkMast.getWrkSts() == 1 || wrkMast.getWrkSts() == 8) {
-            //璋冨害灏忚溅鎵ц鍚屾ゼ灞傜Щ搴撲换鍔�
-
-            //鍒涘缓鍒嗛厤鍛戒护
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ嚭搴撴ā寮�
-            assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-
-            List<ShuttleCommand> commands = new ArrayList<>();
-
-            if (wrkMast.getWrkSts() == 8) {//8.鎻愬崌鏈鸿縼绉诲皬杞﹀畬鎴愶紝闇�瑕佸皢灏忚溅绉诲嚭鎻愬崌鏈�
-                //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
-                if (!liftProtocol.isIdleNoTask()) {
-                    return false;//鎻愬崌鏈哄繖
-                }
-                //鍒ゆ柇鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙锋槸鍚︿竴鑷�
-                if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
-                    return false;
-                }
-
-                //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌浣嶏紝鍒ゆ柇绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙�
-                String locNo = wrkMast.getLocNo();
-                int lev = Utils.getLev(locNo);//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞�
-                int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞�
-                if (liftLev != lev) {
-                    return false;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傝烦杩�
-                }
-
-                Integer staNo = Utils.levToOutInStaNo(lev >= 2 ? lev + 1 : lev);
-                //鑾峰彇鐩爣绔欎俊鎭�
-                StaProtocol staProtocol1 = devpThread.getStation().get(staNo);
-                if (staProtocol1 == null) {
-                    return false;//绔欑偣淇℃伅涓嶅瓨鍦�
-                }
-                if (!staProtocol1.isLiftArrival()) {
-                    return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse
-                }
-
-//                BasDevp basDevp = basDevpService.selectById(staNo);
-//                short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜
-//                Short distCode = Short.parseShort(basDevp.getQrCodeValue());//鎻愬崌鏈哄彛绔欑偣浜岀淮鐮�
-//                Short runDirection = ShuttleRunDirection.BOTTOM.id;//杩愯鏂瑰悜
-//                //鑾峰彇鍛戒护
-//                ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1600, runDirection, null, null, 500);
-//                commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
-
-//                currentLocNo = basDevp.getLocNo();//浣跨敤杈撻�佺珯鐐瑰彛浣滀负璧风偣鍧愭爣
-            }
-
-            //鐩存帴璁$畻杞﹀埌婧愬簱浣嶅埌鐩爣搴撲綅璺緞
-            List<ShuttleCommand> commands1 = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), wrkMast.getLocNo(), assignCommand, shuttleThread);
-            if (commands1 == null) {
-                return false;//鎵句笉鍒拌矾寰勭瓑寰呬笅涓�娆�
-            }
-            commands.addAll(commands1);
-
-            //鍒嗛厤浠诲姟鍙�
-            shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());
-            //鍒嗛厤婧愬簱浣�
-            shuttleProtocol.setSourceLocNo(wrkMast.getSourceLocNo());
-
-//            assignCommand.setCommands(commands);
-            //鍒嗛厤鐩爣搴撲綅
-            shuttleProtocol.setLocNo(wrkMast.getLocNo());
-            //鐩爣搴撲綅
-            assignCommand.setLocNo(wrkMast.getLocNo());
-            wrkMast.setWrkSts(9L);//灏忚溅鍏ュ簱涓�
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-            }
-        }
-
         return true;
     }
 
@@ -2211,8 +1671,8 @@
     public synchronized void loopShuttleCharge() {
         for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
             if (shuttleProtocol == null) {
                 continue;
             }
@@ -2269,412 +1729,77 @@
                 continue;
             }
 
-            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkCharge.getShuttleNo());
+            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkCharge.getShuttleNo());
             if (shuttleThread == null) {
                 continue;
             }
-            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
             if (shuttleProtocol == null) {
                 continue;
             }
 
-            //鑾峰彇鎻愬崌鏈�
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
-            if (liftThread == null) {
-                continue;
-            }
-            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-            if (liftProtocol == null) {
-                continue;
-            }
-            //鍏呯數搴撲綅鍙�
-            String chargeLocNo = wrkCharge.getLocNo();
-            //鍏呯數搴撲綅灞傞珮
-            Integer chargeLocNoLev = Utils.getLev(chargeLocNo);
-
             if (wrkCharge.getWrkSts() == 51) {
-                //褰撳墠绌挎杞﹀簱浣嶅彿
-                String currentLocNo = shuttleProtocol.getCurrentLocNo();
-                if (currentLocNo == null) {
-                    continue;
-                }
-                //灏忚溅褰撳墠灞傞珮
-                Integer currentLev = Utils.getLev(currentLocNo);
-
-                if (currentLev == chargeLocNoLev) {
-                    //鍚屼竴灞傛棤闇�缁忚繃鎻愬崌鏈�
-                    //鐩存帴璁$畻杞﹀埌鍏呯數搴撲綅
-
-                    ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-
-                    //鑾峰彇灏忚溅鍒板厖鐢靛簱浣嶈矾寰勬寚浠�
-                    List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, chargeLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
-                    if (commands == null) {
-                        continue;//鏈壘鍒拌矾寰�
-                    }
-                    //杩涜鍏呯數涓�
-                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING);
-
-                    assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
-                    assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍏呯數
-                    assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());
-                    assignCommand.setCharge(true);//鍏呯數浠诲姟
-
-                    //鍒涘缓鍏呯數鎸囦护
-                    ShuttleCommand command = shuttleThread.getChargeSwitchCommand((short) 1);//寮�濮嬪厖鐢�
-                    commands.add(command);
-
-                    //鎸囦护闆嗗垎閰�
-//                    assignCommand.setCommands(commands);
-
-                    wrkCharge.setWrkSts(56L);//鍏呯數涓姸鎬�
-                    if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-                        //涓嬪彂浠诲姟
-                        MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                    }
-                }else {
-                    //涓嶅悓灞傦紝璋冨害灏忚溅鍒板厖鐢垫々鐩爣灞�
-
-                    ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-
-                    //鑾峰彇灏忚溅褰撳墠妤煎眰鐨勭珯鐐瑰彿
-                    String liftSiteLocNo = Utils.levToOutInStaLocNo(currentLev);
-
-                    //灏忚溅绉诲姩鍒版彁鍗囨満鍙g珯鐐癸紝璁$畻璺緞
-                    List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
-                    if (commands == null) {
-                        continue;//鏈壘鍒拌矾寰�
-                    }
-
-                    //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅
-                    BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo);
-                    if (basDevp == null) {
-                        continue;//鎵句笉鍒扮珯鐐逛俊鎭�
-                    }
-                    Short basDevpQrCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮�
-
-//                    //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护
-//                    ShuttleCommand moveCommand = shuttleThread.getMoveCommand(basDevpQrCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, basDevpQrCode, 1600, 500);
-//                    commands.add(moveCommand);
-
-                    //鍒嗛厤鐩爣搴撲綅
-                    shuttleProtocol.setLocNo(chargeLocNo);
-                    assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
-                    assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍏呯數
-                    assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());
-                    assignCommand.setCharge(true);//鍏呯數浠诲姟
-                    //鐩爣搴撲綅
-                    assignCommand.setLocNo(chargeLocNo);
-                    //婧愬簱浣�
-                    assignCommand.setSourceLocNo(currentLocNo);
-//                    assignCommand.setCommands(commands);
-                    wrkCharge.setWrkSts(52L);//灏忚溅杩佺Щ鐘舵��
-                    if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-                        //涓嬪彂浠诲姟
-                        MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                    }
-                }
-
-            }else if(wrkCharge.getWrkSts() == 53){
-                //灏忚溅宸茬粡杈惧埌鎻愬崌鏈哄唴
-
-                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂茬姸鎬�
-                if (!liftProtocol.isIdle(wrkCharge.getWrkNo().shortValue())) {
+                if (!shuttleProtocol.getCurrentLocNo().equals(wrkCharge.getLocNo())) {
+                    //灏忚溅涓嶅湪鍏呯數妗╀綅缃�
+                    shuttleDispatchUtils.dispatchShuttle(wrkCharge.getWrkNo(), wrkCharge.getLocNo(), shuttle.getId());//璋冨害灏忚溅鍘诲厖鐢垫々
                     continue;
                 }
 
-//                //鍒ゆ柇灏忚溅鏄惁鍦ㄦ彁鍗囨満鍐�
-//                if (shuttleProtocol.getCurrentCode().intValue() != liftProtocol.getBarcode().intValue()) {
-//                    //灏忚溅涓嶅湪鎻愬崌鏈哄唴
-//                    continue;
-//                }
-
-                //缁欐彁鍗囨満鍒嗛厤浠诲姟
-                liftProtocol.setTaskNo(wrkCharge.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
-                liftProtocol.setShuttleNo(wrkCharge.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿
-                liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
-
-                //鍛戒护list
-                ArrayList<LiftCommand> commands = new ArrayList<>();
-
-//                //鎻愬崌鏈哄墠寰�鐩爣妤煎眰
-//                //鑾峰彇鍏呯數搴撲綅鐩爣妤煎眰鍛戒护
-//                LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), chargeLocNoLev >= 2 ? chargeLocNoLev + 1 : chargeLocNoLev);
-//                commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
-
-                wrkCharge.setWrkSts(54L);//鎻愬崌鏈烘惉杩愪腑
-                //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣�
-                LiftAssignCommand assignCommand = new LiftAssignCommand();
-//                assignCommand.setCommands(commands);
-                assignCommand.setLiftNo(liftProtocol.getLiftNo());
-                assignCommand.setTaskNo(liftProtocol.getTaskNo());
-                if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-                    //涓嬪彂浠诲姟
-                    MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
-                }
-
-            }else if(wrkCharge.getWrkSts() == 55){//55.鎻愬崌鏈鸿縼绉诲皬杞﹀畬鎴�
-                //鐩存帴璁$畻杞﹀埌鍏呯數搴撲綅
-
+                //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠�
+                NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), true);
+                ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
+                commands.add(chargeCommand);
+                //鍒涘缓鍒嗛厤鍛戒护
                 ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+                assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+                assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
+                assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
+                assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+                assignCommand.setCommands(commands);//杩愯鍛戒护
 
-                Short liftLev = liftProtocol.getLev();
-                if (liftLev == null) {
-                    continue;
-                }
-                //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌杈剧洰鏍囨ゼ灞�
-                if (liftLev.intValue() != chargeLocNoLev) {
-                    continue;//娌℃湁鍒拌揪鐩爣妤煎眰
-                }
-
-                //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
-                Integer staNo = Utils.levToOutInStaNo(liftLev >= 2 ? liftLev + 1 : liftLev);//绔欑偣鍙�
-                BasDevp basDevp = basDevpService.selectById(staNo);
-                if (basDevp == null) {
-                    continue;//绔欑偣涓嶅瓨鍦�
-                }
-
-                //鑾峰彇鎻愬崌鏈哄彛鍒板厖鐢靛簱浣嶈矾寰勬寚浠�
-                List<ShuttleCommand> commands = this.shuttleAssignCommand(basDevp.getLocNo(), chargeLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
-                if (commands == null) {
-                    continue;//鏈壘鍒拌矾寰�
-                }
-
-//                short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜
-//                Short distCode = Short.parseShort(basDevp.getQrCodeValue());//鎻愬崌鏈哄彛绔欑偣浜岀淮鐮�
-//                Short runDirection = ShuttleRunDirection.BOTTOM.id;//杩愯鏂瑰悜
-//                //鑾峰彇鍛戒护
-//                ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1600, runDirection, startCode, 1600, 500);
-//                commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
-
-                //杩涜鍏呯數涓�
-                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING);
-
-                assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
-                assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍏呯數
-                assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());
-                assignCommand.setCharge(true);//鍏呯數浠诲姟
-
-                //鍒涘缓鍏呯數鎸囦护
-                ShuttleCommand command = shuttleThread.getChargeSwitchCommand((short) 1);//寮�濮嬪厖鐢�
-                commands.add(command);
-
-                //鎸囦护闆嗗垎閰�
-//                assignCommand.setCommands(commands);
-
-                wrkCharge.setWrkSts(56L);//鍏呯數涓姸鎬�
+                wrkCharge.setWrkSts(52L);//51.鐢熸垚鍏呯數浠诲姟 => 52.灏忚溅鍘诲厖鐢典腑
+                wrkCharge.setModiTime(new Date());
                 if (wrkChargeMapper.updateById(wrkCharge) > 0) {
                     //涓嬪彂浠诲姟
                     MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
                 }
-            }else if (wrkCharge.getWrkSts() == 57) {//57.灏忚溅鍒拌揪鍏呯數妗�
-                //鍏呯數涓�
-                //鍒ゆ柇灏忚溅鏄惁鍏呮弧鐢甸噺锛屾弧鐢�1000鎴栫數鍘�54V浠ヤ笂
-                if (shuttleProtocol.getBatteryPower() == null || shuttleProtocol.getCurrentVoltage() == null) {
-                    continue;
-                }
-                if (shuttleProtocol.getBatteryPower() >= 1000 && shuttleProtocol.getCurrentVoltage() >= 54000) {
-                    //鍏呮弧锛屾柇寮�鍏呯數
-//                    List<ShuttleCommand> commands = new ArrayList<>();
-//                    ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-//                    assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
-//                    assignCommand.setTaskMode((short) 0);
-//                    assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());
-//                    assignCommand.setCharge(true);
-//
-//                    //鍒涘缓鍏呯數鎸囦护
-//                    ShuttleCommand command = shuttleThread.getChargeSwitchCommand((short) 2);//鏂紑鍏呯數
-//                    commands.add(command);
-//
-//                    //鎸囦护闆嗗垎閰�
-//                    assignCommand.setCommands(commands);
-//
-//                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
-
-                    //灏嗗皬杞︾Щ鍔ㄥ埌绌洪棽鐨勫贩閬�
-                    ShuttleAssignCommand assignCommand = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(shuttleProtocol.getLocNo()), shuttleProtocol.getShuttleNo().intValue(), shuttleThread, null);
-                    if (assignCommand == null) {
-                        continue;
-                    }
-
-                    wrkCharge.setWrkSts(60L);//60.鍏呯數浠诲姟瀹屾垚
-                    if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-                        //涓嬪彂浠诲姟
-                        MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                    }
-                }
-
-                if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id) {
-                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING);
-                }
-            }
-        }
-
-    }
-
-    /**
-     * 璋冨害杞﹁締
-     */
-    public void dispatchShuttle(Integer wrkNo, String locNo) {
-        ArrayList<NyShuttleThread> sameLev = new ArrayList<>();//鐩稿悓妤煎眰鐨勭┛姊溅
-        ArrayList<NyShuttleThread> diffLev = new ArrayList<>();//涓嶅悓妤煎眰鐨勭┛姊溅
-
-        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) {
-                continue;
-            }
-
-            if (!shuttleProtocol.isIdle()) {
-                continue;
-            }
-
-            int currentLev = shuttleProtocol.getPoint().getZ();//灏忚溅褰撳墠灞傞珮
-            String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅褰撳墠搴撲綅鍙�
-
-            if (currentLocNo.equals(locNo)) {
-                //杞﹁締褰撳墠浣嶇疆宸茬粡鏄洰鏍囧簱浣嶏紝璋冨害璇ヨ溅
-                shuttleMoveGenerate(wrkNo, locNo, shuttleProtocol.getShuttleNo().intValue());
-                break;
-            }
-
-            if (currentLev == Utils.getLev(locNo)) {
-                //宸ヤ綔妗fゼ灞傜浉鍚岀殑绌挎杞�
-                sameLev.add(shuttleThread);
-            }else {
-                //宸ヤ綔妗d笉鍚屾ゼ灞傜殑绌挎杞�
-                diffLev.add(shuttleThread);
-            }
-
-        }
-
-        Integer recentAllDistance = 9999999;
-        NyShuttleThread recentShuttle = null;//褰撳墠璺濈鏈�杩戠殑鍥涘悜绌挎杞︾嚎绋�
-        if (sameLev.size() > 0) {
-            //鍚屼竴妤煎眰鏈夌┖闂茬┛姊溅锛屽垯鍙湪宸ヤ綔妗fゼ灞傚鎵�
-            //瀵绘壘绂讳换鍔℃渶杩戠殑绌挎杞�
-            for (NyShuttleThread shuttleThread : sameLev) {
-                //褰撳墠绌挎杞﹀簱浣嶅彿
-                String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo();
-                //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
-                List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), Utils.getLev(currentLocNo)));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
-                if (currentShuttlePath == null) {
-                    continue;
-                }
-                Integer currentAllDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
-                if (currentAllDistance < recentAllDistance) {
-                    //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅
-                    recentShuttle = shuttleThread;
-                }
-            }
-        }else {
-            //鍚屼竴妤煎眰锛屾病鏈夌┖闂茬┛姊溅锛屽彧鑳戒粠鍏朵粬妤煎眰璋冨害
-            //瀵绘壘绂讳换鍔℃渶杩戠殑绌挎杞�
-            for (NyShuttleThread shuttleThread : diffLev) {
-
-                //褰撳墠绌挎杞﹀簱浣嶅彿
-                String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo();
-                int currentLev = Utils.getLev(currentLocNo);
-                List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//鍒ゆ柇褰撳墠绌挎杞︽ゼ灞傛槸鍚︽湁寰呭垎閰嶈溅杈嗙殑浠诲姟锛屽鏋滄湁鍒欎笉鍒嗛厤杩欒締杞�
-                if (wrkMasts1.size() > 0) {
-                    //瀛樺湪鍏朵粬浠诲姟锛岃烦杩囪繖杈嗚溅
+            } else if (wrkCharge.getWrkSts() == 52) {
+                //妫�娴嬪皬杞︽槸鍚︽弧鐢�
+                if (shuttleProtocol.getPowerPercent() < 100) {
                     continue;
                 }
 
-                //褰撳墠绌挎杞︾嚎绋嬪埌褰撳墠杞﹀瓙鎵�鍦ㄦゼ灞傜殑鎻愬崌鏈哄彛璺濈
-                List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, Utils.levToOutInStaLocNo(currentLev), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), currentLev));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
-                if (currentShuttlePath == null) {
+                //灏忚溅婊$數锛岀粨鏉熷厖鐢典换鍔�
+                NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), false);
+                ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
+                commands.add(chargeCommand);
+                //鍒涘缓鍒嗛厤鍛戒护
+                ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+                assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+                assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
+                assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
+                assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+                assignCommand.setCommands(commands);//杩愯鍛戒护
+
+                wrkCharge.setWrkSts(53L);//52.灏忚溅鍘诲厖鐢典腑 => 53.灏忚溅鍏呯數瀹屾垚
+                wrkCharge.setModiTime(new Date());
+                if (wrkChargeMapper.updateById(wrkCharge) > 0) {
+                    //涓嬪彂浠诲姟
+                    MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+                }
+            } else if (wrkCharge.getWrkSts() == 53) {
+                boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkCharge.getLocNo()), shuttleThread.getSlave().getId(), shuttleThread);
+                if (!result) {
                     continue;
                 }
 
-                Integer currentAllDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
-                if (currentAllDistance < recentAllDistance) {
-                    //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅
-                    recentShuttle = shuttleThread;
-                }
+                wrkCharge.setWrkSts(60L);//53.灏忚溅鍏呯數瀹屾垚 => 60.鍏呯數浠诲姟瀹屾垚
+                wrkCharge.setModiTime(new Date());
+                wrkChargeMapper.updateById(wrkCharge);
             }
+
         }
 
-        if (recentShuttle == null) {//娌℃湁鎼滅储鍒板彲鐢ㄧ┛姊溅
-            return;
-        }
-
-        //鎼滅储鍒板彲鐢ㄧ┛姊溅锛岃皟搴﹁杞�
-        shuttleMoveGenerate(wrkNo, locNo, recentShuttle.getSlave().getId());
-    }
-
-    /**
-     * 灏忚溅杩佺Щ浠诲姟鐢熸垚
-     */
-    @Transactional
-    public boolean shuttleMoveGenerate(Integer wrkNo, String locNo, Integer shuttleNo) {
-        Date now = new Date();
-        //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-        NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
-        if (shuttleThread == null) {
-            return false;
-        }
-        NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-        if (shuttleProtocol == null) {
-            return false;
-        }
-
-        //灏忚溅澶勪簬绌洪棽鐘舵��
-        if (!shuttleProtocol.isIdleNoCharge()) {
-            return false;
-        }
-
-        //鍒ゆ柇绌挎杞︽槸鍚﹀瓨鍦ㄦ湭瀹屾垚鐨勫皬杞︾Щ搴撲换鍔�
-        WrkMast hasMoveWorking = wrkMastMapper.selectShuttleHasMoveWorking(shuttleNo);
-        if (hasMoveWorking != null) {//灏忚溅瀛樺湪绉诲簱浠诲姟锛岀瓑寰呮墽琛屽畬鎴愬悗鍐嶇敓鎴愭柊鐨勪换鍔�
-            return false;
-        }
-
-        //鍒ゆ柇鏄惁鏈夊叾浠栦换鍔℃鍦ㄤ娇鐢ㄧ┛姊溅
-        WrkMast wrkMast2 = wrkMastMapper.selectShuttleWorking(shuttleNo);
-        if (wrkMast2 != null) {//灏忚溅瀛樺湪鍏朵粬宸ヤ綔妗d换鍔★紝绛夊緟鎵ц瀹屾垚鍚庡啀鐢熸垚鏂扮殑浠诲姟
-            return false;
-        }
-
-        //鍒ゆ柇鏄惁鏈夊厖鐢典换鍔℃鍦ㄤ娇鐢ㄧ┛姊溅
-        WrkCharge wrkCharge = wrkChargeMapper.selectWorking(shuttleNo);
-        if (wrkCharge != null) {//灏忚溅瀛樺湪鍏呯數浠诲姟锛岀瓑寰呮墽琛屽畬鎴愬悗鍐嶇敓鎴愭柊鐨勪换鍔�
-            return false;
-        }
-
-        // 鑾峰彇宸ヤ綔鍙�
-        int workNo = commonService.getWorkNo(0);
-        // 淇濆瓨宸ヤ綔妗�
-        WrkMast wrkMast = new WrkMast();
-        wrkMast.setWrkNo(workNo);
-        wrkMast.setIoTime(now);
-        wrkMast.setWrkSts(101L); // 宸ヤ綔鐘舵�侊細101.绉诲姩鍒拌繎鐐圭瓑寰呰縼鍑�
-        wrkMast.setIoType(200); // 鍏ュ嚭搴撶姸鎬侊細 200.灏忚溅绉诲簱
-        wrkMast.setIoPri(20D);
-        wrkMast.setShuttleNo(shuttleNo);//绌挎杞﹀彿
-        wrkMast.setSourceLocNo(shuttleProtocol.getCurrentLocNo()); // 婧愬簱浣� => 灏忚溅褰撳墠搴撲綅鍙�
-        wrkMast.setLocNo(locNo); // 鐩爣搴撲綅
-        wrkMast.setPicking("N"); // 鎷f枡
-        wrkMast.setExitMk("N"); // 閫�鍑�
-        wrkMast.setLinkMis("N");
-        wrkMast.setAppeTime(now);
-        wrkMast.setModiTime(now);
-        int res = wrkMastMapper.insert(wrkMast);
-        if (res == 0) {
-            News.error("灏忚溅杩佺Щ --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒 绌挎杞﹀彿锛�" + shuttleNo);
-            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-        }
-
-        //缁欏伐浣滄。缁戝畾灏忚溅鍙�
-        WrkMast wrkMast1 = wrkMastMapper.selectByWorkNo(wrkNo);
-        if (wrkMast1 != null) {
-            wrkMast1.setShuttleNo(shuttleNo);
-            wrkMastMapper.updateById(wrkMast1);
-        }
-
-        return true;
     }
 
     /**

--
Gitblit v1.9.1