From 0836f55508cc79dfa3554a67058955ebf4830f62 Mon Sep 17 00:00:00 2001
From: DELL <DELL@qq.com>
Date: 星期四, 27 十一月 2025 15:11:20 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java |  169 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 157 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
index b42a65c..5f959b0 100644
--- a/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
@@ -1,15 +1,25 @@
 package com.zy.core.network.fake;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.core.common.SpringUtils;
 import com.zy.asrs.entity.DeviceConfig;
+import com.zy.asrs.service.BasMapService;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.utils.NavigateUtils;
+import com.zy.core.enums.RgvStatusType;
+import com.zy.core.enums.RgvTaskModeType;
 import com.zy.core.model.CommandResponse;
 import com.zy.core.model.command.RgvCommand;
 import com.zy.core.network.api.ZyRgvConnectApi;
 import com.zy.core.network.entity.ZyRgvStatusEntity;
+
+import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 public class ZyRgvFakeConnect implements ZyRgvConnectApi {
+    
     private ZyRgvStatusEntity status;
     private final DeviceConfig deviceConfig;
     private final ExecutorService executor = Executors.newSingleThreadExecutor();
@@ -38,18 +48,153 @@
     @Override
     public CommandResponse sendCommand(RgvCommand command) {
         CommandResponse response = new CommandResponse(true);
-        executor.submit(() -> {
-            if (command.getTaskMode() != null && command.getTaskMode() == 1) {
-                status.setTaskNo((int) command.getTaskNo());
-                status.setStatus(1);
-                try { Thread.sleep(300); } catch (InterruptedException ignored) {}
-                status.setRgvPos((int) command.getTargetPos());
-                status.setStatus(0);
-            } else if (command.getTaskMode() != null && command.getTaskMode() == 0) {
-                status.setTaskNo(0);
-                status.setStatus(0);
-            }
-        });
+        if (command.getTaskMode() == RgvTaskModeType.FETCH_PUT.id) {
+            //鍙栨斁璐�
+            executor.submit(() -> commandTake(command));
+        } else if (command.getTaskMode() == RgvTaskModeType.X_MOVE.id) {
+            //绉诲姩
+            executor.submit(() -> commandMove(command));
+        }else if (command.getTaskMode() == RgvTaskModeType.NONE.id) {
+            //澶嶄綅
+            executor.submit(() -> commandTaskComplete(command));
+        }
         return response;
     }
+
+    private void commandTake(RgvCommand command) {
+        int taskNo = command.getTaskNo();
+        int taskMode = command.getTaskMode();
+        int sourcePos = command.getSourcePos();
+        int targetPos = command.getTargetPos();
+
+        NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
+        if (navigateUtils == null) {
+            return;
+        }
+
+        BasMapService basMapService = SpringUtils.getBean(BasMapService.class);
+        if (basMapService == null) {
+            return;
+        }
+
+        List<Integer> levList = basMapService.getLevList();
+
+        List<NavigateNode> navigateNodes = null;
+        try {
+            for (Integer lev : levList) {
+                navigateNodes = navigateUtils.calcByTrackSiteNo(lev, status.getRgvPos(), sourcePos);
+                if (navigateNodes != null) {
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        if (navigateNodes == null) {
+            return;
+        }
+
+        List<NavigateNode> targetNavigateNodes = null;
+        try {
+            for (Integer lev : levList) {
+                targetNavigateNodes = navigateUtils.calcByTrackSiteNo(lev, sourcePos, targetPos);
+                if (targetNavigateNodes != null) {
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        if (targetNavigateNodes == null) {
+            return;
+        }
+
+        status.setTaskNo(taskNo);
+        status.setStatus(RgvStatusType.FETCHING.id);
+        for (int i = 0; i < navigateNodes.size(); i++) {
+            NavigateNode navigateNode = navigateNodes.get(i);
+            JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue());
+            Integer currentTrackSiteNo = valueObject.getInteger("trackSiteNo");
+
+            status.setRgvPos(currentTrackSiteNo);
+            sleep(1000);
+        }
+
+        status.setStatus(RgvStatusType.PUTTING.id);
+        status.setLoaded(1);
+        sleep(1000);
+
+        for (int i = 0; i < targetNavigateNodes.size(); i++) {
+            NavigateNode navigateNode = targetNavigateNodes.get(i);
+            JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue());
+            Integer currentTrackSiteNo = valueObject.getInteger("trackSiteNo");
+
+            status.setRgvPos(currentTrackSiteNo);
+            sleep(1000);
+        }
+
+        sleep(1000);
+        status.setStatus(RgvStatusType.WAITING.id);
+    }
+
+    private void commandMove(RgvCommand command) {
+        int taskNo = command.getTaskNo();
+        int taskMode = command.getTaskMode();
+        int targetPos = command.getTargetPos();
+
+        NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
+        if (navigateUtils == null) {
+            return;
+        }
+
+        BasMapService basMapService = SpringUtils.getBean(BasMapService.class);
+        if (basMapService == null) {
+            return;
+        }
+
+        List<Integer> levList = basMapService.getLevList();
+
+        List<NavigateNode> navigateNodes = null;
+        try {
+            for (Integer lev : levList) {
+                navigateNodes = navigateUtils.calcByTrackSiteNo(lev, status.getRgvPos(), targetPos);
+                if (navigateNodes != null) {
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        if (navigateNodes == null) {
+            return;
+        }
+
+        status.setTaskNo(taskNo);
+        status.setStatus(RgvStatusType.WORKING.id);
+        for (int i = 0; i < navigateNodes.size(); i++) {
+            NavigateNode navigateNode = navigateNodes.get(i);
+            JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue());
+            Integer currentTrackSiteNo = valueObject.getInteger("trackSiteNo");
+
+            status.setRgvPos(currentTrackSiteNo);
+            sleep(1000);
+        }
+        status.setStatus(RgvStatusType.WAITING.id);
+    }
+
+    private void commandTaskComplete(RgvCommand command) {
+        status.setTaskNo(0);
+        status.setStatus(RgvStatusType.IDLE.id);
+    }
+
+    private void sleep(long ms) {
+        try {
+            Thread.sleep(ms);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.1