From c9c80ecde06d151f4f2f3ccf46d3f4c0e65cd8a1 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期二, 23 九月 2025 13:13:46 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/impl/NyShuttleThread.java |   35 ++++++-----
 src/main/java/com/zy/asrs/utils/MapExcelUtils.java         |  107 +++++++++++++++++++++++------------
 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java   |   22 +++++--
 src/main/java/com/zy/core/thread/ShuttleThread.java        |    4 
 src/main/webapp/views/admin/debugParam/debugParam.html     |    7 ++
 5 files changed, 114 insertions(+), 61 deletions(-)

diff --git a/src/main/java/com/zy/asrs/utils/MapExcelUtils.java b/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
index e3ffb96..ad41208 100644
--- a/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
+++ b/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.core.common.Cools;
+import com.core.exception.CoolException;
 import com.zy.asrs.domain.enums.MapExcelNodeType;
 import com.zy.common.model.MapNode;
 import com.zy.core.enums.MapNodeType;
@@ -15,10 +16,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Component
 public class MapExcelUtils {
@@ -72,6 +70,8 @@
                 for (int bay = 1; bay <= finalBay; bay++) {
                     MapNode node = new MapNode();
                     node.setId(row + "-" + bay);
+                    node.setRow(row);
+                    node.setBay(bay);
 
                     HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
                     String nodeType = nodeData.get("bgColor").toString();
@@ -102,6 +102,7 @@
                 mapList.add(rows);
             }
 
+            MapNode baseMapNode = null;
             //鐢熸垚灏忚溅鍦板浘鍧愭爣闂磋窛鏁版嵁
             for (int row = 1; row <= finalRow; row++) {
                 for (int bay = 1; bay <= finalBay; bay++) {
@@ -114,6 +115,29 @@
                     Integer left = bayData.getInteger("left");
                     Integer right = bayData.getInteger("right");
 
+                    HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
+                    String nodeValue = nodeData.get("value").toString();
+                    if (Utils.isJSON(nodeValue)) {
+                        JSONObject jsonData = JSON.parseObject(nodeValue);
+                        if (jsonData.containsKey("top")) {
+                            top = jsonData.getInteger("top");
+                        }
+                        if (jsonData.containsKey("bottom")) {
+                            bottom = jsonData.getInteger("bottom");
+                        }
+                        if (jsonData.containsKey("left")) {
+                            left = jsonData.getInteger("left");
+                        }
+                        if (jsonData.containsKey("right")) {
+                            right = jsonData.getInteger("right");
+                        }
+
+                        if (jsonData.containsKey("xBase")) {
+                            //鍩虹偣
+                            baseMapNode = mapNode;
+                        }
+                    }
+
                     mapNode.setTop(top);
                     mapNode.setBottom(bottom);
                     mapNode.setLeft(left);
@@ -121,51 +145,58 @@
                 }
             }
 
-            //鐢熸垚鐗涚溂Y鍧愭爣鍩哄噯鏁版嵁
+            if (baseMapNode == null) {
+                throw new CoolException("鏈缃熀鍑嗙偣");
+            }
+
+            List<Integer> rowList = new ArrayList<>();
+            List<Integer> bayList = new ArrayList<>();
+            for (int row = 1; row <= finalRow; row++) {
+                rowList.add(row);
+            }
             for (int bay = 1; bay <= finalBay; bay++) {
+                bayList.add(bay);
+            }
+
+            if (baseMapNode.getRow() != 1) {
+                Collections.reverse(rowList);
+            }
+
+            if (baseMapNode.getBay() != 1) {
+                Collections.reverse(bayList);
+            }
+
+            //鐢熸垚鐗涚溂Y鍧愭爣鍩哄噯鏁版嵁
+            for (int i = 0; i < bayList.size(); i++) {
+                Integer bay = bayList.get(i);
                 int yBase = 10000;
-                for (int row = 1; row <= finalRow; row++) {
+                for (int j = 0; j < rowList.size(); j++) {
+                    Integer row = rowList.get(j);
                     MapNode mapNode = mapList.get(row - 1).get(bay - 1);
-                    HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
-
-                    JSONObject rowData = rowMap.get(row);
-                    Integer bottom = rowData.getInteger("bottom");
-                    String nodeValue = nodeData.get("value").toString();
-                    if (Utils.isJSON(nodeValue)) {
-                        JSONObject jsonData = JSON.parseObject(nodeValue);
-                        if (jsonData.containsKey("bottom")) {
-                            bottom = jsonData.getInteger("bottom");
-                        }
-                    }
-
-                    if (row != 1) {
-                        yBase += bottom;
-                    }
                     mapNode.setYBase(yBase);
+
+                    if (baseMapNode.getRow() == 1) {
+                        yBase += mapNode.getBottom();
+                    }else {
+                        yBase += mapNode.getTop();
+                    }
                 }
             }
 
             //鐢熸垚鐗涚溂X鍧愭爣鍩哄噯鏁版嵁
-            for (int row = 1; row <= finalRow; row++) {
+            for (int i = 0; i < rowList.size(); i++) {
+                Integer row = rowList.get(i);
                 int xBase = 10000;
-                for (int bay = 1; bay <= finalBay; bay++) {
+                for (int j = 0; j < bayList.size(); j++) {
+                    Integer bay = bayList.get(j);
                     MapNode mapNode = mapList.get(row - 1).get(bay - 1);
-                    HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
-
-                    JSONObject bayData = bayMap.get(bay);
-                    Integer right = bayData.getInteger("right");
-                    String nodeValue = nodeData.get("value").toString();
-                    if (Utils.isJSON(nodeValue)) {
-                        JSONObject jsonData = JSON.parseObject(nodeValue);
-                        if (jsonData.containsKey("right")) {
-                            right = jsonData.getInteger("right");
-                        }
-                    }
-
-                    if (bay != 1) {
-                        xBase += right;
-                    }
                     mapNode.setXBase(xBase);
+
+                    if (baseMapNode.getBay() == 1) {
+                        xBase += mapNode.getRight();
+                    }else {
+                        xBase += mapNode.getLeft();
+                    }
                 }
             }
 
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 7cdbed3..c4fe002 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -72,6 +72,17 @@
             }
         }
 
+        Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
+
+        //灏忚溅(x,y)鍛戒护杩愯鏂瑰悜棰犲��
+        boolean shuttleDirectionReverse = false;
+        if (systemConfigMapObj != null) {
+            HashMap<String, String> systemConfigMap = (HashMap<String, String>) systemConfigMapObj;
+            if (systemConfigMap.get("shuttleDirectionReverse").equals("Y")) {
+                shuttleDirectionReverse = true;
+            }
+        }
+
         long calcStartTime = System.currentTimeMillis();
         List<NavigateNode> nodeList = navigateUtils.calc(startLocNo, endLocNo, mapTypes, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startLocNo)), whites);
         if (nodeList == null) {
@@ -133,15 +144,15 @@
 
             long startGetMoveCommandTime = System.currentTimeMillis();
             //鑾峰彇绉诲姩鍛戒护
-            ShuttleCommand command = shuttleThread.getMoveCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes);
+            ShuttleCommand command = shuttleThread.getMoveCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes, shuttleDirectionReverse);
             News.info("[RCS Debug] getMoveCommand idx:{} time:{}", i, (System.currentTimeMillis() - startGetMoveCommandTime));
 
             if (i + 1 == data.size()) {
                 long startGetInOutLiftTime = System.currentTimeMillis();
                 if (moveType.equals("inLift")) {
-                    command = shuttleThread.getMoveLiftCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes, true);
+                    command = shuttleThread.getMoveLiftCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes, true, shuttleDirectionReverse);
                 }else if (moveType.equals("outLift")) {
-                    command = shuttleThread.getMoveLiftCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes, false);
+                    command = shuttleThread.getMoveLiftCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes, false, shuttleDirectionReverse);
                 }
                 News.info("[RCS Debug] getInOutLiftTime idx:{} time:{}", i, (System.currentTimeMillis() - startGetInOutLiftTime));
             }
