From f305e5244e059c5e43566412f69b180e2e790026 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 05 三月 2026 19:11:43 +0800
Subject: [PATCH] #双工位堆垛机任务下发控制优化

---
 src/main/java/com/zy/core/network/fake/ZyDualCrnFakeConnect.java |   88 +++++++++++++++++++++++++++++--------------
 1 files changed, 59 insertions(+), 29 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 d529843..79762ed 100644
--- a/src/main/java/com/zy/core/network/fake/ZyDualCrnFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyDualCrnFakeConnect.java
@@ -2,7 +2,7 @@
 
 import com.alibaba.fastjson.JSON;
 import com.zy.asrs.entity.DeviceConfig;
-import com.zy.core.enums.CrnStatusType;
+import com.zy.core.enums.DualCrnStatusType;
 import com.zy.core.enums.DualCrnTaskModeType;
 import com.zy.core.model.CommandResponse;
 import com.zy.core.model.command.DualCrnCommand;
@@ -20,6 +20,8 @@
     private final ExecutorService executor = Executors
             .newFixedThreadPool(9999);
     private int taskExecuteStation = 0;
+    private DualCrnCommand station1LastCommand = null;
+    private DualCrnCommand station2LastCommand = null;
 
     public ZyDualCrnFakeConnect(DeviceConfig deviceConfig) {
         this.deviceConfig = deviceConfig;
@@ -71,13 +73,29 @@
                 this.crnStatus.setTaskNo(0);
             }
             this.crnStatus.setTaskReceive(0);
-            this.crnStatus.setStatus(CrnStatusType.IDLE.id);
+            if (station1LastCommand == null) {
+                this.crnStatus.setStatus(DualCrnStatusType.IDLE.id);
+            }else {
+                if (station1LastCommand.getTaskMode().intValue() == DualCrnTaskModeType.PICK.id) {
+                    this.crnStatus.setStatus(DualCrnStatusType.FETCH_COMPLETE.id);
+                }else {
+                    this.crnStatus.setStatus(DualCrnStatusType.IDLE.id);
+                }
+            }
         }else {
             if (crnStatus.getLoadedTwo() == 0) {
                 this.crnStatus.setTaskNoTwo(0);
             }
             this.crnStatus.setTaskReceiveTwo(0);
-            this.crnStatus.setStatusTwo(CrnStatusType.IDLE.id);
+            if (station2LastCommand == null) {
+                this.crnStatus.setStatusTwo(DualCrnStatusType.IDLE.id);
+            }else {
+                if (station1LastCommand.getTaskMode().intValue() == DualCrnTaskModeType.PICK.id) {
+                    this.crnStatus.setStatusTwo(DualCrnStatusType.FETCH_COMPLETE.id);
+                }else {
+                    this.crnStatus.setStatusTwo(DualCrnStatusType.IDLE.id);
+                }
+            }
         }
     }
 
@@ -103,16 +121,16 @@
 
         if(command.getStation() == 1) {
             this.crnStatus.setTaskNo(taskNo);
-            this.crnStatus.setStatus(CrnStatusType.MOVING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.PUT_MOVING.id);
             this.crnStatus.setTaskReceive(1);
             moveYZ(this.crnStatus.getBay(), destinationPosY, this.crnStatus.getLevel(), destinationPosZ, command.getStation());
-            this.crnStatus.setStatus(CrnStatusType.WAITING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.WAITING.id);
         }else {
             this.crnStatus.setTaskNoTwo(taskNo);
-            this.crnStatus.setStatusTwo(CrnStatusType.MOVING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.PUT_MOVING.id);
             this.crnStatus.setTaskReceive(1);
             moveYZ(this.crnStatus.getBay(), destinationPosY, this.crnStatus.getLevel(), destinationPosZ, command.getStation());
-            this.crnStatus.setStatusTwo(CrnStatusType.WAITING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.WAITING.id);
         }
 
         taskExecuteStation = 0;
