From ee5e6e5d4714358de0371f83d02739cb765b4dbf Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期六, 01 七月 2023 08:18:29 +0800
Subject: [PATCH] fixed

---
 src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java  |    3 
 src/main/java/com/zy/asrs/controller/SiteController.java       |  222 +++++++
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |  689 ++++++++++++++----------
 src/main/java/com/zy/core/thread/ShuttleThread.java            |  236 ++++----
 src/main/java/com/zy/asrs/entity/WrkMast.java                  |    8 
 src/main/java/com/zy/asrs/service/BasDevpService.java          |    3 
 src/main/resources/mapper/WrkMastMapper.xml                    |   19 
 src/main/java/com/zy/asrs/mapper/BasDevpMapper.java            |    2 
 src/main/java/com/zy/core/model/protocol/LiftProtocol.java     |   23 
 /dev/null                                                      |  390 -------------
 src/main/java/com/zy/asrs/service/WrkMastService.java          |    5 
 src/main/java/com/zy/asrs/utils/Utils.java                     |    7 
 src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java |    7 
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java            |    8 
 src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java |    5 
 src/main/resources/mapper/BasDevpMapper.xml                    |    7 
 16 files changed, 824 insertions(+), 810 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/SiteController.java b/src/main/java/com/zy/asrs/controller/SiteController.java
