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

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/MapCommandService.java |  124 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 124 insertions(+), 0 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/MapCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/MapCommandService.java
new file mode 100644
index 0000000..7d65d0a
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/MapCommandService.java
@@ -0,0 +1,124 @@
+package com.zy.asrs.wcs.core.kernel.command;
+
+import com.zy.asrs.wcs.core.entity.Motion;
+import com.zy.asrs.wcs.core.model.MapNode;
+import com.zy.asrs.wcs.core.model.NavigateNode;
+import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
+import com.zy.asrs.wcs.core.model.enums.NavigationMapType;
+import com.zy.asrs.wcs.core.utils.*;
+import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
+import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class MapCommandService {
+
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private NavigateMapUtils navigateMapUtils;
+    @Autowired
+    private NavigateMapData navigateMapData;
+
+    public Boolean accept(Motion motion) {
+        switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))) {
+            case MAP_LOCK_PATH:
+                return lockPath(motion, true);
+            case MAP_UNLOCK_PATH:
+                return lockPath(motion, false);
+            default:
+                break;
+        }
+
+        return Boolean.TRUE;
+    }
+
+    public Boolean finish(Motion motion) {
+        switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))) {
+            case MAP_LOCK_PATH:
+                return checkLockPath(motion, true);
+            case MAP_UNLOCK_PATH:
+                return checkLockPath(motion, false);
+            default:
+                break;
+        }
+
+        return Boolean.TRUE;
+    }
+
+    private boolean lockPath(Motion motion, boolean lock) {
+        Integer deviceNo = Integer.parseInt(motion.getDevice());
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, deviceNo);
+        if (shuttleThread == null) {
+            return false;
+        }
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        if (null == shuttleProtocol) {
+            return false;
+        }
+
+        NavigateNode navigateNode = NavigatePositionConvert.locNoToNode(motion.getTarget());
+        List<NavigateNode> nodes = new ArrayList<>();
+        nodes.add(navigateNode);
+
+        //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹�/瑙i攣
+        boolean lockResult = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(motion.getTarget()), shuttleProtocol.getShuttleNo(), nodes, lock);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹�/瑙i攣
+        if (!lockResult) {
+            return false;//閿佸畾/瑙i攣澶辫触
+        }
+        return true;
+    }
+
+    private boolean checkLockPath(Motion motion, boolean lock) {
+        NavigateNode navigateNode = NavigatePositionConvert.locNoToNode(motion.getTarget());
+        List<NavigateNode> nodes = new ArrayList<>();
+        nodes.add(navigateNode);
+
+        int lev = Utils.getLev(motion.getTarget());
+
+        Object o = redisUtil.get(DeviceRedisConstant.MAP + lev);
+        if (o == null) {
+            return false;
+        }
+
+        Integer deviceNo = Integer.parseInt(motion.getDevice());
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, deviceNo);
+        if (shuttleThread == null) {
+            return false;
+        }
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        if (null == shuttleProtocol) {
+            return false;
+        }
+
+        //鑾峰彇灏忚溅鑺傜偣
+        List<int[]> shuttlePoints = Utils.getShuttlePoints(shuttleProtocol.getShuttleNo(), lev);
+        List<List<MapNode>> map = navigateMapData.getJsonData(NavigationMapType.DFX.id, null, shuttlePoints);
+
+        for (NavigateNode node : nodes) {
+            List<MapNode> listX = map.get(node.getX());
+            MapNode mapNode = listX.get(node.getY());
+            if (lock) {//妫�娴嬫槸鍚﹂攣瀹�
+                if (mapNode.getValue() != -999) {
+                    return false;//璺緞鏈攣瀹�
+                }
+            }else {//妫�娴嬫槸鍚︽湭閿佸畾
+                if(mapNode.getValue() == -999) {
+                    return false;//璺緞宸查攣瀹�
+                }
+            }
+        }
+        return true;
+    }
+
+}

--
Gitblit v1.9.1