From 2db722e23d7e5d1d2e719174938f354d804644af Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 23 四月 2024 08:13:52 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java |  228 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 190 insertions(+), 38 deletions(-)

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 e799b7b..2669988 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
@@ -4,11 +4,14 @@
 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.common.ExecuteSupport;
 import com.zy.asrs.wcs.core.action.LiftAction;
 import com.zy.asrs.wcs.core.action.ShuttleAction;
 import com.zy.asrs.wcs.core.entity.BasShuttle;
 import com.zy.asrs.wcs.core.entity.Loc;
 import com.zy.asrs.wcs.core.model.NavigateNode;
+import com.zy.asrs.wcs.core.model.command.LiftAssignCommand;
+import com.zy.asrs.wcs.core.model.command.LiftCommand;
 import com.zy.asrs.wcs.core.model.command.ShuttleAssignCommand;
 import com.zy.asrs.wcs.core.model.command.ShuttleCommand;
 import com.zy.asrs.wcs.core.model.enums.*;
@@ -19,6 +22,7 @@
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
 import com.zy.asrs.wcs.core.entity.Motion;
+import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
 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;
@@ -135,21 +139,26 @@
                     return false;
                 }
 
-//                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
-//                if (!liftProtocol.getLock()) {
-//                    //閿佸畾鎻愬崌鏈�
-//                    LiftCommand lockCommand = liftThread.getLockCommand(motion.getWrkNo(), true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
-//
-//                    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 (!liftThread.isLock(new ExecuteSupport() {
+                    @Override
+                    public Boolean judgement() {
+                        return true;
+                    }
+                })) {
+                    //閿佸畾鎻愬崌鏈�
+                    LiftCommand lockCommand = liftThread.getLockCommand(motion.getTaskNo(), true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
+
+                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
+                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
+                    liftAssignCommand.setTaskNo(motion.getTaskNo());
+                    ArrayList<LiftCommand> list = new ArrayList<>();
+                    list.add(lockCommand);
+                    liftAssignCommand.setCommands(list);
+
+                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
+                    return false;//绛夊緟涓嬩竴娆¤疆璇�
+                }
 
                 //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
                 if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
@@ -178,15 +187,29 @@
                     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 (!liftThread.isLock(new ExecuteSupport() {
+                    @Override
+                    public Boolean judgement() {
+                        return true;
+                    }
+                })) {
+                    //閿佸畾鎻愬崌鏈�
+                    LiftCommand lockCommand = liftThread.getLockCommand(motion.getTaskNo(), true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
+                    if (lockCommand == null) {
+                        return false;
+                    }
+
+                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
+                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
+                    liftAssignCommand.setTaskNo(motion.getTaskNo());
+                    ArrayList<LiftCommand> list = new ArrayList<>();
+                    list.add(lockCommand);
+                    liftAssignCommand.setCommands(list);
+
+                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
+                    return false;//绛夊緟涓嬩竴娆¤疆璇�
+                }
 
                 //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
                 if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
@@ -284,7 +307,126 @@
                 }
                 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 (!shuttleProtocol.getCurrentLocNo().equals(motion.getTarget())) {
+                    return false;
+                }
+
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
+                if (liftThread.isLock(new ExecuteSupport() {
+                    @Override
+                    public Boolean judgement() {
+                        return false;
+                    }
+                })) {
+                    //瑙i攣鎻愬崌鏈�
+                    LiftCommand lockCommand = liftThread.getLockCommand(motion.getTaskNo(), false);//鑾峰彇鎻愬崌鏈鸿В閿佸懡浠�
+
+                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
+                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
+                    liftAssignCommand.setTaskNo(motion.getTaskNo());
+                    ArrayList<LiftCommand> list = new ArrayList<>();
+                    list.add(lockCommand);
+                    liftAssignCommand.setCommands(list);
+
+                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
+                    return false;//绛夊緟涓嬩竴娆¤疆璇�
+                }
+
+                //鍒ゆ柇灏忚溅鏄惁宸插埌浣�
+                if (liftProtocol.getHasCar()) {
+                    LiftCommand signalCommand = liftThread.getShuttleSignalCommand(motion.getTaskNo(), true);//鑾峰彇灏忚溅宸插埌浣嶅懡浠�
+                    if(signalCommand != null) {
+                        boolean hasKey = redisUtil.hasKey(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo());
+                        if (!hasKey) {
+                            LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
+                            liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
+                            liftAssignCommand.setTaskNo(motion.getTaskNo());
+                            ArrayList<LiftCommand> list = new ArrayList<>();
+                            list.add(signalCommand);
+                            liftAssignCommand.setCommands(list);
+                            liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
+                            return false;
+                        }
+                    }
+                }
+
+                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
+                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
+                    return false;
+                }
+
+                if (liftProtocol.getTaskNo() != 0) {
+                    //娓呯┖鎻愬崌鏈哄彿
+                    liftThread.setSyncTaskNo(0);
+                }
+                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 (!shuttleProtocol.getCurrentLocNo().equals(motion.getTarget())) {
+                    return false;
+                }
+
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
+                if (liftThread.isLock(new ExecuteSupport() {
+                    @Override
+                    public Boolean judgement() {
+                        return false;
+                    }
+                })) {
+                    //瑙i攣鎻愬崌鏈�
+                    LiftCommand lockCommand = liftThread.getLockCommand(motion.getTaskNo(), false);//鑾峰彇鎻愬崌鏈鸿В閿佸懡浠�
+
+                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
+                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
+                    liftAssignCommand.setTaskNo(motion.getTaskNo());
+                    ArrayList<LiftCommand> list = new ArrayList<>();
+                    list.add(lockCommand);
+                    liftAssignCommand.setCommands(list);
+
+                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
+                    return false;//绛夊緟涓嬩竴娆¤疆璇�
+                }
+
+                //鍒ゆ柇灏忚溅鏄惁宸茬寮�
+                if (!liftProtocol.getHasCar()) {
+                    LiftCommand signalCommand = liftThread.getShuttleSignalCommand(motion.getTaskNo(), false);//鑾峰彇灏忚溅宸查┚绂诲懡浠�
+                    if(signalCommand != null) {
+                        boolean hasKey = redisUtil.hasKey(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo());
+                        if (!hasKey) {
+                            redisUtil.set(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo(), JSON.toJSONString(signalCommand), 120);
+                            LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
+                            liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
+                            liftAssignCommand.setTaskNo(motion.getTaskNo());
+                            ArrayList<LiftCommand> list = new ArrayList<>();
+                            list.add(signalCommand);
+                            liftAssignCommand.setCommands(list);
+                            liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
+                            return false;
+                        }
+                    }
+                }
+
+                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
+                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
+                    return false;
+                }
+
+                if (liftProtocol.getTaskNo() != 0) {
+                    //娓呯┖鎻愬崌鏈哄彿
+                    liftThread.setSyncTaskNo(0);
+                }
+                break;
             case SHUTTLE_TRANSPORT_FROM_LIFT:
             case SHUTTLE_TRANSPORT_TO_LIFT:
             case SHUTTLE_MOVE_FROM_LIFT_TO_CONVEYOR:
@@ -298,26 +440,36 @@
                     return false;
                 }
 
-//                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
-//                if (liftProtocol.getLiftLock()) {
-//                    //瑙i攣鎻愬崌鏈�
-//                    LiftCommand lockCommand = liftThread.getLockCommand(false);//鑾峰彇鎻愬崌鏈鸿В閿佸懡浠�
-//                    lockCommand.setLiftNo(liftProtocol.getLiftNo());
-//                    lockCommand.setTaskNo(motion.getWrkNo().shortValue());//鑾峰彇浠诲姟鍙�
-//                    liftThread.assignWork(lockCommand);
-//                    return false;
-//                }
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
+                if (liftThread.isLock(new ExecuteSupport() {
+                    @Override
+                    public Boolean judgement() {
+                        return false;
+                    }
+                })) {
+                    //瑙i攣鎻愬崌鏈�
+                    LiftCommand lockCommand = liftThread.getLockCommand(motion.getTaskNo(), false);//鑾峰彇鎻愬崌鏈鸿В閿佸懡浠�
+
+                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
+                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
+                    liftAssignCommand.setTaskNo(motion.getTaskNo());
+                    ArrayList<LiftCommand> list = new ArrayList<>();
+                    list.add(lockCommand);
+                    liftAssignCommand.setCommands(list);
+
+                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
+                    return false;//绛夊緟涓嬩竴娆¤疆璇�
+                }
 
                 //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
                 if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
                     return false;
                 }
 
-//                if (liftProtocol.getTaskNo() != 0) {
-//                    //娓呯┖鎻愬崌鏈哄彿
-//                    liftThread.setTaskNo(0);
-//                }
-
+                if (liftProtocol.getTaskNo() != 0) {
+                    //娓呯┖鎻愬崌鏈哄彿
+                    liftThread.setSyncTaskNo(0);
+                }
                 break;
             default:
                 break;

--
Gitblit v1.9.1