new file mode 100644
index 0000000..b6ae251
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/SiteController.java
@@ -0,0 +1,222 @@
+package com.zy.asrs.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.annotations.ManagerAuth;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.asrs.domain.vo.PlcErrorTableVo;
+import com.zy.asrs.domain.vo.SiteTableVo;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.entity.BasSte;
+import com.zy.asrs.entity.WrkCharge;
+import com.zy.asrs.service.BasDevpService;
+import com.zy.asrs.service.BasSteService;
+import com.zy.asrs.service.WrkChargeService;
+import com.zy.common.model.enums.WrkChargeType;
+import com.zy.common.service.CommonService;
+import com.zy.core.DevpThread;
+import com.zy.core.News;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.enums.SteChargeType;
+import com.zy.core.enums.SteStatusType;
+import com.zy.core.model.DevpSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.model.protocol.SteProtocol;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.core.thread.SiemensDevpThread;
+import com.zy.core.thread.SteThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * 杈撻�佽澶囨帴鍙�
+ * Created by vincent on 2020-06-01
+ */
+@Slf4j
+@RestController
+@RequestMapping("/site")
+public class SiteController {
+
+    @Autowired
+    private SlaveProperties slaveProperties;
+    @Autowired
+    private BasDevpService basDevpService;
+    @Autowired
+    private WrkChargeService wrkChargeService;
+    @Autowired
+    private BasSteService basSteService;
+    @Autowired
+    private CommonService commonService;
+
+    @GetMapping("/io/mode/info/site")
+    @ManagerAuth(memo = "鍏呯數妯″紡")
+    public R ioMode(){
+        List<Map<String, Object>> res = new ArrayList<>();
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+            Map<String, Object> map1 = new HashMap<>();
+            map1.put("floor", 1);
+            map1.put("modeVal", !devpThread.charge0);
+            map1.put("modeDesc", !devpThread.charge0?"鍏呯數涓�":"鍏抽棴");
+            res.add(map1);
+            Map<String, Object> map2 = new HashMap<>();
+            map2.put("floor", 2);
+            map2.put("modeVal", devpThread.charge1);
+            map2.put("modeDesc", devpThread.charge1?"鍏呯數涓�":"鍏抽棴");
+            res.add(map2);
+        }
+        return R.ok().add(res);
+    }
+
+    @PostMapping("/table/site")
+    @ManagerAuth(memo = "绔欑偣淇℃伅琛�")
+    public R siteTable(){
+        List<SiteTableVo> list = new ArrayList<>();
+        // 鍐呭瓨鏁版嵁
+        Map<Integer, StaProtocol> station = new HashMap<>();
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+            station.putAll(devpThread.getStation());
+        }
+        // 鎸佷箙鏁版嵁
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>().orderBy("dev_no"));
+        for (BasDevp devp : basDevps) {
+            SiteTableVo vo = new SiteTableVo();
+            vo.setDevNo(devp.getDevNo());    // 绔欑偣缂栧彿
+            list.add(vo);
+            StaProtocol staProtocol = station.get(devp.getDevNo());
+            if (null == staProtocol) { continue; }
+            vo.setWorkNo(staProtocol.getWorkNo());   //  宸ヤ綔鍙�
+            vo.setAutoing(staProtocol.isAutoing()?"Y":"N");     //  鑷姩
+            vo.setLoading(staProtocol.isLoading()?"Y":"N");     // 鏈夌墿
+            vo.setInEnable(staProtocol.isInEnable()?"Y":"N");   // 鍙叆
+            vo.setOutEnable(staProtocol.isOutEnable()?"Y":"N"); // 鍙嚭
+            vo.setLiftArrival(staProtocol.isLiftArrival()?"Y":"N"); // 鎻愬崌鏈哄埌浣嶄俊鍙�
+            vo.setShuttleTakeEnable(staProtocol.isShuttleTakeEnable()?"Y":"N"); // 绌挎杞﹀彲鍙栦俊鍙�
+            vo.setPakMk(staProtocol.isPakMk()?"Y":"N");       // 鍏ュ簱鏍囪
+            vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N");     // 绌烘澘淇″彿
+            vo.setStaNo(staProtocol.getStaNo());                // 鐩爣绔�
+        }
+        return R.ok().add(list);
+    }
+
+    @PostMapping("/table/plc/errors")
+    @ManagerAuth(memo = "杈撻�佽澶噋lc寮傚父淇℃伅琛�")
+    public R plcErrorTable(){
+        List<PlcErrorTableVo> list = new ArrayList<>();
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+            Map<Integer, StaProtocol> station = devpThread.getStation();
+
+            for(Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
+                StaProtocol staProtocol = entry.getValue();
+//                if (staProtocol) {
+//                    PlcErrorTableVo vo = new PlcErrorTableVo();
+//                    vo.setNo(entry.getKey());   //  搴忓彿
+//
+//                    vo.setPlcDesc("");  //  todo:luxiaotao plc閿欒鎻忚堪
+//                    vo.setError("");    //  todo:luxiaotao 寮傚父淇℃伅
+//                    list.add(vo);
+//                }
+            }
+
+        }
+
+        list.sort((o1, o2) -> {
+            if (o1.getNo().compareTo(o2.getNo()) > 0){
+                return 1;
+            }else if (o1.getNo().compareTo(o2.getNo()) < 0){
+                return 0;
+            }else{
+                return -1;
+            }
+
+        });
+        return R.ok().add(list);
+    }
+
+    @PostMapping("/output/site")
+    @ManagerAuth(memo = "绔欑偣璁惧鎶ユ枃鏃ュ織杈撳嚭")
+    public R siteOutput(){
+        StringBuilder str = new StringBuilder();
+        String s;
+        int i = 0;
+        while((s = OutputQueue.DEVP.poll()) != null && i <=10) {
+            str.append("\n").append(s);
+            i++;
+        }
+        return R.ok().add(str.toString());
+    }
+
+    /****************************************************************/
+    /************************** 璇︽儏鎿嶄綔 ******************************/
+    /****************************************************************/
+
+    @GetMapping("/detl/{siteId}")
+    public R siteDetl(@PathVariable("siteId") Integer siteId){
+        SiteTableVo vo = new SiteTableVo();
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+            Map<Integer, StaProtocol> station = devpThread.getStation();
+            for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
+                if (siteId.equals(entry.getKey())) {
+                    StaProtocol staProtocol = entry.getValue();
+                    vo.setDevNo(entry.getKey());    // 绔欑偣缂栧彿
+                    vo.setWorkNo(staProtocol.getWorkNo());   //  宸ヤ綔鍙�
+                    vo.setAutoing(staProtocol.isAutoing()?"Y":"N");     //  鑷姩
+                    vo.setLoading(staProtocol.isLoading()?"Y":"N");     // 鏈夌墿
+                    vo.setInEnable(staProtocol.isInEnable()?"Y":"N");   // 鍙叆
+                    vo.setOutEnable(staProtocol.isOutEnable()?"Y":"N"); // 鍙嚭
+                    vo.setPakMk(staProtocol.isPakMk()?"Y":"N");       // 闇�姹�1
+                    vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N");     // 绌烘澘淇″彿
+                    vo.setStaNo(staProtocol.getStaNo());                // 鐩爣绔�
+                    return R.ok().add(vo);
+                }
+            }
+        }
+        return R.error("plc宸叉帀绾�");
+    }
+
+    @PostMapping("/detl/update")
+    @ManagerAuth(memo = "淇敼绔欑偣鏁版嵁")
+    public R siteDetlUpdate(@RequestParam Integer siteId,
+                            @RequestParam Short workNo,
+                            @RequestParam Short staNo,
+                            @RequestParam String pakMk){
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+            Map<Integer, StaProtocol> station = devpThread.getStation();
+            for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
+                if (siteId.equals(entry.getKey())) {
+                    StaProtocol staProtocol = entry.getValue();
+                    staProtocol = staProtocol.clone();
+                    if (workNo != null) {
+                        staProtocol.setWorkNo(workNo);
+                    }
+                    if (staNo != null) {
+                        staProtocol.setStaNo(staNo);
+                    }
+                    if (pakMk != null) {
+                        staProtocol.setPakMk(pakMk.equals("Y"));
+                    }
+                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                    if (result) {
+                        return R.ok();
+                    } else {
+                        return R.error("涓嬪彂鍛戒护澶辫触");
+                    }
+                }
+            }
+        }
+        return R.error("plc宸叉帀绾�");
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/SteController.java b/src/main/java/com/zy/asrs/controller/SteController.java
deleted file mode 100644
index caf6d76..0000000
--- a/src/main/java/com/zy/asrs/controller/SteController.java
+++ /dev/null
@@ -1,390 +0,0 @@
-package com.zy.asrs.controller;
-
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.core.annotations.ManagerAuth;
-import com.core.common.BaseRes;
-import com.core.common.Cools;
-import com.core.common.R;
-import com.core.exception.CoolException;
-import com.zy.asrs.domain.enums.CrnStatusType;
-import com.zy.asrs.domain.param.SteModeParam;
-import com.zy.asrs.domain.param.SteOperatorParam;
-import com.zy.asrs.domain.vo.SteDataVo;
-import com.zy.asrs.domain.vo.SteMsgTableVo;
-import com.zy.asrs.domain.vo.SteSensorDataVo;
-import com.zy.asrs.domain.vo.SteStateTableVo;
-import com.zy.asrs.entity.BasSte;
-import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.service.BasSteService;
-import com.zy.asrs.service.WrkMastService;
-import com.zy.core.cache.MessageQueue;
-import com.zy.core.cache.OutputQueue;
-import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.SlaveType;
-import com.zy.core.enums.SteTaskModeType;
-import com.zy.core.model.SteSlave;
-import com.zy.core.model.Task;
-import com.zy.core.model.command.SteCommand;
-import com.zy.core.model.protocol.SteProtocol;
-import com.zy.core.properties.SlaveProperties;
-import com.zy.core.properties.SystemProperties;
-import com.zy.core.thread.SteThread;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 绌挎杞︽帴鍙�
- * Created by vincent on 2022/3/14
- */
-@Slf4j
-@RestController
-@RequestMapping("/ste")
-public class SteController {
-
-    @Autowired
-    private SlaveProperties slaveProperties;
-    @Autowired
-    private BasSteService basSteService;
-    @Autowired
-    private WrkMastService wrkMastService;
-
-    @PostMapping("/table/ste/state")
-    @ManagerAuth(memo = "绌挎杞︿俊鎭〃")
-    public R steStateTable(){
-        List<SteStateTableVo> list = new ArrayList<>();
-        List<BasSte> stes = basSteService.selectList(new EntityWrapper<BasSte>().orderBy("ste_no"));
-        for (BasSte basSte : stes) {
-            // 琛ㄦ牸琛�
-            SteStateTableVo vo = new SteStateTableVo();
-            vo.setSteNo(basSte.getSteNo());   //  绌挎杞﹀彿
-            list.add(vo);
-            // 鑾峰彇绌挎杞︿俊鎭�
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, basSte.getSteNo());
-            if (steThread == null) {
-                continue;
-            }
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) {
-                continue;
-            }
-            vo.setTaskNo(steProtocol.getTaskNo().intValue());  //  浠诲姟鍙�
-            vo.setStatusVal(steProtocol.getMode().intValue());  // 鍦ㄧ嚎鐘舵��
-            vo.setStatusType(steProtocol.mode == 0 ? "绂荤嚎" : "鍦ㄧ嚎");   //  妯″紡鐘舵��
-            if (!Cools.isEmpty(steProtocol.getStatus())) {
-                vo.setStatus(steProtocol.getStatusType().desc);     //  鐘舵��
-            }
-            if (!Cools.isEmpty(steProtocol.getLoad())) {
-                vo.setLoading(steProtocol.getLoad()==1?"鉁�":"脳");  //  鏈夌墿
-            }
-            if (!Cools.isEmpty(steProtocol.getWaiting())) {
-                vo.setWaiting(steProtocol.getWaiting()?"鉁�":"脳");
-            }
-            vo.setRow(steProtocol.getRow());
-            vo.setBay(steProtocol.getBay());
-            vo.setLev(steProtocol.getLev());
-            vo.setCharge(steProtocol.getCharge() + "%");
-            if (!Cools.isEmpty(steProtocol.getLoca())) {
-                vo.setLoca(steProtocol.getLocaType().desc);
-            }
-            vo.setSpeed(steProtocol.getSpeed());
-            vo.setCloser(steProtocol.getCloser());
-            if (!Cools.isEmpty(steProtocol.getPos())) {
-                vo.setPos(steProtocol.getPos()==0?"浣庝綅":"楂樹綅");
-            }
-            if (!Cools.isEmpty(steProtocol.getTrack())) {
-                vo.setTrack(steProtocol.getTrack()==0?"鉁�":"脳");
-            }
-            if (!Cools.isEmpty(steProtocol.getChargeStatus())) {
-                vo.setChargeStatus(steProtocol.getChargeStatus()==1?"鉁�":"脳");
-            }
-            if (!Cools.isEmpty(steProtocol.getAlarm())) {
-                vo.setAlarm1(String.valueOf(steProtocol.getAlarm()));
-            }
-            if (!Cools.isEmpty(steProtocol.getAlarm0())) {
-                vo.setAlarm2(String.valueOf(steProtocol.getAlarm0()));
-            }
-        }
-        return R.ok().add(list);
-    }
-
-    @PostMapping("/table/ste/msg")
-    @ManagerAuth(memo = "绌挎杞︽暟鎹〃")
-    public R steMsgTable(){
-        List<SteMsgTableVo> list = new ArrayList<>();
-        List<BasSte> stes = basSteService.selectList(new EntityWrapper<BasSte>().orderBy("ste_no"));
-        for (BasSte basSte : stes) {
-            // 琛ㄦ牸琛�
-            SteMsgTableVo vo = new SteMsgTableVo();
-            vo.setSteNo(basSte.getSteNo());   //  绌挎杞﹀彿
-            list.add(vo);
-            // 鑾峰彇绌挎杞︿俊鎭�
-            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, basSte.getSteNo());
-            if (steThread == null) {
-                continue;
-            }
-            SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) {
-                continue;
-            }
-
-            vo.setWorkNo(steProtocol.getTaskNo().intValue());  //  浠诲姟鍙�
-            if (steProtocol.getTaskNo() > 0) {
-                WrkMast wrkMast = wrkMastService.selectById(steProtocol.getTaskNo());
-                if (wrkMast != null) {
-                    vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc());   //  妯″紡鐘舵��
-                    vo.setSourceStaNo(wrkMast.getSourceStaNo$());    //  婧愮珯
-                    vo.setStaNo(wrkMast.getStaNo$());   //  鐩爣绔�
-                    vo.setSourceLocNo(wrkMast.getSourceLocNo());    //  婧愬簱浣�
-                    vo.setLocNo(wrkMast.getLocNo());    //  鐩爣搴撲綅
-                }
-            } else {
-                vo.setStatus(steProtocol.mode == 1? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  妯″紡鐘舵��
-            }
-            vo.setSpeed(steProtocol.getSpeed());  // 閫熷害
-            vo.setCloser(steProtocol.getCloser());  // 杩戠偣璺濈
-            vo.setPakMk(steProtocol.getPakMk());    // 浣滀笟鏍囪
-        }
-        return R.ok().add(list);
-    }
-
-    @PostMapping("/output/ste")
-    @ManagerAuth
-    public R steOutput(){
-        StringBuilder str = new StringBuilder();
-        String s;
-        int i = 0;
-        while((s = OutputQueue.STE.poll()) != null && i <=10) {
-            str.append("\n").append(s);
-            i++;
-        }
-        return R.ok().add(str.toString());
-    }
-
-    @GetMapping("/detl/{steNo}")
-    public R steDetl(@PathVariable("steNo") Integer steNo){
-        SteDataVo vo = new SteDataVo();
-        for (SteSlave ste : slaveProperties.getSte()) {
-            if (steNo.equals(ste.getId())) {
-                vo.setSteNo(ste.getId());
-                BasSte basSte = basSteService.selectById(ste.getId());
-                if (!Cools.isEmpty(basSte)) {
-                    vo.setRow(basSte.getRow());
-                    vo.setBay(basSte.getBay());
-                    vo.setLev(basSte.getLev());
-                    vo.setCrnNo(basSte.getCrnNo());
-                    vo.setWorkNo(basSte.getWrkNo());
-                    vo.setPakMk(basSte.getPakMk());
-                }
-                break;
-            }
-        }
-        return R.ok().add(vo);
-    }
-
-    @GetMapping("/sensor/detl/{steNo}")
-    public R steSensorDetl(@PathVariable("steNo") Integer steNo){
-        SteSensorDataVo vo = new SteSensorDataVo();
-        for (SteSlave ste : slaveProperties.getSte()) {
-            if (steNo.equals(ste.getId())) {
-                vo.setSteNo(ste.getId());
-                // 鑾峰彇绌挎杞︿俊鎭�
-                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
-                if (steThread == null) {
-                    return R.error("璁惧涓嶅湪绾�");
-                }
-                SteProtocol steProtocol = steThread.getSteProtocol();
-                if (steProtocol == null) {
-                    return R.error("璁惧涓嶅湪绾�");
-                }
-
-                // 绌挎杞﹀紓甯� -----------
-                vo.setLiftErr(steProtocol.isLiftErr());
-                vo.setInFetchErr(steProtocol.isInFetchErr());
-                vo.setOutFetchErr(steProtocol.isOutFetchErr());
-                vo.setAntiErr(steProtocol.isAntiErr());
-                vo.setLiftSwitchErr(steProtocol.isLiftSwitchErr());
-                vo.setTrackErr(steProtocol.isTrackErr());
-                vo.setTimeoutErr(steProtocol.isTimeoutErr());
-                vo.setConnectErr(steProtocol.isConnectErr());
-                vo.setEmergencyErr(steProtocol.isEmergencyErr());
-                vo.setTaskTypeErr(steProtocol.isTaskTypeErr());
-                vo.setTaskNoErr(steProtocol.isTaskNoErr());
-                vo.setNewTaskErr(steProtocol.isNewTaskErr());
-                vo.setErrTaskErr(steProtocol.isErrTaskErr());
-                vo.setStopErr(steProtocol.isStopErr());
-                vo.setOfflineTaskErr(steProtocol.isOfflineTaskErr());
-                vo.setStartTaskErr(steProtocol.isStartTaskErr());
-                vo.setVoltageTaskErr(steProtocol.isVoltageTaskErr());
-                vo.setDevpErr(steProtocol.isDevpErr());
-
-                // 绌挎杞︽彁绀轰俊鎭� ----------------------
-                vo.setOnline(steProtocol.isOnline());
-                vo.setNotOnTrack(steProtocol.isNotOnTrack());
-                vo.setLowVoltage(steProtocol.isLowVoltage());
-                vo.setElectricityLoss(steProtocol.isElectricityLoss());
-                vo.setForcedTravel(steProtocol.isForcedTravel());
-                vo.setDemoMode(steProtocol.isDemoMode());
-                vo.setBrushConnect(steProtocol.isBrushConnect());
-                vo.setTaskManualForbid(steProtocol.isTaskManualForbid());
-                vo.setOnlineManualForbid(steProtocol.isOnlineManualForbid());
-                vo.setDevpEmergency(steProtocol.isDevpEmergency());
-                vo.setTaskInterrupt(steProtocol.isTaskInterrupt());
-                vo.setTaskClear(steProtocol.isTaskClear());
-                vo.setTaskConfirmTimeout(steProtocol.isTaskConfirmTimeout());
-                vo.setTaskWithCharge(steProtocol.isTaskWithCharge());
-
-                // 浠诲姟淇℃伅 ----------------
-                vo.setPakInTask(steProtocol.isPakInTask());
-                vo.setPakOutTask(steProtocol.isPakOutTask());
-                vo.setPakMoveTask(steProtocol.isPakMoveTask());
-                vo.setGoHpTask(steProtocol.isGoHpTask());
-                vo.setGoOHpTask(steProtocol.isGoOHpTask());
-                vo.setGoHpAvoid(steProtocol.isGoHpAvoid());
-                vo.setGoOHpAvoid(steProtocol.isGoOHpAvoid());
-                vo.setPakInEmpty(steProtocol.isPakInEmpty());
-                vo.setPakInFinish(steProtocol.isPakInFinish());
-                vo.setPakOutEmpty(steProtocol.isPakOutEmpty());
-                vo.setPakOutFinish(steProtocol.isPakOutFinish());
-                vo.setGoHpAvoidFinish(steProtocol.isGoHpAvoidFinish());
-                vo.setGoOHpAvoidFinish(steProtocol.isGoOHpAvoidFinish());
-                vo.setGoHpAvoidErr(steProtocol.isGoHpAvoidErr());
-                vo.setGoOHpAvoidErr(steProtocol.isGoOHpAvoidErr());
-
-                // 鐘舵�佷俊鎭� -------------
-                vo.setAutoMode(steProtocol.isAutoMode());
-                vo.setVoltageLow(steProtocol.isVoltageLow());
-                break;
-            }
-        }
-        return R.ok().add(vo);
-    }
-
-    @PostMapping("/detl/update")
-    @ManagerAuth
-    public R steUpdate(SteDataVo vo){
-        BasSte basSte = basSteService.selectById(vo.getSteNo());
-        if (basSte == null) {
-            return R.error();
-        }
-        // 鑾峰彇绌挎杞︿俊鎭�
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, vo.getSteNo());
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) {
-           throw new CoolException(vo.getSteNo() + "鍙风┛姊溅涓嶅湪绾匡紝鏃犳硶淇濆瓨");
-        }
-        if (!Cools.isEmpty(vo.getRow(), vo.getBay(), vo.getLev())) {
-            if (!steThread.modifyPosHandle(vo.getRow(), vo.getBay(), vo.getLev())) {
-                throw new CoolException("鏈嶅姟鍣ㄩ敊璇�");
-            }
-        }
-        SteCommand steCommand = new SteCommand();
-        steCommand.setTaskNo(vo.getWorkNo());
-        if (MessageQueue.offer(SlaveType.Ste, vo.getSteNo(), new Task(2, steCommand))) {
-        } else {
-            throw new CoolException("鍛戒护涓嬪彂澶辫触");
-        }
-        basSte.setRow(vo.getRow());
-        basSte.setBay(vo.getBay());
-        basSte.setLev(vo.getLev());
-
-        basSte.setPakMk(vo.getPakMk());
-        basSte.setWrkNo(vo.getWorkNo());
-        basSte.setCrnNo(vo.getCrnNo());
-        basSte.setUpdateTime(new Date());
-        if (!basSteService.updateById(basSte)) {
-            throw new CoolException("淇敼澶辫触");
-        }
-        return R.ok();
-    }
-
-
-    /****************************************************************/
-    /************************** 鎵嬪姩鎿嶄綔 ******************************/
-    /****************************************************************/
-
-    @PostMapping("/mode/switch")
-    @ManagerAuth
-    public R crnDemo(SteModeParam param) throws InterruptedException {
-        if (Cools.isEmpty(param.getSteNo())){
-            return R.error();
-        }
-        if (Cools.isEmpty(param.getPassword())){
-            return R.error("璇疯緭鍏ュ彛浠�");
-        }
-        if (!param.getPassword().equals(SystemProperties.WCS_PASSWORD)){
-            return R.error("鍙d护閿欒");
-        }
-        Thread.sleep(200L);
-        for (SteSlave steSlave : slaveProperties.getSte()) {
-            if (steSlave.getId().equals(param.getSteNo())) {
-                // 鑾峰彇绌挎杞︿俊鎭�
-                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steSlave.getId());
-                SteProtocol steProtocol = steThread.getSteProtocol();
-                if (steProtocol == null) { continue; }
-                SteCommand steCommand = new SteCommand();
-                steCommand.setSteNo(param.getSteNo()); // 绌挎杞︾紪鍙�
-                if (steProtocol.getMode() == 0) {
-                    steCommand.setControlMode((short) 1);
-                } else {
-                    steCommand.setControlMode((short) 0);
-                }
-                if (MessageQueue.offer(SlaveType.Ste, param.getSteNo(), new Task(2, steCommand))) {
-                    return R.ok();
-                } else {
-                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
-                }
-            }
-        }
-        return R.ok();
-    }
-
-    @ManagerAuth(memo = "鎵嬪姩鎿嶄綔")
-    @PostMapping("/operator/ste")
-    public R steOperator(SteOperatorParam param){
-        if (Cools.isEmpty(param.getSteNo(), param.getSteTaskMode())) {
-            return R.parse(BaseRes.PARAM);
-        }
-
-        for (SteSlave ste : slaveProperties.getSte()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            if (param.getSteNo().equals(ste.getId())) {
-                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
-                if (steThread == null) {
-                    throw new CoolException("绌挎杞︿笉鍦ㄧ嚎");
-                }
-                SteProtocol steProtocol = steThread.getSteProtocol();
-                if (steProtocol == null) {
-                    throw new CoolException("绌挎杞︿笉鍦ㄧ嚎");
-                }
-                SteTaskModeType steTaskModeType = SteTaskModeType.get(param.getSteTaskMode());
-                SteCommand steCommand = new SteCommand();
-                steCommand.setSteNo(ste.getId()); // 绌挎杞︾紪鍙�
-                if (param.getSteTaskMode() == 16) {
-                    steCommand.setComplete(true);
-                } else if (param.getSteTaskMode() == 99) {
-                    steCommand.setControlMode((short) 1);
-                } else if (param.getSteTaskMode() == 100) {
-                    steCommand.setControlMode((short) 0);
-                } else {
-                    if (steTaskModeType == null) {
-                        throw new CoolException("浠诲姟绫诲瀷閿欒");
-                    }
-                    steCommand.setTaskNo(param.getTaskNo()); // 宸ヤ綔鍙�
-                    steCommand.setTaskMode(steTaskModeType);
-                }
-                if (MessageQueue.offer(SlaveType.Ste, ste.getId(), new Task(2, steCommand))) {
-                    return R.ok();
-                } else {
-                    throw new CoolException("鍛戒护涓嬪彂澶辫触");
-                }
-            }
-        }
-        return R.error();
-    }
-
-}
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index 860704d..4bf80eb 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.FieldStrategy;
 import com.baomidou.mybatisplus.enums.IdType;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
