From 6694bb8752aced4b818f2976442d66ae3a52e9e8 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 25 七月 2025 13:25:11 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java | 3
src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java | 4
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 91 +++++++++
src/main/java/com/zy/asrs/utils/Utils.java | 30 ++
src/main/java/com/zy/common/utils/ShuttleOperaUtils.java | 62 ------
src/main/java/com/zy/asrs/controller/ShuttleController.java | 2
src/main/java/com/zy/core/thread/ShuttleThread.java | 2
src/main/java/com/zy/core/action/ShuttleAction.java | 36 ---
src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java | 252 +++++++++++++++---------
src/main/java/com/zy/core/enums/RedisKeyType.java | 6
src/main/java/com/zy/core/thread/TrafficControlThread.java | 2
src/main/java/com/zy/common/utils/NavigateMapData.java | 79 -------
12 files changed, 297 insertions(+), 272 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java
index 0f41a90..94c48cd 100644
--- a/src/main/java/com/zy/asrs/controller/ShuttleController.java
+++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java
@@ -348,7 +348,7 @@
} else if (shuttleTaskModeType == ShuttleTaskModeType.RESET) {
//澶嶄綅
TrafficControlThread trafficControlThread = (TrafficControlThread) SlaveConnection.get(SlaveType.TrafficControl, 1);
- trafficControlThread.cancelTrafficControl(shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
+ trafficControlThread.forceCancelTrafficControl(shuttleProtocol.getShuttleNo());
shuttleThread.setSyncTaskNo(0);//宸ヤ綔鍙锋竻绌�
shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);//浠诲姟鐘舵��-绌洪棽
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 9be9d30..e874172 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -84,7 +84,7 @@
return null;
}
- //鑾峰彇闄ょ櫧鍚嶅崟澶栫殑鎸囧畾妤煎眰鍏ㄩ儴绌挎杞y鍧愭爣鐐�
+ //鑾峰彇绌挎杞y鍧愭爣鐐�
public static int[] getShuttlePoint(Integer shuttleNo) {
//鑾峰彇绌挎杞︽墍鍦ㄨ妭鐐逛綅缃�
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
@@ -147,6 +147,34 @@
return list;
}
+ public static ShuttleThread searchShuttle(String locNo) {
+ DeviceConfigService deviceConfigService = SpringUtils.getBean(DeviceConfigService.class);
+ List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Shuttle)));
+ for (DeviceConfig device : shuttleList) {
+ //鑾峰彇绌挎杞︽墍鍦ㄨ妭鐐逛綅缃�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getDeviceNo());
+ if (shuttleThread == null) {
+ continue;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ continue;
+ }
+
+ String currentLocNo = shuttleProtocol.getCurrentLocNo();
+ if (currentLocNo == null) {
+ continue;
+ }
+
+ if (currentLocNo.equals(locNo)) {
+ return shuttleThread;
+ }
+ }
+
+ return null;
+ }
+
//妫�娴嬫ゼ灞傛槸鍚︽湁鍙敤绌挎杞�
public static boolean checkLevHasShuttle(Integer lev) {
DeviceConfigService deviceConfigService = SpringUtils.getBean(DeviceConfigService.class);
diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java
index 8deec59..a91bc4c 100644
--- a/src/main/java/com/zy/common/utils/NavigateMapData.java
+++ b/src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -202,10 +202,10 @@
lists = loadPathLock(lists, lev);
}
- if(mapType.equals(NavigationMapType.TRAFFIC_CONTROL)) {
- //鍔犺浇浜ら�氱鍒�
- lists = loadTrafficControl(lists, lev);
- }
+// if(mapType.equals(NavigationMapType.TRAFFIC_CONTROL)) {
+// //鍔犺浇浜ら�氱鍒�
+// lists = loadTrafficControl(lists, lev);
+// }
}
//鍔犺浇鐧藉悕鍗曡妭鐐�
@@ -444,77 +444,6 @@
lists.set(row, list);
}
}
-
-// HashMap<String, Integer> deviceMap = trafficControlThread.getDeviceMap();
-// if(deviceMap == null) {
-// throw new CoolException("get traffic control device map error");
-// }
-//
-// for (Map.Entry<String, Integer> entry : deviceMap.entrySet()) {
-// String key = entry.getKey();
-// Integer shuttleNo = entry.getValue();
-// if (shuttleNo <= 0) {
-// continue;
-// }
-//
-// Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + shuttleNo);
-// if (object == null) {
-// continue;
-// }
-//
-// int taskNo = Integer.parseInt(String.valueOf(object));
-//
-// Object obj = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + taskNo);
-// if (obj == null) {
-// continue;
-// }
-//
-// ShuttleRedisCommand redisCommand = null;
-// try {
-// redisCommand = objectMapper.readValue(String.valueOf(obj), ShuttleRedisCommand.class);
-// } catch (IOException e) {
-// throw new RuntimeException(e);
-// }
-//
-// if (redisCommand == null) {
-// continue;
-// }
-//
-// ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
-// List<ShuttleCommand> commands = assignCommand.getCommands();
-//
-// List<NavigateNode> controlLocList = new ArrayList<>();
-// for (ShuttleCommand command : commands) {
-// if (command.getComplete()) {
-// continue;
-// }
-//
-// if (command.getMode() == ShuttleCommandModeType.MOVE.id) {
-// List<NavigateNode> nodes = command.getNodes();
-// for (NavigateNode node : nodes) {
-// if(!controlLocList.contains(node)) {
-// controlLocList.add(node);
-// }
-// }
-// }
-// }
-//
-// for (NavigateNode node : controlLocList) {
-// int row = node.getX();
-// int bay = node.getY();
-//
-// List<MapNode> list = lists.get(row);
-// MapNode mapNode = list.get(bay);
-//
-// //鑺傜偣璁剧疆鎴怐isable
-// mapNode.setValue(MapNodeType.DISABLE.id);
-//
-// //鏇存柊list
-// list.set(bay, mapNode);
-// lists.set(row, list);
-// }
-//
-// }
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 33739d4..6108c6f 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -115,6 +115,7 @@
}
assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
+ assignCommand.setMapTypes(mapTypes);
//灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护
boolean shuttleMoveCommandsContinuously = false;
@@ -125,67 +126,6 @@
}
}
assignCommand.setShuttleMoveCommandsContinuously(shuttleMoveCommandsContinuously);
- return commands;
- }
-
- public synchronized List<ShuttleCommand> shuttleInOutLiftCommand(String startLocNo, String endLocNo, List<NavigationMapType> mapTypes, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
- NavigateNode startNode = NavigatePositionConvert.locNoToNode(startLocNo);
- NavigateNode endNode = NavigatePositionConvert.locNoToNode(endLocNo);
- List<NavigateNode> unlockPath = new ArrayList<>();
- unlockPath.add(startNode);
- unlockPath.add(endNode);
-
- ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
- if (shuttleProtocol == null) {
- return null;
- }
-
- Integer shuttleNo = shuttleProtocol.getShuttleNo();
- //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹�/瑙i攣
- boolean lockResult = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(endLocNo), shuttleProtocol.getShuttleNo(), unlockPath, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
- if (!lockResult) {
- News.error("{} dash {} can't find unlock path!", startLocNo, endLocNo);
- shuttleThread.offerSystemMsg("{} dash {} can't find unlock path!", startLocNo, endLocNo);
- return null;//瑙i攣澶辫触
- }
-
- //鑾峰彇灏忚溅绉诲姩閫熷害
- Integer runSpeed = Optional.ofNullable(basShuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", shuttleNo)).getRunSpeed()).orElse(1000);
- List<NavigateNode> nodeList = navigateUtils.calc(startLocNo, endLocNo, mapTypes, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startLocNo)), null);
- if (nodeList == null) {
- News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
- shuttleThread.offerSystemMsg("{} dash {} can't find navigate path!", startLocNo, endLocNo);
- return null;
- }
-
- List<NavigateNode> allNode = new ArrayList<>();
- for (NavigateNode node : nodeList) {
- allNode.add(node.clone());
- }
-
- List<ShuttleCommand> commands = new ArrayList<>();
- //鑾峰彇鍒嗘璺緞
- List<List<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
- //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
- for (List<NavigateNode> nodes : data) {
- //寮�濮嬭矾寰�
- NavigateNode startPath = nodes.get(0);
-
- //鐩爣璺緞
- NavigateNode endPath = nodes.get(nodes.size() - 1);
- Integer allDistance = navigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
- //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
- String startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());
- //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
- String distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());
- //鑾峰彇绉诲姩鍛戒护
- ShuttleCommand command = shuttleThread.getMoveCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes);
- command.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑
- commands.add(command);
- }
-
- assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
-
return commands;
}
diff --git a/src/main/java/com/zy/core/action/ShuttleAction.java b/src/main/java/com/zy/core/action/ShuttleAction.java
index 393d2cb..a47484b 100644
--- a/src/main/java/com/zy/core/action/ShuttleAction.java
+++ b/src/main/java/com/zy/core/action/ShuttleAction.java
@@ -16,14 +16,12 @@
import com.zy.common.model.NavigateNode;
import com.zy.common.service.CommonService;
import com.zy.common.utils.NavigateMapUtils;
-import com.zy.common.utils.NavigatePositionConvert;
import com.zy.common.utils.RedisUtil;
import com.zy.core.News;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.dispatcher.ShuttleDispatchUtils;
import com.zy.core.enums.*;
import com.zy.core.model.CommandResponse;
-import com.zy.core.model.TrafficControlDataModel;
import com.zy.core.model.command.ShuttleAssignCommand;
import com.zy.core.model.command.ShuttleCommand;
import com.zy.core.model.command.ShuttleRedisCommand;
@@ -420,25 +418,8 @@
if (trafficControlThread == null) {
return false;
}
-
- TrafficControlDataModel trafficControlDataModel = trafficControlThread.queryTrafficControl(shuttleNo);
- if (trafficControlDataModel != null) {
- //鏈夌鍒朵俊鎭紝杩涜妫�娴�
- if (!trafficControlDataModel.getTaskNo().equals(shuttleProtocol.getTaskNo())) {
- return false;//浠诲姟涓嶄竴鑷�
- }
-
- //妫�娴嬫槸鍚﹀埌缁堢偣
- List<NavigateNode> totalNodeList = trafficControlDataModel.getTotalNodeList();
- NavigateNode trafficTargetNode = totalNodeList.get(totalNodeList.size() - 1);
- String trafficTargetLoc = Utils.getLocNo(trafficTargetNode.getX(), trafficTargetNode.getY(), trafficTargetNode.getZ());
-
- //鍒ゆ柇灏忚溅鏄惁鍒扮粓鐐�
- if(shuttleProtocol.getCurrentLocNo().equals(trafficTargetLoc)) {
- //涓婃姤浜ょ
- trafficControlThread.trafficReport(command.getNodesDeepCopy(), shuttleNo, shuttleProtocol.getTaskNo());
- }
- }
+ //涓婃姤浜ょ
+ trafficControlThread.trafficReport(command.getNodesDeepCopy(), shuttleNo, shuttleProtocol.getTaskNo());
String currentLocNo = shuttleProtocol.getCurrentLocNo();
if (targetPoints.contains(Utils.getRow(currentLocNo) + "-" + Utils.getBay(currentLocNo))) {
@@ -503,19 +484,12 @@
return false;
}
- NavigateNode startNode = nodeList.get(0);
- Long linePartFlag = startNode.getLinePartFlag();
-
List<NavigateNode> totalNodeList = new ArrayList<>();
for (ShuttleCommand command : commands) {
if (command.getMode() == ShuttleCommandModeType.MOVE.id) {
- NavigateNode node = command.getNodes().get(0);
- Long nodeLinePartFlag = node.getLinePartFlag();
- if (nodeLinePartFlag.equals(linePartFlag)) {
- List<NavigateNode> deepCopy = command.getNodesDeepCopy();
- if (deepCopy != null) {
- totalNodeList.addAll(deepCopy);
- }
+ List<NavigateNode> deepCopy = command.getNodesDeepCopy();
+ if (deepCopy != null) {
+ totalNodeList.addAll(deepCopy);
}
}
}
diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java
index d6e6650..6ea31aa 100644
--- a/src/main/java/com/zy/core/enums/RedisKeyType.java
+++ b/src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -16,9 +16,11 @@
//灏忚溅涓嬪彂鎸囦护绱㈠紩
SHUTTLE_SEND_COMMAND_INDEX("shuttle_send_command_index_"),
+ //灏忚溅閲嶆柊瑙勫垝璺緞棰戠巼
+ SHUTTLE_RESTART_CALC_PATH("shuttle_restart_calc_path_"),
- //浠诲姟鍫靛鍙敤璁惧鍦板浘
- TASK_BLOCK_ENABLE_DEVICE_MAP("task_block_enable_device_map"),
+ //浜ょ淇℃伅
+ TRAFFIC_CONTROL_MAP("traffic_control_map"),
//鍦板浘閿佸畾鑺傜偣
LOCK_MAP_NODES("lock_map_nodes_"),
diff --git a/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java
index 841ec12..5d80355 100644
--- a/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java
+++ b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java
@@ -1,6 +1,7 @@
package com.zy.core.model.command;
import com.zy.common.model.NavigateNode;
+import com.zy.common.model.enums.NavigationMapType;
import lombok.Data;
import java.io.Serializable;
@@ -77,6 +78,9 @@
*/
private List<NavigateNode> nodes;
+ //鍛戒护浣跨敤鐨勫湴鍥剧被鍨�
+ private List<NavigationMapType> mapTypes;
+
//灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护
private Boolean shuttleMoveCommandsContinuously;
diff --git a/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java b/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java
index f43cec8..d197c86 100644
--- a/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java
+++ b/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java
@@ -22,7 +22,4 @@
//鍛戒护
private ShuttleAssignCommand assignCommand;
- //鎻愬崌鏈哄畨鍏ㄩ攣瀹氭爣璁�
- private Boolean liftSecurityMk = false;
-
}
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index aaa63c0..1909575 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -76,6 +76,8 @@
JSONObject parseStatusToMsg(ShuttleProtocol shuttleProtocol);
+ boolean restartCalcPath();
+
//***************鑾峰彇鍛戒护*****************
ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes);//鑾峰彇绉诲姩鍛戒护
diff --git a/src/main/java/com/zy/core/thread/TrafficControlThread.java b/src/main/java/com/zy/core/thread/TrafficControlThread.java
index ea0411a..35082eb 100644
--- a/src/main/java/com/zy/core/thread/TrafficControlThread.java
+++ b/src/main/java/com/zy/core/thread/TrafficControlThread.java
@@ -24,6 +24,8 @@
boolean cancelTrafficControl(Integer shuttleNo, Integer taskNo);
+ boolean forceCancelTrafficControl(Integer shuttleNo);
+
TrafficControlDataModel queryTrafficControl(Integer shuttleNo);
List<TrafficControlDataModel> getAllTrafficControl();
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 2542703..58ecf5e 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -20,8 +20,11 @@
import com.zy.common.utils.NavigateMapData;
import com.zy.common.utils.NavigatePositionConvert;
import com.zy.common.utils.RedisUtil;
+import com.zy.common.utils.ShuttleOperaUtils;
import com.zy.core.News;
+import com.zy.core.action.ShuttleAction;
import com.zy.core.model.DeviceCommandMsgModel;
+import com.zy.core.model.command.ShuttleAssignCommand;
import com.zy.core.utils.DeviceMsgUtils;
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.*;
@@ -852,6 +855,94 @@
}
@Override
+ public boolean restartCalcPath() {
+ ConfigService configService = SpringUtils.getBean(ConfigService.class);
+ if (configService == null) {
+ return false;
+ }
+
+ ShuttleAction shuttleAction = SpringUtils.getBean(ShuttleAction.class);
+ if (shuttleAction == null) {
+ return false;
+ }
+
+ ShuttleOperaUtils shuttleOperaUtils = SpringUtils.getBean(ShuttleOperaUtils.class);
+ if (shuttleOperaUtils == null) {
+ return false;
+ }
+
+ ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class);
+ if (objectMapper == null) {
+ return false;
+ }
+
+ boolean trafficControlRestartCalcPath = false;
+ Config trafficControlRestartCalcPathConfig = configService.selectOne(new EntityWrapper<Config>()
+ .eq("code", "trafficControlRestartCalcPath")
+ );
+ if(trafficControlRestartCalcPathConfig != null) {
+ trafficControlRestartCalcPath = trafficControlRestartCalcPathConfig.getValue().equals("Y") ? true : false;
+ }
+
+ if (!trafficControlRestartCalcPath) {
+ return false;
+ }
+
+ if (shuttleProtocol.getTaskNo() == 0) {
+ return false;
+ }
+
+ if (!this.isDeviceIdle()) {
+ return false;
+ }
+
+ Object object = redisUtil.get(RedisKeyType.SHUTTLE_RESTART_CALC_PATH.key + shuttleProtocol.getShuttleNo());
+ if (object != null) {
+ return false;
+ }
+
+ Integer taskNo = shuttleProtocol.getTaskNo();
+ Object obj = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + taskNo);
+ if (obj == null) {
+ return false;
+ }
+
+ ShuttleRedisCommand redisCommand = null;
+ try {
+ redisCommand = objectMapper.readValue(String.valueOf(obj), ShuttleRedisCommand.class);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ if (redisCommand == null) {
+ return false;
+ }
+
+ ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
+ String locNo = assignCommand.getLocNo();
+ List<NavigationMapType> mapTypes = assignCommand.getMapTypes();
+ if (locNo == null) {
+ return false;
+ }
+
+ if (mapTypes == null) {
+ return false;
+ }
+
+ String currentLocNo = shuttleProtocol.getCurrentLocNo();
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(currentLocNo, locNo, mapTypes, assignCommand, this);
+ if (commands == null) {
+ return false;
+ }
+ assignCommand.setCommands(commands);
+
+ //涓嬪彂浠诲姟
+ shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ redisUtil.set(RedisKeyType.SHUTTLE_RESTART_CALC_PATH.key + shuttleProtocol.getShuttleNo(), true, 60);
+ return true;
+ }
+
+ @Override
public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) {
NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo);
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 40379eb..f15a5c2 100644
--- a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
+++ b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
@@ -33,6 +33,9 @@
private Long detectTime = System.currentTimeMillis();
private HashMap<String, Integer> deviceMap = null;
private HashMap<Integer, HashMap<String, List<Integer>>> levNodesMap = null;
+
+
+ private HashMap<Integer,Long> applyRecordsMap = new HashMap<>();
private HashMap<String, List<NavigateNode>> taskNodesMap = new HashMap<>();
private List<TrafficControlDataModel> trafficControlDataList = new ArrayList<>();
@@ -42,6 +45,12 @@
@Override
public void run() {
+ //浠庣紦瀛樻仮澶嶄氦绠′俊鎭�
+ Object object = redisUtil.get(RedisKeyType.TRAFFIC_CONTROL_MAP.key);
+ if(object != null) {
+ trafficControlDataList = (List<TrafficControlDataModel>) object;
+ }
+
// List<Integer> shuttleNoList = new ArrayList<>();
// while (true) {
// try {
@@ -198,66 +207,66 @@
detecting = false;
detectTime = System.currentTimeMillis();
- //鍙戝竷鍫靛鑺傜偣鍙敤璁惧缂栧彿
- redisUtil.set(RedisKeyType.TASK_BLOCK_ENABLE_DEVICE_MAP.key, trafficControlDataList);
+// //鍙戝竷鍫靛鑺傜偣鍙敤璁惧缂栧彿
+// redisUtil.set(RedisKeyType.TASK_BLOCK_ENABLE_DEVICE_MAP.key, trafficControlDataList);
}
- //鍒嗛厤鍫靛鑺傜偣鍙墽琛岃澶�
- public void findDeviceByBlockList(List<List<String>> allLocList, List<List<Integer>> blockNodes) {
- HashMap<String, Integer> map = new HashMap<>();
- if (deviceMap == null) {
- Object object = redisUtil.get(RedisKeyType.TASK_BLOCK_ENABLE_DEVICE_MAP.key);
- if (object != null) {
- map = (HashMap<String, Integer>) object;
- }
- } else {
- map = deviceMap;
- }
-
- HashMap<String, Integer> newMap = new HashMap<>();
-
- for (int i = 0; i < blockNodes.size(); i++) {
- List<Integer> blockNode = blockNodes.get(i);
- List<String> locs = allLocList.get(i);
-
- String key = JSON.toJSONString(locs);
-
- Integer value = -1;
- if (map.containsKey(key)) {
- value = map.get(key);
- map.remove(key);
-
- if (value > 0) {
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, value);
- if (shuttleThread == null) {
- continue;
- }
-
- ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
- if (shuttleProtocol == null) {
- continue;
- }
-
- if (shuttleProtocol.getTaskNo() == 0) {
- value = searchDevice(locs, blockNode, newMap);
- }
-
- if (!shuttleProtocol.getTrafficControl()) {
- value = searchDevice(locs, blockNode, newMap);
- }
- }else {
- value = searchDevice(locs, blockNode, newMap);
- }
- } else {
- value = searchDevice(locs, blockNode, newMap);
- }
- newMap.put(key, value);
- }
-
- deviceMap = newMap;
- //鍙戝竷鍫靛鑺傜偣鍙敤璁惧缂栧彿
- redisUtil.set(RedisKeyType.TASK_BLOCK_ENABLE_DEVICE_MAP.key, newMap);
- }
+// //鍒嗛厤鍫靛鑺傜偣鍙墽琛岃澶�
+// public void findDeviceByBlockList(List<List<String>> allLocList, List<List<Integer>> blockNodes) {
+// HashMap<String, Integer> map = new HashMap<>();
+// if (deviceMap == null) {
+// Object object = redisUtil.get(RedisKeyType.TASK_BLOCK_ENABLE_DEVICE_MAP.key);
+// if (object != null) {
+// map = (HashMap<String, Integer>) object;
+// }
+// } else {
+// map = deviceMap;
+// }
+//
+// HashMap<String, Integer> newMap = new HashMap<>();
+//
+// for (int i = 0; i < blockNodes.size(); i++) {
+// List<Integer> blockNode = blockNodes.get(i);
+// List<String> locs = allLocList.get(i);
+//
+// String key = JSON.toJSONString(locs);
+//
+// Integer value = -1;
+// if (map.containsKey(key)) {
+// value = map.get(key);
+// map.remove(key);
+//
+// if (value > 0) {
+// ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, value);
+// if (shuttleThread == null) {
+// continue;
+// }
+//
+// ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+// if (shuttleProtocol == null) {
+// continue;
+// }
+//
+// if (shuttleProtocol.getTaskNo() == 0) {
+// value = searchDevice(locs, blockNode, newMap);
+// }
+//
+// if (!shuttleProtocol.getTrafficControl()) {
+// value = searchDevice(locs, blockNode, newMap);
+// }
+// }else {
+// value = searchDevice(locs, blockNode, newMap);
+// }
+// } else {
+// value = searchDevice(locs, blockNode, newMap);
+// }
+// newMap.put(key, value);
+// }
+//
+// deviceMap = newMap;
+// //鍙戝竷鍫靛鑺傜偣鍙敤璁惧缂栧彿
+// redisUtil.set(RedisKeyType.TASK_BLOCK_ENABLE_DEVICE_MAP.key, newMap);
+// }
public Integer searchDevice(List<String> locs, List<Integer> blockNode, HashMap<String, Integer> deviceMap) {
NavigateUtils navigateUtils = null;
@@ -434,8 +443,24 @@
@Override
public synchronized boolean applyTrafficControl(List<NavigateNode> totalNodeList, List<NavigateNode> nodeList, Integer shuttleNo, Integer taskNo) {
- //鍙戝竷鍫靛鑺傜偣鍙敤璁惧缂栧彿
- redisUtil.set(RedisKeyType.TASK_BLOCK_ENABLE_DEVICE_MAP.key, trafficControlDataList);
+ //鏇存柊浜ょ淇℃伅
+ redisUtil.set(RedisKeyType.TRAFFIC_CONTROL_MAP.key, trafficControlDataList);
+
+ NavigateNode startNode = totalNodeList.get(0);
+ List<int[]> shuttlePoints = Utils.getShuttlePoints(shuttleNo, startNode.getZ());
+
+ int[] currentShuttlePoint = Utils.getShuttlePoint(shuttleNo);
+ if(currentShuttlePoint == null) {
+ return false;
+ }
+ String currentShuttleLoc = Utils.getLocNo(currentShuttlePoint[0], currentShuttlePoint[1], startNode.getZ());
+
+ List<String> shuttleLocList = new ArrayList<>();
+ for (int[] shuttlePoint : shuttlePoints) {
+ String locNo = Utils.getLocNo(shuttlePoint[0], shuttlePoint[1], startNode.getZ());
+ shuttleLocList.add(locNo);
+ }
+
//妫�娴嬭溅瀛愭槸鍚﹀瓨鍦ㄧ鍒�
for (int i = 0; i < trafficControlDataList.size(); i++) {
TrafficControlDataModel controlDataModel = trafficControlDataList.get(i);
@@ -445,27 +470,14 @@
return false;
}
- //浠诲姟鎬绘暟閲忎笉涓�鑷�
- if (totalNodeList.size() != controlDataModel.getTotalNodeList().size()) {
- return false;
- }
-
- int startIdx = 0;
- int targetIdx = totalNodeList.size() - 1;
- NavigateNode applyStartNode = totalNodeList.get(startIdx);
- NavigateNode applyTargetNode = totalNodeList.get(targetIdx);
-
- NavigateNode controlStartNode = controlDataModel.getTotalNodeList().get(startIdx);
- NavigateNode controlTargetNode = controlDataModel.getTotalNodeList().get(targetIdx);
-
- //璧风偣涓嶅悓
- if(!NavigatePositionConvert.equalsNode(applyStartNode, controlStartNode)) {
- return false;
- }
-
- //缁堢偣涓嶅悓
- if(!NavigatePositionConvert.equalsNode(applyTargetNode, controlTargetNode)) {
- return false;
+ for (NavigateNode node : nodeList) {
+ String locNo = Utils.getLocNo(node.getX(), node.getY(), node.getZ());
+ if(shuttleLocList.contains(locNo)) {
+ ShuttleThread shuttleThread = Utils.searchShuttle(locNo);
+ if(shuttleThread != null) {
+ shuttleThread.restartCalcPath();
+ }
+ }
}
News.info("traffic running {},{}", shuttleNo, taskNo);
@@ -473,30 +485,45 @@
}
}
- NavigateNode startNode = totalNodeList.get(0);
- List<int[]> shuttlePoints = Utils.getShuttlePoints(shuttleNo, startNode.getZ());
-
- List<String> shuttleLocList = new ArrayList<>();
- for (int[] shuttlePoint : shuttlePoints) {
- String locNo = Utils.getLocNo(shuttlePoint[0], shuttlePoint[1], startNode.getZ());
- shuttleLocList.add(locNo);
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+ if (shuttleThread == null) {
+ return false;
}
+ if (!applyRecordsMap.containsKey(shuttleNo)) {
+ applyRecordsMap.put(shuttleNo, System.currentTimeMillis());
+ }
+
+ Long applyRecordTime = applyRecordsMap.get(shuttleNo);
+ if ((System.currentTimeMillis() - applyRecordTime) > 1000 * 10) {
+ shuttleThread.restartCalcPath();
+ }
+
+ List<String> totalLocList = new ArrayList<>();
for (NavigateNode node : totalNodeList) {
String locNo = Utils.getLocNo(node.getX(), node.getY(), node.getZ());
- if(shuttleLocList.contains(locNo)) {
- return false;//node has shuttle
+ totalLocList.add(locNo);
+ }
+
+ //妫�娴嬭矾寰勬槸鍚︽湁灏忚溅
+ for (String loc : totalLocList) {
+ if(shuttleLocList.contains(loc)) {
+ return false;//node has shuttle
}
}
//妫�娴嬭妭鐐规槸鍚﹁浣跨敤
for (TrafficControlDataModel controlDataModel : trafficControlDataList) {
List<NavigateNode> list = controlDataModel.getTotalNodeList();
- for (NavigateNode node1 : list) {
- for (NavigateNode node2 : totalNodeList) {
- if (NavigatePositionConvert.equalsNode(node1, node2)) {
- return false;
- }
+ for (int i = 0; i < list.size(); i++) {
+ NavigateNode node = list.get(i);
+ String locNo = Utils.getLocNo(node.getX(), node.getY(), node.getZ());
+ if (i == 0 && currentShuttleLoc.equals(locNo)) {
+ continue;//..todo wait watch problem
+ }
+
+ if(totalLocList.contains(locNo)) {
+ return false;
}
}
}
@@ -508,20 +535,36 @@
model.setNodeList(nodeList);
model.setTotalNodeList(totalNodeList);
trafficControlDataList.add(model);
+
+ applyRecordsMap.remove(shuttleNo);
News.info("receipt traffic {},{}", shuttleNo, taskNo);
return true;
}
@Override
- public boolean trafficReport(List<NavigateNode> nodeList, Integer shuttleNo, Integer taskNo) {
+ public synchronized boolean trafficReport(List<NavigateNode> nodeList, Integer shuttleNo, Integer taskNo) {
//妫�娴嬭溅瀛愭槸鍚﹀瓨鍦ㄧ鍒�
for (int i = 0; i < trafficControlDataList.size(); i++) {
TrafficControlDataModel controlDataModel = trafficControlDataList.get(i);
if(shuttleNo.equals(controlDataModel.getShuttleNo())) {
if(controlDataModel.getTaskNo().equals(taskNo)) {
+ List<NavigateNode> newTotalNodeList = new ArrayList<>();
List<NavigateNode> totalNodeList = controlDataModel.getTotalNodeList();
- totalNodeList.removeAll(nodeList);
- controlDataModel.setTotalNodeList(totalNodeList);
+
+ List<String> reportList = new ArrayList<>();
+ for (NavigateNode node : nodeList) {
+ reportList.add(Utils.getLocNo(node.getX(), node.getY(), node.getZ()));
+ }
+
+ for (NavigateNode node : totalNodeList) {
+ String locNo = Utils.getLocNo(node.getX(), node.getY(), node.getZ());
+ if(reportList.contains(locNo)) {
+ continue;
+ }
+ newTotalNodeList.add(node);
+ }
+
+ controlDataModel.setTotalNodeList(newTotalNodeList);
trafficControlDataList.set(i, controlDataModel);
return true;
}
@@ -546,6 +589,19 @@
}
@Override
+ public boolean forceCancelTrafficControl(Integer shuttleNo) {
+ //妫�娴嬭溅瀛愭槸鍚﹀瓨鍦ㄧ鍒�
+ for (int i = 0; i < trafficControlDataList.size(); i++) {
+ TrafficControlDataModel controlDataModel = trafficControlDataList.get(i);
+ if(shuttleNo.equals(controlDataModel.getShuttleNo())) {
+ trafficControlDataList.remove(i);//鍙栨秷绠″埗
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
public TrafficControlDataModel queryTrafficControl(Integer shuttleNo) {
//妫�娴嬭溅瀛愭槸鍚﹀瓨鍦ㄧ鍒�
for (int i = 0; i < trafficControlDataList.size(); i++) {
--
Gitblit v1.9.1