From e5c1a651ed8057019674c7b4fa68281d5b7ebc8c Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 08 七月 2025 16:13:29 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java |  145 +++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 119 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java b/src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java
index 5fd0464..6071aae 100644
--- a/src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java
@@ -20,6 +20,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @SuppressWarnings("all")
@@ -30,6 +31,7 @@
     private JSONObject fakeStatusDemo = JSONObject.parseObject("{\"mode\":1,\"extend\":{\"countQuantity\":400,\"suspendState\":0,\"minCellVoltage\":3279,\"chargeCycleTimes\":0,\"maxCellVoltage\":3281,\"surplusQuantity\":204,\"voltage\":5248},\"hasLift\":false,\"hasPallet\":false,\"batteryVoltage\":5248,\"runDirection\":\"2\",\"currentCode\":\"{\\\"x\\\":19,\\\"y\\\":11,\\\"z\\\":2}\",\"errorCode\":\"0\",\"hasCharge\":false,\"batteryPower\":\"51\",\"speed\":0,\"deviceStatus\":1}");
     private HashMap<String, Socket> fakeServerMap = new HashMap();
     private HashMap<String, JSONObject> fakeStatusMap = new HashMap();
+    private HashMap<String, JSONObject> fakeCommandMap = new HashMap();
 
     private boolean fake = false;
 
@@ -91,13 +93,24 @@
                                 break;
                             }
 
-                            handleClient(fakeSocket, device);
+                            handleClient(device);
                         }
                     }catch (Exception e){
                         e.printStackTrace();
                     }
                 });
                 fakeThread.start();
+
+                Thread fakeCommandThread = new Thread(() -> {
+                    while (true) {
+                        try {
+                            excuteFakeCommand(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo());
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                    }
+                });
+                fakeCommandThread.start();
 
                 // init
                 ThreadHandler thread = new NyShuttleThread(device, redisUtil);;
@@ -107,8 +120,98 @@
         }
     }
 