@@ -329,6 +330,13 @@
     @TableField("shuttle_no")
     private Integer shuttleNo;
 
+    /**
+     * 鎻愬崌鏈哄彿
+     */
+    @ApiModelProperty(value= "鎻愬崌鏈哄彿")
+    @TableField(value = "lift_no",strategy = FieldStrategy.IGNORED)
+    private Integer liftNo;
+
     public String getWrkSts$(){
         BasWrkStatusMapper mapper = SpringUtils.getBean(BasWrkStatusMapper.class);
         BasWrkStatus entity = mapper.selectById(this.wrkSts);
diff --git a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java b/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
index d1d78b6..eb7c2e9 100644
--- a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
@@ -21,4 +21,6 @@
     BasDevp queryByLocNo(String locNo);
 
     BasDevp queryByQrCode(Integer qrCodeValue);
+
+    List<BasDevp> selectLevSite();
 }
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 0bf2156..fa3fc7d 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -101,12 +101,16 @@
 
     WrkMast selectByWorkNo(Integer workNo);
 
-    WrkMast selectLiftStep262327();
+    List<WrkMast> selectLiftStep262327();
 
     WrkMast selectByWorkNo372428(Integer workNo);
 
     List<WrkMast> selectBy2125();
 
     //鏌ヨ鎸囧畾妤煎眰寰呭垎閰嶈溅杈嗙殑浠诲姟
-    List<LocMast> selectNoShuttleWrkByLev(String lev);
+    List<WrkMast> selectNoShuttleWrkByLev(String lev);
+
+    List<WrkMast> selectShuttleWrkByLev(String lev);
+
+    WrkMast selectLiftWrkMast(Integer liftNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/BasDevpService.java b/src/main/java/com/zy/asrs/service/BasDevpService.java
index d2f4d38..661fb2f 100644
--- a/src/main/java/com/zy/asrs/service/BasDevpService.java
+++ b/src/main/java/com/zy/asrs/service/BasDevpService.java
@@ -50,4 +50,7 @@
 
     BasDevp queryByQrCode(Integer qrCodeValue);
 
+    //鑾峰彇鍥涘眰妤肩珯鐐�105,106,107,108
+    List<BasDevp> selectLevSite();
+
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkMastService.java b/src/main/java/com/zy/asrs/service/WrkMastService.java
index 3814bd2..ac64813 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -15,6 +15,9 @@
     List<WrkMast> selectToBeHistoryData();
 
     //鏌ヨ鎸囧畾妤煎眰寰呭垎閰嶈溅杈嗙殑浠诲姟
-    List<LocMast> selectNoShuttleWrkByLev(Integer lev);
+    List<WrkMast> selectNoShuttleWrkByLev(Integer lev);
+
+    //鏌ヨ鎸囧畾妤煎眰宸插垎閰嶈溅杈嗙殑浠诲姟
+    List<WrkMast> selectShuttleWrkByLev(Integer lev);
 
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
index f3c5e17..304adf1 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
@@ -79,4 +79,9 @@
     public BasDevp queryByQrCode(Integer qrCodeValue) {
         return this.baseMapper.queryByQrCode(qrCodeValue);
     }
+
+    @Override
+    public List<BasDevp> selectLevSite() {
+        return this.baseMapper.selectLevSite();
+    }
 }
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 a2060cb..f9bc9dc 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -673,15 +673,31 @@
                     if (wrkMast != null) {
                         if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 8) {
                             ShuttleThread shuttleThread = null;
+                            ShuttleProtocol shuttleProtocol = null;
                             HashMap<String, Object> searchIdleShuttle = null;
 
                             LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
                             LiftProtocol liftProtocol = liftThread.getLiftProtocol();
 
                             if (wrkMast.getWrkSts() == 4) {
-                                //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅
-                                searchIdleShuttle = this.searchIdleShuttle(wrkMast);
-                                shuttleThread = (ShuttleThread) searchIdleShuttle.get("result");
+                                if (wrkMast.getShuttleNo() == null) {
+                                    //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅
+                                    searchIdleShuttle = this.searchIdleShuttle(wrkMast);
+                                    shuttleThread = (ShuttleThread) searchIdleShuttle.get("result");
+                                    wrkMast.setShuttleNo(shuttleThread.getSlave().getId());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
+                                    wrkMastMapper.updateById(wrkMast);
+                                    shuttleProtocol = shuttleThread.getShuttleProtocol();
+                                    if (!shuttleProtocol.isIdle()) {
+                                        continue;
+                                    }
+                                }else {
+                                    //鐩存帴浣跨敤浠诲姟淇濆瓨涓殑灏忚溅
+                                    shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+                                    shuttleProtocol = shuttleThread.getShuttleProtocol();
+                                    if (!shuttleProtocol.isIdle(workNo)) {
+                                        continue;
+                                    }
+                                }
                             }else if(wrkMast.getWrkSts() == 8){//鐘舵��8锛岄渶瑕佸悜灏忚溅涓嬪彂鍛戒护浠庢彁鍗囨満绉诲姩鍑哄幓锛岄渶瑕佸垽鏂彁鍗囨満鐘舵槸鍚︾┖闂层�佹彁鍗囨満鏄惁鍒拌揪鐩爣妤煎眰銆佺洰鏍囨ゼ灞傜珯鐐规槸鍚﹀瓨鍦ㄣ�佺洰鏍囨ゼ灞傜珯鐐规槸鍚︾粰鍑烘彁鍗囨満鍒颁綅淇″彿
                                 //鐘舵��8锛岀瓑寰呭懡浠よ繘琛屽叆搴撴惉杩愬姩浣�
 
@@ -719,14 +735,17 @@
 
                                 Integer shuttleNo = wrkMast.getShuttleNo();//鍥涘悜绌挎杞﹀彿
                                 shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+                                shuttleProtocol = shuttleThread.getShuttleProtocol();
+                                if (!shuttleProtocol.isIdle(workNo)) {
+                                    continue;
+                                }
                             }
 
                             if (shuttleThread == null) {
                                 continue;
                             }
 
-                            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-                            if (!shuttleProtocol.isIdle()) {
+                            if (shuttleProtocol == null) {
                                 continue;
                             }
 
@@ -751,55 +770,118 @@
                             //鎻愬崌鏈哄彛绔欑偣搴撲綅鍙�
                             String liftSiteLocNo = Utils.levToOutInStaLocNo(currentLev);
 
-                            if (wrkMast.getWrkSts() == 8 || Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) {
-                                //鍚屼竴灞傜洿鎺ュ彇璐ф棤闇�缁忚繃鎻愬崌鏈�
+                            if (wrkMast.getWrkSts() == 4) {
+                                if (currentLev == Utils.getLev(locNo)) {
+                                    //灏忚溅鍜岀洰鏍囧湪鍚屼竴妤煎眰
+                                    //鐩存帴璁$畻杞﹀埌鎻愬崌鏈哄彇璐у啀鍒板簱浣嶈矾寰勬寚浠�
+                                    List<ShuttleCommand> commands = this.shuttleAssignCommand(wrkMast.getWrkSts() == 4 ? currentLocNo : liftSiteLocNo, liftSiteLocNo, locNo, assignCommand, shuttleThread);
+                                    if (commands == null) {
+                                        continue;//鎵句笉鍒拌矾寰勭瓑寰呬笅涓�娆�
+                                    }
+                                    assignCommand.setCommands(commands);
+                                    //鍒嗛厤鐩爣搴撲綅
+                                    shuttleProtocol.setLocNo(wrkMast.getLocNo());
+                                    //鐩爣搴撲綅
+                                    assignCommand.setLocNo(wrkMast.getLocNo());
+                                    wrkMast.setWrkSts(9L);//灏忚溅鍏ュ簱涓�
+                                }else {
+                                    //灏忚溅鍜岀洰鏍囦笉鍦ㄥ悓涓�妤煎眰
+                                    //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞
+                                    List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
+                                    if (commands == null) {
+                                        continue;//鏈壘鍒拌矾寰�
+                                    }
+
+                                    //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅
+                                    BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo);
+                                    Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮�
+
+                                    //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护
+                                    ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1400, ShuttleRunDirection.TOP.id, endStartCode, 1400, 500);
+                                    commands.add(moveCommand);
+
+                                    //鍒嗛厤鐩爣搴撲綅
+                                    shuttleProtocol.setLocNo(liftSiteLocNo);
+                                    //鐩爣搴撲綅
+                                    assignCommand.setLocNo(liftSiteLocNo);
+                                    assignCommand.setCommands(commands);
+                                    wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵��
+                                }
+                            } else if (wrkMast.getWrkSts() == 8) {
                                 //鐩存帴璁$畻杞﹀埌鎻愬崌鏈哄彇璐у啀鍒板簱浣嶈矾寰勬寚浠�
                                 List<ShuttleCommand> commands = this.shuttleAssignCommand(wrkMast.getWrkSts() == 4 ? currentLocNo : liftSiteLocNo, liftSiteLocNo, locNo, assignCommand, shuttleThread);
                                 if (commands == null) {
                                     continue;//鎵句笉鍒拌矾寰勭瓑寰呬笅涓�娆�
                                 }
-                                if (wrkMast.getWrkSts() == 8) {
-                                    //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
-                                    Integer staNo = Utils.levToOutInStaNo(currentLev >= 2 ? currentLev + 1 : currentLev);//绔欑偣鍙�
-                                    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, 1400, runDirection, startCode, 1400, 500);
-                                    commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
-                                }
+                                //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
+                                Integer staNo = Utils.levToOutInStaNo(currentLev >= 2 ? currentLev + 1 : currentLev);//绔欑偣鍙�
+                                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, 1400, runDirection, startCode, 1400, 500);
+                                commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
+
                                 assignCommand.setCommands(commands);
                                 //鍒嗛厤鐩爣搴撲綅
                                 shuttleProtocol.setLocNo(wrkMast.getLocNo());
                                 //鐩爣搴撲綅
                                 assignCommand.setLocNo(wrkMast.getLocNo());
                                 wrkMast.setWrkSts(9L);//灏忚溅鍏ュ簱涓�
