From 7087c609488ee87e24c25ab61a7ada46352af116 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期五, 29 三月 2024 16:45:29 +0800
Subject: [PATCH] Merge branch 'Four-Way-Rack' of http://47.97.1.152:5880/r/zy-asrs-master into Four-Way-Rack

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java   |    7 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java        |   85 +++++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java           |    5 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java    |   35 +---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java                    |    7 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java                 |   13 -
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java              |    2 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java           |   39 +++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java |  172 ++++++++++++-----------
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java        |   24 --
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java                  |    9 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java                     |    2 
 12 files changed, 252 insertions(+), 148 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java
index 53e0ad3..b5aed07 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java
@@ -68,11 +68,8 @@
             return false;
         }
 
-        //鎻愬崌鏈哄浜庤嚜鍔ㄣ�佸氨缁�佺┖闂�
-        if (!(liftProtocol.getModel()
-                && liftProtocol.getReady()
-                && !liftProtocol.getRun())
-        ) {
+        //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
+        if (!liftThread.isIdle()) {
             return false;
         }
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
index 4a15a5d..0314e53 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
@@ -85,10 +85,8 @@
             return false;
         }
 
-        //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠�
-        if (!shuttleProtocol.getIdle()
-                || shuttleProtocol.getTaskNo() == 0
-                || !shuttleProtocol.getPakMk()) {
+        //鍒ゆ柇璁惧鏄惁绌洪棽
+        if (!shuttleThread.isIdle()) {
             return false;
         }
 
@@ -136,8 +134,8 @@
                 if (!shuttleProtocol.getHasLift()) {
                     command.setComplete(true);
                 }
-            } else if (command.getMode() == ShuttleCommandModeType.CHARGE.id) {
-                // 鍏呯數寮�鍏�
+            } else if (command.getMode() == ShuttleCommandModeType.CHARGE_OPEN.id) {
+                // 鍏呯數寮�
                 //鍒ゆ柇灏忚溅鍏呯數鐘舵��
                 if (shuttleProtocol.getHasCharge()) {
                     command.setComplete(true);
@@ -211,7 +209,8 @@
         } else if (command.getMode() == ShuttleCommandModeType.PALLET_LIFT.id
                 || command.getMode() == ShuttleCommandModeType.PALLET_DOWN.id) {//椤跺崌
             result = shuttleThread.lift(command);
-        } else if (command.getMode() == ShuttleCommandModeType.CHARGE.id) {//鍏呯數
+        } else if (command.getMode() == ShuttleCommandModeType.CHARGE_OPEN.id
+                || command.getMode() == ShuttleCommandModeType.CHARGE_CLOSE.id) {//鍏呯數
             result = shuttleThread.charge(command);
         } else if (command.getMode() == ShuttleCommandModeType.RESET.id) {//澶嶄綅
             result = shuttleThread.reset(command);
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
index 4075c60..3f67aa7 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
@@ -48,11 +48,8 @@
             return false;
         }
 
-        //鑷姩銆佸氨缁�佺┖闂�
-        if (!(liftProtocol.getModel()
-                && liftProtocol.getReady()
-                && !liftProtocol.getRun())
-        ) {
+        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+        if (!liftThread.isIdle()) {
             return false;
         }
 
@@ -218,11 +215,8 @@
 
         switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
             case LIFT_MOVE:
-                // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
-                if (!liftProtocol.getModel()
-                        || liftProtocol.getRun()
-                        || !liftProtocol.getReady()
-                ) {
+                // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
+                if (!liftThread.isIdle()) {
                     return false;
                 }
 
@@ -231,11 +225,8 @@
                 }
                 break;
             case LIFT_WITH_GOODS:
-                // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
-                if (!liftProtocol.getModel()
-                        || liftProtocol.getRun()
-                        || !liftProtocol.getReady()
-                ) {
+                // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
+                if (!liftThread.isIdle()) {
                     return false;
                 }
 
@@ -249,11 +240,8 @@
 
                 break;
             case LIFT_WITH_SHUTTLE:
-                // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
-                if (!liftProtocol.getModel()
-                        || liftProtocol.getRun()
-                        || !liftProtocol.getReady()
-                ) {
+                // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
+                if (!liftThread.isIdle()) {
                     return false;
                 }
 
@@ -267,11 +255,8 @@
                 }
                 break;
             case LIFT_WITH_GOODS_AND_SHUTTLE:
-                // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
-                if (!liftProtocol.getModel()
-                        || liftProtocol.getRun()
-                        || !liftProtocol.getReady()
-                ) {
+                // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
+                if (!liftThread.isIdle()) {
                     return false;
                 }
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
index 13407ef..fc451d3 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.core.action.LiftAction;
 import com.zy.asrs.wcs.core.action.ShuttleAction;
 import com.zy.asrs.wcs.core.entity.Loc;
 import com.zy.asrs.wcs.core.model.NavigateNode;
@@ -18,8 +19,10 @@
 import com.zy.asrs.wcs.core.entity.Motion;
 import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
 import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
 import com.zy.asrs.wcs.core.service.MotionService;
+import com.zy.asrs.wcs.rcs.thread.LiftThread;
 import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,6 +56,8 @@
     private NavigateMapUtils navigateMapUtils;
     @Autowired
     private ShuttleAction shuttleAction;
+    @Autowired
+    private LiftAction liftAction;
 
     // 璁$畻
     public Boolean accept(Motion motion) {
@@ -84,8 +89,8 @@
         List<ShuttleCommand> shuttleCommands = new ArrayList<>();
         ShuttleTaskModeType shuttleTaskModeType = null;
 
-//        SiemensLiftThread liftThread = null;
-//        LiftProtocol liftProtocol = null;
+        LiftThread liftThread = null;
+        LiftProtocol liftProtocol = null;
 
         //鍒ゆ柇灏忚溅鐘舵��
         if (shuttleProtocol.getIdle()
@@ -106,38 +111,80 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
                 break;
-//            case SHUTTLE_MOVE_LIFT_PALLET://绌挎杞﹂《鍗囧苟绉诲姩
-//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
-//                shuttleTaskModeType = ShuttleTaskModeType.PAK_IN;
-//                shuttleCommands.add(0, shuttleThread.getPalletCommand((short) 1));
-//                break;
-//            case SHUTTLE_MOVE_DOWN_PALLET://绌挎杞︾Щ鍔ㄥ苟鎵樼洏涓嬮檷
-//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
-//                shuttleTaskModeType = ShuttleTaskModeType.PAK_IN;
-//                shuttleCommands.add(shuttleCommands.size(), shuttleThread.getPalletCommand((short) 2));
-//                break;
-//            case SHUTTLE_MOVE_FROM_LIFT://鍑烘彁鍗囨満
-//                // 鍒ゆ柇鎻愬崌鏈虹姸鎬�
-//                liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
-//                if (liftThread == null) {
-//                    return false;
-//                }
-//                liftProtocol = liftThread.getLiftProtocol();
-//                // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
-//                if (!liftProtocol.getMode()
-//                        || liftProtocol.getRunning()
-//                        || !liftProtocol.getReady()
-//                        || liftProtocol.getForwardRotationFeedback()
-//                        || liftProtocol.getReverseFeedback()
-//                        || liftProtocol.getNotReady().intValue() != 0
-//                ) {
-//                    return false;
-//                }
+            case SHUTTLE_MOVE_LIFT_PALLET://绌挎杞﹂《鍗囧苟绉诲姩
+                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
+                shuttleTaskModeType = ShuttleTaskModeType.PAK_IN;
+                shuttleCommands.add(0, shuttleThread.getLiftCommand(motion.getWrkNo(), true));
+                break;
+            case SHUTTLE_MOVE_DOWN_PALLET://绌挎杞︾Щ鍔ㄥ苟鎵樼洏涓嬮檷
+                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
+                shuttleTaskModeType = ShuttleTaskModeType.PAK_IN;
+                shuttleCommands.add(shuttleCommands.size(), shuttleThread.getLiftCommand(motion.getWrkNo(), false));
+                break;
+            case SHUTTLE_MOVE_FROM_LIFT://鍑烘彁鍗囨満
+                // 鍒ゆ柇鎻愬崌鏈虹姸鎬�
+                liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
+                if (liftThread == null) {
+                    return false;
+                }
+
+                liftProtocol = liftThread.getStatus();
+                if (liftProtocol == null) {
+                    return false;
+                }
+
+                // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
+
+                if (liftProtocol.getLev() != Utils.getLev(motion.getTarget())) {//鍒ゆ柇鎻愬崌鏈烘槸鍚﹁揪鍒扮洰鏍囧眰
+                    return false;
+                }
+
+//                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
+//                if (!liftProtocol.getLock()) {
+//                    //閿佸畾鎻愬崌鏈�
+//                    LiftCommand lockCommand = liftThread.getLockCommand(motion.getWrkNo(), true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
 //
-//                if (liftProtocol.getLev().intValue() != Utils.getLev(motion.getTarget())) {//鍒ゆ柇鎻愬崌鏈烘槸鍚﹁揪鍒扮洰鏍囧眰
-//                    return false;
-//                }
+//                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
+//                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
+//                    liftAssignCommand.setTaskNo(motion.getWrkNo());
+//                    ArrayList<LiftCommand> list = new ArrayList<>();
+//                    list.add(lockCommand);
+//                    liftAssignCommand.setCommands(list);
 //
+//                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
+//                    return false;//绛夊緟涓嬩竴娆¤疆璇�
+//                }
+
+                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
+                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
+                    return false;
+                }
+
+                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
+                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
+                break;
+            case SHUTTLE_MOVE_TO_LIFT://杩涙彁鍗囨満
+                // 鍒ゆ柇鎻愬崌鏈虹姸鎬�
+                liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
+                if (liftThread == null) {
+                    return false;
+                }
+                liftProtocol = liftThread.getStatus();
+                if (liftProtocol == null) {
+                    return false;
+                }
+                // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
+
+                if (liftProtocol.getLev() != Utils.getLev(motion.getTarget())) {//鍒ゆ柇鎻愬崌鏈烘槸鍚﹁揪鍒扮洰鏍囧眰
+                    return false;
+                }
+
 //                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
 //                if (!liftProtocol.getLiftLock()) {
 //                    //閿佸畾鎻愬崌鏈�
@@ -147,55 +194,15 @@
 //                    liftThread.assignWork(lockCommand);
 //                    return false;//绛夊緟涓嬩竴娆¤疆璇�
 //                }
-//
-//                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
-//                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
-//                    return false;
-//                }
-//
-//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
-//                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
-//                break;
-//            case SHUTTLE_MOVE_TO_LIFT://杩涙彁鍗囨満
-//                // 鍒ゆ柇鎻愬崌鏈虹姸鎬�
-//                liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
-//                if (liftThread == null) {
-//                    return false;
-//                }
-//                liftProtocol = liftThread.getLiftProtocol();
-//                // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
-//                if (!liftProtocol.getMode()
-//                        || liftProtocol.getRunning()
-//                        || !liftProtocol.getReady()
-//                        || liftProtocol.getForwardRotationFeedback()
-//                        || liftProtocol.getReverseFeedback()
-//                        || liftProtocol.getNotReady().intValue() != 0
-//                ) {
-//                    return false;
-//                }
-//
-//                if (liftProtocol.getLev().intValue() != Utils.getLev(motion.getTarget())) {//鍒ゆ柇鎻愬崌鏈烘槸鍚﹁揪鍒扮洰鏍囧眰
-//                    return false;
-//                }
-//
-//                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
-//                if (!liftProtocol.getLiftLock()) {
-//                    //閿佸畾鎻愬崌鏈�
-//                    LiftCommand lockCommand = liftThread.getLockCommand(true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
-//                    lockCommand.setLiftNo(liftProtocol.getLiftNo());
-//                    lockCommand.setTaskNo(motion.getWrkNo().shortValue());//鑾峰彇浠诲姟鍙�
-//                    liftThread.assignWork(lockCommand);
-//                    return false;//绛夊緟涓嬩竴娆¤疆璇�
-//                }
-//
-//                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
-//                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
-//                    return false;
-//                }
-//
-//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
-//                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
-//                break;
+
+                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
+                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
+                    return false;
+                }
+
+                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
+                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
+                break;
 //            case SHUTTLE_MOVE_FROM_CONVEYOR:
 //                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
 //                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
@@ -405,7 +412,8 @@
             return false;
         }
 
-        if (!shuttleProtocol.getIdle()) {
+        //鍒ゆ柇璁惧鏄惁绌洪棽
+        if (!shuttleThread.isIdle()) {
             return false;
         }
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java
index eb2defd..d374749 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java
@@ -9,9 +9,10 @@
     MOVE(1, "绉诲姩"),
     IN_LIFT(2, "杩涙彁鍗囨満"),
     OUT_LIFT(3, "鍑烘彁鍗囨満"),
-    CHARGE(4, "鍏呯數"),
-    PALLET_LIFT(5, "鎵樼洏椤跺崌"),
-    PALLET_DOWN(6, "鎵樼洏涓嬮檷"),
+    CHARGE_OPEN(4, "鍏呯數寮�"),
+    CHARGE_CLOSE(5, "鍏呯數鍏�"),
+    PALLET_LIFT(6, "鎵樼洏椤跺崌"),
+    PALLET_DOWN(7, "鎵樼洏涓嬮檷"),
     RESET(8, "澶嶄綅"),
     ;
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
index cddb6df..778a328 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
@@ -78,7 +78,7 @@
                 continue;
             }
 
-            if (!shuttleProtocol.isIdle()) {
+            if (!shuttleThread.isIdle()) {
                 continue;
             }
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java
index 7896673..40af86a 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java
@@ -135,6 +135,11 @@
     private Device device;
 
     /**
+     * 鎵╁睍瀛楁
+     */
+    private Object extend;
+
+    /**
      * 璁剧疆鎻愬崌鏈虹姸鎬�
      */
     public void setProtocolStatus(Integer status) {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
index 0eb07b2..97b5d64 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
@@ -168,6 +168,11 @@
     private Device device;
 
     /**
+     * 鎵╁睍瀛楁
+     */
+    private Object extend;
+
+    /**
      * 璁剧疆灏忚溅鐘舵��
      */
     public void setProtocolStatus(Integer status) {
@@ -263,25 +268,6 @@
         }
 
         return currentLoc.getLocNo();
-    }
-
-    // 鏄惁澶勪簬绌洪棽寰呭懡鐘舵��
-    public Boolean isIdle() {
-        if (this.deviceStatus == null
-                || this.pakMk == null
-                || this.errorCode == null
-                || this.protocolStatus == null
-        ) {
-            return false;
-        }
-
-        boolean res = this.deviceStatus.equals(ShuttleDeviceStatusType.IDLE)
-                && this.pakMk
-                && !this.errorCode.equals("0")
-                && this.getTaskNo() == 0
-                && this.protocolStatus.intValue() == ShuttleProtocolStatusType.IDLE.id
-                ;
-        return res;
     }
 
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
index 174c789..48a7bdc 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
@@ -20,6 +20,8 @@
 
     boolean reset(LiftCommand command);//澶嶄綅
 
+    boolean isIdle();//鏄惁绌洪棽
+
 
     //***************鑾峰彇鍛戒护*****************
     LiftCommand getEmptyMoveCommand(Integer taskNo, Integer targetLev);//绌鸿浇绉诲姩
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
index d703810..2f31443 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
@@ -23,7 +23,14 @@
 
     boolean reset(ShuttleCommand command);//澶嶄綅寮�鍏�
 
+    boolean isIdle();//鏄惁绌洪棽
+
     //***************鑾峰彇鍛戒护*****************
-    ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed);
+
+    ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed);//鑾峰彇绉诲姩鍛戒护
+
+    ShuttleCommand getLiftCommand(Integer taskNo, Boolean lift);//椤跺崌鍛戒护 true=>椤跺崌 false=>涓嬮檷
+
+    ShuttleCommand getChargeCommand(Integer taskNo, Boolean charge);//鍏呯數寮�鍏冲懡浠� true=>寮� false=>鍏�
 
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
index ba5bd4e..7f35a9b 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
@@ -20,6 +20,7 @@
 import com.zy.asrs.wcs.rcs.thread.LiftThread;
 import com.zy.asrs.wcs.core.utils.RedisUtil;
 import com.zy.asrs.wcs.rcs.entity.Device;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.MessageFormat;
@@ -87,6 +88,10 @@
                     liftProtocol.setLiftNo(Integer.valueOf(device.getDeviceNo()));
                     liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
                     liftProtocol.setDevice(device);
+
+                    InnerLiftExtend innerLiftExtend = new InnerLiftExtend();
+                    innerLiftExtend.setLock(false);//榛樿鏈攣瀹�
+                    liftProtocol.setExtend(innerLiftExtend);
                 }
 
                 //----------璇诲彇鎻愬崌鏈虹姸鎬�-----------
@@ -104,6 +109,13 @@
                 liftProtocol.setErrorCode("");
                 //灞�
                 liftProtocol.setLev(data.getInteger("curFloor"));
+
+
+                //************琛ュ厖鎵╁睍瀛楁*************
+                InnerLiftExtend liftExtend = JSON.parseObject(JSON.toJSONString(liftProtocol.getExtend()), InnerLiftExtend.class);
+                liftExtend.setLock(data.getInteger("lockStatus") == 1 ? true : false);
+                liftProtocol.setExtend(liftExtend);
+
 //                //鍓嶈秴闄�
 //                liftProtocol.setFrontOverrun(status1[4]);
 //                //鍚庤秴闄�
@@ -280,6 +292,20 @@
         return false;
     }
 