-    private void handleClient(Socket socket, DeviceConfig device) throws IOException {
+    private void excuteFakeCommand(String key) {
+        if (!fakeCommandMap.containsKey(key)) {
+            return;
+        }
+        JSONObject command = fakeCommandMap.get(key);
+        fakeCommandMap.remove(key);
+        new Thread(() -> {
+            try {
+                JSONObject fakeStatus = fakeStatusMap.get(key);
+                String commandType = command.getString("commandType");
+                if (commandType.equals("liftUp")) {
+                    fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
+                    fakeStatusMap.put(key, fakeStatus);
+
+                    //delay
+                    Thread.sleep(2000);
+                    fakeStatus.put("hasLift", true);
+                    fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
+                    fakeStatusMap.put(key, fakeStatus);
+                }else if (commandType.equals("liftDown")) {
+                    fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
+                    fakeStatusMap.put(key, fakeStatus);
+
+                    //delay
+                    Thread.sleep(2000);
+                    fakeStatus.put("hasLift", false);
+                    fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
+                    fakeStatusMap.put(key, fakeStatus);
+                }else if (commandType.equals("charge")) {
+                    fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
+                    fakeStatusMap.put(key, fakeStatus);
+
+                    //delay
+                    Thread.sleep(2000);
+                    fakeStatus.put("hasCharge", true);
+                    fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
+                    fakeStatusMap.put(key, fakeStatus);
+                }else if (commandType.equals("stopCharge")) {
+                    fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
+                    fakeStatusMap.put(key, fakeStatus);
+
+                    //delay
+                    Thread.sleep(2000);
+                    fakeStatus.put("hasCharge", false);
+                    fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
+                    fakeStatusMap.put(key, fakeStatus);
+                }else if (commandType.equals("updateFloor")) {
+                    fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
+                    fakeStatusMap.put(key, fakeStatus);
+
+                    //delay
+                    Thread.sleep(2000);
+
+                    JSONObject body = command.getJSONObject("commandBody");
+                    String currentCode = fakeStatus.getString("currentCode");
+                    JSONObject point = JSON.parseObject(currentCode);
+                    point.put("z", body.getInteger("z"));
+                    fakeStatus.put("currentCode", JSON.toJSONString(point));
+                    fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
+                    fakeStatusMap.put(key, fakeStatus);
+                }else if (commandType.equals("move")) {
+                    fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
+                    fakeStatusMap.put(key, fakeStatus);
+                    Thread.sleep(2000);
+
+                    JSONObject body = command.getJSONObject("commandBody");
+                    String pathList = body.getString("path");
+                    List<JSONObject> list = JSON.parseArray(pathList, JSONObject.class);
+                    for (JSONObject path : list) {
+                        String currentCode = fakeStatus.getString("currentCode");
+                        JSONObject point = JSON.parseObject(currentCode);
+                        point.put("x", path.getInteger("xp"));
+                        point.put("y", path.getInteger("yp"));
+                        point.put("z", path.getInteger("z"));
+                        fakeStatus.put("currentCode", JSON.toJSONString(point));
+                        fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
+                        fakeStatusMap.put(key, fakeStatus);
+                        Thread.sleep(2000);
+                    }
+
+                    fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
+                    fakeStatusMap.put(key, fakeStatus);
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }).start();
+    }
+
+    private void handleClient(DeviceConfig device) throws IOException {
         try {
+            Socket socket = fakeServerMap.get(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo());
             // 鑾峰彇杈撳叆娴�
             BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             // 璇诲彇鏈嶅姟鍣ㄧ殑鍝嶅簲
@@ -124,7 +227,7 @@
             }
 
             JSONObject result = JSON.parseObject(sb.toString());
-            log.info("鏀跺埌Client Data: {}", JSON.toJSONString(result));
+//            log.info("鏀跺埌Client Data: {}", JSON.toJSONString(result));
             processCommand(result, device);
         } catch (Exception e) {
             e.printStackTrace();
@@ -142,40 +245,30 @@
         Integer requestId = header.getInteger("requestId");
         String requestType = body.getString("requestType");
         Integer taskId = body.getInteger("taskId");
+
+        JSONObject fakeCommand = new JSONObject();
+        fakeCommand.put("deviceNo", device.getDeviceNo());
+        fakeCommand.put("deviceType", device.getDeviceType());
+        fakeCommand.put("commandType", requestType);
+        fakeCommand.put("commandBody", body);
         if (requestType.equals("liftUp")) {
-            fakeStatus.put("hasLift", true);
+            fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand);
             response = genereateFakeCommandResponse(requestId, taskId, requestType);
         } else if (requestType.equals("liftDown")) {
-            fakeStatus.put("hasLift", false);
+            fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand);
             response = genereateFakeCommandResponse(requestId, taskId, requestType);
         } else if (requestType.equals("charge")) {
-            fakeStatus.put("hasCharge", true);
+            fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand);
             response = genereateFakeCommandResponse(requestId, taskId, requestType);
         } else if (requestType.equals("stopCharge")) {
-            fakeStatus.put("hasCharge", false);
+            fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand);
             response = genereateFakeCommandResponse(requestId, taskId, requestType);
         } else if (requestType.equals("updateFloor")) {
-            String currentCode = fakeStatus.getString("currentCode");
-            JSONObject point = JSON.parseObject(currentCode);
-            point.put("z", body.getInteger("z"));
-            fakeStatus.put("currentCode", JSON.toJSONString(point));
+            fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand);
             response = genereateFakeCommandResponse(requestId, taskId, requestType);
         } else if (requestType.equals("move")) {
-            String pathList = body.getString("path");
-            List<JSONObject> list = JSON.parseArray(pathList, JSONObject.class);
-            for (JSONObject path : list) {
-                String currentCode = fakeStatus.getString("currentCode");
-                JSONObject point = JSON.parseObject(currentCode);
-                point.put("x", path.getInteger("xp"));
-                point.put("y", path.getInteger("yp"));
-                point.put("z", path.getInteger("z"));
-                fakeStatus.put("currentCode", JSON.toJSONString(point));
-                try {
-                    Thread.sleep(100);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            }
+            fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand);
+            response = genereateFakeCommandResponse(requestId, taskId, requestType);
         } else if (requestType.equals("readState")) {
             response = genereateFakeStatusResponse(requestId, fakeStatus);
         }

--
Gitblit v1.9.1