-                            }else {
-                                //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿
-
-                                //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞
-                                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
-                                if (commands == null) {
-                                    continue;//鏈壘鍒拌矾寰�
-                                }
-
-                                //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅
-                                BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo);
-                                Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮�
-
-                                //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护
-                                ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1400, ShuttleRunDirection.TOP.id, endStartCode, 1400, 500);
-                                commands.add(moveCommand);
-
-                                //鍒嗛厤鐩爣搴撲綅
-                                shuttleProtocol.setLocNo(liftSiteLocNo);
-                                //鐩爣搴撲綅
-                                assignCommand.setLocNo(liftSiteLocNo);
-                                assignCommand.setCommands(commands);
-                                wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵��
                             }
+
+//                            if (wrkMast.getWrkSts() == 8 || Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) {
+//                                //鍚屼竴灞傜洿鎺ュ彇璐ф棤闇�缁忚繃鎻愬崌鏈�
+//                                //鐩存帴璁$畻杞﹀埌鎻愬崌鏈哄彇璐у啀鍒板簱浣嶈矾寰勬寚浠�
+//                                List<ShuttleCommand> commands = this.shuttleAssignCommand(wrkMast.getWrkSts() == 4 ? currentLocNo : liftSiteLocNo, liftSiteLocNo, locNo, assignCommand, shuttleThread);
+//                                if (commands == null) {
+//                                    continue;//鎵句笉鍒拌矾寰勭瓑寰呬笅涓�娆�
+//                                }
+//                                if (wrkMast.getWrkSts() == 8) {
+//                                    //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
+//                                    Integer staNo = Utils.levToOutInStaNo(currentLev >= 2 ? currentLev + 1 : currentLev);//绔欑偣鍙�
+//                                    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, 1400, runDirection, startCode, 1400, 500);
+//                                    commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
+//                                }
+//                                assignCommand.setCommands(commands);
+//                                //鍒嗛厤鐩爣搴撲綅
+//                                shuttleProtocol.setLocNo(wrkMast.getLocNo());
+//                                //鐩爣搴撲綅
+//                                assignCommand.setLocNo(wrkMast.getLocNo());
+//                                wrkMast.setWrkSts(9L);//灏忚溅鍏ュ簱涓�
+//                            }else {
+//                                //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿
+//
+//                                //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞
+//                                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
+//                                if (commands == null) {
+//                                    continue;//鏈壘鍒拌矾寰�
+//                                }
+//
+//                                //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅
+//                                BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo);
+//                                Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮�
+//
+//                                //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护
+//                                ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1400, ShuttleRunDirection.TOP.id, endStartCode, 1400, 500);
+//                                commands.add(moveCommand);
+//
+//                                //鍒嗛厤鐩爣搴撲綅
+//                                shuttleProtocol.setLocNo(liftSiteLocNo);
+//                                //鐩爣搴撲綅
+//                                assignCommand.setLocNo(liftSiteLocNo);
+//                                assignCommand.setCommands(commands);
+//                                wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵��
+//                            }
 
                             if (wrkMastMapper.updateById(wrkMast) > 0) {
                                 //涓嬪彂浠诲姟
@@ -994,9 +1076,19 @@
                     LiftProtocol liftProtocol = liftThread.getLiftProtocol();
 
                     if (wrkMast.getWrkSts() == 21) {
-                        //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅
-                        searchIdleShuttle = this.searchIdleShuttle(wrkMast);
-                        shuttleThread = (ShuttleThread) searchIdleShuttle.get("result");
+                        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锛岄渶瑕佸悜灏忚溅涓嬪彂鍛戒护浠庢彁鍗囨満绉诲姩鍑哄幓锛岄渶瑕佸垽鏂彁鍗囨満鐘舵槸鍚︾┖闂层�佹彁鍗囨満鏄惁鍒拌揪鐩爣妤煎眰銆佺洰鏍囨ゼ灞傜珯鐐规槸鍚﹀瓨鍦ㄣ�佺洰鏍囨ゼ灞傜珯鐐规槸鍚︾粰鍑烘彁鍗囨満鍒颁綅淇″彿
 
                         //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
@@ -1051,17 +1143,16 @@
                         continue;
                     }
 
-                    if (!shuttleProtocol.isIdle()) {
-                        continue;
-                    }
-
                     if (outStaLocNo == null) {
                         continue;
                     }
 
                     if (wrkMast.getWrkSts() == 21) {
 
-                        wrkMast.setShuttleNo(shuttleProtocol.getShuttleNo().intValue());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
+                        if (!shuttleProtocol.isIdle()) {
+                            continue;
+                        }
+
                         //婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
                         String currentLocNo = shuttleProtocol.getCurrentLocNo();
 
@@ -1080,7 +1171,7 @@
                         assignCommand.setSourceLocNo(currentLocNo);
 
                         //鍒ゆ柇灏忚溅鍜屽簱浣嶆槸鍚﹀湪鍚屼竴灞�
-                        if (Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) {
+                        if (currentLev == Utils.getLev(wrkMast.getSourceLocNo())) {
                             //鍚屼竴灞�(灏嗗皬杞︾Щ鍔ㄥ埌璐х墿浣嶇疆)
 
                             List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftSiteLocNo, assignCommand, shuttleThread);
@@ -1140,6 +1231,9 @@
                             }
                         }
                     } else if (wrkMast.getWrkSts() == 25) {
+                        if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
+                            continue;
+                        }
 
                         wrkMast.setShuttleNo(shuttleProtocol.getShuttleNo().intValue());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
 
@@ -1212,6 +1306,18 @@
             distLocNo = locNo;
         }
 
+        //鍒ゆ柇褰撳墠浠诲姟鎵�鍦ㄦゼ灞傛槸鍚︽湁鍏朵粬浠诲姟宸茬粡鍒嗛厤浜嗗皬杞︼紝濡傛湁鍒欑洿鎺ョ敤璇ュ皬杞�(涓�灞傛ゼ浠呭垎閰嶄竴鍙拌溅)
+        List<WrkMast> wrkMasts = wrkMastService.selectShuttleWrkByLev(lev);//鍒ゆ柇褰撳墠绌挎杞︽ゼ灞傛槸鍚﹀凡鏈夊垎閰嶈溅杈嗙殑浠诲姟锛屽鏋滄湁鍒欏垎閰嶈繖杈嗚溅
+        if (wrkMasts.size() > 0) {
+            //瀛樺湪鍏朵粬浠诲姟锛屽垎閰嶈繖杈嗚溅
+            WrkMast wrkMast1 = wrkMasts.get(0);
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast1.getShuttleNo());
+
+            map.put("sameLay", true);//鍚屽眰
+            map.put("result", shuttleThread);
+            return map;
+        }
+
         for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
             ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
@@ -1246,27 +1352,18 @@
 
         }
 
+        Integer recentAllDistance = 9999999;
         if (sameLev.size() > 0) {
             //鍚屼竴妤煎眰鏈夌┖闂茬┛姊溅锛屽垯鍙湪宸ヤ綔妗fゼ灞傚鎵�
             //瀵绘壘绂讳换鍔℃渶杩戠殑绌挎杞�
             for (ShuttleThread shuttleThread : sameLev) {
-                if (recentShuttle == null) {//鏈�杩戠┛姊溅涓虹┖锛屽垯榛樿璧嬩簣涓烘渶杩戠┛姊溅
-                    recentShuttle = shuttleThread;
-                }
-
                 //褰撳墠绌挎杞﹀簱浣嶅彿
                 String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo();
-                //鐩墠鏈�杩戠┛姊溅搴撲綅鍙�
-                String recentLocNo = recentShuttle.getShuttleProtocol().getCurrentLocNo();
-
-                //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒扮洰鏍囧湴鐐硅窛绂�
-                List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, distLocNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(recentShuttle.getSlave().getId(), Utils.getLev(recentLocNo)));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
                 //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
                 List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, distLocNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), Utils.getLev(currentLocNo)));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
-                if (recentShuttlePath == null || currentShuttlePath == null) {
+                if (currentShuttlePath == null) {
                     continue;
                 }
-                Integer recentAllDistance = NavigateUtils.getOriginPathAllDistance(recentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
                 Integer currentAllDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
                 if (currentAllDistance < recentAllDistance) {
                     //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅
@@ -1284,29 +1381,18 @@
                 //褰撳墠绌挎杞﹀簱浣嶅彿
                 String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo();
                 int currentLev = Utils.getLev(currentLocNo);
-                List<LocMast> locMasts = wrkMastService.selectNoShuttleWrkByLev(currentLev);//鍒ゆ柇褰撳墠绌挎杞︽ゼ灞傛槸鍚︽湁寰呭垎閰嶈溅杈嗙殑浠诲姟锛屽鏋滄湁鍒欎笉鍒嗛厤杩欒締杞�
-                if (locMasts.size() > 0) {
+                List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//鍒ゆ柇褰撳墠绌挎杞︽ゼ灞傛槸鍚︽湁寰呭垎閰嶈溅杈嗙殑浠诲姟锛屽鏋滄湁鍒欎笉鍒嗛厤杩欒締杞�
+                if (wrkMasts1.size() > 0) {
                     //瀛樺湪鍏朵粬浠诲姟锛岃烦杩囪繖杈嗚溅
                     continue;
                 }
 
-                if (recentShuttle == null) {//鏈�杩戠┛姊溅涓虹┖锛屽垯榛樿璧嬩簣涓烘渶杩戠┛姊溅
-                    recentShuttle = shuttleThread;
-                }
-                //鐩墠鏈�杩戠┛姊溅搴撲綅鍙�
-                String recentLocNo = recentShuttle.getShuttleProtocol().getCurrentLocNo();
-                int recentLev = Utils.getLev(recentLocNo);
-
-
-                //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒板綋鍓嶈溅瀛愭墍鍦ㄦゼ灞傜殑鎻愬崌鏈哄彛璺濈
-                List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, Utils.levToOutInStaLocNo(recentLev), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), recentLev));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
                 //褰撳墠绌挎杞︾嚎绋嬪埌褰撳墠杞﹀瓙鎵�鍦ㄦゼ灞傜殑鎻愬崌鏈哄彛璺濈
                 List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, Utils.levToOutInStaLocNo(currentLev), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), currentLev));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
