From c4b6b51afdd3374735ed5f358457987eaa6e476f Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 05 九月 2025 16:55:20 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java |   66 ++++++++++++++++++++++++---------
 1 files changed, 48 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index db9ab33..2f826fc 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -3,9 +3,7 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.SpringUtils;
 import com.core.exception.CoolException;
-import com.zy.asrs.entity.BasShuttle;
 import com.zy.asrs.entity.DeviceConfig;
-import com.zy.asrs.service.BasShuttleService;
 import com.zy.asrs.service.DeviceConfigService;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.MapNode;
@@ -15,6 +13,7 @@
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.dispatcher.ShuttleDispatchUtils;
 import com.zy.core.enums.MapNodeType;
+import com.zy.core.enums.RedisKeyType;
 import com.zy.core.enums.ShuttleRunDirection;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.command.ShuttleAssignCommand;
@@ -36,11 +35,7 @@
 public class ShuttleOperaUtils {
 
     @Autowired
-    private BasShuttleService basShuttleService;
-    @Autowired
     private NavigateUtils navigateUtils;
-    @Autowired
-    private NavigateMapUtils navigateMapUtils;
     @Autowired
     private NavigateMapData navigateMapData;
     @Autowired
@@ -49,6 +44,8 @@
     private ShuttleDispatchUtils shuttleDispatchUtils;
     @Autowired
     private DeviceConfigService deviceConfigService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     public synchronized List<ShuttleCommand> getStartToTargetCommands(String startLocNo, String endLocNo, List<NavigationMapType> mapTypes, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
         return getStartToTargetCommands(startLocNo, endLocNo, mapTypes, null, assignCommand, shuttleThread, "move");
@@ -65,13 +62,24 @@
         }
         Integer shuttleNo = shuttleProtocol.getShuttleNo();
         //鑾峰彇灏忚溅绉诲姩閫熷害
-        Integer runSpeed = Optional.ofNullable(basShuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", shuttleNo)).getRunSpeed()).orElse(1000);
+        Integer runSpeed = 1000;
+        Object speedObj = redisUtil.get(RedisKeyType.SHUTTLE_SPEED_MAP.key);
+        if (speedObj != null) {
+            HashMap<Integer, Integer> shuttleSpeedMap = (HashMap<Integer, Integer>) speedObj;
+            Integer speed = shuttleSpeedMap.get(shuttleNo);
+            if (speed != null) {
+                runSpeed = speed;
+            }
+        }
+
+        long calcStartTime = System.currentTimeMillis();
         List<NavigateNode> nodeList = navigateUtils.calc(startLocNo, endLocNo, mapTypes, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startLocNo)), whites);
         if (nodeList == null) {
             News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
             shuttleThread.offerSystemMsg("{} dash {} can't find navigate path!", startLocNo, endLocNo);
             return null;
         }
+        News.info("[RCS Debug] Calc path time:{}", (System.currentTimeMillis() - calcStartTime));
 
         List<NavigateNode> allNode = new ArrayList<>();
         List<NavigateNode> lockNode = new ArrayList<>();
@@ -99,48 +107,66 @@
         //鑾峰彇鍒嗘璺緞
         List<List<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
         long endTime = System.currentTimeMillis();
-        News.info("getSection path time:{}", (endTime - startTime));
+        News.info("[RCS Debug] getSection path time:{}", (endTime - startTime));
+
+        long startGetSectionCommandTime = System.currentTimeMillis();
         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
         for (int i = 0; i < data.size(); i++) {
+            long startGetStartAndEndPathTime = System.currentTimeMillis();
             List<NavigateNode> nodes = data.get(i);
-
             //寮�濮嬭矾寰�
             NavigateNode startPath = nodes.get(0);
-
             //鐩爣璺緞
             NavigateNode endPath = nodes.get(nodes.size() - 1);
+            News.info("[RCS Debug] getStartAndEndPath idx:{} time:{}", i, (System.currentTimeMillis() - startGetStartAndEndPathTime));
+
+            long startAllDistanceTime = System.currentTimeMillis();
             Integer allDistance = navigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+            News.info("[RCS Debug] getAllDistance idx:{} time:{}", i, (System.currentTimeMillis() - startAllDistanceTime));
+
+            long startGetPosition = System.currentTimeMillis();
             //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
             String startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());
             //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
             String distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());
