From 728ad81fa10d2879654c5f9ae4314db94eafb865 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期五, 01 八月 2025 08:08:18 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java | 48 ++-- src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 76 +++--- src/main/java/com/zy/core/action/ShuttleAction.java | 50 ++- src/main/webapp/views/console.html | 25 + src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java | 460 +++++--------------------------------- src/main/java/com/zy/core/thread/TrafficControlThread.java | 11 src/main/webapp/views/shuttleNew.html | 28 + 7 files changed, 196 insertions(+), 502 deletions(-) diff --git a/src/main/java/com/zy/core/action/ShuttleAction.java b/src/main/java/com/zy/core/action/ShuttleAction.java index d25b6cb..a0a88b1 100644 --- a/src/main/java/com/zy/core/action/ShuttleAction.java +++ b/src/main/java/com/zy/core/action/ShuttleAction.java @@ -22,6 +22,7 @@ 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; @@ -86,7 +87,7 @@ return false; } - public synchronized boolean executeWork(Integer shuttleNo, Integer taskNo) { + public boolean executeWork(Integer shuttleNo, Integer taskNo) { Object obj = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + taskNo); if (obj == null) { return false; @@ -165,7 +166,9 @@ List<NavigateNode> nodes = JSON.parseArray(JSON.toJSONString(command.getNodes()), NavigateNode.class); //鐢宠绠″埗 - boolean apply = applyTrafficControl(commands, nodes, shuttleNo, taskNo); + applyTrafficControl(commands, nodes, shuttleNo, taskNo); + //鏌ヨ绠″埗 + boolean apply = queryTrafficControl(shuttleNo, taskNo); if(!apply){ return false;//鐢宠澶辫触 } @@ -294,21 +297,23 @@ //鐩寸嚎娈垫暟鎹爣璇� Long linePartFlag = startNode.getLinePartFlag(); - //鍙栨寚浠� - ShuttleCommand currentCommand = commands.get(commandStep); - if(currentCommand.getMode() != ShuttleCommandModeType.MOVE.id) { - return 0; - } + if(commandStep < commands.size()){ + //鍙栨寚浠� + ShuttleCommand currentCommand = commands.get(commandStep); + if(currentCommand.getMode() != ShuttleCommandModeType.MOVE.id) { + return 0; + } - List<NavigateNode> currentNodes = currentCommand.getNodes(); - NavigateNode currentStartNode = currentNodes.get(0); - if(!currentStartNode.getLinePartAllowGo()) {//鐩寸嚎娈甸儴鍒嗭紝鍏佽鐩存帴琛岃蛋 - return 0; - } + List<NavigateNode> currentNodes = currentCommand.getNodes(); + NavigateNode currentStartNode = currentNodes.get(0); + if(!currentStartNode.getLinePartAllowGo()) {//鐩寸嚎娈甸儴鍒嗭紝鍏佽鐩存帴琛岃蛋 + return 0; + } - if(currentStartNode.getLinePartFlag().equals(linePartFlag)) { - //鏁版嵁鏍囪瘑涓�鑷� - return 2;//鍏佽灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护 + if(currentStartNode.getLinePartFlag().equals(linePartFlag)) { + //鏁版嵁鏍囪瘑涓�鑷� + return 2;//鍏佽灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护 + } } } @@ -490,6 +495,21 @@ return trafficControlThread.applyTrafficControl(totalNodeList, nodeList, shuttleNo, taskNo); } + //鏌ヨ鏄惁鐢宠绠″埗鎴愬姛 + public boolean queryTrafficControl(Integer shuttleNo, Integer taskNo) { + TrafficControlThread trafficControlThread = (TrafficControlThread) SlaveConnection.get(SlaveType.TrafficControl, 1); + if (trafficControlThread == null) { + return false; + } + + TrafficControlDataModel trafficControlDataModel = trafficControlThread.queryTrafficControl(shuttleNo, taskNo); + if (trafficControlDataModel == null) { + return false; + } + + return true; + } + // /** // * 鎼滅储灏忚溅璺緞鏄惁瀛樺湪鍐茬獊 // * 0:鏈娴� 1:妫�娴嬫棤鍐茬獊 2:妫�娴嬫湁鍐茬獊 diff --git a/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java b/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java index 5b16027..9020af6 100644 --- a/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java +++ b/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java @@ -18,29 +18,29 @@ @Component public class ShuttleExecuteScheduler { - @Autowired - private ShuttleAction shuttleAction; - @Autowired - private DeviceConfigService deviceConfigService; - @Autowired - private RedisUtil redisUtil; - - @Scheduled(cron = "0/1 * * * * ? ") - public void execute() { - List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() - .eq("device_type", String.valueOf(SlaveType.Shuttle))); - for (DeviceConfig deviceConfig : shuttleList) { - Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo()); - if (object == null) { - continue; - } - - int taskNo = Integer.parseInt(String.valueOf(object)); - if (taskNo != 0) { - //瀛樺湪浠诲姟闇�瑕佹墽琛� - boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo); - } - } - } +// @Autowired +// private ShuttleAction shuttleAction; +// @Autowired +// private DeviceConfigService deviceConfigService; +// @Autowired +// private RedisUtil redisUtil; +// +// @Scheduled(cron = "0/1 * * * * ? ") +// public void execute() { +// List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() +// .eq("device_type", String.valueOf(SlaveType.Shuttle))); +// for (DeviceConfig deviceConfig : shuttleList) { +// Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo()); +// if (object == null) { +// continue; +// } +// +// int taskNo = Integer.parseInt(String.valueOf(object)); +// if (taskNo != 0) { +// //瀛樺湪浠诲姟闇�瑕佹墽琛� +// boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo); +// } +// } +// } } diff --git a/src/main/java/com/zy/core/thread/TrafficControlThread.java b/src/main/java/com/zy/core/thread/TrafficControlThread.java index 3314b13..a12dd26 100644 --- a/src/main/java/com/zy/core/thread/TrafficControlThread.java +++ b/src/main/java/com/zy/core/thread/TrafficControlThread.java @@ -5,18 +5,9 @@ import com.zy.core.ThreadHandler; import com.zy.core.model.TrafficControlDataModel; -import java.util.HashMap; import java.util.List; public interface TrafficControlThread extends ThreadHandler { - -// boolean getDetecting(); -// -// void updateDetect(); -// -// boolean addNodes(Integer shuttleNo, Integer taskNo, List<NavigateNode> nodeList); -// -// boolean removeNodes(Integer shuttleNo, Integer taskNo); boolean applyTrafficControl(List<NavigateNode> totalNodeList, List<NavigateNode> nodeList, Integer shuttleNo, Integer taskNo); @@ -28,6 +19,8 @@ boolean forceCancelTrafficControl(Integer shuttleNo); + TrafficControlDataModel queryTrafficControl(Integer shuttleNo, Integer taskNo); + 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 19af9d7..312b527 100644 --- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java @@ -52,6 +52,7 @@ private DeviceConfig deviceConfig; private RedisUtil redisUtil; private ShuttleProtocol shuttleProtocol; + private ShuttleAction shuttleAction = null; private static final boolean DEBUG = false;//璋冭瘯妯″紡 @@ -88,38 +89,35 @@ }); readThread.start(); -// //璁惧鎵ц -// Thread executeThread = new Thread(() -> { -// while (true) { -// try { -// ShuttleAction shuttleAction = null; -// try { -// shuttleAction = SpringUtils.getBean(ShuttleAction.class); -// }catch (Exception e){ -// continue; -// } -// -// if (shuttleAction == null) { -// continue; -// } -// -// Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo()); -// if (object == null) { -// continue; -// } -// -// Integer taskNo = Integer.valueOf(String.valueOf(object)); -// if (taskNo != 0) { -// //瀛樺湪浠诲姟闇�瑕佹墽琛� -// boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo); -// } -// Thread.sleep(100); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// }); -// executeThread.start(); + //璁惧鎵ц + Thread executeThread = new Thread(() -> { + while (true) { + try { + if (shuttleAction == null) { + try { + shuttleAction = SpringUtils.getBean(ShuttleAction.class); + }catch (Exception e){ + } + continue; + } + + Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo()); + if (object == null) { + continue; + } + + Integer taskNo = Integer.valueOf(String.valueOf(object)); + if (taskNo != 0) { + //瀛樺湪浠诲姟闇�瑕佹墽琛� + boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo); + } + Thread.sleep(100); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + executeThread.start(); } private void listenMessageFromRedis() { @@ -1214,16 +1212,16 @@ private JSONObject queryCommandStatus(String resultKey) { // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� - // 灏濊瘯50娆� JSONObject result = null; - for (int i = 0; i < 50; i++) { + long startTime = System.currentTimeMillis(); + while (true) { + if((System.currentTimeMillis() - startTime) > 1000 * 10) { + break; + } + result = getRequestBody(resultKey); if (result == null) { - try { - Thread.sleep(500); - } catch (Exception e) { - e.printStackTrace(); - } + continue; }else { break; } 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 9a3a6de..7fccedc 100644 --- a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java +++ b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java @@ -29,13 +29,8 @@ public class TrafficControlImplThread implements TrafficControlThread { private RedisUtil redisUtil; - private boolean detecting = false; - private boolean updateDetect = false; - private Long detectTime = System.currentTimeMillis(); - private HashMap<String, Integer> deviceMap = null; - private HashMap<Integer, HashMap<String, List<Integer>>> levNodesMap = null; - + private List<TrafficControlDataModel> applyList = new ArrayList<>(); private HashMap<Integer,Long> shuttleReportErrorMap = new HashMap<>(); private HashMap<Integer,Long> pathIdleShuttleMap = new HashMap<>(); private HashMap<Integer,Long> applyRecordsMap = new HashMap<>(); @@ -54,402 +49,40 @@ trafficControlDataList = (List<TrafficControlDataModel>) object; } -// List<Integer> shuttleNoList = new ArrayList<>(); -// while (true) { -// try { -// DeviceConfigService deviceConfigService = null; -// try { -// deviceConfigService = SpringUtils.getBean(DeviceConfigService.class); -// }catch (Exception e){} -// -// if(deviceConfigService == null){ -// continue; -// } -// -// if(shuttleNoList.isEmpty()){ -// List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() -// .eq("device_type", String.valueOf(SlaveType.Shuttle))); -// for (DeviceConfig deviceConfig : shuttleList) { -// shuttleNoList.add(deviceConfig.getDeviceNo()); -// } -// } -// -// if((updateDetect) || ((System.currentTimeMillis() - detectTime) > 1000 * 2)) { -// detect(shuttleNoList); -// } -// }catch (Exception e){ -// e.printStackTrace(); -// } -// } - - } - - public synchronized void detect(List<Integer> shuttleNoList) { - detecting = true; - updateDetect = false; - ObjectMapper objectMapper = null; - try { - objectMapper = SpringUtils.getBean(ObjectMapper.class); - }catch (Exception e){} - - if(objectMapper == null){ - return; - } - - HashMap<String, List<NavigateNode>> tmpTaskNodesMap = new HashMap<>(); - for (Integer shuttleNo : shuttleNoList) { - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); - if (shuttleThread == null) { - continue; - } - - ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); - if (shuttleProtocol == null) { - continue; - } - - if (shuttleProtocol.getTaskNo() == 0) { - continue; - } - - if (shuttleProtocol.getCurrentLocNo() == null) { - continue; - } - - int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo()); - - Object obj = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo()); - if (obj == null) { - continue; - } - - ShuttleRedisCommand redisCommand = null; + while (true) { try { - redisCommand = objectMapper.readValue(String.valueOf(obj), ShuttleRedisCommand.class); - } catch (IOException e) { - throw new RuntimeException(e); - } - - if (redisCommand == null) { - continue; - } - - ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); - if (assignCommand == null) { - continue; - } - - List<NavigateNode> nodeList = assignCommand.getNodesDeepCopy(); - if (nodeList == null || nodeList.isEmpty()) { - continue; - } - - tmpTaskNodesMap.put(shuttleProtocol.getTaskNo() + "-" + shuttleNo, nodeList); - } - this.taskNodesMap = tmpTaskNodesMap; - HashMap<Integer, HashMap<String, List<Integer>>> levNodesMap = calcNodeList(); - - HashMap<Integer, HashMap<String, List<Integer>>> levBlockMap = new HashMap<>(); - //杩囨护涓嶉渶瑕佺鍒惰妭鐐� - for (Map.Entry<Integer, HashMap<String, List<Integer>>> entry : levNodesMap.entrySet()) { - Integer lev = entry.getKey(); - HashMap<String, List<Integer>> value = entry.getValue(); - - HashMap<String, List<Integer>> blockMap = new HashMap<>(); - for (Map.Entry<String, List<Integer>> listEntry : value.entrySet()) { - String locNo = listEntry.getKey(); - List<Integer> shuttleNos = listEntry.getValue(); - if (shuttleNos.size() <= 1) { + if (applyList.isEmpty()) { continue; } - blockMap.put(locNo, shuttleNos); - } - levBlockMap.put(lev, blockMap); + TrafficControlDataModel dataModel = applyList.get(0); + processApply(dataModel); + applyList.remove(0); + }catch (Exception e){ + e.printStackTrace(); + } } - //璁$畻鍫靛鑼冨洿 - List<List<String>> allLocList = new ArrayList<>(); - List<List<Integer>> allDeviceNodes = new ArrayList<>(); - for (Map.Entry<Integer, HashMap<String, List<Integer>>> entry : levBlockMap.entrySet()) { - Integer lev = entry.getKey(); - HashMap<String, List<Integer>> nodes = entry.getValue(); - - Set<String> sets = new HashSet<>(); - for (Map.Entry<String, List<Integer>> val : nodes.entrySet()) { - String locNo = val.getKey(); - sets.add(locNo); - } - - List<List<String>> locList = TrafficControlUtils.groupNodes(sets); - List<List<Integer>> deviceNodes = new ArrayList<>(); - - //get devices - for (List<String> list : locList) { - List<List<Integer>> tmpDeviceNodes = new ArrayList<>(); - for (String loc : list) { - List<Integer> shuttleNos = nodes.get(loc); - if(!tmpDeviceNodes.contains(shuttleNos)) { - tmpDeviceNodes.add(shuttleNos); - } - } - //鑺傜偣骞堕泦-鑾峰彇鍫靛璁惧缂栧彿 - List<List<Integer>> deviceList = mergeConnectedComponents(tmpDeviceNodes); - deviceNodes.addAll(deviceList); - } - - allLocList.addAll(locList); - allDeviceNodes.addAll(deviceNodes); - } - - System.out.println(JSON.toJSONString(allLocList)); - System.out.println(JSON.toJSONString(allDeviceNodes)); -// //鍒嗛厤鍫靛鑺傜偣鍙墽琛岃澶� -// findDeviceByBlockList(allLocList, allDeviceNodes); - - detecting = false; - detectTime = System.currentTimeMillis(); - -// //鍙戝竷鍫靛鑺傜偣鍙敤璁惧缂栧彿 -// 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 Integer searchDevice(List<String> locs, List<Integer> blockNode, HashMap<String, Integer> deviceMap) { - NavigateUtils navigateUtils = null; - try { - navigateUtils = SpringUtils.getBean(NavigateUtils.class); - }catch (Exception e){} - - if(navigateUtils == null){ - return -1; - } - - Integer value = -1; - for (Integer shuttleNo : blockNode) { - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); - if (shuttleThread == null) { - continue; - } - - ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); - if (shuttleProtocol == null) { - continue; - } - - if (!shuttleThread.isDeviceIdle()) { - continue; - } - - if (shuttleProtocol.getTaskNo() == 0) { - continue; - } - - if (!shuttleProtocol.getTrafficControl()) { - continue;//灏忚溅鏈敵璇蜂氦閫氱鍒� - } - - //妫�娴嬪皬杞︽槸鍚﹀凡缁忓垎閰� - if (deviceMap.containsValue(shuttleNo)) { - continue; - } - - List<NavigateNode> trafficControlNodes = shuttleProtocol.getTrafficControlNodes(); - List<String> trafficControlLocs = new ArrayList<>(); - for (NavigateNode node : trafficControlNodes) { - trafficControlLocs.add(Utils.getLocNo(node.getX(), node.getY(), node.getZ())); - } - - //妫�娴嬪綋鍓嶅皬杞﹁妭鐐规槸鍚﹀尮閰嶄氦閫氱鍒惰妭鐐� - boolean result = false; - for (String loc : locs) { - if (trafficControlLocs.contains(loc)) { - result = true; - break; - } - } - - if (!result) { - continue; - } - - //check path - String currentLocNo = shuttleProtocol.getCurrentLocNo(); - for (String loc : locs) { - if (loc.equals(currentLocNo)) { - continue; - } - List<NavigateNode> nodeList = navigateUtils.calc(currentLocNo, loc, NavigationMapType.getNormalWithDevice(), Utils.getShuttlePoints(shuttleNo, Utils.getLev(loc)), null); - if (nodeList == null) { - break; - } - } - - value = shuttleNo; - break; - } - - return value; - } - - //鑺傜偣骞堕泦 - public List<List<Integer>> mergeConnectedComponents(List<List<Integer>> lists) { - // 1. 鏀堕泦鎵�鏈夊敮涓�鍏冪礌 - Set<Integer> allElements = new HashSet<>(); - for (List<Integer> list : lists) { - allElements.addAll(list); - } - - // 2. 鍒濆鍖栧苟鏌ラ泦 - Map<Integer, Integer> parent = new HashMap<>(); - for (Integer element : allElements) { - parent.put(element, element); - } - - // 3. 瀹氫箟鏌ユ壘鏍硅妭鐐圭殑鍑芥暟锛堝甫璺緞鍘嬬缉锛� - Function<Integer, Integer> find = x -> { - int root = x; - while (parent.get(root) != root) { - root = parent.get(root); - } - // 璺緞鍘嬬缉 - int current = x; - while (parent.get(current) != root) { - int next = parent.get(current); - parent.put(current, root); - current = next; - } - return root; - }; - - // 4. 閬嶅巻姣忎釜鍒楄〃骞跺悎骞跺厓绱� - for (List<Integer> list : lists) { - if (list.isEmpty()) continue; - int first = list.get(0); - for (int i = 1; i < list.size(); i++) { - int a = first; - int b = list.get(i); - int rootA = find.apply(a); - int rootB = find.apply(b); - if (rootA != rootB) { - parent.put(rootB, rootA); // 鍚堝苟闆嗗悎 - } - } - } - - // 5. 鎸夋牴鑺傜偣鍒嗙粍 - Map<Integer, Set<Integer>> components = new HashMap<>(); - for (Integer element : allElements) { - int root = find.apply(element); - components.computeIfAbsent(root, k -> new TreeSet<>()).add(element); - } - - // 6. 杞崲涓烘湁搴忓垪琛� - List<List<Integer>> result = new ArrayList<>(); - for (Set<Integer> set : components.values()) { - result.add(new ArrayList<>(set)); - } - - return result; - } - - private HashMap<Integer, HashMap<String, List<Integer>>> calcNodeList() { - HashMap<Integer, HashMap<String, List<Integer>>> levNodesMap = new HashMap<>(); - for (Map.Entry<String, List<NavigateNode>> entry : taskNodesMap.entrySet()) { - String key = entry.getKey(); - String[] split = key.split("-"); - Integer taskNo = Integer.parseInt(split[0]); - Integer shuttleNo = Integer.parseInt(split[1]); - - List<NavigateNode> nodeList = entry.getValue(); - NavigateNode node1 = nodeList.get(0); - int lev = node1.getZ(); - - HashMap<String, List<Integer>> nodeMap = new HashMap<>(); - if(levNodesMap.containsKey(lev)) { - nodeMap = levNodesMap.get(lev); - } - - for (NavigateNode node : nodeList) { - String locNo = Utils.getLocNo(node.getX(), node.getY(), lev); - List<Integer> shuttleNos = new ArrayList<>(); - if (nodeMap.containsKey(locNo)) { - shuttleNos = nodeMap.get(locNo); - } - - if (!shuttleNos.contains(shuttleNo)) { - shuttleNos.add(shuttleNo); - } - nodeMap.put(locNo, shuttleNos); - } - levNodesMap.put(lev, nodeMap); - } - this.levNodesMap = levNodesMap; - return levNodesMap; - } - - @Override - public synchronized boolean applyTrafficControl(List<NavigateNode> totalNodeList, List<NavigateNode> nodeList, Integer shuttleNo, Integer taskNo) { + public synchronized boolean processApply(TrafficControlDataModel applyData) { ShuttleOperaUtils shuttleOperaUtils = SpringUtils.getBean(ShuttleOperaUtils.class); if (shuttleOperaUtils == null) { return false; } + + if (applyData == null) { + return false; + } + + if (applyData.getShuttleNo() == null || applyData.getTaskNo() == null || applyData.getNodeList() == null || applyData.getTotalNodeList() == null) { + return false; + } + + Integer shuttleNo = applyData.getShuttleNo(); + Integer taskNo = applyData.getTaskNo(); + List<NavigateNode> nodeList = applyData.getNodeList(); + List<NavigateNode> totalNodeList = applyData.getTotalNodeList(); //鏇存柊浜ょ淇℃伅 redisUtil.set(RedisKeyType.TRAFFIC_CONTROL_MAP.key, trafficControlDataList); @@ -488,7 +121,7 @@ } } - News.info("traffic running {},{}", shuttleNo, taskNo); +// News.info("traffic running {},{}", shuttleNo, taskNo); return true;//宸茬粡绠″埗鍏佽鎵ц } } @@ -561,15 +194,34 @@ } //浜ょ鎺ユ敹 - TrafficControlDataModel model = new TrafficControlDataModel(); - model.setShuttleNo(shuttleNo); - model.setTaskNo(taskNo); - model.setNodeList(nodeList); - model.setTotalNodeList(totalNodeList); - trafficControlDataList.add(model); + trafficControlDataList.add(applyData); applyRecordsMap.remove(shuttleNo); News.info("receipt traffic {},{}", shuttleNo, taskNo); + return true; + } + + @Override + public synchronized boolean applyTrafficControl(List<NavigateNode> totalNodeList, List<NavigateNode> nodeList, Integer shuttleNo, Integer taskNo) { + boolean add = true; + for (TrafficControlDataModel controlDataModel : applyList) { + if(controlDataModel.getShuttleNo().equals(shuttleNo)) { + add = false; + break; + } + } + + if (add) { + TrafficControlDataModel model = new TrafficControlDataModel(); + model.setShuttleNo(shuttleNo); + model.setTaskNo(taskNo); + model.setNodeList(nodeList); + model.setTotalNodeList(totalNodeList); + applyList.add(model); + }else { + return false; + } + return true; } @@ -654,6 +306,20 @@ } @Override + public TrafficControlDataModel queryTrafficControl(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)) { + return controlDataModel; + } + } + } + return null; + } + + @Override public TrafficControlDataModel queryTrafficControl(Integer shuttleNo) { //妫�娴嬭溅瀛愭槸鍚﹀瓨鍦ㄧ鍒� for (int i = 0; i < trafficControlDataList.size(); i++) { diff --git a/src/main/webapp/views/console.html b/src/main/webapp/views/console.html index 93c1aa3..538a39d 100644 --- a/src/main/webapp/views/console.html +++ b/src/main/webapp/views/console.html @@ -358,17 +358,13 @@ }, methods: { init() { - this.ws = new WebSocket("ws://" + window.location.host + baseUrl + "/console/websocket"); - this.ws.onopen = this.webSocketOnOpen - this.ws.onerror = this.webSocketOnError - this.ws.onmessage = this.webSocketOnMessage - this.ws.onclose = this.webSocketClose - this.getMap(this.currentLev) this.getSystemRunningStatus() //鑾峰彇绯荤粺杩愯鐘舵�� this.initLev()//鍒濆鍖栨ゼ灞備俊鎭� this.consoleInterval = setInterval(() => { + this.websocketConnect() + this.getShuttleStateInfo() //鑾峰彇鍥涘悜绌挎杞︿俊鎭� this.getLiftStateInfo() //鑾峰彇鎻愬崌鏈轰俊鎭� this.getSiteInfo() //鑾峰彇杈撻�佺珯鐐规暟鎹� @@ -709,10 +705,20 @@ } } }, + websocketConnect() { + if (this.ws == null) { + this.ws = new WebSocket("ws://" + window.location.host + baseUrl + "/console/websocket"); + this.ws.onopen = this.webSocketOnOpen + this.ws.onerror = this.webSocketOnError + this.ws.onmessage = this.webSocketOnMessage + this.ws.onclose = this.webSocketClose + } + }, webSocketOnOpen(e) { console.log("open"); }, webSocketOnError(e) { + this.ws = null; console.log(e); }, webSocketOnMessage(e) { @@ -730,11 +736,16 @@ } }, webSocketClose(e) { + this.ws = null; console.log("close"); }, sendWs(message) { + if (this.ws == null) { + return; + } + if (this.ws.readyState == WebSocket.OPEN) { - this.ws.send(message) + this.ws.send(message); } } } diff --git a/src/main/webapp/views/shuttleNew.html b/src/main/webapp/views/shuttleNew.html index a1362ac..ef80807 100644 --- a/src/main/webapp/views/shuttleNew.html +++ b/src/main/webapp/views/shuttleNew.html @@ -202,7 +202,7 @@ </div> </div> <div class="bg-slate-700 p-4 rounded-lg"> - <h3 class="text-lg font-medium mb-2">璁惧缁存姢</h3> + <h3 class="text-lg font-medium mb-2">璁惧鎸囦护</h3> <div class="flex flex-wrap gap-2" style="display: flex;justify-content: center;"> <button class="btn bg-slate-600 hover:bg-slate-500" @click="shuttleOperator('palletLift')"> <i class="fas fa-level-up mr-1"></i>鎵樼洏椤跺崌 @@ -406,9 +406,9 @@ }, methods: { init() { - this.websocketConnect(); - this.consoleInterval = setInterval(() => { + this.websocketConnect(); + this.getShuttleStateInfo() //鑾峰彇鍥涘悜绌挎杞︿俊鎭� }, 1000) }, @@ -594,18 +594,20 @@ }); }, websocketConnect() { - this.ws = new WebSocket("ws://" + window.location.host + baseUrl + "/console/websocket"); - this.ws.onopen = this.webSocketOnOpen - this.ws.onerror = this.webSocketOnError - this.ws.onmessage = this.webSocketOnMessage - this.ws.onclose = this.webSocketClose + if (this.ws == null) { + this.ws = new WebSocket("ws://" + window.location.host + baseUrl + "/console/websocket"); + this.ws.onopen = this.webSocketOnOpen + this.ws.onerror = this.webSocketOnError + this.ws.onmessage = this.webSocketOnMessage + this.ws.onclose = this.webSocketClose + } }, webSocketOnOpen(e) { console.log("open"); }, webSocketOnError(e) { + this.ws = null; console.log(e); - this.websocketConnect(); }, webSocketOnMessage(e) { const result = JSON.parse(e.data); @@ -614,12 +616,16 @@ } }, webSocketClose(e) { + this.ws = null; console.log("close"); - this.websocketConnect(); }, sendWs(message) { + if (this.ws == null) { + return; + } + if (this.ws.readyState == WebSocket.OPEN) { - this.ws.send(message) + this.ws.send(message); } } } -- Gitblit v1.9.1