-                if (recentShuttlePath == null || currentShuttlePath == null) {
+                if (currentShuttlePath == null) {
                     continue;
                 }
 
-                Integer recentAllDistance = NavigateUtils.getOriginPathAllDistance(recentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
                 Integer currentAllDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
                 if (currentAllDistance < recentAllDistance) {
                     //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅
@@ -1349,6 +1435,8 @@
                     switch (wrkMast.getWrkSts().intValue()) {
                         case 9://9.灏忚溅鍏ュ簱鎼繍涓� ==> 14.鍏ュ簱瀹屾垚
                             wrkMast.setWrkSts(14L);
+                            //浠诲姟鍙锋竻闆�
+                            shuttleProtocol.setTaskNo((short) 0);
                             break;
                         case 5://5.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙� ==> 6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴�
                             wrkMast.setWrkSts(6L);
@@ -1367,6 +1455,8 @@
                             }
 
                             wrkMast.setWrkSts(27L);
+                            //浠诲姟鍙锋竻闆�
+                            shuttleProtocol.setTaskNo((short) 0);
                             break;
                         default:
                     }
@@ -1374,8 +1464,6 @@
                     if (wrkMastMapper.updateById(wrkMast) > 0) {
                         //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
                         shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
-                        //浠诲姟鍙锋竻闆�
-                        shuttleProtocol.setTaskNo((short) 0);
                         //婧愬簱浣嶆竻闆�
                         shuttleProtocol.setSourceLocNo(null);
                         //鐩爣搴撲綅娓呴浂
@@ -1386,9 +1474,14 @@
 
                         if (wrkMast.getWrkSts() == 27) {
                             if (moveAssignCommand != null) {
-                                //涓嬪彂浠诲姟
-                                shuttleProtocol.setPakMk(true);
-                                MessageQueue.offer(SlaveType.Shuttle, shuttleThread.getSlave().getId(), new Task(3, moveAssignCommand));
+                                try {
+                                    Thread.sleep(4000);
+                                    //涓嬪彂浠诲姟
+                                    shuttleProtocol.setPakMk(true);
+                                    MessageQueue.offer(SlaveType.Shuttle, shuttleThread.getSlave().getId(), new Task(3, moveAssignCommand));
+                                } catch (InterruptedException e) {
+                                    throw new RuntimeException(e);
+                                }
                             }
                         }
 
@@ -1485,240 +1578,253 @@
             }
 
             //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
-            WrkMast wrkMast = wrkMastMapper.selectLiftStep262327();
-            if (wrkMast == null) {
+            List<WrkMast> wrkMasts = wrkMastMapper.selectLiftStep262327();
+            if (wrkMasts.size() == 0) {
                 continue;
             }
 
-            //鍛戒护list
-            ArrayList<LiftCommand> commands = new ArrayList<>();
-
-            DevpThread devpThread = null;
-            Integer devpId = null;
-            for (DevpSlave devp : slaveProperties.getDevp()){
-                // 鑾峰彇鍏ュ簱绔欎俊鎭�
-                devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                devpId = devp.getId();
-            }
-
-            if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋
-                if (liftProtocol.getTaskNo().intValue() != 0) {
-                    //瀛樺湪鏈畬鎴愪换鍔″彿
-                    continue;
-                }
-                if (liftProtocol.getPlatShuttleCheck()) {
-                    //鎻愬崌鏈烘鏃舵湁鍥涘悜杞︼紝鍙兘鏈夋湭瀹屾垚鐨勪换鍔★紝绂佹鍒嗛厤鏂颁换鍔�
+            for (WrkMast wrkMast : wrkMasts) {
+                //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛�
+                WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue());
+                if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) {
                     continue;
                 }
 
-                //鑾峰彇鐩爣绔�
-                StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo());
-                if (staProtocol.isLoading() || !staProtocol.isInEnable()) {//鐩爣绔欐湁鐗╋紝涓嶅彲鍏ワ紝绂佹鍒嗛厤浠诲姟
-                    continue;
+                //鍛戒护list
+                ArrayList<LiftCommand> commands = new ArrayList<>();
+
+                DevpThread devpThread = null;
+                Integer devpId = null;
+                for (DevpSlave devp : slaveProperties.getDevp()){
+                    // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                    devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                    devpId = devp.getId();
                 }
 
-                //宸ヤ綔妗g洰鏍囧簱浣嶅彿
-                String wrkMastLocNo = wrkMast.getLocNo();
-                //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞�
-                int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo);
+                if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋
+                    if (liftProtocol.getTaskNo().intValue() != 0) {
+                        //瀛樺湪鏈畬鎴愪换鍔″彿
+                        continue;
+                    }
+                    if (liftProtocol.getPlatShuttleCheck()) {
+                        //鎻愬崌鏈烘鏃舵湁鍥涘悜杞︼紝鍙兘鏈夋湭瀹屾垚鐨勪换鍔★紝绂佹鍒嗛厤鏂颁换鍔�
+                        continue;
+                    }
 
-                Integer levTmp = wrkMastLocNoLey;
-                if (wrkMastLocNoLey >= 2) {
-                    levTmp += 1;
-                }
-                Integer distStaNo = Utils.levToOutInStaNo(levTmp);
+                    //鑾峰彇鐩爣绔�
+                    StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo());
+                    if (staProtocol.isLoading() || !staProtocol.isInEnable()) {//鐩爣绔欐湁鐗╋紝涓嶅彲鍏ワ紝绂佹鍒嗛厤浠诲姟
+                        continue;
+                    }
 
-                if (liftProtocol.getPositionArrivalFeedback().intValue() != LiftLevType.TWO.realLev.intValue()) {
-                    //鎻愬崌鏈轰笉鍦ㄨ緭閫佺嚎妤煎眰锛岃幏鍙栧埌杈撻�佺嚎灞傜殑鎻愬崌鏈哄懡浠�
-                    LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.TWO.lev);
-                    commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
-                }
+                    //宸ヤ綔妗g洰鏍囧簱浣嶅彿
+                    String wrkMastLocNo = wrkMast.getLocNo();
+                    //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞�
+                    int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo);
 
-                //杈撻�佺嚎灏嗚揣鐗╄繍杩涙潵(鏃犺揣姝h浆)
-                LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 3);
-                command2.setOperaStaNo((short) 102);//鎿嶄綔102绔�
-                command2.setRotationDire(1);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屾杞�
-                command2.setDevpId(devpId);
-                command2.setStaNo(distStaNo.shortValue());//璁剧疆鐩爣绔�
-                commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list
+                    Integer levTmp = wrkMastLocNoLey;
+                    if (wrkMastLocNoLey >= 2) {
+                        levTmp += 1;
+                    }
+                    Integer distStaNo = Utils.levToOutInStaNo(levTmp);
 
-                //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�)
-                LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), levTmp);
-                commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list
+                    if (liftProtocol.getPositionArrivalFeedback().intValue() != LiftLevType.TWO.realLev.intValue()) {
+                        //鎻愬崌鏈轰笉鍦ㄨ緭閫佺嚎妤煎眰锛岃幏鍙栧埌杈撻�佺嚎灞傜殑鎻愬崌鏈哄懡浠�
+                        LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.TWO.lev);
+                        commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
+                    }
 
-                //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓(姝h浆)
-                //杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓
-                LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 1);
-                command4.setOperaStaNo(distStaNo.shortValue());//鎿嶄綔鐩爣妤煎眰绔欑偣
-                command4.setRotationDire(1);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屾杞�
-                command4.setDevpId(devpId);
-                command4.setStaNo(distStaNo.shortValue());//璁剧疆鐩爣绔�
-                commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list
+                    //杈撻�佺嚎灏嗚揣鐗╄繍杩涙潵(鏃犺揣姝h浆)
+                    LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 3);
+                    command2.setOperaStaNo((short) 102);//鎿嶄綔102绔�
+                    command2.setRotationDire(1);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屾杞�
+                    command2.setDevpId(devpId);
+                    command2.setStaNo(distStaNo.shortValue());//璁剧疆鐩爣绔�
+                    commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list
 
-                //缁欐彁鍗囨満鍒嗛厤浠诲姟
-                liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
-                liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
+                    //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�)
+                    LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), levTmp);
+                    commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list
 
-                wrkMast.setWrkSts(3L);//3.鎻愬崌鏈烘惉杩愪腑
-            } else if (wrkMast.getWrkSts() == 6) {//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑
-                if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
-                    //鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛屼笖鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙蜂笉涓�鑷�
-                    continue;
-                }
-                liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿
+                    //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓(姝h浆)
+                    //杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓
+                    LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 1);
+                    command4.setOperaStaNo(distStaNo.shortValue());//鎿嶄綔鐩爣妤煎眰绔欑偣
+                    command4.setRotationDire(1);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屾杞�
+                    command4.setDevpId(devpId);
+                    command4.setStaNo(distStaNo.shortValue());//璁剧疆鐩爣绔�
+                    commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list
 
-                //鍒ゆ柇灏忚溅鏄惁鍦ㄦ彁鍗囨満鍐咃紝涓斿浜庣┖闂茬姸鎬�
-                ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-                if (shuttleThread == null) {
-                    continue;
-                }
-                ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-                if (shuttleProtocol == null) {
-                    continue;
-                }
-                if (!shuttleProtocol.isIdle()) {
-                    continue;//灏忚溅鐘舵�佸繖
-                }
-                if (shuttleProtocol.getCurrentCode().intValue() != liftProtocol.getBarcode().intValue()) {
-                    continue;//灏忚溅褰撳墠浜岀淮鐮佸拰鎻愬崌鏈哄唴閮ㄤ簩缁寸爜涓嶄竴鑷达紝涓嶅厑璁告墽琛�
-                }
-                if (!liftProtocol.getPlatShuttleCheck()) {
-                    //鎻愬崌鏈烘湭妫�娴嬪埌灏忚溅锛岀姝㈡墽琛�
-                    continue;
-                }
+                    //缁欐彁鍗囨満鍒嗛厤浠诲姟
+                    liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
+                    liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
 
-                //宸ヤ綔妗g洰鏍囧簱浣嶅彿
-                String wrkMastLocNo = wrkMast.getLocNo();
-                //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞�
-                int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo);
-                if (wrkMastLocNoLey >= 2) {
-                    wrkMastLocNoLey++;
-                }
+                    wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//璁剧疆鎻愬崌鏈哄彿鐢ㄤ簬閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鍗犵敤
+                    wrkMast.setWrkSts(3L);//3.鎻愬崌鏈烘惉杩愪腑
+                } else if (wrkMast.getWrkSts() == 6) {//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑
+                    if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
+                        //鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛屼笖鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙蜂笉涓�鑷�
+                        continue;
+                    }
+                    liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿
 
-                //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�)
-                LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey);
-                commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
+                    //鍒ゆ柇灏忚溅鏄惁鍦ㄦ彁鍗囨満鍐咃紝涓斿浜庣┖闂茬姸鎬�
+                    ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+                    if (shuttleThread == null) {
+                        continue;
+                    }
+                    ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+                    if (shuttleProtocol == null) {
+                        continue;
+                    }
+                    if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
+                        continue;//灏忚溅鐘舵�佸繖
+                    }
+                    if (shuttleProtocol.getCurrentCode().intValue() != liftProtocol.getBarcode().intValue()) {
+                        continue;//灏忚溅褰撳墠浜岀淮鐮佸拰鎻愬崌鏈哄唴閮ㄤ簩缁寸爜涓嶄竴鑷达紝涓嶅厑璁告墽琛�
+                    }
+                    if (!liftProtocol.getPlatShuttleCheck()) {
+                        //鎻愬崌鏈烘湭妫�娴嬪埌灏忚溅锛岀姝㈡墽琛�
+                        continue;
+                    }
 
