From 34a7a5a6969d3000495d54081dbc99b02527a001 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期一, 17 二月 2025 13:49:36 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java | 111 ++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 76 insertions(+), 35 deletions(-)
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 44bcacd..5d825f1 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
@@ -23,19 +23,20 @@
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
+import com.zy.asrs.wcs.rcs.entity.BasShuttleOpt;
import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.CommandResponse;
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.ShuttleProtocol;
+import com.zy.asrs.wcs.rcs.service.BasShuttleOptService;
import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import com.zy.asrs.wcs.system.entity.Dict;
import com.zy.asrs.wcs.system.service.DictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
@Component
public class ShuttleAction {
@@ -56,6 +57,8 @@
private DictService dictService;
@Autowired
private ConveyorDispatcher conveyorDispatcher;
+ @Autowired
+ private BasShuttleOptService basShuttleOptService;
public synchronized boolean assignWork(Device device, ShuttleAssignCommand assignCommand) {
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
@@ -76,12 +79,13 @@
redisCommand.setAssignCommand(assignCommand);//鍛戒护
//浠诲姟鏁版嵁淇濆瓨鍒皉edis
if (redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect))) {
- if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id
- || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id
- || assignCommand.getTaskMode() == ShuttleTaskModeType.MOVE_LOC_NO.id
- || assignCommand.getTaskMode() == ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id) {
+ if (assignCommand.getTaskMode() == ShuttleTaskModeType.SHUTTLE_MOVE.id
+ || assignCommand.getTaskMode() == ShuttleTaskModeType.TRANSPORT.id
+ || assignCommand.getTaskMode() == ShuttleTaskModeType.MOVE_PALLET_LIFT.id
+ || assignCommand.getTaskMode() == ShuttleTaskModeType.MOVE_PALLET_DOWN.id) {
//涓嬪彂琛岄┒璺緞
- boolean result = shuttleThread.movePath(assignCommand.getNodes(), assignCommand.getDeviceTaskNo());
+ CommandResponse response = shuttleThread.movePath(assignCommand.getNodes(), assignCommand.getDeviceTaskNo());
+ Boolean result = response.getResult();
if (!result) {
return false;
}
@@ -132,13 +136,36 @@
ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
int commandStep = redisCommand.getCommandStep();
+ Integer mode = -1;
+ if(commandStep < commands.size()) {
+ //鍙栧嚭鍛戒护
+ ShuttleCommand currentCommand = commands.get(commandStep);
+ mode = currentCommand.getMode();
+ }
+
+ //鍒ゆ柇璁惧鏄惁绌洪棽
+ Integer finalMode = mode;
+ if (!shuttleThread.isDeviceIdle(new ExecuteSupport() {
+ @Override
+ public Boolean judgement() {
+ if (ShuttleCommandModeType.CHARGE_CLOSE.id.equals(finalMode)) {//鍏抽棴鍏呯數motion
+ return false;//涓嶉渶瑕佸垽鏂姸鎬�
+ }
+ return true;//闇�瑕佸垽鏂姸鎬�
+ }
+ })) {
+ return false;
+ }
+
// 瀹岀粨涓婁竴鏉″懡浠�
+ boolean updateCommand = false;
if (commandStep != 0) {
ShuttleCommand command = commands.get(commandStep - 1);
if (command.getMode() == ShuttleCommandModeType.MOVE.id) {
// 姝e父绉诲姩
if (command.getTargetLocNo().equals(shuttleProtocol.getCurrentLocNo())) {
command.setComplete(true);
+ updateCommand = true;
//瑙i攣閿佸畾璺緞锛屼笂涓�鏉¤矾寰�
List<NavigateNode> nodes = null;
try {
@@ -166,6 +193,7 @@
//鍒ゆ柇鏄惁椤跺崌鍒颁綅
if (shuttleProtocol.getHasLift()) {
command.setComplete(true);
+ updateCommand = true;
// //鍒ゆ柇鏄惁鏈夌墿
// if (shuttleProtocol.getHasPallet()) {
// command.setComplete(true);
@@ -176,19 +204,24 @@
// 鍒ゆ柇鏄惁涓嬮檷鍒颁綅
if (!shuttleProtocol.getHasLift()) {
command.setComplete(true);
+ updateCommand = true;
}
} else if (command.getMode() == ShuttleCommandModeType.CHARGE_OPEN.id) {
// 鍏呯數寮�
//鍒ゆ柇灏忚溅鍏呯數鐘舵��
if (shuttleProtocol.getHasCharge()) {
command.setComplete(true);
+ updateCommand = true;
}
}else {
command.setComplete(true);//鍏朵粬鍛戒护榛樿璁や负瀹屾垚
+ updateCommand = true;
}
- // 鏇存柊redis鏁版嵁
- redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getTaskNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect));
+ if(updateCommand) {
+ // 鏇存柊redis鏁版嵁
+ redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getTaskNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect));
+ }
if (!command.getComplete()) {
return false;
@@ -229,22 +262,29 @@
//鍙栧嚭鍛戒护
ShuttleCommand command = commands.get(commandStep);
- Integer mode = command.getMode();
- //鍒ゆ柇璁惧鏄惁绌洪棽
- if (!shuttleThread.isDeviceIdle(new ExecuteSupport() {
- @Override
- public Boolean judgement() {
- if (ShuttleCommandModeType.CHARGE_CLOSE.id.equals(mode)) {//鍏抽棴鍏呯數motion
- return false;//涓嶉渶瑕佸垽鏂姸鎬�
- }
- return true;//闇�瑕佸垽鏂姸鎬�
- }
- })) {
- return false;
- }
-
// 涓嬪彂鍛戒护
- if (!write(command, device)) {
+ CommandResponse response = write(command, device);
+
+ //淇濆瓨鍛戒护鏃ュ織
+ BasShuttleOpt basShuttleOpt = new BasShuttleOpt();
+ basShuttleOpt.setTaskNo(redisCommand.getTaskNo());
+ basShuttleOpt.setShuttleNo(Integer.parseInt(device.getDeviceNo()));
+
+ basShuttleOpt.setMode(ShuttleTaskModeType.get(assignCommand.getTaskMode()).desc);
+ basShuttleOpt.setSourceLocNo(assignCommand.getSourceLocNo());
+ basShuttleOpt.setDistLocNo(assignCommand.getLocNo());
+ basShuttleOpt.setCommand(JSON.toJSONString(command));
+ basShuttleOpt.setSystemStatus(JSON.toJSONString(shuttleProtocol));
+ basShuttleOpt.setDeviceId(device.getId());
+ basShuttleOpt.setDeviceWrk(String.valueOf(command.getTaskNo()));
+ basShuttleOpt.setResponse(response.getMessage());//鑾峰彇鍝嶅簲
+ basShuttleOpt.setSendTime(new Date());//鎸囦护涓嬪彂鏃堕棿
+ basShuttleOpt.setSend(response.getResult() ? 1 : 0);
+ basShuttleOpt.setHostId(device.getHostId());
+ //淇濆瓨鍛戒护娴佹按
+ basShuttleOptService.save(basShuttleOpt);
+
+ if (!response.getResult()) {
News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
return false;
}
@@ -627,31 +667,32 @@
}
}
- private synchronized boolean write(ShuttleCommand command, Device device) {
+ private synchronized CommandResponse write(ShuttleCommand command, Device device) {
+ CommandResponse response = new CommandResponse(false);
if (null == command) {
News.error("鍥涘悜绌挎杞﹀啓鍏ュ懡浠や负绌�");
- return false;
+ response.setMessage("鍥涘悜绌挎杞﹀啓鍏ュ懡浠や负绌�");
+ return response;
}
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
- boolean result = false;
if (command.getMode() == ShuttleCommandModeType.MOVE.id
|| command.getMode() == ShuttleCommandModeType.IN_LIFT.id
|| command.getMode() == ShuttleCommandModeType.OUT_LIFT.id) {//绉诲姩
- result = shuttleThread.move(command);
+ response = shuttleThread.move(command);
} else if (command.getMode() == ShuttleCommandModeType.PALLET_LIFT.id
|| command.getMode() == ShuttleCommandModeType.PALLET_DOWN.id) {//椤跺崌
- result = shuttleThread.lift(command);
+ response = shuttleThread.lift(command);
} else if (command.getMode() == ShuttleCommandModeType.CHARGE_OPEN.id
|| command.getMode() == ShuttleCommandModeType.CHARGE_CLOSE.id) {//鍏呯數
- result = shuttleThread.charge(command);
+ response = shuttleThread.charge(command);
} else if (command.getMode() == ShuttleCommandModeType.RESET.id) {//澶嶄綅
- result = shuttleThread.reset(command);
+ response = shuttleThread.reset(command);
} else if (command.getMode() == ShuttleCommandModeType.UPDATE_LOCATION.id) {//鏇存柊鍧愭爣
- result = shuttleThread.updateLocation(command);
+ response = shuttleThread.updateLocation(command);
}
- News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戯紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", device.getDeviceNo(), JSON.toJSON(command));
- return result;
+// News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戯紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", device.getDeviceNo(), JSON.toJSON(command));
+ return response;
}
}
--
Gitblit v1.9.1