#
zy
2025-07-25 8e1cb9a0ff0f25f3c29fa05407e5ab35d3b484de
#
2个文件已修改
103 ■■■■■ 已修改文件
src/main/java/com/zy/core/enums/RedisKeyType.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -20,6 +20,9 @@
    //虚拟小车申请连接权限
    FAKE_SHUTTLE_APPLY_CONNECT("fakeShuttleApplyConnect"),
    //虚拟小车移动指令执行库
    FAKE_SHUTTLE_MOVE_EXECUTE_COMMAND_LIST("fakeShuttleMoveExecuteCommandList_"),
    ;
    public String key;
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,7 @@
                    }
                    List<DeviceConfig> deviceConfigs = fakeDeviceUtils.getFakeDeviceConfig();
                    for (DeviceConfig device : deviceConfigs) {
                        excuteFakeCommand(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo());
                        excuteFakeCommand(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), device);
                    }
                }catch (Exception e){
                    e.printStackTrace();
@@ -250,7 +248,7 @@
        }
    }
    private void excuteFakeCommand(String key) {
    private void excuteFakeCommand(String key, DeviceConfig deviceConfig) {
        if (!fakeCommandMap.containsKey(key)) {
            return;
        }
@@ -274,7 +272,7 @@
                    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);
@@ -283,7 +281,7 @@
                    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);
@@ -297,14 +295,14 @@
                        batteryPower = batteryPower + 1;
                        fakeStatus.put("batteryPower", batteryPower);
                        fakeStatusMap.put(key, fakeStatus);
                        if(batteryPower >= 100) {
                        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);
@@ -313,7 +311,7 @@
                    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);
@@ -327,39 +325,77 @@
                    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")) {
                    boolean firstMove = true;
                    String baseCommandKey = RedisKeyType.FAKE_SHUTTLE_MOVE_EXECUTE_COMMAND_LIST.key + deviceConfig.getDeviceNo() + "_";
                    Set<String> keys = redisUtil.searchKeys(baseCommandKey);
                    if (!keys.isEmpty()) {
                        firstMove = false;
                    }
                    JSONObject body = command.getJSONObject("commandBody");
                    String pathList = body.getString("path");
                    List<JSONObject> list = JSON.parseArray(pathList, JSONObject.class);
                    for (JSONObject path : list) {
                        while (true) {
                            JSONObject realFakeStatus = fakeStatusMap.get(key);
                            Integer errorCode = realFakeStatus.getInteger("errorCode");
                            if (errorCode > 0) {
                                continue;
                            }
                    String finalKey = baseCommandKey + System.currentTimeMillis();
                    redisUtil.set(finalKey, list);
                    if(!firstMove) {
                        return;
                    }
                    fakeStatus.put("deviceStatus", 0);//设备忙碌
                    fakeStatusMap.put(key, fakeStatus);
                    Thread.sleep(2000);
                    while (true) {
                        Set<String> searchKeys = redisUtil.searchKeys(baseCommandKey);
                        if(searchKeys.isEmpty()) {
                            break;
                        }
                        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);
                        TreeSet<String> treeSet = new TreeSet<>();
                        for (String tmpKey : searchKeys) {
                            treeSet.add(tmpKey);
                        }
                        String first = treeSet.first();
                        Object object = redisUtil.get(first);
                        if(object == null) {
                            break;
                        }
                        List<JSONObject> executePathList = (List<JSONObject>) object;
                        for (JSONObject path : executePathList) {
                            while (true) {
                                JSONObject realFakeStatus = fakeStatusMap.get(key);
                                Integer errorCode = realFakeStatus.getInteger("errorCode");
                                if (errorCode > 0) {
                                    continue;
                                }
                                break;
                            }
                            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);
                        }
                        redisUtil.del(first);
                    }
                    fakeStatus.put("deviceStatus", 1);//设备空闲
                    fakeStatusMap.put(key, fakeStatus);
                }
            }catch (Exception e){
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();