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