From 9f05696822f8feee385a34a92dd9aa16009e84a0 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期日, 18 六月 2023 12:38:00 +0800
Subject: [PATCH] 寻路算法,地图节点优化,剔除原入出库模式获取地图节点方案,改为根据库位状态实时获取节点信息或直接获取无过滤的完整节点信息

---
 src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java |    5 +
 src/main/java/com/zy/asrs/controller/ConsoleController.java    |    3 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |   17 ++--
 src/main/java/com/zy/core/thread/ShuttleThread.java            |   24 +++---
 src/main/resources/mapper/LocMastMapper.xml                    |    3 
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java            |    2 
 src/main/java/com/zy/common/utils/NavigateUtils.java           |   12 ++
 src/main/java/com/zy/common/utils/NavigateMapData.java         |   91 ++++++++++++++++------
 src/main/java/com/zy/asrs/service/LocMastService.java          |    3 
 src/main/java/com/zy/common/utils/NavigateSolution.java        |    7 +
 src/main/java/com/zy/common/model/enums/NavigationMapType.java |   42 ++++++++++
 11 files changed, 157 insertions(+), 52 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/ConsoleController.java b/src/main/java/com/zy/asrs/controller/ConsoleController.java
index b2acdf6..7b808ab 100644
--- a/src/main/java/com/zy/asrs/controller/ConsoleController.java
+++ b/src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -18,6 +18,7 @@
 import com.zy.asrs.service.WrkMastService;
 import com.zy.common.CodeRes;
 import com.zy.common.model.MapNode;
+import com.zy.common.model.enums.NavigationMapType;
 import com.zy.common.utils.NavigateMapData;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.CrnThread;
@@ -316,7 +317,7 @@
         //瑙f瀽json鍦板浘鏁版嵁
         ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
         NavigateMapData navigateMapData = new NavigateMapData(lev);
-        List<List<MapNode>> lists = navigateMapData.filterMap(-1, arrayList);//杩囨护鍦板浘鏁版嵁
+        List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null);//杩囨护鍦板浘鏁版嵁
         return R.ok().add(lists);
     }
 
diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index 2a400f1..bdf4e86 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -37,4 +37,6 @@
     LocMast queryByLoc(String locNo);
 
     LocMast queryByQrCode(String qrCodeValue);
+
+    List<LocMast> selectLocByLev(Integer lev);
 }
diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java
index c67ad4f..9e814d4 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -67,4 +67,7 @@
     LocMast queryByLoc(String locNo);
 
     LocMast queryByQrCode(String qrCodeValue);
+
+    //鏌ヨ鎸囧畾妤煎眰鐨勫簱浣嶆暟鎹�
+    List<LocMast> selectLocByLev(Integer lev);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
index 1d21f1a..c50356a 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -86,4 +86,9 @@
     public LocMast queryByQrCode(String qrCodeValue) {
         return this.baseMapper.queryByQrCode(qrCodeValue);
     }
+
+    @Override
+    public List<LocMast> selectLocByLev(Integer lev) {
+        return this.baseMapper.selectLocByLev(lev);
+    }
 }
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 4ed63d7..164b4ba 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -10,6 +10,7 @@
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.*;
+import com.zy.common.model.enums.NavigationMapType;
 import com.zy.common.model.enums.WrkChargeType;
 import com.zy.common.service.CommonService;
 import com.zy.common.service.erp.ErpService;
@@ -569,7 +570,7 @@
                     //鏁版嵁搴撲腑涔熶笉瀛樺湪鍦板浘鏁版嵁锛屼粠鍦板浘鏂囦欢涓幏鍙�
                     //杞藉叆鍦板浘
                     NavigateMapData mapData = new NavigateMapData(i);
-                    List<List<MapNode>> lists = mapData.getJsonData(-1);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
+                    List<List<MapNode>> lists = mapData.getJsonData(-1, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
 
                     //瀛樺叆鏁版嵁搴�
                     basMap = new BasMap();
@@ -796,7 +797,7 @@
 
     }
 