+    @Override
+    public boolean isIdle() {
+        InnerLiftExtend extend = (InnerLiftExtend) liftProtocol.getExtend();//鑾峰彇鎵╁睍瀛楁
+        // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂层�佹湭閿佸畾
+        if (liftProtocol.getModel()
+                && !liftProtocol.getRun()
+                && liftProtocol.getReady()
+                && !extend.getLock()
+        ) {
+            return true;
+        }
+        return false;
+    }
+
     //***************璁惧灞傞�氳-涓嶅悓鍘傚晢璁惧閫氳鏂规涓嶄竴鑷�***************
 
     //璇锋眰鐧诲綍
@@ -444,4 +470,17 @@
         return command;
     }
 
+    /**
+     * 鎵╁睍瀛楁
+     */
+    @Data
+    private class InnerLiftExtend {
+
+        /**
+         * 鎻愬崌鏈洪攣瀹�
+         */
+        private Boolean lock = false;
+
+    }
+
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
index 6f679c5..5986a9b 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -21,6 +21,7 @@
 import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
 import com.zy.asrs.wcs.core.utils.RedisUtil;
 import com.zy.asrs.wcs.rcs.entity.Device;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.MessageFormat;
@@ -87,6 +88,9 @@
                     shuttleProtocol.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
                     shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                     shuttleProtocol.setDevice(device);
