From 7042950a224eea80226c316a80774983e2074ddc Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 26 九月 2024 15:34:19 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java                 |   36 ++++++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java        |    6 +-
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java                    |    8 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java                |    9 +++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java            |    1 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java            |    4 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java |   59 +++++++++++++++++++
 7 files changed, 119 insertions(+), 4 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
index bfa0d2c..7fea4fa 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -1153,6 +1153,15 @@
                     MotionCtgType.SHUTTLE_MOVE
             ));
 
+            // 閿佸畾鐩爣妤煎眰绌挎杞﹀緟鏈轰綅璺緞
+            motionList.addAll(kernelService.mapLockPath(
+                    null,
+                    MotionDto.build((dto -> {
+                        dto.setShuttleNo(shuttleDevice.getId().intValue());
+                        dto.setLocNo(standbyLocNoFrom);
+                    }))
+            ));
+
             // 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌绌挎杞﹀眰
             motionList.addAll(kernelService.liftMove(
                     null
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
index f5e1c54..3b3b015 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
@@ -440,4 +440,40 @@
         return motionList;
     }
 
+    // Map -----------------------------------------------------------------------------
+
+    /**
+     * 鍦板浘璺緞閿佸畾
+     */
+    public List<Motion> mapLockPath(MotionDto origin, MotionDto target) {
+        List<Motion> motionList = new ArrayList<>();
+
+        motionList.add(Motion.build(motion -> {
+            motion.setDeviceCtg(DeviceCtgType.MAP.val());
+            motion.setDevice(String.valueOf(target.getShuttleNo()));
+            motion.setMotionCtg(MotionCtgType.MAP_LOCK_PATH.val());
+
+            motion.setTarget(target.getLocNo());
+        }));
+
+        return motionList;
+    }
+
+    /**
+     * 鍦板浘璺緞瑙i攣
+     */
+    public List<Motion> mapUnlockPath(MotionDto origin, MotionDto target) {
+        List<Motion> motionList = new ArrayList<>();
+
+        motionList.add(Motion.build(motion -> {
+            motion.setDeviceCtg(DeviceCtgType.MAP.val());
+            motion.setDevice(String.valueOf(target.getShuttleNo()));
+            motion.setMotionCtg(MotionCtgType.MAP_UNLOCK_PATH.val());
+
+            motion.setTarget(target.getLocNo());
+        }));
+
+        return motionList;
+    }
+
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
index 71b7906..54f1ab3 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -162,7 +162,7 @@
 //                    return false;
 //                }
 
-                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
+                shuttleCommands = this.shuttleInOutLiftCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
                 break;
             case SHUTTLE_MOVE_TO_LIFT://杩涙彁鍗囨満
@@ -450,5 +450,62 @@
         return commands;
     }
 
+    public synchronized List<ShuttleCommand> shuttleInOutLiftCommand(String startLocNo, String endLocNo, Integer mapType, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
+        NavigateNode startNode = NavigatePositionConvert.locNoToNode(startLocNo);
+        NavigateNode endNode = NavigatePositionConvert.locNoToNode(endLocNo);
+        List<NavigateNode> unlockPath = new ArrayList<>();
+        unlockPath.add(startNode);
+        unlockPath.add(endNode);
+
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+
+        //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹�/瑙i攣
+        boolean lockResult = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(endLocNo), shuttleProtocol.getShuttleNo(), unlockPath, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
+        if (!lockResult) {
+            News.error("{} dash {} can't find unlock path!", startLocNo, endLocNo);
+            return null;//瑙i攣澶辫触
+        }
+
+
+        //鑾峰彇灏忚溅绉诲姩閫熷害
+        Integer runSpeed = Optional.ofNullable(basShuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, assignCommand.getDeviceId())).getRunSpeed()).orElse(1000);
+        Long hostId = shuttleThread.getDevice().getHostId();
+        List<NavigateNode> nodeList = NavigateUtils.calc(startLocNo, endLocNo, mapType, Utils.getShuttlePoints(Integer.parseInt(shuttleThread.getDevice().getDeviceNo()), Utils.getLev(startLocNo)));
+        if (nodeList == null) {
+            News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
+            return null;
+        }
+
+        List<NavigateNode> allNode = new ArrayList<>();
+        for (NavigateNode node : nodeList) {
+            allNode.add(node.clone());
+        }
+
+        List<ShuttleCommand> commands = new ArrayList<>();
+        //鑾峰彇鍒嗘璺緞
+        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodeList);
+        //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
+        for (ArrayList<NavigateNode> nodes : data) {
+            //寮�濮嬭矾寰�
+            NavigateNode startPath = nodes.get(0);
+
+            //鐩爣璺緞
+            NavigateNode endPath = nodes.get(nodes.size() - 1);
+            Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+            String startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ(), hostId);
+            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+            String distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ(), hostId);
+            //鑾峰彇绉诲姩鍛戒护
+            ShuttleCommand command = shuttleThread.getMoveCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes);
+            command.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑
+            commands.add(command);
+        }
+
+        assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
+
+        return commands;
+    }
+
 
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java
index 05252e6..36b772c 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java
@@ -13,6 +13,7 @@
     SHUTTLE,
     AGV,
     LED,
+    MAP,
     ;
 
     DeviceCtgType() {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
index 19d2949..9129fa2 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
@@ -60,6 +60,10 @@
     // AGV ----------------------------------------------
     AGV_TRANSPORT(AGV),
 
+    // MAP ----------------------------------------------
+    MAP_LOCK_PATH(MAP),//鍦板浘閿佸畾璺緞
+    MAP_UNLOCK_PATH(MAP),//鍦板浘瑙i攣璺緞
+
     ;
 
     public DeviceCtgType deviceCtg;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
index af17b74..d81e150 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
@@ -41,6 +41,8 @@
     private LiftCommandService liftCommandService;
     @Autowired
     private ShuttleCommandService shuttleCommandService;
+    @Autowired
+    private MapCommandService mapCommandService;
 
     @Scheduled(cron = "0/1 * * * * ? ")
     public synchronized void executeTask() {
@@ -327,6 +329,9 @@
             case AGV:
                 executeRes = agvCommandService.accept(motion);
                 break;
+            case MAP:
+                executeRes = mapCommandService.accept(motion);
+                break;
             default:
                 break;
         }
@@ -362,6 +367,9 @@
             case CONVEYOR:
                 executeRes = conveyorCommandService.finish(motion);
                 break;
+            case MAP:
+                executeRes = mapCommandService.finish(motion);
+                break;
             default:
                 break;
         }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java
index 9b2bdad..44adfe3 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java
@@ -38,10 +38,10 @@
 
     //WCS绯荤粺搴撲綅鍙疯浆璺緞绠楁硶鑺傜偣
     public static NavigateNode locNoToNode(String locNo) {
-        int col = Integer.parseInt(locNo.substring(0, 2));
-        int row = Integer.parseInt(locNo.substring(2, 5));
+        int col = Utils.getRow(locNo);
+        int row = Utils.getBay(locNo);
         int[] newPosition = coverPosition(col,row);
-        NavigateNode node = new NavigateNode(col, row);
+        NavigateNode node = new NavigateNode(newPosition[0], newPosition[1]);
         node.setZ(Utils.getLev(locNo));
         return node;
     }

--
Gitblit v1.9.1