From 8ef2bb5e46d84594e6ed632c07ea0b47a1bf6c4d Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 11 十二月 2024 16:15:17 +0800
Subject: [PATCH] #path similarity

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java |  424 +++++++++++++++++++++++++++++++----------------------
 1 files changed, 248 insertions(+), 176 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 4fb2d5f..c8680e1 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,22 +3,30 @@
 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;
+import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType;
 import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
 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.model.protocol.StaProtocol;
+import com.zy.asrs.wcs.rcs.thread.DevpThread;
 import com.zy.asrs.wcs.rcs.thread.LiftThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -47,11 +55,6 @@
             return false;
         }
 
-        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
-        if (!liftThread.isIdle()) {
-            return false;
-        }
-
         if (motionService.count(new LambdaQueryWrapper<Motion>()
                 .eq(Motion::getDeviceCtg, DeviceCtgType.LIFT.val())
                 .eq(Motion::getDevice, motion.getDevice())
@@ -59,139 +62,163 @@
             return false;
         }
 
+        //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
+        boolean liftResult = Utils.checkLiftHasBinding(liftProtocol.getLiftNo(), 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;
+        }
+
         ArrayList<LiftCommand> list = new ArrayList<>();
         LiftAssignCommand assignCommand = new LiftAssignCommand();
         assignCommand.setLiftNo(liftProtocol.getLiftNo());
         assignCommand.setTaskNo(motion.getTaskNo());
+        assignCommand.setDeviceTaskNo(liftThread.generateDeviceTaskNo(motion.getTaskNo(), MotionCtgType.get(motion.getMotionCtgEl())));
         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());
                     break;
                 }
 
-                command = liftThread.getMoveCommand(motion.getTaskNo(), 0, Integer.parseInt(motion.getTarget()), null);
-                list.add(command);
+                command = liftThread.getMoveCommand(assignCommand.getDeviceTaskNo(), 0, Integer.parseInt(motion.getTarget()), LiftCommandModeType.MOVE);
+                list.addAll(command);
                 return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             case LIFT_WITH_GOODS:
-                return false;
-//                if (!liftProtocol.getLineFrontHasStock() || !liftProtocol.getLineEndHasStock()) {
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
+//                if (liftProtocol.getHasTray()) {
 //                    return false;
 //                }