-                //缁欐彁鍗囨満鍒嗛厤浠诲姟
-                liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
-                liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
+                    //宸ヤ綔妗g洰鏍囧簱浣嶅彿
+                    String wrkMastLocNo = wrkMast.getLocNo();
+                    //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞�
+                    int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo);
+                    if (wrkMastLocNoLey >= 2) {
+                        wrkMastLocNoLey++;
+                    }
 
-                wrkMast.setWrkSts(7L);//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑
-            } else if(wrkMast.getWrkSts() == 23) {//23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑
-                if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
-                    //鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛屼笖鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙蜂笉涓�鑷�
-                    continue;
-                }
-                liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿
-
-                //鍒ゆ柇灏忚溅鏄惁鍦ㄦ彁鍗囨満鍐咃紝涓斿浜庣┖闂茬姸鎬�
-                ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-                if (shuttleThread == null) {
-                    continue;
-                }
-                ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-                if (shuttleProtocol == null) {
-                    continue;
-                }
-
-                if (!shuttleProtocol.isIdle()) {
-                    continue;//灏忚溅鐘舵�佸繖
-                }
-                if (shuttleProtocol.getCurrentCode().intValue() != liftProtocol.getBarcode().intValue()) {
-                    continue;//灏忚溅褰撳墠浜岀淮鐮佸拰鎻愬崌鏈哄唴閮ㄤ簩缁寸爜涓嶄竴鑷达紝涓嶅厑璁告墽琛�
-                }
-                if (!liftProtocol.getPlatShuttleCheck()) {
-                    //鎻愬崌鏈烘湭妫�娴嬪埌灏忚溅锛岀姝㈡墽琛�
-                    continue;
-                }
-
-                //宸ヤ綔妗g洰鏍囧簱浣嶅彿
-                String wrkMastLocNo = wrkMast.getSourceLocNo();
-                //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞�
-                int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo);
-                if (wrkMastLocNoLey >= 2) {
-                    wrkMastLocNoLey++;
-                }
-
-                //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�)
-                LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey);
-                commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
-
-                //缁欐彁鍗囨満鍒嗛厤浠诲姟
-                liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
-                liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
-
-                wrkMast.setWrkSts(24L);//23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑
-            } else if (wrkMast.getWrkSts() == 27) {//27.灏忚溅鍑哄簱鎼繍瀹屾垚
-                if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
-                    //鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛屼笖鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙蜂笉涓�鑷�
-                    continue;
-                }
-                if (liftProtocol.getPlatShuttleCheck()) {
-                    //鎻愬崌鏈烘鏃舵湁鍥涘悜杞︼紝鍙兘鏈夋湭瀹屾垚鐨勪换鍔★紝绂佹鍒嗛厤鏂颁换鍔�
-                    continue;
-                }
-
-                //宸ヤ綔妗f簮搴撲綅鍙�
-                String wrkMastLocNo = wrkMast.getSourceLocNo();
-                //宸ヤ綔妗f簮搴撲綅妤煎眰
-                int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo);
-
-                //鎻愬崌鏈哄綋鍓嶆ゼ灞�
-                int liftLev = liftProtocol.getLev().intValue();
-
-                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀埌浣�
-                StaProtocol staProtocol = devpThread.getStation().get(Utils.levToOutInStaNo(wrkMastLocNoLey >= 2 ? wrkMastLocNoLey + 1 : wrkMastLocNoLey));//璧峰绔欑偣
-                if (liftLev != wrkMastLocNoLey && !staProtocol.isLiftArrival()) {
-                    //鎻愬崌鏈轰笉鍦ㄥ伐浣滄。婧愬簱浣嶆ゼ灞傦紝璋冨害鎻愬崌鏈�
+                    //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�)
                     LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey);
                     commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
+
+                    //缁欐彁鍗囨満鍒嗛厤浠诲姟
+                    liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
+                    liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
+
+                    wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//璁剧疆鎻愬崌鏈哄彿鐢ㄤ簬閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鍗犵敤
+                    wrkMast.setWrkSts(7L);//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑
+                } else if(wrkMast.getWrkSts() == 23) {//23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑
+                    if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
+                        //鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛屼笖鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙蜂笉涓�鑷�
+                        continue;
+                    }
+                    liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿
+
+                    //鍒ゆ柇灏忚溅鏄惁鍦ㄦ彁鍗囨満鍐咃紝涓斿浜庣┖闂茬姸鎬�
+                    ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+                    if (shuttleThread == null) {
+                        continue;
+                    }
+                    ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+                    if (shuttleProtocol == null) {
+                        continue;
+                    }
+
+                    if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
+                        continue;//灏忚溅鐘舵�佸繖
+                    }
+                    if (shuttleProtocol.getCurrentCode().intValue() != liftProtocol.getBarcode().intValue()) {
+                        continue;//灏忚溅褰撳墠浜岀淮鐮佸拰鎻愬崌鏈哄唴閮ㄤ簩缁寸爜涓嶄竴鑷达紝涓嶅厑璁告墽琛�
+                    }
+                    if (!liftProtocol.getPlatShuttleCheck()) {
+                        //鎻愬崌鏈烘湭妫�娴嬪埌灏忚溅锛岀姝㈡墽琛�
+                        continue;
+                    }
+
+                    //宸ヤ綔妗g洰鏍囧簱浣嶅彿
+                    String wrkMastLocNo = wrkMast.getSourceLocNo();
+                    //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞�
+                    int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo);
+                    if (wrkMastLocNoLey >= 2) {
+                        wrkMastLocNoLey++;
+                    }
+
+                    //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�)
+                    LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey);
+                    commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
+
+                    //缁欐彁鍗囨満鍒嗛厤浠诲姟
+                    liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
+                    liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
+
+                    wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//璁剧疆鎻愬崌鏈哄彿鐢ㄤ簬閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鍗犵敤
+                    wrkMast.setWrkSts(24L);//23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑
+                } else if (wrkMast.getWrkSts() == 27) {//27.灏忚溅鍑哄簱鎼繍瀹屾垚
+                    if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
+                        //鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛屼笖鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙蜂笉涓�鑷�
+                        continue;
+                    }
+                    if (liftProtocol.getPlatShuttleCheck()) {
+                        //鎻愬崌鏈烘鏃舵湁鍥涘悜杞︼紝鍙兘鏈夋湭瀹屾垚鐨勪换鍔★紝绂佹鍒嗛厤鏂颁换鍔�
+                        continue;
+                    }
+
+                    //宸ヤ綔妗f簮搴撲綅鍙�
+                    String wrkMastLocNo = wrkMast.getSourceLocNo();
+                    //宸ヤ綔妗f簮搴撲綅妤煎眰
+                    int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo);
+
+                    //鎻愬崌鏈哄綋鍓嶆ゼ灞�
+                    int liftLev = liftProtocol.getLev().intValue();
+
+                    //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀埌浣�
+                    StaProtocol staProtocol = devpThread.getStation().get(Utils.levToOutInStaNo(wrkMastLocNoLey >= 2 ? wrkMastLocNoLey + 1 : wrkMastLocNoLey));//璧峰绔欑偣
+                    if (liftLev != wrkMastLocNoLey && !staProtocol.isLiftArrival()) {
+                        //鎻愬崌鏈轰笉鍦ㄥ伐浣滄。婧愬簱浣嶆ゼ灞傦紝璋冨害鎻愬崌鏈�
+                        LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey);
+                        commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
+                    }
+
+                    //杈撻�佺嚎灏嗚揣鐗╄繍杩涙潵(鏃犺揣鍙嶈浆)
+                    LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 4);
+                    command2.setOperaStaNo(staProtocol.getSiteId().shortValue());//杈撻�佺嚎鎿嶄綔绔欑偣鍙�
+                    command2.setRotationDire(2);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屽弽杞�
+                    command2.setDevpId(devpId);//杈撻�佺嚎iD
+                    command2.setStaNo((short) 104);//鍐欏叆鍑哄簱鐩爣绔�104
+                    commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list
+
+                    //鎻愬崌鏈哄墠寰�鍑哄簱鍙o紝杈撻�佺嚎妤煎眰
+                    LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.TWO.lev);
+                    commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list
+
+                    //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓(鍙嶈浆)
+                    //杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓
+                    LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 2);
+                    command4.setOperaStaNo((short) 102);//鎿嶄綔102绔�
+                    command4.setRotationDire(2);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屽弽杞�
+                    command4.setDevpId(devpId);
+                    commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list
+
+                    //鎻愬崌鏈洪摼鏉℃墽琛屽畬姣曞悗锛岀粰102绔欏啓鍏ヨ祫鏂�
+                    LiftCommand command5 = liftThread.getResetCommand();
+                    command5.setDevpId(devpId);//杈撻�佺嚎iD
+                    command5.setOperaStaNo((short) 102);//鎿嶄綔102绔�
+                    command5.setStaNo((short) 104);//鍐欏叆鍑哄簱鐩爣绔�104
+                    command5.setRotationDire(0);//閾炬潯杞姩鍋滄
+                    commands.add(command5);
+
+                    //缁欐彁鍗囨満鍒嗛厤浠诲姟
+                    liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
+                    liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
+
+                    wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//璁剧疆鎻愬崌鏈哄彿鐢ㄤ簬閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鍗犵敤
+                    wrkMast.setWrkSts(28L);//28.鎻愬崌鏈烘惉杩愪腑
                 }
 
-                //杈撻�佺嚎灏嗚揣鐗╄繍杩涙潵(鏃犺揣鍙嶈浆)
-                LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 4);
-                command2.setOperaStaNo(staProtocol.getSiteId().shortValue());//杈撻�佺嚎鎿嶄綔绔欑偣鍙�
-                command2.setRotationDire(2);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屽弽杞�
-                command2.setDevpId(devpId);//杈撻�佺嚎iD
-                command2.setStaNo((short) 104);//鍐欏叆鍑哄簱鐩爣绔�104
-                commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list
-
-                //鎻愬崌鏈哄墠寰�鍑哄簱鍙o紝杈撻�佺嚎妤煎眰
-                LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.TWO.lev);
-                commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list
-
-                //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓(鍙嶈浆)
-                //杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓
-                LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 2);
-                command4.setOperaStaNo((short) 102);//鎿嶄綔102绔�
-                command4.setRotationDire(2);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屽弽杞�
-                command4.setDevpId(devpId);
-                commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list
-
-                //鎻愬崌鏈洪摼鏉℃墽琛屽畬姣曞悗锛岀粰102绔欏啓鍏ヨ祫鏂�
-                LiftCommand command5 = liftThread.getResetCommand();
-                command5.setDevpId(devpId);//杈撻�佺嚎iD
-                command5.setOperaStaNo((short) 102);//鎿嶄綔102绔�
-                command5.setStaNo((short) 104);//鍐欏叆鍑哄簱鐩爣绔�104
-                command5.setRotationDire(0);//閾炬潯杞姩鍋滄
-                commands.add(command5);
-
-                //缁欐彁鍗囨満鍒嗛厤浠诲姟
-                liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
-                liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
-
-                wrkMast.setWrkSts(28L);//28.鎻愬崌鏈烘惉杩愪腑
+                //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣�
+                LiftAssignCommand assignCommand = new LiftAssignCommand();
+                assignCommand.setCommands(commands);
+                assignCommand.setLiftNo(liftProtocol.getLiftNo());
+                assignCommand.setTaskNo(liftProtocol.getTaskNo());
+                if (wrkMastMapper.updateById(wrkMast) > 0) {
+                    //涓嬪彂浠诲姟
+                    MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
+                }
             }
 
-            //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣�
-            LiftAssignCommand assignCommand = new LiftAssignCommand();
-            assignCommand.setCommands(commands);
-            assignCommand.setLiftNo(liftProtocol.getLiftNo());
-            assignCommand.setTaskNo(liftProtocol.getTaskNo());
-            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                //涓嬪彂浠诲姟
-                MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
-            }
         }
     }
 
