From 6bad808389ec9d4c7331bb471c1410b50893fc1c Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 28 三月 2023 15:35:23 +0800 Subject: [PATCH] 四向车下命令时计算移动距离 --- src/main/java/com/zy/common/model/NavigateNode.java | 1 src/main/java/com/zy/core/thread/ShuttleThread.java | 24 ++++++++--- src/main/java/com/zy/common/utils/NavigateUtils.java | 38 ++++++++++++++++++ src/main/java/com/zy/common/utils/NavigateMapData.java | 49 ++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/zy/common/model/NavigateNode.java b/src/main/java/com/zy/common/model/NavigateNode.java index 70e56ac..5f769e2 100644 --- a/src/main/java/com/zy/common/model/NavigateNode.java +++ b/src/main/java/com/zy/common/model/NavigateNode.java @@ -16,6 +16,7 @@ private NavigateNode Father;//鐖惰妭鐐� private Boolean isInflectionPoint;//鏄惁涓烘嫄鐐� private String direction;//琛岃蛋鏂瑰悜 + private Integer moveDistance;//琛岃蛋璺濈 public NavigateNode(int x, int y) { this.x = x; diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java index d463714..38e2a3f 100644 --- a/src/main/java/com/zy/common/utils/NavigateMapData.java +++ b/src/main/java/com/zy/common/utils/NavigateMapData.java @@ -66,4 +66,53 @@ return null; } + //鑾峰彇JSON鏍煎紡鏁版嵁 + public ArrayList<ArrayList<JSONObject>> getJsonData(Integer mapType) { + try { + String mapFilename = ""; + if (mapType == ShuttleTaskModeType.PAK_IN.id) { + //鍏ュ簱鍦板浘 + mapFilename = "mapIn.json"; + }else { + //鍑哄簱鍦板浘 + mapFilename = "mapOut.json"; + } + + String fileName = this.getClass().getClassLoader().getResource(mapFilename).getPath();//鑾峰彇鏂囦欢璺緞 + File file = new File(fileName); + StringBuffer stringBuffer = new StringBuffer(); + if (file.isFile() && file.exists()) { + InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK"); + BufferedReader br = new BufferedReader(isr); + String lineTxt = null; + while ((lineTxt = br.readLine()) != null) { + stringBuffer.append(lineTxt); + } + br.close(); + + //杩斿洖鐨勭粨鏋滈泦 + ArrayList<ArrayList<JSONObject>> returnLists = new ArrayList<>(); + + //瑙f瀽json鍦板浘鏁版嵁 + ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class); + for (Object obj : arrayList) { + ArrayList list = JSON.parseObject(obj.toString(), ArrayList.class); + ArrayList<JSONObject> maps = new ArrayList<>(); + for (Object o : list) { + JSONObject jsonObject = JSON.parseObject(o.toString()); + maps.add(jsonObject); + } + returnLists.add(maps); + } + + return returnLists; + } else { + System.out.println("鏂囦欢涓嶅瓨鍦�!"); + } + } catch (IOException ioException) { + ioException.printStackTrace(); + } + return null; + } + } diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java index fd743d4..4be9c78 100644 --- a/src/main/java/com/zy/common/utils/NavigateUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateUtils.java @@ -1,5 +1,6 @@ package com.zy.common.utils; +import com.alibaba.fastjson.JSONObject; import com.zy.common.model.NavigateNode; import com.zy.core.enums.ShuttleTaskModeType; @@ -141,6 +142,8 @@ //鐩磋绾胯矾 mapNode.setDirection(direction);//璁剧疆琛岃蛋鏂瑰悜 } + Integer distance = getXToNextDistance(mapNode);//鑾峰彇褰撳墠鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈 + mapNode.setMoveDistance(distance); } //灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏� @@ -149,15 +152,48 @@ return list; } + //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈 + public static Integer getXToNextDistance(NavigateNode xNode) { + NavigateMapData mapData = new NavigateMapData(); + ArrayList<ArrayList<JSONObject>> lists = mapData.getJsonData(1); + if (lists != null) { + JSONObject jsonObject = lists.get(xNode.getX()).get(xNode.getY()); + if (jsonObject != null) { + return Integer.parseInt(jsonObject.getOrDefault(xNode.getDirection(), 0).toString()); + } + return 0; + } + return 0; + } + + /** + * 鑾峰彇褰撳墠璺緞鎬昏璧拌窛绂� + */ + public static Integer getCurrentPathAllDistance(ArrayList<NavigateNode> path) { + if (path.size() == 1) { + //璺緞鍙湁涓�鏉℃暟鎹紝鍒欑洿鎺ヨ繑鍥炶璧拌窛绂� + return path.get(0).getMoveDistance(); + } + + //鎬昏窛绂� + int allDistance = 0; + for (int i = 0; i < path.size() - 1; i++) {//璺緞涓渶鍚庝竴涓妭鐐逛笉缁熻鍒版�昏窛绂伙紝鏈�鍚庝竴涓妭鐐瑰苟涓嶄細鍐嶈璧� + allDistance += path.get(i).getMoveDistance(); + } + return allDistance; + } + public static void main(String[] args) { //璁$畻璺緞 - List<NavigateNode> calc = calc("1000901", "0201801", ShuttleTaskModeType.PAK_OUT.id); + List<NavigateNode> calc = calc("1000901", "1800201", ShuttleTaskModeType.PAK_OUT.id); System.out.println(calc); System.out.println("------------------------"); // List<NavigateNode> calc = calc("0501401", "0201801", "out"); //灏嗚矾寰勫垎鍓叉垚澶氭 ArrayList<ArrayList<NavigateNode>> data = getSectionPath(calc); for (ArrayList<NavigateNode> list : data) { + Integer currentPathAllDistance = getCurrentPathAllDistance(list);//璁$畻褰撳墠璺緞鎬昏窛绂� + System.out.println(currentPathAllDistance); System.out.println(list); } diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index 03e30b5..7cd4f70 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -341,21 +341,27 @@ ArrayList pathList = JSON.parseObject(data.toString(), ArrayList.class); //鍙栫涓�鏉¤矾寰� Object o1 = pathList.get(commandStep); - ArrayList path = JSON.parseObject(o1.toString(), ArrayList.class); + ArrayList objectPath = JSON.parseObject(o1.toString(), ArrayList.class); + ArrayList<NavigateNode> path = new ArrayList<>(); + for (Object o2 : objectPath) { + NavigateNode navigateNode = JSON.parseObject(o2.toString(), NavigateNode.class); + path.add(navigateNode); + } + Integer allDistance = NavigateUtils.getCurrentPathAllDistance(path);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� size = Integer.parseInt(map.get("pathSize").toString()); //寮�濮嬭矾寰� - JSONObject startPath = JSON.parseObject(path.get(0).toString()); + NavigateNode startPath = path.get(0); //鐩爣璺緞 - JSONObject endPath = JSON.parseObject(path.get(path.size() - 1).toString()); + NavigateNode endPath = path.get(path.size() - 1); command.setCommandWord((short) 1); - command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getIntValue("x"), startPath.getIntValue("y"))); + command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY())); command.setMiddleCodeNum((short) 0); - command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getIntValue("x"), endPath.getIntValue("y"))); - command.setStartToDistDistance(1000); + command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY())); + command.setStartToDistDistance(allDistance); command.setMiddleToDistDistance(1000); - command.setRunDirection(ShuttleRunDirection.get(startPath.get("direction").toString()).id); + command.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); command.setPalletLift((short) 1); command.setForceMoveDistance(1000); command.setChargeSwitch((short) 2); @@ -431,6 +437,10 @@ //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); + //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + //浠诲姟鍙锋竻闆� + shuttleProtocol.setTaskNo((short) 0); News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); } -- Gitblit v1.9.1