From 53a71007458bdded764dc52a39d596f8c4ca28db Mon Sep 17 00:00:00 2001
From: DELL <DELL@qq.com>
Date: 星期四, 18 九月 2025 15:42:41 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java |  128 +++++++++++++++++++++++++++++++-----------
 1 files changed, 94 insertions(+), 34 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 f1ddab6..f93f317 100644
--- a/src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java
@@ -3,11 +3,11 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.zy.common.Cools;
-import com.zy.common.R;
 import com.zy.common.SpringUtils;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.News;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.RedisKeyType;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.param.UpdateFakeThreadStatusParam;
 import com.zy.core.properties.DeviceConfig;
@@ -19,9 +19,7 @@
 import java.io.*;
 import java.net.ServerSocket;
 import java.net.Socket;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
 @Slf4j
@@ -174,7 +172,11 @@
                     }
                     List<DeviceConfig> deviceConfigs = fakeDeviceUtils.getFakeDeviceConfig();
                     for (DeviceConfig device : deviceConfigs) {
-                        excuteFakeCommand(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo());
+                        if (!device.getDeviceType().equals(String.valueOf(SlaveType.Shuttle))) {
+                            continue;
+                        }
+
+                        excuteFakeCommand(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), device);
                     }
                 }catch (Exception e){
                     e.printStackTrace();
@@ -250,7 +252,7 @@
         }
     }
 
