From bfbb0cbe87bbacbaf3fdfb5fb3caa935ec91da1f Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期六, 10 一月 2026 16:23:36 +0800
Subject: [PATCH] #1

---
 src/main/java/com/zy/core/network/fake/ZyDualCrnFakeConnect.java |  248 ++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 193 insertions(+), 55 deletions(-)

diff --git a/src/main/java/com/zy/core/network/fake/ZyDualCrnFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyDualCrnFakeConnect.java
index 11fa99e..d529843 100644
--- a/src/main/java/com/zy/core/network/fake/ZyDualCrnFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyDualCrnFakeConnect.java
@@ -3,7 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.zy.asrs.entity.DeviceConfig;
 import com.zy.core.enums.CrnStatusType;
-import com.zy.core.enums.CrnTaskModeType;
+import com.zy.core.enums.DualCrnTaskModeType;
 import com.zy.core.model.CommandResponse;
 import com.zy.core.model.command.DualCrnCommand;
 import com.zy.core.network.api.ZyDualCrnConnectApi;
@@ -16,7 +16,10 @@
 
     private ZyDualCrnStatusEntity crnStatus;
     private DeviceConfig deviceConfig;
-    private final ExecutorService executor = Executors.newSingleThreadExecutor();
+    // 鍏佽骞惰鎵ц澶氫釜鍛戒护浠诲姟锛堝浐瀹氱嚎绋嬫睜锛夈�傚闇�鏇撮珮骞跺彂鍙皟鏁村ぇ灏忋��
+    private final ExecutorService executor = Executors
+            .newFixedThreadPool(9999);
+    private int taskExecuteStation = 0;
 
     public ZyDualCrnFakeConnect(DeviceConfig deviceConfig) {
         this.deviceConfig = deviceConfig;
@@ -42,13 +45,19 @@
     @Override
     public CommandResponse sendCommand(DualCrnCommand command) {
         CommandResponse response = new CommandResponse(false);
-        if (command.getTaskMode().intValue() == CrnTaskModeType.LOC_MOVE.id) {
+        if (command.getTaskMode().intValue() == DualCrnTaskModeType.TRANSFER.id) {
             //鍙栨斁璐�
             executor.submit(() -> commandTake(command));
-        } else if (command.getTaskMode().intValue() == CrnTaskModeType.CRN_MOVE.id) {
+        } else if (command.getTaskMode().intValue() == DualCrnTaskModeType.PICK.id) {
+            //鍙栬揣
+            executor.submit(() -> commandPick(command));
+        } else if (command.getTaskMode().intValue() == DualCrnTaskModeType.PUT.id) {
+            //鏀捐揣
+            executor.submit(() -> commandPut(command));
+        } else if (command.getTaskMode().intValue() == DualCrnTaskModeType.MOVE.id) {
             //绉诲姩
             executor.submit(() -> commandMove(command));
-        } else if (command.getTaskMode().intValue() == CrnTaskModeType.NONE.id) {
+        } else if (command.getTaskMode().intValue() == DualCrnTaskModeType.CONFIRM.id) {
             //澶嶄綅
             executor.submit(() -> commandTaskComplete(command));
         }
@@ -57,49 +66,87 @@
     }
 
     private void commandTaskComplete(DualCrnCommand command) {
-        this.crnStatus.setTaskNo(0);
-        this.crnStatus.setStatus(CrnStatusType.IDLE.id);
+        if(command.getStation() == 1) {
+            if (crnStatus.getLoaded() == 0) {
+                this.crnStatus.setTaskNo(0);
+            }
+            this.crnStatus.setTaskReceive(0);
+            this.crnStatus.setStatus(CrnStatusType.IDLE.id);
+        }else {
+            if (crnStatus.getLoadedTwo() == 0) {
+                this.crnStatus.setTaskNoTwo(0);
+            }
+            this.crnStatus.setTaskReceiveTwo(0);
+            this.crnStatus.setStatusTwo(CrnStatusType.IDLE.id);
+        }
     }
 
     private void commandMove(DualCrnCommand command) {
-        int destinationPosX = command.getDestinationPosX().intValue();
-        int destinationPosY = command.getDestinationPosY().intValue();
-        int destinationPosZ = command.getDestinationPosZ().intValue();
-        int taskMode = command.getTaskMode().intValue();
-        int taskNo = command.getTaskNo().intValue();
+        int destinationPosX = command.getDestinationPosX();
+        int destinationPosY = command.getDestinationPosY();
+        int destinationPosZ = command.getDestinationPosZ();
+        int taskMode = command.getTaskMode();
+        int taskNo = command.getTaskNo();
+        int station = command.getStation();
+
+        while (true) {
+            if (taskExecuteStation == 0) {
+                taskExecuteStation = station;
+            }
+
+            if (taskExecuteStation == station) {
+                break;
+            }
+
+            sleep(200);
+        }
 
         if(command.getStation() == 1) {
             this.crnStatus.setTaskNo(taskNo);
             this.crnStatus.setStatus(CrnStatusType.MOVING.id);
-            moveY(this.crnStatus.getBay(), destinationPosY, command.getStation().intValue());
-            moveZ(this.crnStatus.getLevel(), destinationPosZ, command.getStation().intValue());
+            this.crnStatus.setTaskReceive(1);
+            moveYZ(this.crnStatus.getBay(), destinationPosY, this.crnStatus.getLevel(), destinationPosZ, command.getStation());
             this.crnStatus.setStatus(CrnStatusType.WAITING.id);
         }else {
             this.crnStatus.setTaskNoTwo(taskNo);
             this.crnStatus.setStatusTwo(CrnStatusType.MOVING.id);
-            moveY(this.crnStatus.getBayTwo(), destinationPosY, command.getStation().intValue());
-            moveZ(this.crnStatus.getLevelTwo(), destinationPosZ, command.getStation().intValue());
+            this.crnStatus.setTaskReceive(1);
+            moveYZ(this.crnStatus.getBay(), destinationPosY, this.crnStatus.getLevel(), destinationPosZ, command.getStation());
             this.crnStatus.setStatusTwo(CrnStatusType.WAITING.id);
         }
+
+        taskExecuteStation = 0;
     }
 
     private void commandTake(DualCrnCommand command) {
-        int sourcePosX = command.getSourcePosX().intValue();
-        int sourcePosY = command.getSourcePosY().intValue();
-        int sourcePosZ = command.getSourcePosZ().intValue();
-        int destinationPosX = command.getDestinationPosX().intValue();
-        int destinationPosY = command.getDestinationPosY().intValue();
-        int destinationPosZ = command.getDestinationPosZ().intValue();
-        int taskMode = command.getTaskMode().intValue();
-        int taskNo = command.getTaskNo().intValue();
+        int sourcePosX = command.getSourcePosX();
+        int sourcePosY = command.getSourcePosY();
+        int sourcePosZ = command.getSourcePosZ();
+        int destinationPosX = command.getDestinationPosX();
+        int destinationPosY = command.getDestinationPosY();
+        int destinationPosZ = command.getDestinationPosZ();
+        int taskMode = command.getTaskMode();
+        int taskNo = command.getTaskNo();
+        int station = command.getStation();
 
-        this.crnStatus.setMode(taskMode);
+        while (true) {
+            if (taskExecuteStation == 0) {
+                taskExecuteStation = station;
+            }
+
+            if (taskExecuteStation == station) {
+                break;
+            }
+
+            sleep(200);
+        }
+
         if(command.getStation() == 1) {
             this.crnStatus.setTaskNo(taskNo);
             this.crnStatus.setStatus(CrnStatusType.FETCH_MOVING.id);
+            this.crnStatus.setTaskReceive(1);
 
-            moveY(this.crnStatus.getBay(), sourcePosY, command.getStation().intValue());
-            moveZ(this.crnStatus.getLevel(), sourcePosZ, command.getStation().intValue());
+            moveYZ(this.crnStatus.getBay(), sourcePosY,this.crnStatus.getLevel(), sourcePosZ,command.getStation());
             this.crnStatus.setStatus(CrnStatusType.FETCHING.id);
             sleep(2000);
             if (Thread.currentThread().isInterrupted()) {
@@ -108,8 +155,7 @@
 
             this.crnStatus.setLoaded(1);
             this.crnStatus.setStatus(CrnStatusType.PUT_MOVING.id);
-            moveY(this.crnStatus.getBay(), destinationPosY, command.getStation().intValue());
-            moveZ(this.crnStatus.getLevel(), destinationPosZ, command.getStation().intValue());
+            moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
             this.crnStatus.setStatus(CrnStatusType.PUTTING.id);
             sleep(2000);
             if (Thread.currentThread().isInterrupted()) {
@@ -120,9 +166,9 @@
         }else {
             this.crnStatus.setTaskNoTwo(taskNo);
             this.crnStatus.setStatusTwo(CrnStatusType.FETCH_MOVING.id);
+            this.crnStatus.setTaskReceiveTwo(1);
 
-            moveY(this.crnStatus.getBayTwo(), sourcePosY, command.getStation().intValue());
-            moveZ(this.crnStatus.getLevelTwo(), sourcePosZ, command.getStation().intValue());
+            moveYZ(this.crnStatus.getBay(), sourcePosY,this.crnStatus.getLevel(), sourcePosZ, command.getStation());
             this.crnStatus.setStatusTwo(CrnStatusType.FETCHING.id);
             sleep(2000);
             if (Thread.currentThread().isInterrupted()) {
@@ -131,8 +177,7 @@
 
             this.crnStatus.setLoadedTwo(1);
             this.crnStatus.setStatusTwo(CrnStatusType.PUT_MOVING.id);
-            moveY(this.crnStatus.getBayTwo(), destinationPosY, command.getStation().intValue());
-            moveZ(this.crnStatus.getLevelTwo(), destinationPosZ, command.getStation().intValue());
+            moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
             this.crnStatus.setStatusTwo(CrnStatusType.PUTTING.id);
             sleep(2000);
             if (Thread.currentThread().isInterrupted()) {
@@ -141,6 +186,110 @@
             this.crnStatus.setLoadedTwo(0);
             this.crnStatus.setStatusTwo(CrnStatusType.WAITING.id);
         }
+
+        taskExecuteStation = 0;
+    }
+
+    private void commandPick(DualCrnCommand command) {
+        int destinationPosX = command.getDestinationPosX();
+        int destinationPosY = command.getDestinationPosY();
+        int destinationPosZ = command.getDestinationPosZ();
+        int taskMode = command.getTaskMode();
+        int taskNo = command.getTaskNo();
+        int station = command.getStation();
+
+        while (true) {
+            if (taskExecuteStation == 0) {
+                taskExecuteStation = station;
+            }
+
+            if (taskExecuteStation == station) {
+                break;
+            }
+
+            sleep(200);
+        }
+
+        if(command.getStation() == 1) {
+            this.crnStatus.setTaskNo(taskNo);
+            this.crnStatus.setStatus(CrnStatusType.FETCH_MOVING.id);
+            this.crnStatus.setTaskReceive(1);
+
+            moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
+            this.crnStatus.setStatus(CrnStatusType.FETCHING.id);
+            sleep(3000);
+            if (Thread.currentThread().isInterrupted()) {
+                return;
+            }
+            this.crnStatus.setLoaded(1);
+            this.crnStatus.setStatus(CrnStatusType.WAITING.id);
+        }else {
+            this.crnStatus.setTaskNoTwo(taskNo);
+            this.crnStatus.setStatusTwo(CrnStatusType.FETCH_MOVING.id);
+            this.crnStatus.setTaskReceiveTwo(1);
+
+            moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
+            this.crnStatus.setStatusTwo(CrnStatusType.FETCHING.id);
+            sleep(3000);
+            if (Thread.currentThread().isInterrupted()) {
+                return;
+            }
+            this.crnStatus.setLoadedTwo(1);
+            this.crnStatus.setStatusTwo(CrnStatusType.WAITING.id);
+        }
+
+        taskExecuteStation = 0;
+    }
+
+    private void commandPut(DualCrnCommand command) {
+        int destinationPosX = command.getDestinationPosX();
+        int destinationPosY = command.getDestinationPosY();
+        int destinationPosZ = command.getDestinationPosZ();
+        int taskMode = command.getTaskMode();
+        int taskNo = command.getTaskNo();
+        int station = command.getStation();
+
+        while (true) {
+            if (taskExecuteStation == 0) {
+                taskExecuteStation = station;
+            }
+
+            if (taskExecuteStation == station) {
+                break;
+            }
+
+            sleep(200);
+        }
+
+        if(command.getStation() == 1) {
+            this.crnStatus.setTaskNo(taskNo);
+            this.crnStatus.setStatus(CrnStatusType.PUT_MOVING.id);
+            this.crnStatus.setTaskReceive(1);
+
+            moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
+            this.crnStatus.setStatus(CrnStatusType.PUTTING.id);
+            sleep(3000);
+            if (Thread.currentThread().isInterrupted()) {
+                return;
+            }
+            this.crnStatus.setLoaded(0);
+            this.crnStatus.setStatus(CrnStatusType.WAITING.id);
+        }else {
+            this.crnStatus.setTaskNoTwo(taskNo);
+            this.crnStatus.setStatusTwo(CrnStatusType.PUT_MOVING.id);
+            this.crnStatus.setTaskReceiveTwo(1);
+
+            moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
+            this.crnStatus.setStatusTwo(CrnStatusType.PUTTING.id);
+            sleep(3000);
+            if (Thread.currentThread().isInterrupted()) {
+                return;
+            }
+            this.crnStatus.setLoadedTwo(0);
+            this.crnStatus.setStatusTwo(CrnStatusType.WAITING.id);
+        }
+
+        taskExecuteStation = 0;
     }
 
     private void moveZ(int sourcePosZ, int destinationPosZ, int station) {
@@ -149,11 +298,7 @@
             int initSourcePosZ = sourcePosZ;
             for(int i = 0; i < moveLength; i++) {
                 initSourcePosZ++;
-                if(station == 1) {
-                    this.crnStatus.setLevel(initSourcePosZ);
-                }else {
-                    this.crnStatus.setLevelTwo(initSourcePosZ);
-                }
+                this.crnStatus.setLevel(initSourcePosZ);
                 sleep(1000);
                 if (Thread.currentThread().isInterrupted()) {
                     return;
@@ -164,11 +309,7 @@
             int initSourcePosZ = sourcePosZ;
             for(int i = 0; i < moveLength; i++) {
                 initSourcePosZ--;
-                if(station == 1) {
-                    this.crnStatus.setLevel(initSourcePosZ);
-                }else {
-                    this.crnStatus.setLevelTwo(initSourcePosZ);
-                }
+                this.crnStatus.setLevel(initSourcePosZ);
                 this.crnStatus.setLevel(initSourcePosZ);
                 sleep(1000);
                 if (Thread.currentThread().isInterrupted()) {
@@ -184,12 +325,8 @@
             int initSourcePosY = sourcePosY;
             for(int i = 0; i < moveLength; i++) {
                 initSourcePosY++;
-                if(station == 1) {
-                    this.crnStatus.setBay(initSourcePosY);
-                }else {
-                    this.crnStatus.setBayTwo(initSourcePosY);
-                }
-                sleep(1000);
+                this.crnStatus.setBay(initSourcePosY);
+                sleep(500);
                 if (Thread.currentThread().isInterrupted()) {
                     return;
                 }
@@ -199,12 +336,8 @@
             int initSourcePosY = sourcePosY;
             for(int i = 0; i < moveLength; i++) {
                 initSourcePosY--;
-                if(station == 1) {
-                    this.crnStatus.setBay(initSourcePosY);
-                }else {
-                    this.crnStatus.setBayTwo(initSourcePosY);
-                }
-                sleep(1000);
+                this.crnStatus.setBay(initSourcePosY);
+                sleep(500);
                 if (Thread.currentThread().isInterrupted()) {
                     return;
                 }
@@ -212,6 +345,11 @@
         }
     }
 
+    private void moveYZ(int sourcePosY, int destinationPosY, int sourcePosZ, int destinationPosZ, int station) {
+        moveY(sourcePosY, destinationPosY, station);
+        moveZ(sourcePosZ, destinationPosZ, station);
+    }
+
     private void sleep(long ms) {
         try {
             Thread.sleep(ms);

--
Gitblit v1.9.1