-    //鑾峰彇璧风偣-缁堢偣鎸囦护銆俶apType锛�0=>鏃犺揣鐗╁湴鍥撅紝1=銆嬫惡甯﹁揣鐗╁嚭鍏ュ簱鍦板浘
+    //鑾峰彇璧风偣-缁堢偣鎸囦护
     public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String locNo, Integer mapType, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
         //鑾峰彇灏忚溅绉诲姩閫熷害
         BasShuttle basShuttle = basShuttleService.selectById(assignCommand.getShuttleNo());
@@ -864,7 +865,7 @@
         List<NavigateNode> allNode = new ArrayList<>();
 
         //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护
-        List<NavigateNode> calc = NavigateUtils.calc(startLocNo, middleLocNo, 1);//灏忚溅鏃犺揣锛岃蛋鍏ュ簱鍦板浘
+        List<NavigateNode> calc = NavigateUtils.calc(startLocNo, middleLocNo, NavigationMapType.NORMAL.id);//灏忚溅鏃犺揣锛岃蛋姝e父搴撲綅閫氶亾
         List<ShuttleCommand> commands = new ArrayList<>();
 
         if (calc != null) {
@@ -898,7 +899,7 @@
         commands.add(shuttleThread.getPalletCommand((short) 1));
 
         //璁$畻灏忚溅涓偣鍒扮粓鐐规墍闇�鍛戒护
-        List<NavigateNode> calc2 = NavigateUtils.calc(middleLocNo, locNo, 2);//灏忚溅鏈夎揣锛岃蛋鍑哄簱鍦板浘(鍑哄簱鍦板浘鏈変笓鐢ㄨ揣閬�)
+        List<NavigateNode> calc2 = NavigateUtils.calc(middleLocNo, locNo, NavigationMapType.DFX.id);//灏忚溅鏈夎揣锛岃蛋绂佺敤杩嘍FX搴撲綅鐨勫湴鍥鹃�氶亾
         if (calc2 == null) {
             return null;
         }
@@ -1209,9 +1210,9 @@
                 String recentLocNo = recentShuttle.getShuttleProtocol().getCurrentLocNo();
 
                 //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒扮洰鏍囧湴鐐硅窛绂�
-                List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, distLocNo, ShuttleTaskModeType.PAK_IN.id);
+                List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, distLocNo, NavigationMapType.NORMAL.id);//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
                 //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
-                List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, distLocNo, ShuttleTaskModeType.PAK_IN.id);
+                List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, distLocNo, NavigationMapType.NORMAL.id);//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
                 if (recentShuttlePath == null || currentShuttlePath == null) {
                     continue;
                 }
@@ -1241,9 +1242,9 @@
                 int recentLev = Utils.getLev(recentLocNo);
 
                 //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒板綋鍓嶈溅瀛愭墍鍦ㄦゼ灞傜殑鎻愬崌鏈哄彛璺濈
-                List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, Utils.levToOutInStaLocNo(recentLev), ShuttleTaskModeType.PAK_IN.id);
+                List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, Utils.levToOutInStaLocNo(recentLev), NavigationMapType.NORMAL.id);//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
                 //褰撳墠绌挎杞︾嚎绋嬪埌褰撳墠杞﹀瓙鎵�鍦ㄦゼ灞傜殑鎻愬崌鏈哄彛璺濈
-                List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, Utils.levToOutInStaLocNo(currentLev), ShuttleTaskModeType.PAK_IN.id);
+                List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, Utils.levToOutInStaLocNo(currentLev), NavigationMapType.NORMAL.id);//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
                 if (recentShuttlePath == null || currentShuttlePath == null) {
                     continue;
                 }