@@ -156,9 +167,8 @@
 
         //灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护
         boolean shuttleMoveCommandsContinuously = false;
-        Object object = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
-        if (object != null) {
-            HashMap<String, String> systemConfigMap = (HashMap<String, String>) object;
+        if (systemConfigMapObj != null) {
+            HashMap<String, String> systemConfigMap = (HashMap<String, String>) systemConfigMapObj;
             String shuttleMoveCommandsContinuouslyConfig = systemConfigMap.get("shuttleMoveCommandsContinuously");
             if (shuttleMoveCommandsContinuouslyConfig != null && shuttleMoveCommandsContinuouslyConfig.equals("Y")) {
                 shuttleMoveCommandsContinuously = true;
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index 02d6120..861cbb1 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -81,9 +81,9 @@
 
     //***************鑾峰彇鍛戒护*****************
 
-    ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes);//鑾峰彇绉诲姩鍛戒护
+    ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes, Boolean shuttleDirectionReverse);//鑾峰彇绉诲姩鍛戒护
 
-    ShuttleCommand getMoveLiftCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes, Boolean moveIn);//鑾峰彇绉诲姩鍛戒护
+    ShuttleCommand getMoveLiftCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes, Boolean moveIn, Boolean shuttleDirectionReverse);//鑾峰彇绉诲姩鍛戒护
 
     ShuttleCommand getLiftCommand(Integer taskNo, Boolean lift);//椤跺崌鍛戒护 true=>椤跺崌 false=>涓嬮檷
 
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 5e2e26c..44f6187 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -989,7 +989,7 @@
     }
 
     @Override
-    public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) {
+    public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes, Boolean shuttleDirectionReverse) {
         NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
         NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo);
         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest();
@@ -1009,8 +1009,14 @@
             HashMap<String, Object> data = new HashMap<>();
             String codeNum = NavigatePositionConvert.xyToPosition(node.getX(), node.getY(), node.getZ());
             Map<String, Object> nyNode = navigateNodeToNyPointNode(NavigatePositionConvert.codeToNode(codeNum));
