#
Junjie
3 天以前 ce511a3d55e5f349b1647172e562c1659bbc8172
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")) {