+
+                    InnerSuhttleExtend extend = new InnerSuhttleExtend();
+                    shuttleProtocol.setExtend(extend);
                 }
 
                 //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
@@ -108,13 +112,19 @@
                 //鏄惁涓哄厖鐢电姸鎬�
                 shuttleProtocol.setHasCharge((deviceStatus == 5 || deviceStatus == 13) ? true : false);
 
+                //*********璇诲彇鎵╁睍瀛楁**********
+                InnerSuhttleExtend extend = JSON.parseObject(JSON.toJSONString(shuttleProtocol.getExtend()), InnerSuhttleExtend.class);
+                extend.setMapVersion(data.getString("version"));//鍦板浘鐗堟湰
+                extend.setStatusDescription(data.getString("statusDescription"));//鐘舵�佹弿杩�
+                shuttleProtocol.setExtend(extend);//鎵╁睍瀛楁
+
                 ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end
 
-//                //灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue
-//                if (shuttleProtocol.getDeviceStatusType() == ShuttleDeviceStatusType.BUSY) {
-//                    shuttleProtocol.setPakMk(true);
-//                }
-//
+                //灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue
+                if (!shuttleProtocol.getIdle()) {
+                    shuttleProtocol.setPakMk(true);
+                }
+
 //                if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == ShuttleDeviceStatusType.IDLE.id) {
 //                    //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽
 //                    shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE);