+            News.info("[RCS Debug] xyToPosition idx:{} time:{}", i, (System.currentTimeMillis() - startGetPosition));
+
+            long startGetMoveCommandTime = System.currentTimeMillis();
             //鑾峰彇绉诲姩鍛戒护
             ShuttleCommand command = shuttleThread.getMoveCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes);
+            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);
                 }else if (moveType.equals("outLift")) {
                     command = shuttleThread.getMoveLiftCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes, false);
                 }
+                News.info("[RCS Debug] getInOutLiftTime idx:{} time:{}", i, (System.currentTimeMillis() - startGetInOutLiftTime));
             }
 
             command.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑
             commands.add(command);
         }
+        News.info("[RCS Debug] getSectionCommand path time:{}", (System.currentTimeMillis() - startGetSectionCommandTime));
 
         assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
         assignCommand.setMapTypes(mapTypes);
 
         //灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护
         boolean shuttleMoveCommandsContinuously = false;
-        Config shuttleMoveCommandsContinuouslyConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleMoveCommandsContinuously"));
-        if (shuttleMoveCommandsContinuouslyConfig != null) {
-            if (shuttleMoveCommandsContinuouslyConfig.getValue().equals("Y")) {
+        Object object = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
+        if (object != null) {
+            HashMap<String, String> systemConfigMap = (HashMap<String, String>) object;
+            String shuttleMoveCommandsContinuouslyConfig = systemConfigMap.get("shuttleMoveCommandsContinuously");
+            if (shuttleMoveCommandsContinuouslyConfig != null && shuttleMoveCommandsContinuouslyConfig.equals("Y")) {
                 shuttleMoveCommandsContinuously = true;
             }
         }
         assignCommand.setShuttleMoveCommandsContinuously(shuttleMoveCommandsContinuously);
+
+        News.info("{}浠诲姟锛寋}灏忚溅锛寋} - {} 璺緞鍛戒护鍖呰绠楁垚鍔燂紝鑰楁椂:{}ms", assignCommand.getTaskNo(), shuttleProtocol.getShuttleNo(), startLocNo, endLocNo, System.currentTimeMillis() - startTime);
         return commands;
     }
 
@@ -168,8 +194,11 @@
         return commands;
     }
 
-    //妫�娴嬮殰纰嶇墿杞�
-    public synchronized boolean checkObstacle(String locNo, List<Integer> whiteShuttles, List<NavigateNode> whiteNodes) {
+    /**
+     * 妫�娴嬮殰纰嶇墿杞�
+     * @return 0:鏃犻殰纰� 1:鏈夐殰纰嶈皟搴︽垚鍔� 2:鏈夐殰纰嶈皟搴﹀け璐�
+     */
+    public synchronized int checkObstacle(String locNo, List<Integer> whiteShuttles, List<NavigateNode> whiteNodes) {
         int innerCircle = 0;
         int outerCircle = 3;
         Config avoidInnerCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidInnerCircle"));
@@ -202,7 +231,7 @@
         List<NavigateNode> innerNodes = getInnerNodes(locNo, innerCircle, whiteShuttlePointList);
         List<Integer> nodesCar = findNodesCar(innerNodes);
         if (nodesCar.isEmpty()) {
-            return false;//鍐呭湀涓棤杞�
+            return 0;//鍐呭湀涓棤杞�
         }
 
         //鑾峰彇澶栧湀鑺傜偣
@@ -239,10 +268,11 @@
             if (targetLocNo == null) {
                 continue;
             }
-            shuttleDispatchUtils.dispatchShuttle(null, targetLocNo, shuttleNo);
+            boolean dispatched = shuttleDispatchUtils.dispatchShuttle(null, targetLocNo, shuttleNo);
+            return dispatched ? 1 : 2;
         }
 
-        return true;//鍐呭湀涓湁杞�
+        return 2;//鍐呭湀涓湁杞�
     }
 
     private HashMap<String, Integer> findCarMap() {

--
Gitblit v1.9.1