From db32ffbad65906185ba768a3dc7364337473b1b2 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期日, 27 七月 2025 20:48:14 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java | 2 +-
src/main/java/com/zy/common/utils/NavigateMapUtils.java | 1 -
src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java | 2 +-
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 2 +-
src/main/java/com/zy/common/utils/ShuttleOperaUtils.java | 2 +-
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 19 +++++++++++++++++--
src/main/java/com/zy/core/action/ShuttleAction.java | 8 +++++++-
src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java | 21 +++++++++++++++++++++
src/main/java/com/zy/core/thread/TrafficControlThread.java | 2 ++
9 files changed, 51 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 3f01cfd..6843a68 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -386,6 +386,13 @@
return false;
}
+ //妫�娴嬫槸鍚﹀瓨鍦ㄧЩ鍔ㄤ换鍔�
+ WrkMast moveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+ if (moveWorking != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀瓨鍦ㄧЩ鍔ㄤ换鍔�", wrkMast.getWrkNo());
+ return false;
+ }
+
ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
@@ -492,6 +499,13 @@
return false;
}
+ //妫�娴嬫槸鍚﹀瓨鍦ㄧЩ鍔ㄤ换鍔�
+ WrkMast moveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+ if (moveWorking != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀瓨鍦ㄧЩ鍔ㄤ换鍔�", wrkMast.getWrkNo());
+ return false;
+ }
+
//妫�娴嬮殰纰嶇墿杞�
boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
add(shuttleProtocol.getShuttleNo());
@@ -506,9 +520,10 @@
assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
assignCommand.setAuto(true);//鑷姩妯″紡
+ assignCommand.setLocNo(wrkMast.getLocNo());
//鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
- List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.getDfxWithDevice(), assignCommand, shuttleThread);
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.DFX), assignCommand, shuttleThread);
if (commands == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;
@@ -1807,7 +1822,7 @@
assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
//鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
- List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getNormalWithDevice(), assignCommand, shuttleThread);
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), assignCommand, shuttleThread);
if (commands == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;//璺緞璁$畻澶辫触
diff --git a/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java b/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java
index bb208ee..08b9822 100644
--- a/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java
+++ b/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java
@@ -12,7 +12,7 @@
private ShuttleTaskUtils shuttleTaskUtils;
@Scheduled(cron = "0/3 * * * * ? ")
- public void shuttleFinished() {
+ public synchronized void shuttleFinished() {
//鍥涘悜绌挎杞︿换鍔″畬鎴�
shuttleTaskUtils.shuttleFinished();
}
diff --git a/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java b/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
index 82b497c..a048e94 100644
--- a/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
+++ b/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
@@ -37,7 +37,7 @@
/**
* 鍥涘悜绌挎杞︿换鍔″畬鎴�
*/
- public void shuttleFinished() {
+ public synchronized void shuttleFinished() {
try {
List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
.eq("device_type", String.valueOf(SlaveType.Shuttle)));
diff --git a/src/main/java/com/zy/common/utils/NavigateMapUtils.java b/src/main/java/com/zy/common/utils/NavigateMapUtils.java
index 8b043c4..ea621f2 100644
--- a/src/main/java/com/zy/common/utils/NavigateMapUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateMapUtils.java
@@ -96,7 +96,6 @@
lockMap.remove(key);
}
}
- lockMap.putAll(lockMap);
redisUtil.set(RedisKeyType.LOCK_MAP_NODES.key + lev, lockMap);
return true;
}
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 6108c6f..c421287 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -500,7 +500,7 @@
private boolean is_valid(int[][] map, int x, int y) {
if (x < 0 || x >= map.length
- || y < 0 || y >= map[0].length) {
+ || y < 0 || y >= map[1].length) {
return false;
}
// 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉�
diff --git a/src/main/java/com/zy/core/action/ShuttleAction.java b/src/main/java/com/zy/core/action/ShuttleAction.java
index 2fb9616..d25b6cb 100644
--- a/src/main/java/com/zy/core/action/ShuttleAction.java
+++ b/src/main/java/com/zy/core/action/ShuttleAction.java
@@ -158,6 +158,11 @@
//绉诲姩鍛戒护锛岄攣瀹氳矾寰�
if (command.getMode() == ShuttleCommandModeType.MOVE.id) {
+ TrafficControlThread trafficControlThread = (TrafficControlThread) SlaveConnection.get(SlaveType.TrafficControl, 1);
+ if (trafficControlThread == null) {
+ return false;
+ }
+
List<NavigateNode> nodes = JSON.parseArray(JSON.toJSONString(command.getNodes()), NavigateNode.class);
//鐢宠绠″埗
boolean apply = applyTrafficControl(commands, nodes, shuttleNo, taskNo);
@@ -178,6 +183,7 @@
if (!result) {
News.error("{} device can't lock path!", shuttleNo);
shuttleThread.offerSystemMsg("{} device can't lock path!", shuttleNo);
+ trafficControlThread.trafficReportError(shuttleNo, taskNo);
return false;//璺緞閿佸畾澶辫触
}
}
@@ -411,11 +417,11 @@
return false;
}
if (targetPoints.contains(Utils.getRow(currentLocNo) + "-" + Utils.getBay(currentLocNo))) {
- command.setComplete(true);
boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(shuttleProtocol.getCurrentLocNo()), shuttleProtocol.getShuttleNo(), nodes, false);//瑙i攣璺緞
if (!result) {
return false;//瑙i攣澶辫触
}
+ command.setComplete(true);
}else {
return false;
}
diff --git a/src/main/java/com/zy/core/thread/TrafficControlThread.java b/src/main/java/com/zy/core/thread/TrafficControlThread.java
index 35082eb..3314b13 100644
--- a/src/main/java/com/zy/core/thread/TrafficControlThread.java
+++ b/src/main/java/com/zy/core/thread/TrafficControlThread.java
@@ -22,6 +22,8 @@
boolean trafficReport(List<NavigateNode> nodeList, Integer shuttleNo, Integer taskNo);
+ boolean trafficReportError(Integer shuttleNo, Integer taskNo);
+
boolean cancelTrafficControl(Integer shuttleNo, Integer taskNo);
boolean forceCancelTrafficControl(Integer shuttleNo);
diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
index 0baeb1e..19af9d7 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -942,7 +942,7 @@
}
ShuttleCommand firstCommand = originCommands.get(0);
- ShuttleCommand endCommand = originCommands.get(commands.size() - 1);
+ ShuttleCommand endCommand = originCommands.get(originCommands.size() - 1);
if (firstCommand.getMode() != ShuttleCommandModeType.PALLET_LIFT.id) {
return false;
diff --git a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
index 9d92ed2..9a3a6de 100644
--- a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
+++ b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
@@ -36,6 +36,7 @@
private HashMap<Integer, HashMap<String, List<Integer>>> levNodesMap = null;
+ private HashMap<Integer,Long> shuttleReportErrorMap = new HashMap<>();
private HashMap<Integer,Long> pathIdleShuttleMap = new HashMap<>();
private HashMap<Integer,Long> applyRecordsMap = new HashMap<>();
private HashMap<String, List<NavigateNode>> taskNodesMap = new HashMap<>();
@@ -597,6 +598,7 @@
controlDataModel.setTotalNodeList(newTotalNodeList);
trafficControlDataList.set(i, controlDataModel);
+ shuttleReportErrorMap.remove(shuttleNo);
return true;
}
}
@@ -605,6 +607,25 @@
}
@Override
+ public boolean trafficReportError(Integer shuttleNo, Integer taskNo) {
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+ if (shuttleThread == null) {
+ return false;
+ }
+
+ if(shuttleReportErrorMap.containsKey(shuttleNo)) {
+ Long errorTime = shuttleReportErrorMap.get(shuttleNo);
+ if((System.currentTimeMillis() - errorTime) > 1000 * 10) {
+ shuttleReportErrorMap.remove(shuttleNo);
+ shuttleThread.restartCalcPath();
+ }
+ }else {
+ shuttleReportErrorMap.put(shuttleNo, System.currentTimeMillis());
+ }
+ return true;
+ }
+
+ @Override
public synchronized boolean cancelTrafficControl(Integer shuttleNo, Integer taskNo) {
//妫�娴嬭溅瀛愭槸鍚﹀瓨鍦ㄧ鍒�
for (int i = 0; i < trafficControlDataList.size(); i++) {
--
Gitblit v1.9.1