-//
-//                command = liftThread.getLiftUpDownCommand(Integer.parseInt(motion.getTarget()));
-//                command.setLiftNo(deviceNo.shortValue());
-//                command.setTaskNo(motion.getWrkNo().shortValue());
-//                return liftThread.assignWork(command);
+
+                //鍒ゆ柇鐩爣绔欐槸鍚︽湁鎵樼洏
+                Integer conveyorDeviceId = Integer.parseInt(motion.getDockNo());
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, conveyorDeviceId);
+                if (devpThread == null) {
+                    return false;
+                }
+//                //*************鏍囧噯绯荤粺浠g爜********************
+//                StaProtocol staProtocol = devpThread.getStation().get(motion.getTarDrt());
+//                if (staProtocol == null) {
+//                    return false;
+//                }
+//                if (!staProtocol.isAutoing()) {
+//                    return false;
+//                }
+//                if (staProtocol.isLoading()) {
+//                    return false;
+//                }
+//                if (staProtocol.getWorkNo().intValue() != 0) {
+//                    return false;
+//                }
+//                //*************************************************
+
+
+                //*************姝や唬鐮佷负鍏夋嘲瀹氬埗浠g爜********************
+                Integer tarDrt = motion.getTarDrt();
+                if (tarDrt == 31001) {
+                    tarDrt = 31004;
+                }
+
+                StaProtocol staProtocol = devpThread.getStation().get(tarDrt);
+                if (staProtocol == null) {
+                    return false;
+                }
+                if (!staProtocol.isAutoing()) {
+                    return false;
+                }
+                if (staProtocol.isLoading()) {
+                    return false;
+                }
+                if (staProtocol.getWorkNo().intValue() != 0) {
+                    return false;
+                }
+                //*************************************************
+
+                command = liftThread.getPalletInOutCommand(assignCommand.getDeviceTaskNo(), Integer.parseInt(motion.getOrigin()), Integer.parseInt(motion.getTarget()), motion.getOriDrt(), motion.getTarDrt(), LiftCommandModeType.PALLET_INOUT);
+                list.addAll(command);
+
+                motion.setTemp(String.valueOf(assignCommand.getDeviceTaskNo()));
+                motion.setUpdateTime(new Date());
+                motionService.updateById(motion);
+
+                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()), null);
-                list.add(command);
+                command = liftThread.getMoveWithShuttleCommand(assignCommand.getDeviceTaskNo(), Integer.parseInt(motion.getOrigin()), Integer.parseInt(motion.getTarget()), LiftCommandModeType.MOVE_CAR);
+                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;
-//                // 鍒ゆ柇杈撻�佺嚎鐘舵��
-//                int staNo = Integer.parseInt(motion.getTarget());
-//                WorkZoneType zoneType = WorkZoneType.query(staNo);
-//
-//                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, zoneType.devpPlcId);
-//
-//                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-//                if (staProtocol == null) {
-//                    return false;
-//                }
-//
-//                if (!staProtocol.isAutoing()
-//                    || staProtocol.isLoading()
-////                    || !staProtocol.isOutEnable()
-//                    || staProtocol.getWorkNo() != 0) {
-//                    return false;
-//                }
-//
-//                // 鍒ゆ柇鎻愬崌鏈虹姸鎬�
-//                if (!liftProtocol.getLev().equals(Short.parseShort(motion.getOrigin()))) {  // 鏄惁澶勪簬浠诲姟灞�
-//                    return false;
-//                }
-//
-//                // 涓嬪彂鍛戒护 ---------------------------------------------------
-//
-//                // 1.椹卞姩杈撻�佺嚎鐢垫満
-//                StaMotorType staMotorType = null;
-//                StaMotorType reqStaMotorType = null;
-//                LiftInteractiveModeType liftInteractiveModeType = null;
-//                LiftNeighborType neighborType = LiftNeighborType.query(staNo);
-//                StaProtocol staProtocol1 = staProtocol.clone();
-//                staProtocol1.setWorkNo(motion.getWrkNo().shortValue());
-//                staProtocol1.setStaNo(neighborType.finalStaNo.shortValue());
-//                switch (neighborType) {
-//                    case LIFT_2_NEIGHBOR_OUTBOUND_LEV_1:
-//                        staMotorType = StaMotorType.FORWARD;
-//                        reqStaMotorType = StaMotorType.REQ_FORWARD;
-//                        liftInteractiveModeType = LiftInteractiveModeType.ENGINE_LOADING_TURN_REVERSE;
-//                        break;
-//                    case LIFT_1_NEIGHBOR_INBOUND_LEV_2:
-//                    case LIFT_1_NEIGHBOR_INBOUND_LEV_3:
-//                    case LIFT_1_NEIGHBOR_INBOUND_LEV_4:
-//                        staMotorType = StaMotorType.FORWARD;
-//                        reqStaMotorType = StaMotorType.REQ_FORWARD;
-//                        liftInteractiveModeType = LiftInteractiveModeType.ENGINE_LOADING_TURN_REVERSE;
-//                        break;
-//                    case LIFT_1_NEIGHBOR_OUTBOUND_LEV_1_FINAL_8:
-//                        staMotorType = StaMotorType.FORWARD;
-//                        reqStaMotorType = StaMotorType.REQ_FORWARD;
-//                        liftInteractiveModeType = LiftInteractiveModeType.ENGINE_LOADING_TURN_REVERSE;
-//                        break;
-//                    default:
-//                        break;
-//                }
-//
-//                MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol1));
-//                try {
-//                    Thread.sleep(1000);
-//                } catch (InterruptedException ignore) {}
-////                int times = 0;boolean staProtocolMotorRes = false;
-////                while (times < 5) {
-////                    if (staProtocol.getStaMotorType().equals(staMotorType)) {
-////                        staProtocolMotorRes = true;
-////                        break;
-////                    }
-////                    if (!devpThread.controlMotor(staNo, reqStaMotorType)) {
-////                        continue;
-////                    }
-////                    try {
-////                        Thread.sleep(500);
-////                    } catch (InterruptedException ignore) {}
-////                    times++;
-////                }
-////                if (!staProtocolMotorRes) {
-////                    return false;
-////                }
-//
-//                // 2.椹卞姩鎻愬崌鏈虹數鏈�
-//                command = liftThread.getLiftTurnCommand(liftInteractiveModeType.id);
-//                command.setLiftNo(deviceNo.shortValue());
-//                command.setTaskNo(motion.getWrkNo().shortValue());
-//                return liftThread.assignWork(command);
+            case LIFT_LOCK:
+                //閿佸畾鎻愬崌鏈�
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle(MotionCtgType.LIFT_LOCK)) {
+                    return false;
+                }
+
+                command = liftThread.getLockCommand(assignCommand.getDeviceTaskNo(), 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(assignCommand.getDeviceTaskNo(), 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(assignCommand.getDeviceTaskNo(), true);//鑾峰彇灏忚溅宸插埌浣嶅懡浠�
+                list.addAll(command);
+                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             default:
                 break;
-
         }
 
         return Boolean.TRUE;
@@ -212,6 +239,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:
                 // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
@@ -222,6 +254,15 @@
                 if (!liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
                     return false;
                 }
+
+                if (motion.getReleaseLift() == 1) {//閲婃斁鎻愬崌鏈�
+                    task.setLiftNo(0);
+                    task.setUpdateTime(new Date());
+                    if (!taskService.updateById(task)) {
+                        return false;
+                    }
+                }
+
                 break;
             case LIFT_WITH_GOODS:
                 // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
@@ -229,12 +270,81 @@
                     return false;
                 }
 
