From 7c4bbcb2ceed34e82212b82d2aa551a87bdaaa0d Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期日, 06 七月 2025 16:55:57 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 55 +-------
src/main/java/com/zy/core/utils/FakeDeviceUtils.java | 4
src/main/java/com/zy/core/thread/ShuttleThread.java | 2
src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java | 228 ++++++++++++++++++++++++++++++++++++++
src/main/java/com/zy/core/ServerBootstrap.java | 17 --
5 files changed, 241 insertions(+), 65 deletions(-)
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index b2a3c33..08e45da 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -7,10 +7,10 @@
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.properties.DeviceConfig;
+import com.zy.core.thread.fake.FakeNyShuttleThread;
import com.zy.core.thread.impl.LfdZyForkLiftMasterThread;
import com.zy.core.thread.impl.NyShuttleThread;
import com.zy.core.utils.DeviceMsgUtils;
-import com.zy.core.utils.FakeDeviceUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
@@ -31,8 +31,6 @@
private RedisUtil redisUtil;
@Autowired
private DeviceMsgUtils deviceMsgUtils;
- @Autowired
- private FakeDeviceUtils fakeDeviceUtils;
@PostConstruct
@@ -85,17 +83,8 @@
}
private void initFakeThread(){
- String fakeDeviceConfig = fakeDeviceUtils.getFakeDeviceConfig();
- if(null != fakeDeviceConfig){
- List<DeviceConfig> deviceConfigs = JSON.parseArray(fakeDeviceConfig, DeviceConfig.class);
- for (DeviceConfig device : deviceConfigs) {
- if (device.getDeviceType().equals(String.valueOf(SlaveType.ForkLift))) {
- initForkLiftThread(device);
- } else if (device.getDeviceType().equals(String.valueOf(SlaveType.Shuttle))) {
- initShuttleThread(device);
- }
- }
- }
+ ThreadHandler thread = new FakeNyShuttleThread(redisUtil);
+ new Thread(thread).start();
}
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index 693ccb0..70f4b63 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -7,8 +7,6 @@
DeviceConfig getDeviceConfig();
- boolean isFake();
-
void stopThread();
}
diff --git a/src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java b/src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java
new file mode 100644
index 0000000..ab8594b
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/fake/FakeNyShuttleThread.java
@@ -0,0 +1,228 @@
+package com.zy.core.thread.fake;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.zy.common.SpringUtils;
+import com.zy.common.exception.CoolException;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
+import com.zy.core.ThreadHandler;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.properties.DeviceConfig;
+import com.zy.core.thread.impl.NyShuttleThread;
+import com.zy.core.utils.FakeDeviceUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.*;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@Slf4j
+@SuppressWarnings("all")
+public class FakeNyShuttleThread implements ThreadHandler {
+
+
+ private RedisUtil redisUtil;
+ 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\\\":12,\\\"y\\\":37,\\\"z\\\":3}\",\"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 boolean fake = false;
+
+ public FakeNyShuttleThread(RedisUtil redisUtil) {
+ this.redisUtil = redisUtil;
+ }
+
+ @Override
+ public void run() {
+ News.info("Fake Server is Started");
+ while (true) {
+ try {
+ initFakeDeviceServer();
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void initFakeDeviceServer() {
+ FakeDeviceUtils fakeDeviceUtils = SpringUtils.getBean(FakeDeviceUtils.class);
+ String fakeDeviceConfig = fakeDeviceUtils.getFakeDeviceConfig();
+ if(null != fakeDeviceConfig){
+ List<DeviceConfig> deviceConfigs = JSON.parseArray(fakeDeviceConfig, DeviceConfig.class);
+ for (DeviceConfig device : deviceConfigs) {
+ if (!device.getDeviceType().equals(String.valueOf(SlaveType.Shuttle))) {
+ continue;
+ }
+
+ if (!device.getThreadImpl().equals("NyShuttleThread")) {
+ continue;
+ }
+
+ if (fakeServerMap.containsKey(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo())) {
+ continue;
+ }
+
+ Thread fakeThread = new Thread(() -> {
+ try {
+ ServerSocket serverSocket = new ServerSocket(device.getPort());
+ Socket fakeSocket = serverSocket.accept();
+ fakeServerMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeSocket);
+ fakeStatusMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), JSON.parseObject(JSON.toJSONString(fakeStatusDemo)));
+ while (true) {
+ if(fakeSocket == null) {
+ fakeServerMap.remove(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo());
+ break;
+ }
+
+ if(fakeSocket.isClosed()) {
+ fakeSocket = null;
+ continue;
+ }
+
+ handleClient(fakeSocket, device);
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ });
+ fakeThread.start();
+
+ // init
+ ThreadHandler thread = new NyShuttleThread(device, redisUtil);;
+ new Thread(thread).start();
+ SlaveConnection.put(SlaveType.Shuttle, device.getDeviceNo(), thread);
+ }
+ }
+ }
+
+ private void handleClient(Socket socket, DeviceConfig device) throws IOException {
+ try {
+ // 鑾峰彇杈撳叆娴�
+ BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+ // 璇诲彇鏈嶅姟鍣ㄧ殑鍝嶅簲
+ 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) {
+ break;
+ }
+ }
+
+ JSONObject result = JSON.parseObject(sb.toString());
+ log.info("鏀跺埌Client Data: {}", JSON.toJSONString(result));
+ processCommand(result, device);
+ } catch (Exception e) {
+// e.printStackTrace();
+ socket.close();
+ fakeServerMap.remove(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo());
+ }
+ }
+
+ public void processCommand(JSONObject result, DeviceConfig device) throws IOException {
+ String response = null;
+ JSONObject fakeStatus = fakeStatusMap.get(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo());
+
+ JSONObject request = result.getJSONObject("request");
+ JSONObject body = request.getJSONObject("body");
+ String requestType = body.getString("requestType");
+ Integer taskId = body.getInteger("taskId");
+ if (requestType.equals("liftUp")) {
+ fakeStatus.put("hasLift", true);
+ } else if (requestType.equals("liftDown")) {
+ fakeStatus.put("hasLift", false);
+ } else if (requestType.equals("charge")) {
+ fakeStatus.put("hasCharge", true);
+ } else if (requestType.equals("stopCharge")) {
+ fakeStatus.put("hasCharge", false);
+ } 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));
+ } 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(1);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ } else if (requestType.equals("readState")) {
+ response = genereateFakeStatusResponse(taskId, fakeStatus);
+ }
+
+ fakeStatusMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeStatus);
+ if (response != null) {
+ Socket fakeSocket = fakeServerMap.get(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo());
+ OutputStreamWriter writer = new OutputStreamWriter(fakeSocket.getOutputStream());
+ writer.write(response + "\r\n");
+ writer.flush();
+ }
+ }
+
+ public String genereateFakeStatusResponse(Integer taskId, JSONObject fakeStatus) {
+ JSONObject result = new JSONObject();
+ JSONObject response = new JSONObject();
+ result.put("msgType", "responseMsg");
+ result.put("robotId", 5001);
+ result.put("response", response);
+
+ JSONObject header = new JSONObject();
+ JSONObject body = new JSONObject();
+ response.put("header", header);
+ response.put("body", body);
+
+ header.put("responseId", taskId);
+ header.put("version", "GV-APP-F427-N24036-1112");
+
+ body.put("responseType", "state");
+ body.put("workingMode", fakeStatus.getInteger("mode"));
+ body.put("free", fakeStatus.getInteger("deviceStatus"));
+ body.put("point", fakeStatus.getString("currentCode"));
+ body.put("powerPercent", fakeStatus.getString("batteryPower"));
+ body.put("voltage", fakeStatus.getInteger("batteryVoltage"));
+ body.put("errCode", new ArrayList<Integer>(){{add(fakeStatus.getInteger("errorCode"));add(0);}});
+ body.put("liftPosition", fakeStatus.getBoolean("hasLift") == true ? 2 : 1);
+ body.put("loadState", fakeStatus.getBoolean("hasPallet") == true ? 1 : 0);
+ body.put("runDir", fakeStatus.getString("runDirection"));
+ body.put("chargState", fakeStatus.getBoolean("hasCharge") == true ? 1 : 0);
+ body.put("speed", fakeStatus.getInteger("speed"));
+
+ JSONObject extend = fakeStatus.getJSONObject("extend");
+ body.put("suspendState", extend.getInteger("suspendState"));
+ body.put("maxCellVoltage", extend.getInteger("maxCellVoltage"));
+ body.put("minCellVoltage", extend.getInteger("minCellVoltage"));
+ body.put("voltage", extend.getInteger("voltage"));
+ body.put("chargeCycleTimes", extend.getInteger("chargeCycleTimes"));
+ body.put("surplusQuantity", extend.getInteger("surplusQuantity"));
+ body.put("countQuantity", extend.getInteger("countQuantity"));
+ return JSON.toJSONString(result);
+ }
+
+ @Override
+ public boolean connect() {
+ return true;
+ }
+
+ @Override
+ public void close() {
+
+ }
+
+}
diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
index 319e1e7..fbb504c 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -13,11 +13,11 @@
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.SlaveType;
import com.zy.core.thread.ShuttleThread;
+import io.netty.handler.timeout.ReadTimeoutException;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.net.InetAddress;
-import java.net.ServerSocket;
import java.net.Socket;
import java.text.MessageFormat;
import java.util.*;
@@ -29,21 +29,16 @@
private DeviceConfig deviceConfig;
private RedisUtil redisUtil;
private Socket socket;
- private ServerSocket serverSocket;
-
- private boolean fake = false;
private boolean stopThread = false;
public NyShuttleThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
this.deviceConfig = deviceConfig;
this.redisUtil = redisUtil;
- this.fake = deviceConfig.getFake();
}
@Override
public void run() {
News.info("{}鍙峰洓鍚戣溅绾跨▼鍚姩", deviceConfig.getDeviceNo());
- this.connect();
//鐩戝惉娑堟伅
Thread innerThread = new Thread(() -> {
@@ -52,9 +47,8 @@
break;
}
- System.out.println("read");
-
try {
+ this.connect();
Thread.sleep(200);
listenSocketMessage();
} catch (Exception e) {
@@ -71,7 +65,6 @@
break;
}
- System.out.println("executeThread");
try {
DeviceMsgUtils deviceMsgUtils = null;
try {
@@ -93,35 +86,6 @@
}
});
executeThread.start();
-
- if (this.fake) {
- Thread fakeThread = new Thread(() -> {
- try {
- serverSocket = new ServerSocket(deviceConfig.getPort());
-
- while (true) {
- if(stopThread) {
- break;
- }
-
- System.out.println("fakeThread");
- Socket accept = serverSocket.accept();
- handleClient(accept);
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- });
- fakeThread.start();
- }
- }
-
- private void handleClient(Socket socket) throws IOException {
- InputStream inputStream = socket.getInputStream();
- OutputStream outputStream = socket.getOutputStream();
- outputStream.write("test".getBytes());
- outputStream.flush();
- socket.close();
}
private void executeCommand(DeviceCommandMsgModel deviceCommandMsg) {
@@ -151,9 +115,9 @@
DeviceMsgUtils deviceMsgUtils = null;
try {
deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class);
- }catch (Exception e){
+ } catch (Exception e) {
}
- if(deviceMsgUtils == null) {
+ if (deviceMsgUtils == null) {
return;
}
@@ -172,6 +136,7 @@
}
JSONObject result = JSON.parseObject(sb.toString());//寰楀埌鍝嶅簲缁撴灉闆�
+ log.info("鏀跺埌Server Data: {}", JSON.toJSONString(result));
String msgType = result.getString("msgType");
if ("responseMsg".equals(msgType)) {
@@ -198,7 +163,7 @@
deviceMsgModel.setDeviceOriginMsg(sb.toString());
deviceMsgUtils.sendDeviceMsg(SlaveType.Shuttle, deviceConfig.getDeviceNo(), deviceMsgModel);
} catch (Exception e) {
- e.printStackTrace();
+// e.printStackTrace();
}
}
@@ -254,6 +219,10 @@
@Override
public boolean connect() {
try {
+ if(this.socket != null) {
+ return true;
+ }
+
InetAddress address = InetAddress.getByName(deviceConfig.getIp());
if (address.isReachable(10000)) {
Socket socket = new Socket(deviceConfig.getIp(), deviceConfig.getPort());
@@ -285,8 +254,4 @@
this.stopThread = true;
}
- @Override
- public boolean isFake() {
- return this.fake;
- }
}
diff --git a/src/main/java/com/zy/core/utils/FakeDeviceUtils.java b/src/main/java/com/zy/core/utils/FakeDeviceUtils.java
index 27d6d9f..847646e 100644
--- a/src/main/java/com/zy/core/utils/FakeDeviceUtils.java
+++ b/src/main/java/com/zy/core/utils/FakeDeviceUtils.java
@@ -55,10 +55,6 @@
throw new CoolException("璁惧绾跨▼涓嶅瓨鍦�");
}
- if (!shuttleThread.isFake()) {
- throw new CoolException("涓嶅厑璁稿垹闄ょ湡瀹炶澶囩嚎绋�");
- }
-
shuttleThread.stopThread();
}
--
Gitblit v1.9.1