From 9d24c64b9d81ae166f4c150f038793304d7161fa Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期五, 19 十二月 2025 11:13:46 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java |  142 ++++++++++++++++++++++++++++++++++------------
 1 files changed, 104 insertions(+), 38 deletions(-)

diff --git a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
index 0aea24a..faf66f7 100644
--- a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
@@ -14,6 +14,8 @@
 import com.zy.core.network.api.ZyStationConnectApi;
 import com.zy.core.network.entity.ZyStationStatusEntity;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -26,17 +28,22 @@
  */
 public class ZyStationFakeConnect implements ZyStationConnectApi {
 
-    private final List<ZyStationStatusEntity> statusList = new CopyOnWriteArrayList<>();
     private static int LOCK_STATION = 0;
-    private final DeviceConfig deviceConfig;
+    private HashMap<Integer, List<ZyStationStatusEntity>> deviceStatusMap = new HashMap<>();
+    private HashMap<Integer, DeviceConfig> deviceConfigMap = new HashMap<>();
     private RedisUtil redisUtil;
     // 鍏佽骞惰鎵ц澶氫釜鍛戒护浠诲姟锛堝浐瀹氱嚎绋嬫睜锛夈�傚闇�鏇撮珮骞跺彂鍙皟鏁村ぇ灏忋��
     private final ExecutorService executor = Executors
             .newFixedThreadPool(9999);
 
-    public ZyStationFakeConnect(DeviceConfig deviceConfig, RedisUtil redisUtil) {
-        this.deviceConfig = deviceConfig;
+    public void addFakeConnect(DeviceConfig deviceConfig, RedisUtil redisUtil) {
         this.redisUtil = redisUtil;
+
+        if (deviceConfigMap.containsKey(deviceConfig.getDeviceNo())) {
+            return;
+        }
+        deviceConfigMap.put(deviceConfig.getDeviceNo(), deviceConfig);
+        deviceStatusMap.put(deviceConfig.getDeviceNo(), new CopyOnWriteArrayList<>());
     }
 
     @Override
@@ -51,12 +58,17 @@
     }
 
     @Override
-    public List<ZyStationStatusEntity> getStatus() {
-        if (this.statusList.isEmpty()) {
+    public List<ZyStationStatusEntity> getStatus(Integer deviceNo) {
+        List<ZyStationStatusEntity> statusList = deviceStatusMap.get(deviceNo);
+        if (statusList == null) {
+            return new ArrayList<>();
+        }
+        DeviceConfig deviceConfig = deviceConfigMap.get(deviceNo);
+        if (statusList.isEmpty()) {
             List<ZyStationStatusEntity> init = JSON.parseArray(deviceConfig.getFakeInitStatus(), ZyStationStatusEntity.class);
             if (init != null) {
                 statusList.addAll(init);
-                for (ZyStationStatusEntity status : this.statusList) {
+                for (ZyStationStatusEntity status : statusList) {
                     status.setAutoing(true);// 妯℃嫙鑷姩杩愯
                     status.setLoading(false);// 妯℃嫙鏈夌墿
                     status.setInEnable(true);// 妯℃嫙鍙叆
@@ -71,14 +83,14 @@
             }
         }
 
-        return this.statusList;
+        return statusList;
     }
 
     @Override
-    public CommandResponse sendCommand(StationCommand command) {
+    public CommandResponse sendCommand(Integer deviceNo, StationCommand command) {
         executor.submit(() -> {
             try {
-                handleCommand(command);
+                handleCommand(deviceNo, command);
             } catch (Exception e) {
                 e.printStackTrace();
             }
@@ -86,7 +98,7 @@
         return new CommandResponse(true, "鍛戒护宸插彈鐞嗭紙寮傛鎵ц锛�");
     }
 
-    private void handleCommand(StationCommand command) {
+    private void handleCommand(Integer deviceNo, StationCommand command) {
         News.info("[WCS Debug] 绔欑偣浠跨湡妯℃嫙宸插惎鍔紝鍛戒护鏁版嵁={}", JSON.toJSONString(command));
         Integer taskNo = command.getTaskNo();
         Integer stationId = command.getStationId();
@@ -95,7 +107,7 @@
 
         if(taskNo == 0 && targetStationId == 0){
             //娓呯┖绔欑偣
-            resetStation(stationId);
+            resetStation(deviceNo, stationId);
             return;
         }
 
@@ -107,13 +119,13 @@
 
         if (taskNo == 9998 && targetStationId == 0) {
             //鐢熸垚鍑哄簱绔欑偣浠跨湡鏁版嵁
-            generateFakeOutStationData(stationId);
+            generateFakeOutStationData(deviceNo, stationId);
             return;
         }
 
         if (taskNo > 0 && taskNo != 9999 && taskNo != 9998 && stationId == targetStationId) {
             //涓嬪彂浠诲姟鏁版嵁-涓嶅厑璁稿彧鏄笅鍙戞暟鎹�
-            generateStationData(taskNo, stationId, targetStationId);
+            generateStationData(deviceNo, taskNo, stationId, targetStationId);
         }
 
         String startLev = String.valueOf(stationId).substring(0, 1);
@@ -126,7 +138,8 @@
         }
     }
 
-    private void generateFakeOutStationData(Integer stationId) {
+    private void generateFakeOutStationData(Integer deviceNo, Integer stationId) {
+        List<ZyStationStatusEntity> statusList = deviceStatusMap.get(deviceNo);
         ZyStationStatusEntity status = statusList.stream()
                 .filter(item -> item.getStationId().equals(stationId)).findFirst().orElse(null);
         if (status == null) {
@@ -138,7 +151,8 @@
         }
     }
 
-    private void generateStationData(Integer taskNo, Integer stationId, Integer targetStationId) {
+    private void generateStationData(Integer deviceNo, Integer taskNo, Integer stationId, Integer targetStationId) {
+        List<ZyStationStatusEntity> statusList = deviceStatusMap.get(deviceNo);
         ZyStationStatusEntity status = statusList.stream()
                 .filter(item -> item.getStationId().equals(stationId)).findFirst().orElse(null);
         if (status == null) {
@@ -151,7 +165,8 @@
         }
     }
 
-    private void resetStation(Integer stationId) {
+    private void resetStation(Integer deviceNo, Integer stationId) {
+        List<ZyStationStatusEntity> statusList = deviceStatusMap.get(deviceNo);
         ZyStationStatusEntity status = statusList.stream()
                 .filter(item -> item.getStationId().equals(stationId)).findFirst().orElse(null);
         if (status == null) {
@@ -272,6 +287,7 @@
 
     private boolean stationMove(List<NavigateNode> navigateNodes, Integer taskNo, Integer targetStationId, boolean clearData, boolean generateBarcode) {
         Integer lastStationId = null;
+        Integer targetStationDeviceNo = null;
 
         long executeTime = System.currentTimeMillis();
         int i = 0;
@@ -282,20 +298,35 @@
             NavigateNode navigateNode = navigateNodes.get(i);
             JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue());
             Integer currentStationId = valueObject.getInteger("stationId");
+            Integer currentStationDeviceNo = valueObject.getInteger("deviceNo");
+            if (currentStationId.equals(targetStationId)) {
+                targetStationDeviceNo = currentStationDeviceNo;
+            }
 
             Integer nextStationId = null;
+            Integer nextStationDeviceNo = null;
             try {
                 NavigateNode nextNode = navigateNodes.get(i + 1);
                 JSONObject nextValueObject = JSON.parseObject(nextNode.getNodeValue());
                 nextStationId = nextValueObject.getInteger("stationId");
+                nextStationDeviceNo = nextValueObject.getInteger("deviceNo");
             } catch (Exception e) {
 
             }
 
             if (!checkTaskNoInArea(taskNo)) {
-                if (System.currentTimeMillis() - executeTime > 1000 * 10) {
+                boolean fakeAllowCheckBlock = true;
+                Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
+                if (systemConfigMapObj != null) {
+                    HashMap<String, String> systemConfigMap = (HashMap<String, String>) systemConfigMapObj;
+                    if (!systemConfigMap.get("fakeAllowCheckBlock").equals("Y")) {
+                        fakeAllowCheckBlock = false;
+                    }
+                }
+
+                if (fakeAllowCheckBlock && System.currentTimeMillis() - executeTime > 1000 * 10) {
                     //璁ゅ畾鍫靛
-                    boolean result = runBlockStation(taskNo, currentStationId, taskNo, currentStationId);
+                    boolean result = runBlockStation(taskNo, currentStationId, currentStationDeviceNo, taskNo, currentStationId);
                     if(!result) {
                         continue;
                     }
@@ -304,7 +335,7 @@
             }
 
             if (i == 0) {
-                boolean result = initStationMove(taskNo, currentStationId, taskNo, targetStationId, true, null);
+                boolean result = initStationMove(taskNo, currentStationId, currentStationDeviceNo, taskNo, targetStationId, true, null);
                 if (!result) {
                     continue;
                 }
@@ -315,7 +346,7 @@
             }
 
             if(nextStationId != null) {
-                boolean result = stationMoveToNext(taskNo, currentStationId, nextStationId, taskNo, targetStationId);
+                boolean result = stationMoveToNext(taskNo, currentStationId, currentStationDeviceNo, nextStationId, nextStationDeviceNo, taskNo, targetStationId);
                 if (!result) {
                     continue;
                 }
@@ -336,7 +367,7 @@
                     if (Thread.currentThread().isInterrupted()) {
                         break;
                     }
-                    boolean result = generateStationBarcode(taskNo, targetStationId);
+                    boolean result = generateStationBarcode(taskNo, targetStationId, targetStationDeviceNo);
                     sleep(1000);
                     if (!result) {
                         continue;
@@ -356,7 +387,7 @@
                     if (Thread.currentThread().isInterrupted()) {
                         break;
                     }
-                    boolean result = clearStation(taskNo, targetStationId);
+                    boolean result = clearStation(taskNo, targetStationId, targetStationDeviceNo);
                     sleep(1000);
                     if (!result) {
                         continue;
@@ -398,8 +429,13 @@
         return true;
     }
 
-    public synchronized boolean updateStationData(Integer lockTaskNo, Integer stationId, Integer taskNo, Integer targetStaNo, Boolean isLoading, String barcode, Boolean runBlock) {
+    public synchronized boolean updateStationData(Integer lockTaskNo, Integer stationId, Integer deviceNo, Integer taskNo, Integer targetStaNo, Boolean isLoading, String barcode, Boolean runBlock) {
         if (LOCK_STATION != lockTaskNo) {
+            return false;
+        }
+
+        List<ZyStationStatusEntity> statusList = deviceStatusMap.get(deviceNo);
+        if (statusList == null) {
             return false;
         }
 
@@ -426,16 +462,21 @@
             currentStatus.setBarcode(barcode);
         }
 
-        if(runBlock != null) {
+        if (runBlock != null) {
             currentStatus.setRunBlock(runBlock);
         }
         return true;
     }
 
-    public synchronized boolean initStationMove(Integer lockTaskNo, Integer currentStationId, Integer taskNo, Integer targetStationId, Boolean isLoading, String barcode) {
+    public synchronized boolean initStationMove(Integer lockTaskNo, Integer currentStationId, Integer currentStationDeviceNo, Integer taskNo, Integer targetStationId, Boolean isLoading, String barcode) {
         boolean executeResult = lockExecute(lockTaskNo, () -> {
+            List<ZyStationStatusEntity> statusList = deviceStatusMap.get(currentStationDeviceNo);
+            if (statusList == null) {
+                return false;
+            }
+
             ZyStationStatusEntity currentStatus = statusList.stream()
-                .filter(item -> item.getStationId().equals(currentStationId)).findFirst().orElse(null);
+                    .filter(item -> item.getStationId().equals(currentStationId)).findFirst().orElse(null);
 
             if (currentStatus == null) {
                 return false;
@@ -447,7 +488,7 @@
                 }
             }
 
-            boolean result = updateStationData(taskNo, currentStationId, taskNo, targetStationId, isLoading, barcode, false);
+            boolean result = updateStationData(lockTaskNo, currentStationId, currentStationDeviceNo, taskNo, targetStationId, isLoading, barcode, false);
             if (!result) {
                 return false;
             }
@@ -457,12 +498,22 @@
         return executeResult;
     }
 
-    public synchronized boolean stationMoveToNext(Integer lockTaskNo, Integer currentStationId, Integer nextStationId, Integer taskNo, Integer targetStaNo) {
+    public synchronized boolean stationMoveToNext(Integer lockTaskNo, Integer currentStationId, Integer currentStationDeviceNo, Integer nextStationId, Integer nextStationDeviceNo, Integer taskNo, Integer targetStaNo) {
         boolean executeResult = lockExecute(lockTaskNo, () -> {
+            List<ZyStationStatusEntity> statusList = deviceStatusMap.get(currentStationDeviceNo);
+            if (statusList == null) {
+                return false;
+            }
+
+            List<ZyStationStatusEntity> nextStatusList = deviceStatusMap.get(nextStationDeviceNo);
+            if (statusList == null) {
+                return false;
+            }
+
             ZyStationStatusEntity currentStatus = statusList.stream()
                     .filter(item -> item.getStationId().equals(currentStationId)).findFirst().orElse(null);
 
-            ZyStationStatusEntity nextStatus = statusList.stream()
+            ZyStationStatusEntity nextStatus = nextStatusList.stream()
                     .filter(item -> item.getStationId().equals(nextStationId)).findFirst().orElse(null);
 
             if (currentStatus == null || nextStatus == null) {
@@ -473,12 +524,12 @@
                 return false;
             }
 
-            boolean result = updateStationData(lockTaskNo, nextStationId, taskNo, targetStaNo, true, null, false);
+            boolean result = updateStationData(lockTaskNo, nextStationId, nextStationDeviceNo, taskNo, targetStaNo, true, null, false);
             if (!result) {
                 return false;
             }
 
-            boolean result2 = updateStationData(lockTaskNo, currentStationId, 0, 0, false, null, false);
+            boolean result2 = updateStationData(lockTaskNo, currentStationId, currentStationDeviceNo, 0, 0, false, "", false);
             if (!result2) {
                 return false;
             }
@@ -488,8 +539,13 @@
         return executeResult;
     }
 
-    public synchronized boolean generateStationBarcode(Integer lockTaskNo, Integer currentStationId) {
+    public synchronized boolean generateStationBarcode(Integer lockTaskNo, Integer currentStationId, Integer currentStationDeviceNo) {
         boolean executeResult = lockExecute(lockTaskNo, () -> {
+            List<ZyStationStatusEntity> statusList = deviceStatusMap.get(currentStationDeviceNo);
+            if (statusList == null) {
+                return false;
+            }
+
             ZyStationStatusEntity currentStatus = statusList.stream()
                     .filter(item -> item.getStationId().equals(currentStationId)).findFirst().orElse(null);
 
@@ -500,7 +556,7 @@
             String barcodeTime = String.valueOf(System.currentTimeMillis());
             String barcode = barcodeTime.substring(5);
 
-            boolean result = updateStationData(lockTaskNo, currentStationId, null, null, null, barcode, null);
+            boolean result = updateStationData(lockTaskNo, currentStationId, currentStationDeviceNo, null, null, null, barcode, null);
             if (!result) {
                 return false;
             }
@@ -510,8 +566,13 @@
         return executeResult;
     }
 
-    public synchronized boolean clearStation(Integer lockTaskNo, Integer currentStationId) {
+    public synchronized boolean clearStation(Integer deviceNo, Integer lockTaskNo, Integer currentStationId) {
         boolean executeResult = lockExecute(lockTaskNo, () -> {
+            List<ZyStationStatusEntity> statusList = deviceStatusMap.get(deviceNo);
+            if (statusList == null) {
+                return false;
+            }
+
             ZyStationStatusEntity currentStatus = statusList.stream()
                     .filter(item -> item.getStationId().equals(currentStationId)).findFirst().orElse(null);
 
@@ -519,7 +580,7 @@
                 return false;
             }
 
-            boolean result = updateStationData(lockTaskNo, currentStationId, 0, 0, false, "", false);
+            boolean result = updateStationData(deviceNo, lockTaskNo, currentStationId, 0, 0, false, "", false);
             if (!result) {
                 return false;
             }
@@ -529,8 +590,13 @@
         return executeResult;
     }
 
-    public synchronized boolean runBlockStation(Integer lockTaskNo, Integer currentStationId, Integer taskNo, Integer blockStationId) {
+    public synchronized boolean runBlockStation(Integer lockTaskNo, Integer currentStationId, Integer currentStationDeviceNo, Integer taskNo, Integer blockStationId) {
         boolean executeResult = lockExecute(lockTaskNo, () -> {
+            List<ZyStationStatusEntity> statusList = deviceStatusMap.get(currentStationDeviceNo);
+            if (statusList == null) {
+                return false;
+            }
+
             ZyStationStatusEntity currentStatus = statusList.stream()
                     .filter(item -> item.getStationId().equals(currentStationId)).findFirst().orElse(null);
 
@@ -538,7 +604,7 @@
                 return false;
             }
 
-            boolean result = updateStationData(lockTaskNo, currentStationId, taskNo, blockStationId, true, "", true);
+            boolean result = updateStationData(lockTaskNo, currentStationId, currentStationDeviceNo, taskNo, blockStationId, true, "", true);
             if (!result) {
                 return false;
             }

--
Gitblit v1.9.1