@@ -325,6 +335,24 @@
     }
 
     @Override
+    public boolean isIdle() {
+        if (this.shuttleProtocol.getIdle() == null
+                || this.shuttleProtocol.getPakMk() == null
+                || this.shuttleProtocol.getErrorCode() == null
+                || this.shuttleProtocol.getProtocolStatus() == null
+        ) {
+            return false;
+        }
+
+        boolean res = this.shuttleProtocol.getIdle()
+                && this.shuttleProtocol.getPakMk()
+                && this.shuttleProtocol.getErrorCode().equals("0")
+                && this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id
+                ;
+        return res;
+    }
+
+    @Override
     public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) {
         HashMap<String, Object> body = new HashMap<>();
         body.put("messageName", "runOrder");
@@ -351,6 +379,37 @@
         return command;
     }
 
+    @Override
+    public ShuttleCommand getLiftCommand(Integer taskNo, Boolean lift) {
+        HashMap<String, Object> body = new HashMap<>();
+        body.put("messageName", "actionOrder");
+        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
+        body.put("taskId", taskNo);
+        body.put("action", lift ? 1 : 2);
+
+        ShuttleCommand command = new ShuttleCommand();
+        command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
+        command.setBody(JSON.toJSONString(body));
+        command.setMode(lift ? ShuttleCommandModeType.PALLET_LIFT.id : ShuttleCommandModeType.PALLET_DOWN.id);
+        return command;
+    }
+
+    @Override
+    public ShuttleCommand getChargeCommand(Integer taskNo, Boolean charge) {
+        HashMap<String, Object> body = new HashMap<>();
+        body.put("messageName", "runOrder");
+        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
+        body.put("taskId", taskNo);
+        body.put("action", charge ? 3 : 4);
+
+        ShuttleCommand command = new ShuttleCommand();
+        command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
+        command.setBody(JSON.toJSONString(body));
+        command.setMode(charge ? ShuttleCommandModeType.CHARGE_OPEN.id : ShuttleCommandModeType.CHARGE_CLOSE.id);
+        return command;
+    }
 
     //***************璁惧灞傞�氳-涓嶅悓鍘傚晢璁惧閫氳鏂规涓嶄竴鑷�***************
 
@@ -410,4 +469,20 @@
         }
         return null;
     }
+
+    @Data
+    private class InnerSuhttleExtend {
+
+        /**
+         * 鍦板浘鐗堟湰
+         */
+        private String mapVersion;
+
+        /**
+         * 鐘舵�佹弿杩�
+         */
+        private String statusDescription;
+
+    }
+
 }

--
Gitblit v1.9.1