From ff3b5df7015b2f2c5e24d9973a7b443309d8e579 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期六, 19 七月 2025 18:07:29 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 260 +++++++++++++++++++--------------------------------- 1 files changed, 95 insertions(+), 165 deletions(-) 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 166c711..05d895e 100644 --- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java @@ -9,10 +9,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.zy.asrs.entity.BasShuttle; import com.zy.asrs.entity.DeviceConfig; -import com.zy.asrs.entity.DeviceDataLog; import com.zy.asrs.entity.LocMast; import com.zy.asrs.service.BasShuttleService; -import com.zy.asrs.service.DeviceDataLogService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.utils.Utils; import com.zy.common.ExecuteSupport; @@ -25,7 +23,6 @@ import com.zy.core.News; import com.zy.core.model.DeviceCommandMsgModel; import com.zy.core.utils.DeviceMsgUtils; -import com.zy.core.action.ShuttleAction; import com.zy.core.cache.OutputQueue; import com.zy.core.enums.*; import com.zy.core.model.CommandResponse; @@ -56,7 +53,7 @@ private static final boolean DEBUG = false;//璋冭瘯妯″紡 private List<JSONObject> socketReadResults = new ArrayList<>(); - private List<JSONObject> socketResults = new ArrayList<>(); + private List<DeviceMsgModel> socketResults = new ArrayList<>(); //鍘熷璁惧鏁版嵁 private Object originDeviceData; @@ -78,6 +75,9 @@ listenInit();//鐩戝惉鍒濆鍖栦簨浠� readStatus(); Thread.sleep(100); + +// //灏忚溅绌洪棽涓旀湁璺戝簱绋嬪簭 +// shuttleAction.moveLoc(deviceConfig.getDeviceNo()); } catch (Exception e) { log.error("ShuttleThread Fail", e); } @@ -85,85 +85,38 @@ }); readThread.start(); - //璁惧鎵ц - Thread executeThread = new Thread(() -> { - while (true) { - try { - ShuttleAction shuttleAction = null; - try { - shuttleAction = SpringUtils.getBean(ShuttleAction.class); - }catch (Exception e){ - continue; - } - - if (shuttleAction == null) { - continue; - } - - Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo()); - if (object == null) { - continue; - } - - Integer taskNo = Integer.valueOf(String.valueOf(object)); - if (taskNo != 0) { - //瀛樺湪浠诲姟闇�瑕佹墽琛� - boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo); - } - -// //灏忚溅绌洪棽涓旀湁璺戝簱绋嬪簭 -// shuttleAction.moveLoc(deviceConfig.getDeviceNo()); - - //婕旂ず妯″紡 - shuttleAction.demo(deviceConfig.getDeviceNo()); - - Thread.sleep(200); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - executeThread.start(); - - //鍏朵粬浠诲姟 - Thread otherThread = new Thread(() -> { - while (true) { - try { - saveLog();//淇濆瓨鏁版嵁 - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - otherThread.start(); - } - - private void saveLog() { - if (shuttleProtocol == null) { - return; - } - - if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) { - if (this.originDeviceData != null) { - //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰� - //淇濆瓨鏁版嵁璁板綍 - DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); - if (deviceDataLogService == null) { - return; - } - DeviceDataLog deviceDataLog = new DeviceDataLog(); - deviceDataLog.setOriginData(JSON.toJSONString(this.originDeviceData)); - deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol)); - deviceDataLog.setType(String.valueOf(SlaveType.Shuttle)); - deviceDataLog.setDeviceNo(deviceConfig.getDeviceNo()); - deviceDataLog.setCreateTime(new Date()); - deviceDataLogService.insert(deviceDataLog); - - //鏇存柊閲囬泦鏃堕棿 - shuttleProtocol.setDeviceDataLog(System.currentTimeMillis()); - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), deviceConfig.getDeviceNo())); - } - } +// //璁惧鎵ц +// Thread executeThread = new Thread(() -> { +// while (true) { +// try { +// ShuttleAction shuttleAction = null; +// try { +// shuttleAction = SpringUtils.getBean(ShuttleAction.class); +// }catch (Exception e){ +// continue; +// } +// +// if (shuttleAction == null) { +// continue; +// } +// +// Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo()); +// if (object == null) { +// continue; +// } +// +// Integer taskNo = Integer.valueOf(String.valueOf(object)); +// if (taskNo != 0) { +// //瀛樺湪浠诲姟闇�瑕佹墽琛� +// boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo); +// } +// Thread.sleep(100); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// }); +// executeThread.start(); } private void listenMessageFromRedis() { @@ -188,54 +141,32 @@ data.put("originDeviceData", deviceMsg.getDeviceOriginMsg()); socketReadResults.add(data); } else { - socketResults.add(data);//娣诲姞鏁版嵁 + socketResults.add(deviceMsg);//娣诲姞鏁版嵁 } } catch (Exception e) { e.printStackTrace(); } } - public JSONObject getRequestBody(String type, String taskId) { + public JSONObject getRequestBody(String resultKey) { try { // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� JSONObject result = null; - if (type.equals("readState")) { - type = "state"; - } - + int idx = -1; for (int i = 0; i < socketResults.size(); i++) { - JSONObject socketResult = socketResults.get(i); - if (!socketResult.get("msgType").equals("responseMsg")) {//涓嶆槸鍝嶅簲鍐呭 - continue; - } - - JSONObject resultResponse = JSON.parseObject(socketResult.get("response").toString()); - JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString()); - String responseType = resultBody.get("responseType").toString(); - if (DEBUG) { - result = socketResult; + DeviceMsgModel deviceMsgModel = socketResults.get(i); + if(deviceMsgModel.getResultKey().equals(resultKey)){ + idx = i; + result = JSON.parseObject(JSON.toJSONString(deviceMsgModel.getDeviceMsg())); break; } - - if (!responseType.equals(type)) { - continue;//鍝嶅簲绫诲瀷涓庤姹傜被鍨嬩笉涓�鑷达紝涓嶅湪璋冭瘯妯″紡涓� - } - - if (taskId != null) { - String responseTaskId = resultBody.get("taskId").toString(); - if (!responseTaskId.equals(taskId)) { - continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓� - } - } - - result = socketResult; - break; } if (result == null) { return null;//鏃犲搷搴旂粨鏋� } + socketResults.remove(idx); return filterBodyData(result);//杩斿洖Body缁撴灉闆� } catch (Exception e) { return null; @@ -359,35 +290,38 @@ // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� JSONObject result = null; int removeIdx = -1; + JSONObject socketResult = null; for (int i = 0; i < socketResults.size(); i++) { - JSONObject socketResult = socketResults.get(i); - if (socketResult == null) { + DeviceMsgModel deviceMsgModel = socketResults.get(i); + if (!deviceMsgModel.getDeviceMsgType().equals("shuttleInit")) { continue; } - if (!socketResult.get("msgType").equals("requestMsg")) {//涓嶆槸璇锋眰鍐呭 - continue; - } + removeIdx = i; + socketResult = JSON.parseObject(JSON.toJSONString(deviceMsgModel.getDeviceMsg())); + break; + } - JSONObject resultResponse = JSON.parseObject(socketResult.get("request").toString()); - JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString()); - JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString()); - String requestType = resultBody.getString("requestType"); - Integer requestId = resultHeader.getInteger("requestId"); - if (requestType.equals("init")) { - removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄� - socketResults.remove(removeIdx); + if (socketResult == null) { + return; + } - Integer code = resultBody.getInteger("code"); - //灏忚溅澶嶄綅璇锋眰 - ShuttleCommand initCommand = getInitCommand(requestId, code); - //鍙戝嚭璇锋眰 - NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class); - requestCommand(httpCommand); + JSONObject resultResponse = JSON.parseObject(socketResult.get("request").toString()); + JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString()); + JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString()); + String requestType = resultBody.getString("requestType"); + Integer requestId = resultHeader.getInteger("requestId"); + if (requestType.equals("init")) { + socketResults.remove(removeIdx); - log.info(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort())); - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort())); - break; - } + Integer code = resultBody.getInteger("code"); + //灏忚溅澶嶄綅璇锋眰 + ShuttleCommand initCommand = getInitCommand(requestId, code); + //鍙戝嚭璇锋眰 + NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class); + requestCommand(httpCommand); + + log.info(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort())); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort())); } } catch (Exception e) { e.printStackTrace(); @@ -479,9 +413,9 @@ try { //鍙戝嚭璇锋眰 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); - JSONObject requestToken = requestCommand(httpCommand); + String resultKey = requestCommand(httpCommand); //鏌ヨ璇锋眰缁撴灉 - JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId")); + JSONObject result = queryCommandStatus(resultKey); if (result == null) { return response;//璇锋眰澶辫触 } @@ -502,9 +436,9 @@ try { //鍙戝嚭璇锋眰 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); - JSONObject requestToken = requestCommand(httpCommand); + String resultKey = requestCommand(httpCommand); //鏌ヨ璇锋眰缁撴灉 - JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId")); + JSONObject result = queryCommandStatus(resultKey); if (result == null) { return response;//璇锋眰澶辫触 } @@ -524,9 +458,9 @@ try { //鍙戝嚭璇锋眰 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); - JSONObject requestToken = requestCommand(httpCommand); + String resultKey = requestCommand(httpCommand); //鏌ヨ璇锋眰缁撴灉 - JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId")); + JSONObject result = queryCommandStatus(resultKey); if (result == null) { return response;//璇锋眰澶辫触 } @@ -554,9 +488,9 @@ try { //鍙戝嚭璇锋眰 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); - JSONObject requestToken = requestCommand(httpCommand); + String resultKey = requestCommand(httpCommand); //鏌ヨ璇锋眰缁撴灉 - JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId")); + JSONObject result = queryCommandStatus(resultKey); if (result == null) { return response;//璇锋眰澶辫触 } @@ -798,7 +732,7 @@ //灏嗚矾寰勯攣涓庡皬杞﹁矾寰勮繘琛屽尮閰� ArrayList<NavigateNode> tmp = new ArrayList<>(); //妫�娴嬭矾寰勬槸鍚﹁閿佸畾 - int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.DFX.id, null, null); + int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.getDfxWithDevice(), null, null); for (NavigateNode node : path) { if(map[node.getX()][node.getY()] == -999) { tmp.add(node); @@ -887,6 +821,11 @@ } @Override + public void updateDeviceDataLogTime(long time) { + shuttleProtocol.setDeviceDataLog(time); + } + + @Override public JSONObject parseStatusToMsg(ShuttleProtocol shuttleProtocol) { JSONObject result = new JSONObject(); result.put("msgType", "responseMsg"); @@ -928,7 +867,7 @@ int yp = Integer.parseInt(String.valueOf(nyNode.get("x"))); int z = Integer.parseInt(String.valueOf(nyNode.get("z"))); - List<List<MapNode>> mapData = navigateMapData.getJsonData(startNode.getZ(), NavigationMapType.NONE.id, null, null); + List<List<MapNode>> mapData = navigateMapData.getJsonData(startNode.getZ(), NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null); List<MapNode> mapNodes = mapData.get(node.getX()); MapNode mapNode = mapNodes.get(node.getY()); @@ -1044,7 +983,7 @@ throw new CoolException("鍦板潃鐮佷笉瀛樺湪"); } - List<List<MapNode>> mapData = navigateMapData.getJsonData(lev, NavigationMapType.NONE.id, null, null); + List<List<MapNode>> mapData = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null); List<MapNode> mapNodes = mapData.get(locMast.getRow1()); MapNode mapNode = mapNodes.get(locMast.getBay1()); @@ -1127,7 +1066,7 @@ } //鍙戝嚭璇锋眰 - private JSONObject requestCommand(NyShuttleHttpCommand httpCommand) throws IOException { + private String requestCommand(NyShuttleHttpCommand httpCommand) throws IOException { try { DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class); if (deviceMsgUtils == null) { @@ -1143,33 +1082,19 @@ commandMsgModel.setDeviceType(String.valueOf(SlaveType.Shuttle)); commandMsgModel.setCommand(data); String key = deviceMsgUtils.sendDeviceCommand(SlaveType.Shuttle, deviceConfig.getDeviceNo(), commandMsgModel); - - String requestType = null; - String taskId = null; - try { - requestType = httpCommand.getRequest().getBody().get("requestType").toString(); - taskId = httpCommand.getRequest().getBody().get("taskId").toString(); - } catch (Exception e) { -// return null; - //taskId鍙兘鍙栫┖锛屼笉鎶ラ敊锛屾甯告儏鍐� - } - - JSONObject result = new JSONObject(); - result.put("requestType", requestType); - result.put("taskId", taskId); - return result; + return key; }catch (Exception e) { e.printStackTrace(); } return null; } - private JSONObject queryCommandStatus(String requestType, String taskId) { + private JSONObject queryCommandStatus(String resultKey) { // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� // 灏濊瘯50娆� JSONObject result = null; for (int i = 0; i < 50; i++) { - result = getRequestBody(requestType, taskId); + result = getRequestBody(resultKey); if (result == null) { try { Thread.sleep(500); @@ -1232,6 +1157,11 @@ return new int[]{data.getInteger("y"), data.getInteger("x"), z}; } + @Override + public Object getOriginDeviceData() { + return this.originDeviceData; + } + @Data private class InnerSuhttleExtend { -- Gitblit v1.9.1