From 835be703696c44af1e510eca5fe2f6b8553a3b56 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期一, 24 六月 2024 17:04:57 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java |  157 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 133 insertions(+), 24 deletions(-)

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 c1cb3e6..7c55f48 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
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.wcs.core.action.LiftAction;
 import com.zy.asrs.wcs.core.entity.Motion;
+import com.zy.asrs.wcs.core.entity.Task;
 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.enums.DeviceCtgType;
@@ -11,7 +12,9 @@
 import com.zy.asrs.wcs.core.model.enums.MotionStsType;
 import com.zy.asrs.wcs.core.service.MotionService;
 import com.zy.asrs.wcs.core.service.TaskService;
+import com.zy.asrs.wcs.core.utils.Utils;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.model.enums.LiftProtocolStatusType;
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
 import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
 import com.zy.asrs.wcs.rcs.thread.LiftThread;
@@ -20,6 +23,8 @@
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -48,15 +53,28 @@
             return false;
         }
 
-        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
-        if (!liftThread.isIdle()) {
-            return false;
-        }
-
         if (motionService.count(new LambdaQueryWrapper<Motion>()
                 .eq(Motion::getDeviceCtg, DeviceCtgType.LIFT.val())
                 .eq(Motion::getDevice, motion.getDevice())
                 .eq(Motion::getMotionSts, MotionStsType.EXECUTING.val())) > 0) {
+            return false;
+        }
+
+        //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
+        boolean liftResult = Utils.checkLiftHasBinding(deviceNo, String.valueOf(motion.getTaskNo()));
+        if (liftResult) {
+            //瀛樺湪浠诲姟锛岀姝㈡墽琛�
+            return false;
+        }
+
+        //姣忔鎵ц鎻愬崌鏈烘寚浠ら兘缁戝畾鎻愬崌鏈�
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo()));
+        if (task == null) {
+            return false;
+        }
+        task.setLiftNo(liftProtocol.getLiftNo());
+        task.setUpdateTime(new Date());
+        if (!taskService.updateById(task)) {
             return false;
         }
 
@@ -66,9 +84,14 @@
         assignCommand.setTaskNo(motion.getTaskNo());
         assignCommand.setCommands(list);
 
-        LiftCommand command = new LiftCommand();
+        List<LiftCommand> command = new ArrayList<>();
         switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
             case LIFT_MOVE:
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
+
                 // 濡傛灉宸茬粡鍦ㄧ洰鏍囧眰锛岄偅杈瑰眰杩囨护
                 if (liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
                     liftThread.setSyncTaskNo(motion.getTaskNo());
@@ -76,39 +99,74 @@
                 }
 
                 command = liftThread.getMoveCommand(motion.getTaskNo(), 0, Integer.parseInt(motion.getTarget()), LiftCommandModeType.MOVE);
-                list.add(command);
+                list.addAll(command);
                 return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             case LIFT_WITH_GOODS:
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
 //                if (liftProtocol.getHasTray()) {
 //                    return false;
 //                }
 
                 command = liftThread.getPalletInOutCommand(motion.getTaskNo(), Integer.parseInt(motion.getOrigin()), Integer.parseInt(motion.getTarget()), motion.getOriDrt(), motion.getTarDrt(), LiftCommandModeType.PALLET_INOUT);
-                list.add(command);
+                list.addAll(command);
                 return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             case LIFT_WITH_SHUTTLE:
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
+
                 if (!liftProtocol.getHasCar()) {
                     return false;
                 }
 
                 command = liftThread.getMoveWithShuttleCommand(motion.getTaskNo(), Integer.parseInt(motion.getOrigin()), Integer.parseInt(motion.getTarget()), LiftCommandModeType.MOVE_CAR);
-                list.add(command);
+                list.addAll(command);
                 return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             case LIFT_WITH_GOODS_AND_SHUTTLE:
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
+
                 return false;
-//                if (!liftProtocol.getPlatShuttleCheck()) {
-//                    return false;
-//                }
-//
-//                command = liftThread.getLiftUpDownCommand(Integer.parseInt(motion.getTarget()));
-//                command.setLiftNo(deviceNo.shortValue());
-//                command.setTaskNo(motion.getWrkNo().shortValue());
-//                return liftThread.assignWork(command);
             case LIFT_TRANSPORT_TO_CONVEYOR:
                 return false;