diff --git a/src/main/java/com/zy/common/model/enums/NavigationMapType.java b/src/main/java/com/zy/common/model/enums/NavigationMapType.java
new file mode 100644
index 0000000..99cc6ac
--- /dev/null
+++ b/src/main/java/com/zy/common/model/enums/NavigationMapType.java
@@ -0,0 +1,42 @@
+package com.zy.common.model.enums;
+
+public enum NavigationMapType {
+
+    NONE(-1, "鏃犺繃婊�"),
+    DFX(1, "杩囨护搴撲綅鐘舵�丏FX"),
+    NORMAL(2, "杩囨护搴撲綅鐘舵�乆"),
+    ;
+
+    public Integer id;
+    public String desc;
+
+    NavigationMapType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static NavigationMapType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (NavigationMapType type : NavigationMapType.values()) {
+            if (type.id.equals(id.intValue())) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static NavigationMapType get(NavigationMapType type) {
+        if (null == type) {
+            return null;
+        }
+        for (NavigationMapType type1 : NavigationMapType.values()) {
+            if (type1 == type) {
+                return type1;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java
index 2fa688e..6012be6 100644
--- a/src/main/java/com/zy/common/utils/NavigateMapData.java
+++ b/src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -1,10 +1,14 @@
 package com.zy.common.utils;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.BasMap;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.service.LocMastService;
 import com.zy.common.model.MapNode;
 import com.zy.common.model.NavigateNode;
+import com.zy.common.model.enums.NavigationMapType;
 import com.zy.core.enums.ShuttleTaskModeType;
 import org.springframework.stereotype.Component;
 
@@ -30,10 +34,10 @@
     }
 
     public int[][] getData() {
-        return getData(ShuttleTaskModeType.PAK_IN.id);
+        return getData(NavigationMapType.NONE.id, null);//榛樿璇诲彇鏃犺繃婊ょ殑鍏ㄩ儴鍦板浘鏁版嵁
     }
 
-    public int[][] getData(Integer mapType) {
+    public int[][] getData(Integer mapType, List<int[]> whitePoints) {
         try {
             String mapFilename = "map_" + lev + ".json";
 
@@ -51,7 +55,7 @@
 
                 //瑙f瀽json鍦板浘鏁版嵁
                 ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
-                List<List<MapNode>> lists = filterMap(mapType, arrayList);//杩囨护鍦板浘鏁版嵁
+                List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints);//杩囨护鍦板浘鏁版嵁
                 int[][] map = new int[lists.size()][];
                 int j = 0;
                 for (List<MapNode> list : lists) {
@@ -78,7 +82,7 @@
     /**
      * 灏濊瘯浠巖edis鑾峰彇鏁版嵁
      */
-    public int[][] getDataFromRedis(Integer mapType) {
+    public int[][] getDataFromRedis(Integer mapType, List<int[]> whitePoints) {
         RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
         Object o = redisUtil.get("realtimeBasMap_" + lev);
         if (o == null) {
@@ -86,15 +90,15 @@
         }
 
         BasMap basMap = JSON.parseObject(o.toString(), BasMap.class);
-        return this.getDataFormString(basMap.getData(), mapType);
+        return this.getDataFormString(basMap.getData(), mapType, whitePoints);
     }
 
     /**
      * 浠嶭ist鏁版嵁涓幏鍙栧湴鍥�
      */
-    public int[][] getDataFormString(String data, Integer mapType) {
+    public int[][] getDataFormString(String data, Integer mapType, List<int[]> whitePoints) {
         ArrayList arrayList = JSON.parseObject(data, ArrayList.class);
-        List<List<MapNode>> lists = filterMap(mapType, arrayList);//杩囨护鍦板浘鏁版嵁
+        List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints);//杩囨护鍦板浘鏁版嵁
         int[][] map = new int[lists.size()][];
         int j = 0;
         for (List<MapNode> list : lists) {
@@ -112,7 +116,7 @@
     }
 
     //鑾峰彇JSON鏍煎紡鏁版嵁
-    public List<List<MapNode>> getJsonData(Integer mapType) {
+    public List<List<MapNode>> getJsonData(Integer mapType, List<int[]> whitePoints) {
         try {
             String mapFilename = "map_" + lev + ".json";
 
@@ -130,7 +134,7 @@
 
                 //瑙f瀽json鍦板浘鏁版嵁
                 ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
-                List<List<MapNode>> lists = filterMap(mapType, arrayList);//杩囨护鍦板浘鏁版嵁
+                List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints);//杩囨护鍦板浘鏁版嵁
 
                 return lists;
             } else {
@@ -143,31 +147,68 @@
     }
 
     /**
-     * 杩囨护鍦板浘鏁版嵁锛屽叆搴撴搷浣滃垯杩囨护鍑哄簱鐨勭鐢ㄥ簱浣嶏紝鍑哄簱鎿嶄綔鍒欒繃婊ゅ叆搴撶殑绂佺敤搴撲綅
+     * 杩囨护鍦板浘鏁版嵁
+     * mapType -1=>鏃犺繃婊わ紝1=銆嬭繃婊ゅ簱浣嶇姸鎬丏FX锛�2=銆嬭繃婊ゅ簱浣嶇姸鎬乆
+     * @param whitePoints 鐧藉悕鍗曡妭鐐癸紝涓嶉渶瑕佽杩囨护
      */
-    public List<List<MapNode>> filterMap(Integer mapType,List arrayList) {
+    public List<List<MapNode>> filterMap(Integer mapType, List arrayList, Integer lev, List<int[]> whitePoints) {
         List<List<MapNode>> lists = new ArrayList<>();
+
+        //閲嶅缓鏁版嵁鏍煎紡
         for (int i = 0; i < arrayList.size(); i++) {
             Object obj = arrayList.get(i);
             List<MapNode> list = JSON.parseArray(obj.toString(), MapNode.class);
             for (int j = 0; j < list.size(); j++) {
                 MapNode mapNode = list.get(j);
-                if (mapType == ShuttleTaskModeType.PAK_IN.id) {
-                    //鍏ュ簱鍦板浘
-                    if (mapNode.getData().equals("IN_X")) {
-                        //绂佹浣跨敤鐨勫簱浣嶏紝璁剧疆涓�-1
-                        mapNode.setValue(-1);
-                    }
-                }else if(mapType == ShuttleTaskModeType.PAK_OUT.id){
-                    //鍑哄簱鍦板浘
-                    if (mapNode.getData().equals("OUT_X")) {
-                        //绂佹浣跨敤鐨勫簱浣嶏紝璁剧疆涓�-1
-                        mapNode.setValue(-1);
-                    }
-                }
                 list.set(j, mapNode);
             }
             lists.add(list);
+        }
+
+        //杩囨护鏁版嵁
+        LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
+        //鑾峰彇褰撳墠妤煎眰搴撲綅鏁版嵁
+        List<LocMast> locMasts = locMastService.selectLocByLev(lev);
+        for (LocMast locMast : locMasts) {
+            Integer row = locMast.getRow1();
+            Integer bay = locMast.getBay1();
+
+            boolean whiteFlag = false;//榛樿涓嶅瓨鍦ㄧ櫧鍚嶅崟
+            if (whitePoints != null) {
+                for (int[] whitePoint : whitePoints) {
+                    if (whitePoint[0] == row && whitePoint[1] == bay) {
+                        //瀛樺湪鐧藉悕鍗�
+                        whiteFlag = true;
+                        break;
+                    }
+                }
+            }
+            if (whiteFlag) {
+                continue;//瀛樺湪鐧藉悕鍗曪紝涓嶆墽琛屼笅鍒楄繃婊ゆ柟妗�
+            }
+
+
+            List<MapNode> list = lists.get(row);
+            MapNode mapNode = list.get(bay);
+
+            if (mapType == NavigationMapType.NONE.id) {
+                //涓嶈繃婊や换浣曟暟鎹�
+            } else if (mapType == NavigationMapType.DFX.id) {
+                //杞﹁締鏈夎揣
+                //璇诲彇瀵瑰簲搴撲綅鏁版嵁锛屽皢DFX搴撲綅鐘舵�佺殑鑺傜偣缃负-1(闅滅鐗�)
+                if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") || locMast.getLocSts().equals("X")) {
+                    mapNode.setValue(-1);//绂佺敤鑺傜偣
+                }
+            } else if (mapType == NavigationMapType.NORMAL.id) {
+                //杩囨护搴撲綅鐘舵�乆
+                if (locMast.getLocSts().equals("X")) {
+                    mapNode.setValue(-1);//绂佺敤鑺傜偣
+                }
+            }
+
+            //鏇存柊list
+            list.set(bay, mapNode);
+            lists.set(row, list);
         }
 
         return lists;
@@ -186,7 +227,7 @@
 
         BasMap basMap = JSON.parseObject(o.toString(), BasMap.class);
         ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
-        List<List<MapNode>> lists = filterMap(-1, arrayList);//鑾峰彇鍏ㄩ儴鍦板浘鏁版嵁
+        List<List<MapNode>> lists = filterMap(NavigationMapType.NONE.id, arrayList, lev, null);//鑾峰彇鍏ㄩ儴鍦板浘鏁版嵁
 
         for (NavigateNode node : nodes) {
             if (node.getZ() != lev) {
diff --git a/src/main/java/com/zy/common/utils/NavigateSolution.java b/src/main/java/com/zy/common/utils/NavigateSolution.java
index acb56a2..7c71b78 100644
--- a/src/main/java/com/zy/common/utils/NavigateSolution.java
+++ b/src/main/java/com/zy/common/utils/NavigateSolution.java
@@ -3,6 +3,7 @@
 import com.zy.common.model.NavigateNode;
 
 import java.util.ArrayList;
+import java.util.List;
 import java.util.PriorityQueue;
 
 /**
@@ -21,12 +22,12 @@
         this.map = data;
     }
 
-    public NavigateSolution(Integer mapType,Integer lev) {
+    public NavigateSolution(Integer mapType, Integer lev, List<int[]> whitePoints) {
         //杞藉叆鍦板浘鎸囧畾灞傞珮鍦板浘
         NavigateMapData mapData = new NavigateMapData(lev);
-        int[][] data = mapData.getDataFromRedis(mapType);
+        int[][] data = mapData.getDataFromRedis(mapType, whitePoints);
         if (data == null) {
-            data = mapData.getData(mapType);
+            data = mapData.getData(mapType, whitePoints);
         }
         this.map = data;
     }
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 9ac5f03..35b0f3a 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -3,6 +3,7 @@
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.MapNode;
 import com.zy.common.model.NavigateNode;
+import com.zy.common.model.enums.NavigationMapType;
 import com.zy.core.enums.ShuttleTaskModeType;
 
 import java.util.*;
@@ -17,6 +18,9 @@
         int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
         int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
 
+        ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+        whiteList.add(startArr);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
+
         //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
         int lev = Utils.getLev(startPoint);
 
@@ -26,7 +30,9 @@
         start.setFather(null);
 
         NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
-        NavigateSolution solution = new NavigateSolution(mapType, lev);
+        NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList);
+        //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
+
         NavigateNode res_node = solution.astarSearch(start, end);
         if (res_node == null) {
             System.out.println("鏈壘鍒拌矾寰�");
@@ -163,7 +169,7 @@
     //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
     public static Integer getXToNextDistance(NavigateNode xNode) {
         NavigateMapData mapData = new NavigateMapData();
-        List<List<MapNode>> lists = mapData.getJsonData(1);
+        List<List<MapNode>> lists = mapData.getJsonData(NavigationMapType.NONE.id, null);
         if (lists != null) {
             MapNode mapNode = lists.get(xNode.getX()).get(xNode.getY());
             if (mapNode != null) {
@@ -224,7 +230,7 @@
 
     public static void main(String[] args) {
         //璁$畻璺緞
-        List<NavigateNode> calc = calc("1000901", "1800201", ShuttleTaskModeType.PAK_OUT.id);
+        List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id);
         System.out.println(calc);
         System.out.println("------------------------");
 //        List<NavigateNode> calc = calc("0501401", "0201801", "out");
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index 77dfe69..8b52bed 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -12,6 +12,7 @@
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.NavigateNode;
+import com.zy.common.model.enums.NavigationMapType;
 import com.zy.common.utils.*;
 import com.zy.core.News;
 import com.zy.core.ThreadHandler;
@@ -414,7 +415,7 @@
                     //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞
                     //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护
                     LocMast currentLocMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString());
-                    List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), ShuttleTaskModeType.PAK_IN.id);
+                    List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), NavigationMapType.NORMAL.id);//灏忚溅鍒颁腑鐐癸紝澶勪簬鏃犺揣鐘舵�侊紝浣跨敤姝e父閫氶亾鍦板浘
 
                     if (firstMastResult != null) {
                         allNode.addAll(firstMastResult);//灏嗚妭鐐硅繘琛屼繚瀛�
@@ -450,7 +451,7 @@
                     }
 
                     //璁$畻涓偣鍒扮粓鐐硅矾寰�
-                    List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), ShuttleTaskModeType.PAK_IN.id);
+                    List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), NavigationMapType.DFX.id);//灏忚溅浠庝腑鐐瑰埌缁堢偣锛屽浜庢湁璐х姸鎬侊紝浣跨敤DFX鍦板浘
 
                     if (secMastResult != null) {
                         allNode.addAll(secMastResult);//灏嗚妭鐐硅繘琛屼繚瀛�
@@ -478,15 +479,14 @@
                         commands.add(getPalletCommand((short) 2));
                     }
 
-                    navigateMapData = new NavigateMapData(Utils.getLev(currentLocMast.getLocNo()));
-                    if (firstMastResult != null) {
-                        //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-                        navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+                    if (firstMastResult == null || secMastResult == null) {
+                        throw new CoolException(MessageFormat.format( "鍥涘悜绌挎杞﹀嚭鍏ュ簱璺緞鎼滅储澶辫触 ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort()));
                     }
 
-                    if (secMastResult != null) {
-                        navigateMapData.writeNavigateNodeToRedisMap(secMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-                    }
+                    navigateMapData = new NavigateMapData(Utils.getLev(currentLocMast.getLocNo()));
+                    //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+                    navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+                    navigateMapData.writeNavigateNodeToRedisMap(secMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
                     break;
                 case 3://鎵樼洏椤跺崌
                 case 4://鎵樼洏涓嬮檷
@@ -536,7 +536,7 @@
                     }
 
                     LocMast locMast = locMastService.queryByQrCode(startQr);
-                    List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), ShuttleTaskModeType.PAK_IN.id);
+                    List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), NavigationMapType.NONE.id);//鎵嬪姩鍛戒护-绉诲姩鍛戒护锛屼娇鐢ㄦ棤杩囨护鍦板浘
 
                     if (result != null) {
                         //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
@@ -572,7 +572,7 @@
                     int lev = Utils.getLev(locMast1.getLocNo());//绌挎杞﹀綋鍓嶉珮搴�
                     String liftSiteLocNo = Utils.levToOutInStaLocNo(lev);//褰撳墠妤煎眰绔欑偣搴撲綅鍙�
                     LocMast liftSitelocMast = locMastService.selectById(liftSiteLocNo);
-                    List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, ShuttleTaskModeType.PAK_IN.id);
+                    List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id);//绉诲姩鍒版彁鍗囨満锛屼娇鐢ㄦ棤杩囨护鍦板浘
 
                     Short endStartCode = null;
                     if (result1 != null) {
@@ -675,7 +675,7 @@
                     shuttleProtocol.setPakMk(true);
                     return true;
                 }else {
-                    List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), distLocMast.getLocNo(), ShuttleTaskModeType.PAK_IN.id);
+                    List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), distLocMast.getLocNo(), NavigationMapType.DFX.id);//閿欒鎭㈠锛屼娇鐢―FX鍦板浘
                     if (result != null) {
                         //鑾峰彇鍒嗘璺緞
                         ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result);
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 0b12ca1..7191979 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -70,4 +70,7 @@
         select top 1 * from asr_loc_mast where qr_code_value = #{qrCodeValue}
     </select>
 
+    <select id="selectLocByLev" resultMap="BaseResultMap">
+        SELECT * FROM asr_loc_mast WHERE lev1 = #{lev}
+    </select>
 </mapper>

--
Gitblit v1.9.1