-//                if (!liftProtocol.getLineFrontHasStock() || !liftProtocol.getLineEndHasStock()) {
-//                    return false;
-//                }
-
                 if (!liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
                     return false;
+                }
+
+                //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦�
+                if (liftProtocol.getHasTray()) {
+                    return false;
+                }
+
+                //鍒ゆ柇鐩爣绔欐槸鍚︽湁鎵樼洏
+                Integer conveyorDeviceId = Integer.parseInt(motion.getDockNo());
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, conveyorDeviceId);
+                if (devpThread == null) {
+                    return false;
+                }
+
+//                //*************姝や唬鐮佷负鏍囧噯鐗堟湰浠g爜********************
+//                StaProtocol staProtocol = devpThread.getStation().get(motion.getTarDrt());
+//                if(staProtocol == null) {
+//                    return false;
+//                }
+//                if (!staProtocol.isAutoing()) {
+//                    return false;
+//                }
+//                if (!staProtocol.isLoading()) {
+//                    return false;
+//                }
+//                if (!motion.getTaskNo().equals(staProtocol.getWorkNo().intValue())) {
+//                    if (motion.getTemp() == null) {
+//                        return false;
+//                    }
+//
+//                    if (Integer.parseInt(motion.getTemp()) != staProtocol.getWorkNo().intValue()) {
+//                        return false;
+//                    }
+//                }
+//                //*************************************************
+
+                //*************姝や唬鐮佷负鍏夋嘲瀹氬埗浠g爜********************
+                ArrayList<Integer> staList = new ArrayList<>();
+                staList.add(motion.getTarDrt());
+                staList.add(31003);
+                staList.add(31002);
+                staList.add(31001);
+
+                boolean check = false;
+                for (Integer sta : staList) {
+                    StaProtocol staProtocol = devpThread.getStation().get(sta);
+                    if (staProtocol == null) {
+                        continue;
+                    }
+                    if (!staProtocol.isAutoing()) {
+                        continue;
+                    }
+                    if (!staProtocol.isLoading()) {
+                        continue;
+                    }
+                    if (Integer.parseInt(motion.getTemp()) == staProtocol.getWorkNo().intValue()) {
+                        check = true;
+                        break;
+                    }
+                }
+
+                if (!check) {
+                    return false;
+                }
+                //*************************************************
+
+
+                if (motion.getReleaseLift() == 1) {//閲婃斁鎻愬崌鏈�
+                    task.setLiftNo(0);
+                    task.setUpdateTime(new Date());
+                    if (!taskService.updateById(task)) {
+                        return false;
+                    }
                 }
 
                 break;