+            case LIFT_LOCK:
+                //閿佸畾鎻愬崌鏈�
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle(MotionCtgType.LIFT_LOCK)) {
+                    return false;
+                }
+
+                command = liftThread.getLockCommand(motion.getTaskNo(), true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
+                list.addAll(command);
+                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
+            case LIFT_UNLOCK:
+                //瑙i攣鎻愬崌鏈�
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle(MotionCtgType.LIFT_UNLOCK)) {
+                    return false;
+                }
+
+                command = liftThread.getLockCommand(motion.getTaskNo(), false);//鑾峰彇鎻愬崌鏈鸿В瀹氬懡浠�
+                list.addAll(command);
+                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
+            case LIFT_SHUTTLE_ARRIVAL:
+                //鎻愬崌鏈�-灏忚溅宸插埌浣�
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle(MotionCtgType.LIFT_SHUTTLE_ARRIVAL)) {
+                    return false;
+                }
+
+                command = liftThread.getShuttleSignalCommand(motion.getTaskNo(), true);//鑾峰彇灏忚溅宸插埌浣嶅懡浠�
+                list.addAll(command);
+                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             default:
                 break;
-
         }
 
         return Boolean.TRUE;
@@ -129,6 +187,11 @@
             return false;
         }
 
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo()));
+        if (task == null) {
+            return false;
+        }
+
         switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
             case LIFT_MOVE:
                 // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
@@ -140,6 +203,14 @@
                     return false;
                 }
 
+                if (motion.getReleaseLift() == 1) {//閲婃斁鎻愬崌鏈�
+                    task.setLiftNo(null);
+                    task.setUpdateTime(new Date());
+                    if (!taskService.updateById(task)) {
+                        return false;
+                    }
+                }
+
                 break;
             case LIFT_WITH_GOODS:
                 // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
@@ -147,12 +218,26 @@
                     return false;
                 }
 
-//                if (!liftProtocol.getLineFrontHasStock() || !liftProtocol.getLineEndHasStock()) {
-//                    return false;
-//                }
-
                 if (!liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
                     return false;
+                }
+
+                if (task.getTaskSts() < 100) {//鍏ュ簱鍒ゆ柇鎵樼洏鏄惁杩涘叆鎻愬崌鏈�
+                    if (!liftProtocol.getHasTray()) {
+                        return false;
+                    }
+                } else if (task.getTaskSts() >= 100 && task.getTaskSts() < 200) {//鍑哄簱鍒ゆ柇鎵樼洏鏄惁绂诲紑鎻愬崌鏈�
+                    if (liftProtocol.getHasTray()) {
+                        return false;
+                    }
+                }
+
+                if (motion.getReleaseLift() == 1) {//閲婃斁鎻愬崌鏈�
+                    task.setLiftNo(null);
+                    task.setUpdateTime(new Date());
+                    if (!taskService.updateById(task)) {
+                        return false;
+                    }
                 }
 
                 break;
@@ -181,6 +266,10 @@
                     return false;
                 }
 
+                if (!liftProtocol.getHasTray()) {
+                    return false;
+                }
+
                 if (!liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
                     return false;
                 }
@@ -189,14 +278,34 @@
             case LIFT_TRANSPORT_TO_CONVEYOR:
 
                 break;
+            case LIFT_LOCK:
+                if (!liftThread.isLock(null)) {
+                    return false;
+                }
+                break;
+            case LIFT_UNLOCK:
+                if (liftThread.isLock(null)) {
+                    return false;
+                }
+
+                if (motion.getReleaseLift() == 1) {//閲婃斁鎻愬崌鏈�
+                    task.setLiftNo(null);
+                    task.setUpdateTime(new Date());
+                    if (!taskService.updateById(task)) {
+                        return false;
+                    }
+                }
+                break;
+            case LIFT_SHUTTLE_ARRIVAL:
+
+                break;
             default:
                 return false;
         }
 
         liftThread.setSyncTaskNo(0);//娓呴浂宸ヤ綔鍙�
-        liftThread.commandFinished(motion.getTaskNo());//璋冪敤瀹屾垚鍚庣画鎸囦护(閮ㄥ垎鎻愬崌鏈烘湁鍚庣画鎸囦护锛屽疄闄呮儏鍐电湅鏄惁鏈夌湡姝e疄鐜版柟娉�)
+        liftThread.setProtocolStatus(LiftProtocolStatusType.IDLE);
         return true;
     }
-
 
 }

--
Gitblit v1.9.1