From e45a2aafabf9e76bf6556922c90104ea69ecae5a Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 23 四月 2024 13:16:56 +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