@@ -263,75 +373,37 @@
                     return false;
                 }
 
+                if (!liftProtocol.getHasTray()) {
+                    return false;
+                }
+
                 if (!liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
                     return false;
                 }
 
                 break;
             case LIFT_TRANSPORT_TO_CONVEYOR:
-//                // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�佸墠鍏夌數鏃犺揣銆侀摼鏉℃病鏈夎浆鍔�
-//                if (!liftProtocol.getModel()
-//                        || liftProtocol.getRun()
-//                        || !liftProtocol.getReady()
-//                        || liftProtocol.getLineFxrontHasStock()
-//                        || liftProtocol.getLineEndHasStock()
-//                        || liftProtocol.getForwardRotationFeedback()
-//                        || liftProtocol.getReverseFeedback()
-//                ) {
-//                    return false;
-//                }
-//
-//                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
-//                    return false;
-//                }
-//
-//                // 鍒ゆ柇杈撻�佺嚎鐘舵��
-//                int staNo = Integer.parseInt(motion.getTarget());
-//                WorkZoneType zoneType = WorkZoneType.query(staNo);
-//
-//                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, zoneType.devpPlcId);
-//
-//                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-//                if (staProtocol == null) {
-//                    return false;
-//                }
-//
-//                if (!staProtocol.getStaMotorType().equals(StaMotorType.STANDBY)) {
-//                    return false;
-//                }
-//
-////                // 鍒ゆ柇杈撻�佺嚎鐘舵��
-////                int staNo = Integer.parseInt(motion.getTarget());
-////                WorkZoneType zoneType = WorkZoneType.query(staNo);
-////
-////                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, zoneType.devpPlcId);
-////
-////                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-////                if (staProtocol == null) {
-////                    return false;
-////                }
-////
-////                if (!staProtocol.isAutoing() || !staProtocol.isLoading() || staProtocol.getWorkNo() != motion.getWrkNo().intValue()) {
-////                    return false;
-////                }
-//
-////                if (!staProtocol.getStaMotorType().equals(StaMotorType.STANDBY)) {
-////                    return false;
-////                }
-//
-////                // 灏嗕换鍔″彿鍏堜繚瀛樺埌杈撻�佺嚎绔欑偣涓婏紝鐩爣绔欎负0
-////                StaProtocol clone = staProtocol.clone();
-////                clone.setWorkNo(motion.getWrkNo().shortValue());
-////                clone.setStaNo((short) 0);
-////                if (!MessageQueue.offer(SlaveType.Devp, zoneType.devpPlcId, new Task(2, clone))) {
-////                    return false;
-////                }
-////
-////                // 鍋滄鎻愬崌鏈虹數鏈鸿浆鍔紝骞跺浣�
-////                command = liftThread.getLiftTurnCommand(LiftInteractiveModeType.ENGINE_STOP.id);
-////                command.setLiftNo(deviceNo.shortValue());
-////                command.setTaskNo(motion.getWrkNo().shortValue());
-////                return liftThread.assignWork(command);
+
+                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(0);
+                    task.setUpdateTime(new Date());
+                    if (!taskService.updateById(task)) {
+                        return false;
+                    }
+                }
+                break;
+            case LIFT_SHUTTLE_ARRIVAL:
 
                 break;
             default:
@@ -339,8 +411,8 @@
         }
 
         liftThread.setSyncTaskNo(0);//娓呴浂宸ヤ綔鍙�
+        liftThread.setProtocolStatus(LiftProtocolStatusType.IDLE);
         return true;
     }
-
 
 }

--
Gitblit v1.9.1