-    private void excuteFakeCommand(String key) {
+    private void excuteFakeCommand(String key, DeviceConfig deviceConfig) {
         if (!fakeCommandMap.containsKey(key)) {
             return;
         }
@@ -269,56 +271,84 @@
                     fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
                     fakeStatusMap.put(key, fakeStatus);
 
-                    //delay
-                    Thread.sleep(2000);
+                    long startTime = System.currentTimeMillis();
+                    while (true) {
+                        if((System.currentTimeMillis() - startTime) < 1000 * 2) {
+                            continue;
+                        }
+                        break;
+                    }
                     fakeStatus.put("hasLift", true);
                     fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
                     fakeStatusMap.put(key, fakeStatus);
-                }else if (commandType.equals("liftDown")) {
+                } else if (commandType.equals("liftDown")) {
                     fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
                     fakeStatusMap.put(key, fakeStatus);
 
-                    //delay
-                    Thread.sleep(2000);
+                    long startTime = System.currentTimeMillis();
+                    while (true) {
+                        if((System.currentTimeMillis() - startTime) < 1000 * 2) {
+                            continue;
+                        }
+                        break;
+                    }
                     fakeStatus.put("hasLift", false);
                     fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
                     fakeStatusMap.put(key, fakeStatus);
-                }else if (commandType.equals("charge")) {
+                } else if (commandType.equals("charge")) {
                     fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
                     fakeStatusMap.put(key, fakeStatus);
 
-                    //delay
-                    Thread.sleep(2000);
+                    long startTime = System.currentTimeMillis();
+                    while (true) {
+                        if((System.currentTimeMillis() - startTime) < 1000 * 2) {
+                            continue;
+                        }
+                        break;
+                    }
                     fakeStatus.put("hasCharge", true);
 
                     Integer batteryPower = Integer.parseInt(fakeStatus.getString("batteryPower"));
                     while (true) {
-                        Thread.sleep(10000);
+                        if((System.currentTimeMillis() - startTime) < 1000 * 10) {
+                            continue;
+                        }
                         batteryPower = batteryPower + 1;
                         fakeStatus.put("batteryPower", batteryPower);
                         fakeStatusMap.put(key, fakeStatus);
-                        if(batteryPower >= 100) {
+                        startTime = System.currentTimeMillis();
+                        if (batteryPower >= 100) {
                             break;
                         }
                     }
 
                     fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
                     fakeStatusMap.put(key, fakeStatus);
-                }else if (commandType.equals("stopCharge")) {
+                } else if (commandType.equals("stopCharge")) {
                     fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
                     fakeStatusMap.put(key, fakeStatus);
 
-                    //delay
-                    Thread.sleep(2000);
+                    long startTime = System.currentTimeMillis();
+                    while (true) {
+                        if((System.currentTimeMillis() - startTime) < 1000 * 2) {
+                            continue;
+                        }
+                        break;
+                    }
                     fakeStatus.put("hasCharge", false);
                     fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
                     fakeStatusMap.put(key, fakeStatus);
-                }else if (commandType.equals("updateFloor")) {
+                } else if (commandType.equals("updateFloor")) {
                     fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
                     fakeStatusMap.put(key, fakeStatus);
 
-                    //delay
-                    Thread.sleep(2000);
+                    long startTime = System.currentTimeMillis();
+                    while (true) {
+                        if((System.currentTimeMillis() - startTime) < 1000 * 2) {
+                            continue;
+                        }
+                        break;
+                    }
 
                     JSONObject body = command.getJSONObject("commandBody");
                     String currentCode = fakeStatus.getString("currentCode");
@@ -327,19 +357,45 @@
                     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);
+                } else if (commandType.equals("move") || commandType.equals("intoLift") || commandType.equals("outLift")) {
+                    String baseCommandKey = RedisKeyType.FAKE_SHUTTLE_MOVE_EXECUTE_COMMAND_LIST.key + deviceConfig.getDeviceNo() + "_";
+                    while (true) {
+                        Set<String> keys = redisUtil.searchKeys(baseCommandKey);
+                        if (keys.isEmpty()) {
+                            break;
+                        }
+                    }
+
+                    String finalKey = baseCommandKey + System.currentTimeMillis();
+                    redisUtil.set(finalKey, true, 60 * 2);
 
                     JSONObject body = command.getJSONObject("commandBody");
+                    String requestType = body.getString("requestType");
                     String pathList = body.getString("path");
-                    List<JSONObject> list = JSON.parseArray(pathList, JSONObject.class);
-                    for (JSONObject path : list) {
+                    List<JSONObject> executePathList = JSON.parseArray(pathList, JSONObject.class);
+
+                    fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
+                    fakeStatusMap.put(key, fakeStatus);
+                    long startTime = System.currentTimeMillis();
+                    while (true) {
+                        if((System.currentTimeMillis() - startTime) < 1000 * 2) {
+                            continue;
+                        }
+                        break;
+                    }
+
+                    for (JSONObject path : executePathList) {
                         while (true) {
                             JSONObject realFakeStatus = fakeStatusMap.get(key);
                             Integer errorCode = realFakeStatus.getInteger("errorCode");
                             if (errorCode > 0) {
+                                continue;
+                            }
+                            break;
+                        }
+
+                        while (true) {
+                            if((System.currentTimeMillis() - startTime) < 1000 * 1) {
                                 continue;
                             }
                             break;
@@ -353,19 +409,21 @@
                         fakeStatus.put("currentCode", JSON.toJSONString(point));
                         fakeStatus.put("deviceStatus", 0);//璁惧蹇欑
                         fakeStatusMap.put(key, fakeStatus);
-                        Thread.sleep(2000);
+                        startTime = System.currentTimeMillis();
                     }
 
                     fakeStatus.put("deviceStatus", 1);//璁惧绌洪棽
                     fakeStatusMap.put(key, fakeStatus);
+                    redisUtil.del(finalKey);
                 }
-            }catch (Exception e){
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }).start();
     }
 
     private void handleClient(DeviceConfig device) throws IOException {
+        StringBuffer sb = new StringBuffer();
         try {
             Socket socket = fakeServerMap.get(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo());
             if (socket == null) {
@@ -380,13 +438,14 @@
             // 鑾峰彇杈撳叆娴�
             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
             // 璇诲彇鏈嶅姟鍣ㄧ殑鍝嶅簲
-            StringBuffer sb = new StringBuffer();
             char[] chars = new char[2048];//缂撳啿鍖�
             while (true) {
                 reader.read(chars);
                 String trim = new String(chars);
-                sb.append(trim);
-                if (trim.lastIndexOf("\r\n") != -1) {
+                int lastIndexOf = trim.lastIndexOf("\r\n");
+                if (lastIndexOf != -1) {
+                    trim = trim.substring(0, lastIndexOf);
+                    sb.append(trim);
                     break;
                 }
             }
@@ -395,6 +454,7 @@
 //            log.info("鏀跺埌Client Data: {}", JSON.toJSONString(result));
             processCommand(result, device);
         } catch (Exception e) {
+            log.error("handleClient deviceNo:{},recevie:{}", device.getDeviceNo(), sb);
             e.printStackTrace();
         }
     }
@@ -437,7 +497,7 @@
         } else if (requestType.equals("updateFloor")) {
             fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand);
             response = genereateFakeCommandResponse(requestId, taskId, requestType);
-        } else if (requestType.equals("move")) {
+        } else if (requestType.equals("move") || requestType.equals("intoLift") || requestType.equals("outLift")) {
             fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand);
             response = genereateFakeCommandResponse(requestId, taskId, requestType);
         } else if (requestType.equals("readState")) {

--
Gitblit v1.9.1