@@ -1774,6 +1880,7 @@
                             wrkMast.setWrkSts(4L);
                             //浠诲姟鍙锋竻闆�
                             liftProtocol.setTaskNo((short) 0);
+                            wrkMast.setLiftNo(null);//鎻愬崌鏈鸿В閿�
                             break;
                         case 7://7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 ==> 8.鎻愬崌鏈鸿縼绉诲皬杞﹀畬鎴�
                             if (liftProtocol.getLev().intValue() != lev) {
@@ -1795,6 +1902,7 @@
                             wrkMast.setWrkSts(34L);//34.鍑哄簱瀹屾垚锛屾殏鏃跺厛鐩存帴瀹屾垚鍑哄簱宸ヤ綔妗o紝鍚庣画闇�瑕佹牴鎹緭閫佺嚎缁欏嚭鐨勭姸鎬佹潵纭畾34.鍑哄簱瀹屾垚鐘舵��
                             //浠诲姟鍙锋竻闆�
                             liftProtocol.setTaskNo((short) 0);
+                            wrkMast.setLiftNo(null);//鎻愬崌鏈鸿В閿�
                             break;
                         default:
                     }
@@ -2697,7 +2805,7 @@
                 //灏忚溅宸茬粡杈惧埌鎻愬崌鏈哄唴
 
                 //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂茬姸鎬�
-                if (!liftProtocol.isIdle()) {
+                if (!liftProtocol.isIdle(wrkCharge.getWrkNo().shortValue())) {
                     continue;
                 }
 
@@ -2788,6 +2896,9 @@
             }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<>();
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
index 806bf19..466894c 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -29,7 +29,12 @@
     }
 
     @Override
-    public List<LocMast> selectNoShuttleWrkByLev(Integer lev) {
+    public List<WrkMast> selectNoShuttleWrkByLev(Integer lev) {
         return this.baseMapper.selectNoShuttleWrkByLev("%" + lev);
     }
+
+    @Override
+    public List<WrkMast> selectShuttleWrkByLev(Integer lev) {
+        return this.baseMapper.selectShuttleWrkByLev("%" + lev);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index bd681ed..3471267 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -445,7 +445,7 @@
 
     //妫�娴嬬┛姊溅琛岃蛋璺緞锛屾槸鍚﹀瓨鍦ㄥ叾浠栧皬杞︼紝濡傛湁鍏朵粬灏忚溅鍒欒繘琛岃皟绂�
     public static boolean checkShuttlePath(List<NavigateNode> nodes, Integer shuttleId) {
-          boolean flag = false;
+        boolean flag = false;
         int shuttleX = -1;
         int shuttleY = -1;
         int shuttleZ = -1;
@@ -506,6 +506,11 @@
                 return false;
             }
 
+            ShuttleProtocol shuttleProtocol = currentShuttleThread.getShuttleProtocol();
+            if (!shuttleProtocol.isIdle()) {
+                return false;//琚皟搴︾殑灏忚溅澶勪簬宸ヤ綔鐘舵�侊紝绂佹瑙﹀彂閬胯浠诲姟
+            }
+
             //鎼滅储涓�鏉℃病鏈夊皬杞︾殑绌哄贩閬擄紝骞惰皟搴﹀皬杞�
             ShuttleAssignCommand assignCommand = Utils.searchEmptyGroupToMoveShuttle(shuttleZ, shuttleId, currentShuttleThread, null);//shuttleId鎼滅储鏃堕渶瑕佹帓闄ょ殑杞﹁締id锛宑urrentShuttleThread鏄渶瑕佽璋冨害鐨勮溅杈嗙嚎绋�
 
diff --git a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java
index 790bb2f..1eebef4 100644
--- a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java
@@ -246,6 +246,29 @@
     }
 
     // 鏄惁澶勪簬绌洪棽寰呭懡鐘舵��
+    public Boolean isIdle(Short taskNo) {
+        if(this.taskNo == null
+                || this.liftLock == null
+                || this.ready == null
+                || this.running == null
+                || this.mode == null
+                || this.pakMk == null
+        ){
+            return false;
+        }
+
+        boolean res = (this.taskNo == 0 || this.taskNo.intValue() == taskNo.intValue())
+                && !this.liftLock
+//                && this.ready
+                && !this.running
+                && this.mode
+                && this.pakMk.equals(true)
+                && !this.securityMk
+                ;
+        return res;
+    }
+
+    // 鏄惁澶勪簬绌洪棽寰呭懡鐘舵��
     public Boolean isIdle() {
         if(this.taskNo == null
                 || this.liftLock == null
diff --git a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
index 065926c..7c57f24 100644
--- a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
@@ -264,7 +264,8 @@
         boolean res = this.busyStatusType.equals(ShuttleStatusType.IDLE)
                 && this.pakMk.equals(true)
                 && this.errorCodeType.equals(ShuttleErrorCodeType.NORMAL)
-                && (this.taskNo == 0 || this.taskNo == taskNo)
+                && (this.taskNo == 0 || this.taskNo.intValue() == taskNo.intValue())
+                && this.protocolStatus.intValue() == ShuttleProtocolStatusType.IDLE.id
                 ;
         if (!res) {
             return res;
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index 029180e..844aa2d 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -646,88 +646,21 @@
             return false;
         }
 
+        WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class);
+
         Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo);
         if (o == null) {
             return false;
         }
         ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
 
+        if (shuttleProtocol.getBusyStatus().intValue() == ShuttleStatusType.BUSY.id) {
+            return false;//灏忚溅鐘舵�佸繖
+        }
+
         if (!checkLiftStation(wrkNo)) {//妫�娴嬫槸鍚︽湁鎻愬崌鏈虹珯鐐癸紝鏈夊垯璋冨害鎻愬崌鏈�
             return false;
         }
-
-//        List<ShuttleCommand> errorCommands = redisCommand.getErrorCommands();
-//        if (errorCommands.size() > 0) {
-//            //浼樺厛鎵ц璇ユ寚浠�
-//            ShuttleCommand errorCommand = errorCommands.get(0);//鍙栧嚭鎸囦护
-//
-//            if(errorCommand.getCommandWord() == 1){//姝e父琛岃蛋鍛戒护锛岄渶瑕佸厛鎵ц瀹屾壘搴撲綅鍛戒护鍚庯紝鍐嶆墽琛�
-//                LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
-//                LocMast locMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString());
-//                LocMast distLocMast = locMastService.queryByQrCode(errorCommand.getStartCodeNum().toString());
-//                if (shuttleProtocol.getCurrentCode().equals(errorCommand.getStartCodeNum())) {
-//                    //璧风偣鍜岀粓鐐瑰睘浜庡悓涓�搴撲綅锛屾棤闇�鍐嶆墽琛岀Щ鍔ㄦ搷浣�
-//                    errorCommands.remove(0);//绉婚櫎璇ュ懡浠�
-//                    redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>());
-//                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
-//                    //褰撳墠姝ュ簭
-//                    int commandStep = redisCommand.getCommandStep();
-//                    //姝ュ簭鍥為��
-//                    commandStep--;
-//                    redisCommand.setCommandStep(commandStep);
-//                    //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-//                    redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
-//                    shuttleProtocol.setPakMk(true);
-//                    return true;
-//                }else {
-//                    List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), distLocMast.getLocNo(), NavigationMapType.DFX.id, Utils.getShuttlePoints(errorCommand.getShuttleNo().intValue()));//閿欒鎭㈠锛屼娇鐢―FX鍦板浘
-//                    if (result != null) {
-//                        //鑾峰彇鍒嗘璺緞
-//                        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result);
-//                        //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-//                        for (ArrayList<NavigateNode> nodes : data) {
-//                            //寮�濮嬭矾寰�
-//                            NavigateNode startPath = nodes.get(0);
-//                            //鐩爣璺緞
-//                            NavigateNode endPath = nodes.get(nodes.size() - 1);
-//                            Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
-//
-//                            String qrCodeValue = distLocMast.getQrCodeValue();
-//                            errorCommand.setCommandWord((short) 1);
-//                            errorCommand.setStartCodeNum(shuttleProtocol.getCurrentCode());
-//                            errorCommand.setMiddleCodeNum((short) 1);
-//                            errorCommand.setDistCodeNum((short) Integer.parseInt(qrCodeValue));
-//                            errorCommand.setStartToDistDistance(allDistance);
-//                            errorCommand.setRunSpeed((short) 1000);
-//                            errorCommand.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id);
-//                            errorCommand.setForceMoveDistance(0);
-//                            errorCommand.setIOControl((short) 0);
-//                            errorCommand.setCommandEnd((short) 1);
-//                            break;
-//                        }
-//                    }
-//                }
-//
-//                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
-//                //褰撳墠姝ュ簭
-//                int commandStep = redisCommand.getCommandStep();
-//                //姝ュ簭鍥為��
-//                commandStep--;
-//                redisCommand.setCommandStep(commandStep);
-//            }
-//
-//            if (!write(errorCommand)) {
-//                News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand));
-//                return false;
-//            } else {
-//                News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand));
-//                errorCommands.remove(0);
-//                redisCommand.setErrorCommands(errorCommands);
-//                //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-//                redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
-//                return true;
-//            }
-//        }
 
         LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
         LiftProtocol liftProtocol = liftThread.getLiftProtocol();
@@ -751,10 +684,36 @@
                     //涓婁竴鏉℃寚浠よ捣鐐规槸鎻愬崌鏈轰簩缁寸爜锛屽垯娓呴浂鎻愬崌鏈轰换鍔″彿
                     if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()) {
                         //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂�
-                        if (liftProtocol.isIdleNoTask()) {
+                        if (liftProtocol.isIdleNoTask() && liftProtocol.getTaskNo().intValue() == redisCommand.getWrkNo().intValue()) {
                             liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙�
+                            WrkMast wrkMast = wrkMastService.selectById(wrkNo);
+                            if (wrkMast != null) {
+                                wrkMast.setLiftNo(null);//瑙i攣鎻愬崌鏈�
+                                wrkMastService.updateById(wrkMast);
+                            }
                         }
                     }
+
+                    //鍏ュ簱鍛戒护锛屽綋灏忚溅鍙栧畬璐у悗锛岄渶瑕佸皢鎻愬崌鏈洪噴鏀�
+                    if (assignCommand.getTaskMode().intValue() == ShuttleTaskModeType.PAK_IN.id) {
+                        //鍒ゆ柇涓婁竴鏉℃寚浠ょ殑璧风偣鏄惁涓鸿緭閫佺珯鐐逛笖鐩爣鐐逛笉鏄彁鍗囨満鍐呴儴浜岀淮鐮�
+                        Short startCodeNum = command.getStartCodeNum();
+                        BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
+                        BasDevp basDevp = basDevpService.queryByQrCode(startCodeNum.intValue());//鐩爣绔欑偣
+                        if (basDevp != null && command.getDistCodeNum().intValue() != liftProtocol.getBarcode().intValue()) {
+                            //涓婁竴鏉℃寚浠ょ殑璧风偣涓鸿緭閫佺珯鐐逛笖鐩爣鐐逛笉鏄彁鍗囨満鍐呴儴浜岀淮鐮�
+                            //姝ゆ椂灏忚溅搴旇宸茬粡绂诲紑杈撻�佺珯鐐癸紝鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂蹭笖鏈夊伐浣滃彿
+                            if (liftProtocol.isIdleNoTask() && liftProtocol.getTaskNo().intValue() == redisCommand.getWrkNo().intValue()) {
+                                liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙�
+                                WrkMast wrkMast = wrkMastService.selectById(wrkNo);
+                                if (wrkMast != null) {
+                                    wrkMast.setLiftNo(null);//瑙i攣鎻愬崌鏈�
+                                    wrkMastService.updateById(wrkMast);
+                                }
+                            }
+                        }
+                    }
+
                 }
             } else if (command.getCommandWord().intValue() == 2) {
                 //鎵樼洏椤跺崌鍛戒护
@@ -981,11 +940,10 @@
             if (commands.get(0).getStartCodeNum() == null) {
                 return false;
             }
-            //鍛戒护璧峰浣嶇疆灏辨槸鎻愬崌鏈轰簩缁寸爜锛屽垯涓嶈繘琛屾牎楠�
-            if (commands.get(0).getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()) {
-                return true;
-            }
         }