-            int xp = Integer.parseInt(String.valueOf(nyNode.get("y")));
-            int yp = Integer.parseInt(String.valueOf(nyNode.get("x")));
+
+            int xp = Integer.parseInt(String.valueOf(nyNode.get("x")));
+            int yp = Integer.parseInt(String.valueOf(nyNode.get("y")));
+            if (shuttleDirectionReverse) {
+                xp = Integer.parseInt(String.valueOf(nyNode.get("y")));
+                yp = Integer.parseInt(String.valueOf(nyNode.get("x")));
+            }
+
             int z = Integer.parseInt(String.valueOf(nyNode.get("z")));
 
             List<MapNode> mapNodes = mapData.get(node.getX());
@@ -1040,7 +1046,7 @@
     }
 
     @Override
-    public ShuttleCommand getMoveLiftCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes, Boolean moveIn) {
+    public ShuttleCommand getMoveLiftCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes, Boolean moveIn, Boolean shuttleDirectionReverse) {
         NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
         NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo);
         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest();
@@ -1051,7 +1057,7 @@
         HashMap<String, Object> body = new HashMap<>();
         if (moveIn) {
             body.put("requestType", "intoLift");//杩涙彁鍗囨満
-        }else {
+        } else {
             body.put("requestType", "outLift");//鍑烘彁鍗囨満
         }
         body.put("taskId", taskId);//TaskID闇�瑕侀殢鏈�
@@ -1064,8 +1070,14 @@
             HashMap<String, Object> data = new HashMap<>();
             String codeNum = NavigatePositionConvert.xyToPosition(node.getX(), node.getY(), node.getZ());
             Map<String, Object> nyNode = navigateNodeToNyPointNode(NavigatePositionConvert.codeToNode(codeNum));
-            int xp = Integer.parseInt(String.valueOf(nyNode.get("y")));
-            int yp = Integer.parseInt(String.valueOf(nyNode.get("x")));
+
+            int xp = Integer.parseInt(String.valueOf(nyNode.get("x")));
+            int yp = Integer.parseInt(String.valueOf(nyNode.get("y")));
+            if (shuttleDirectionReverse) {
+                xp = Integer.parseInt(String.valueOf(nyNode.get("y")));
+                yp = Integer.parseInt(String.valueOf(nyNode.get("x")));
+            }
+
             int z = Integer.parseInt(String.valueOf(nyNode.get("z")));
 
             List<MapNode> mapNodes = mapData.get(node.getX());
@@ -1330,13 +1342,6 @@
 
     //WCS绯荤粺鍧愭爣杞墰鐪煎潗鏍�
     private static int[] WCSXyzToNyXyz(int x, int y, int z) {
-//        //WCS绯荤粺Y杞� => 鐗涚溂X杞磋浆鎹㈠叕寮�
-//        int x1 = Math.abs(y - 61) + 11;
-//        //WCS绯荤粺X杞� => 鐗涚溂Y杞磋浆鎹㈠叕寮�
-//        int y1 = x + 10;
-
-//        int x1 = x + 10;
-//        int y1 = y + 10;
         LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
         LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                 .eq("row1", x)
@@ -1349,7 +1354,7 @@
 
         String qrCodeValue = locMast.getQrCodeValue();
         JSONObject data = JSON.parseObject(qrCodeValue);
-        return new int[]{data.getInteger("y"), data.getInteger("x"), z};
+        return new int[]{data.getInteger("x"), data.getInteger("y"), z};
     }
 
     @Override
diff --git a/src/main/webapp/views/admin/debugParam/debugParam.html b/src/main/webapp/views/admin/debugParam/debugParam.html
index 2b7dee2..5a44cb7 100644
--- a/src/main/webapp/views/admin/debugParam/debugParam.html
+++ b/src/main/webapp/views/admin/debugParam/debugParam.html
@@ -54,6 +54,12 @@
 							<el-input v-model="codeMap.direction_map" style="width: 60%;"></el-input>
 						</div>
 
+                        <div class="show-box">
+                            <div>灏忚溅(x,y)鍛戒护杩愯鏂瑰悜棰犲��</div>
+                            <el-radio border v-model="codeMap.shuttleDirectionReverse" label="Y">寮�</el-radio>
+                            <el-radio border v-model="codeMap.shuttleDirectionReverse" label="N">鍏�</el-radio>
+                        </div>
+
 						<div class="show-box">
 							<div>灏忚溅鍑烘彁鍗囨満杩戠偣璺濈</div>
 							<el-input v-model="codeMap.shuttleOutLiftLocationDistance" style="width: 60%;"></el-input>
@@ -257,6 +263,7 @@
 							data.push('avoidInnerCircle');
 							data.push('avoidOuterCircle');
 							data.push('direction_map');
+							data.push('shuttleDirectionReverse');
 							data.push('shuttleOutLiftLocationDistance');
 							data.push('shuttleMoveCommandsContinuously');
 							data.push('trafficControlRestartCalcPath');

--
Gitblit v1.9.1