@@ -143,48 +161,52 @@
 
         if(command.getStation() == 1) {
             this.crnStatus.setTaskNo(taskNo);
-            this.crnStatus.setStatus(CrnStatusType.FETCH_MOVING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.FETCH_MOVING.id);
             this.crnStatus.setTaskReceive(1);
 
             moveYZ(this.crnStatus.getBay(), sourcePosY,this.crnStatus.getLevel(), sourcePosZ,command.getStation());
-            this.crnStatus.setStatus(CrnStatusType.FETCHING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.FETCHING.id);
             sleep(2000);
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
 
             this.crnStatus.setLoaded(1);
-            this.crnStatus.setStatus(CrnStatusType.PUT_MOVING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.PUT_MOVING.id);
             moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
-            this.crnStatus.setStatus(CrnStatusType.PUTTING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.PUTTING.id);
             sleep(2000);
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
             this.crnStatus.setLoaded(0);
-            this.crnStatus.setStatus(CrnStatusType.WAITING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.WAITING.id);
+
+            this.station1LastCommand = command;
         }else {
             this.crnStatus.setTaskNoTwo(taskNo);
-            this.crnStatus.setStatusTwo(CrnStatusType.FETCH_MOVING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.FETCH_MOVING.id);
             this.crnStatus.setTaskReceiveTwo(1);
 
             moveYZ(this.crnStatus.getBay(), sourcePosY,this.crnStatus.getLevel(), sourcePosZ, command.getStation());
-            this.crnStatus.setStatusTwo(CrnStatusType.FETCHING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.FETCHING.id);
             sleep(2000);
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
 
             this.crnStatus.setLoadedTwo(1);
-            this.crnStatus.setStatusTwo(CrnStatusType.PUT_MOVING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.PUT_MOVING.id);
             moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
-            this.crnStatus.setStatusTwo(CrnStatusType.PUTTING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.PUTTING.id);
             sleep(2000);
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
             this.crnStatus.setLoadedTwo(0);
-            this.crnStatus.setStatusTwo(CrnStatusType.WAITING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.WAITING.id);
+
+            this.station2LastCommand = command;
         }
 
         taskExecuteStation = 0;
@@ -212,30 +234,34 @@
 
         if(command.getStation() == 1) {
             this.crnStatus.setTaskNo(taskNo);
-            this.crnStatus.setStatus(CrnStatusType.FETCH_MOVING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.FETCH_MOVING.id);
             this.crnStatus.setTaskReceive(1);
 
             moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
-            this.crnStatus.setStatus(CrnStatusType.FETCHING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.FETCHING.id);
             sleep(3000);
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
             this.crnStatus.setLoaded(1);
-            this.crnStatus.setStatus(CrnStatusType.WAITING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.WAITING.id);
+
+            this.station1LastCommand = command;
         }else {
             this.crnStatus.setTaskNoTwo(taskNo);
-            this.crnStatus.setStatusTwo(CrnStatusType.FETCH_MOVING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.FETCH_MOVING.id);
             this.crnStatus.setTaskReceiveTwo(1);
 
             moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
-            this.crnStatus.setStatusTwo(CrnStatusType.FETCHING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.FETCHING.id);
             sleep(3000);
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
             this.crnStatus.setLoadedTwo(1);
-            this.crnStatus.setStatusTwo(CrnStatusType.WAITING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.WAITING.id);
+
+            this.station2LastCommand = command;
         }
 
         taskExecuteStation = 0;
@@ -263,30 +289,34 @@
 
         if(command.getStation() == 1) {
             this.crnStatus.setTaskNo(taskNo);
-            this.crnStatus.setStatus(CrnStatusType.PUT_MOVING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.PUT_MOVING.id);
             this.crnStatus.setTaskReceive(1);
 
             moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
-            this.crnStatus.setStatus(CrnStatusType.PUTTING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.PUTTING.id);
             sleep(3000);
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
             this.crnStatus.setLoaded(0);
-            this.crnStatus.setStatus(CrnStatusType.WAITING.id);
+            this.crnStatus.setStatus(DualCrnStatusType.WAITING.id);
+
+            this.station1LastCommand = command;
         }else {
             this.crnStatus.setTaskNoTwo(taskNo);
-            this.crnStatus.setStatusTwo(CrnStatusType.PUT_MOVING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.PUT_MOVING.id);
             this.crnStatus.setTaskReceiveTwo(1);
 
             moveYZ(this.crnStatus.getBay(), destinationPosY,this.crnStatus.getLevel(), destinationPosZ, command.getStation());
-            this.crnStatus.setStatusTwo(CrnStatusType.PUTTING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.PUTTING.id);
             sleep(3000);
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
             this.crnStatus.setLoadedTwo(0);
-            this.crnStatus.setStatusTwo(CrnStatusType.WAITING.id);
+            this.crnStatus.setStatusTwo(DualCrnStatusType.WAITING.id);
+
+            this.station2LastCommand = command;
         }
 
         taskExecuteStation = 0;

--
Gitblit v1.9.1