+
+        //褰撳墠绛夊緟鎵ц鐨勬寚浠�
+        ShuttleCommand command = commands.get(commandStep);
 
         BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
         ArrayList<Short> qrCodeValues = new ArrayList<>();
@@ -994,32 +952,53 @@
             qrCodeValues.add(Short.parseShort(basDevp.getQrCodeValue()));
         }
 
-        //閬嶅巻鎵�鏈夋寚浠わ紝鍒ゆ柇鏄惁鏈夊埌鎻愬崌鏈哄彛鐨勬寚浠ゆ垨浠庢彁鍗囨満鍙e墠寰�鎻愬崌鏈哄唴鐨勬寚浠わ紝骞惰幏鍙栧埌杈捐鎻愬崌鏈哄彛鎵�闇�姝ュ簭
-        int step = 0;
         Integer siteNo = null;//绔欑偣鍙�
-        ShuttleCommand command = null;
-        for (int i = 0; i < commands.size(); i++) {
-            command = commands.get(i);
-            for (Short qrCodeValue : qrCodeValues) {
-                //鐩爣浣嶇疆鏄彁鍗囨満鍙o紝鎴栬捣鐐逛綅缃槸鎻愬崌鏈哄彛涓旂洰鏍囨槸鍘绘彁鍗囨満鍐�
-                if (command.getDistCodeNum() == null || command.getStartCodeNum() == null) {
-                    continue;
-                }
+        for (Short qrCodeValue : qrCodeValues) {
+            //鐩爣浣嶇疆鏄彁鍗囨満鍙o紝鎴栬捣鐐逛綅缃槸鎻愬崌鏈哄彛涓旂洰鏍囨槸鍘绘彁鍗囨満鍐�
+            if (command.getDistCodeNum() == null || command.getStartCodeNum() == null) {
+                continue;
+            }
 
-                if (qrCodeValue.intValue() == command.getDistCodeNum().intValue() || (qrCodeValue.intValue() == command.getStartCodeNum().intValue() && command.getDistCodeNum().intValue() == liftProtocol.getBarcode().intValue())) {
-                    //瀛樺湪
-                    step = i + 1;
-                    BasDevp basDevp = basDevpService.queryByQrCode(qrCodeValue.intValue());
-                    siteNo = basDevp.getDevNo();
-                    break;
-                }
+            if (qrCodeValue.intValue() == command.getDistCodeNum().intValue() || (qrCodeValue.intValue() == command.getStartCodeNum().intValue() && command.getDistCodeNum().intValue() == liftProtocol.getBarcode().intValue())) {
+                //瀛樺湪
+                BasDevp basDevp = basDevpService.queryByQrCode(qrCodeValue.intValue());
+                siteNo = basDevp.getDevNo();
+                break;
             }
         }
 
-        if (step == 0) {
-            //鏃犻渶鍚庣画妫�娴嬶紝鐩存帴鏀捐
+        if (siteNo == null) {
+            //鎵句笉鍒扮珯鐐癸紝璇存槑杩樻湭鍒版彁鍗囨満
             return true;
         }
+
+
+//        //閬嶅巻鎵�鏈夋寚浠わ紝鍒ゆ柇鏄惁鏈夊埌鎻愬崌鏈哄彛鐨勬寚浠ゆ垨浠庢彁鍗囨満鍙e墠寰�鎻愬崌鏈哄唴鐨勬寚浠わ紝骞惰幏鍙栧埌杈捐鎻愬崌鏈哄彛鎵�闇�姝ュ簭
+//        int step = 0;
+//        Integer siteNo = null;//绔欑偣鍙�
+//        ShuttleCommand command = null;
+//        for (int i = 0; i < commands.size(); i++) {
+//            command = commands.get(i);
+//            for (Short qrCodeValue : qrCodeValues) {
+//                //鐩爣浣嶇疆鏄彁鍗囨満鍙o紝鎴栬捣鐐逛綅缃槸鎻愬崌鏈哄彛涓旂洰鏍囨槸鍘绘彁鍗囨満鍐�
+//                if (command.getDistCodeNum() == null || command.getStartCodeNum() == null) {
+//                    continue;
+//                }
+//
+//                if (qrCodeValue.intValue() == command.getDistCodeNum().intValue() || (qrCodeValue.intValue() == command.getStartCodeNum().intValue() && command.getDistCodeNum().intValue() == liftProtocol.getBarcode().intValue())) {
+//                    //瀛樺湪
+//                    step = i + 1;
+//                    BasDevp basDevp = basDevpService.queryByQrCode(qrCodeValue.intValue());
+//                    siteNo = basDevp.getDevNo();
+//                    break;
+//                }
+//            }
+//        }
+//
+//        if (step == 0) {
+//            //鏃犻渶鍚庣画妫�娴嬶紝鐩存帴鏀捐
+//            return true;
+//        }
 
         //鍒ゆ柇涓嬩竴姝ユ槸鍚︿负鎻愬崌鏈哄彛鎴栨彁鍗囨満鍐�
         if (commandStep < commands.size()) {
@@ -1032,10 +1011,6 @@
                 }
             }
         }
-//        if (commandStep + 1 != step) {
-//            //涓嬩竴姝ヤ笉鏄彁鍗囨満鍙o紝璺宠繃鍚庣画娴佺▼
-//            return true;
-//        }
 
         //鑾峰彇鍥涘悜绌挎杞﹀綋鍓嶆ゼ灞�
         String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿
@@ -1047,29 +1022,39 @@
         }
 
         //鍒ゆ柇杈撻�佺嚎绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙�
-        if (siteNo != null) {
-            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-            StaProtocol staProtocol = siemensDevpThread.getStation().get(siteNo);
-            if (!staProtocol.isLiftArrival()) {
-                //杈撻�佺嚎鍙嶉鎻愬崌鏈烘病鏈夊埌浣�
-                executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈�
-                return false;
-            }
-
-            if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) {
-                //灏忚溅澶勪簬鎻愬崌鏈哄唴
-                return true;
-            }else {
-                if (liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) {
-                    liftProtocol.setTaskNo(wrkNo);//缁欐彁鍗囨満鍐欏伐浣滃彿锛岄槻姝㈣鍗犵敤
-                    return true;//鎻愬崌鏈哄埌浣�
-                }
-                executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈�
-                return false;//鎻愬崌鏈烘病鏈夊埌浣�
-            }
+        SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        StaProtocol staProtocol = siemensDevpThread.getStation().get(siteNo);
+        if (!staProtocol.isLiftArrival()) {
+            //杈撻�佺嚎鍙嶉鎻愬崌鏈烘病鏈夊埌浣�
+            executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈�
+            return false;
         }
 
-        return false;
+        if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) {
+            //灏忚溅澶勪簬鎻愬崌鏈哄唴
+            return true;
+        }else {
+            if (liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) {
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁浠诲姟鍙�
+                if (liftProtocol.getTaskNo().intValue() != 0) {
+                    //鍒ゆ柇浠诲姟鍙锋槸鍚﹀拰褰撳墠灏忚溅浠诲姟涓�鑷�
+                    if (liftProtocol.getTaskNo().intValue() != wrkNo.intValue()) {
+                        return false;//浠诲姟鍙蜂笉涓�鑷达紝涓旀彁鍗囨満浠诲姟鍙蜂笉涓�0
+                    }
+                }
+                liftProtocol.setTaskNo(wrkNo);//缁欐彁鍗囨満鍐欏伐浣滃彿锛岄槻姝㈣鍗犵敤
+                WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class);
+                WrkMast wrkMast = wrkMastService.selectById(shuttleProtocol.getTaskNo());
+                if (wrkMast != null) {
+                    wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//閿佸畾鎻愬崌鏈猴紝闃叉琚姠鍗�
+                    wrkMastService.updateById(wrkMast);
+                }
+                return true;//鎻愬崌鏈哄埌浣�
+            }
+            executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈�
+            return false;//鎻愬崌鏈烘病鏈夊埌浣�
+        }
+
     }
 
     private boolean executeLift(LiftThread liftThread, LiftProtocol liftProtocol, ShuttleRedisCommand redisCommand, Integer shuttleLocNoLev) {//璋冨害鎻愬崌鏈�
@@ -1088,6 +1073,13 @@
             return false;
         }
 
+        WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class);
+        WrkMast wrkMast = wrkMastService.selectById(shuttleProtocol.getTaskNo());
+        if (wrkMast != null) {
+            wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//閿佸畾鎻愬崌鏈猴紝闃叉琚姠鍗�
+            wrkMastService.updateById(wrkMast);
+        }
+
         //缁欐彁鍗囨満鍒嗛厤浠诲姟
         liftProtocol.setTaskNo(shuttleProtocol.getTaskNo());//璁剧疆浠诲姟鍙�
         liftProtocol.setShuttleNo(shuttleProtocol.getShuttleNo());//璁剧疆鍥涘悜绌挎杞﹀彿
diff --git a/src/main/resources/mapper/BasDevpMapper.xml b/src/main/resources/mapper/BasDevpMapper.xml
index bae80e5..22c1f25 100644
--- a/src/main/resources/mapper/BasDevpMapper.xml
+++ b/src/main/resources/mapper/BasDevpMapper.xml
@@ -88,4 +88,11 @@
         where 1=1
         and qr_code_value = #{qrCodeValue}
     </select>
+
+    <select id="selectLevSite" resultMap="BaseResultMap">
+        select *
+        from asr_bas_devp
+        where 1=1
+        and dev_no in ('105','106','107','108')
+    </select>
 </mapper>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 0917047..fa04560 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -62,6 +62,7 @@
         <result column="ctn_no" property="ctnNo" />
         <result column="full_plt" property="fullPlt" />
         <result column="shuttle_no" property="shuttleNo" />
+        <result column="lift_no" property="liftNo" />
 
     </resultMap>
 
@@ -240,7 +241,7 @@
         select top 1 *
         from dbo.asr_wrk_mast
         where 1=1
-        and ((wrk_sts = 4 and shuttle_no is null) or (wrk_sts = 8 and shuttle_no is not null))
+        and ((wrk_sts = 4) or (wrk_sts = 8 and shuttle_no is not null))
         and sta_no = #{staNo}
         and wrk_no=#{workNo}
         order by io_pri desc,wrk_sts desc
@@ -252,7 +253,7 @@
     </select>
 
     <select id="selectLiftStep262327" resultMap="BaseResultMap">
-        select top 1 * from dbo.asr_wrk_mast
+        select * from dbo.asr_wrk_mast
         where 1=1
         and (wrk_sts in (6,23,27)
             and shuttle_no is not null)
@@ -276,7 +277,19 @@
     <select id="selectNoShuttleWrkByLev" resultMap="BaseResultMap">
         select * from dbo.asr_wrk_mast
         where shuttle_no is null
-        and (wrk_sts = 2 and loc_no like #{lev}) or (wrk_sts = 21 and source_loc_no like #{lev})
+        and ((wrk_sts = 2 and loc_no like #{lev}) or (wrk_sts = 21 and source_loc_no like #{lev}))
         order by io_pri desc,wrk_sts desc
     </select>
+
+    <select id="selectShuttleWrkByLev" resultMap="BaseResultMap">
+        select * from dbo.asr_wrk_mast
+        where shuttle_no is not null
+        and ((wrk_sts not in (14,15)  and loc_no like #{lev}) or (wrk_sts not in (34,35) and source_loc_no like #{lev}))
+        order by io_pri desc,wrk_sts desc
+    </select>
+
+    <select id="selectLiftWrkMast" resultMap="BaseResultMap">
+        select top 1 * from asr_wrk_mast
+        where lift_no = #{liftNo}
+    </select>
 </mapper>

--
Gitblit v1.9.1