From 728ad81fa10d2879654c5f9ae4314db94eafb865 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期五, 01 八月 2025 08:08:18 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 199 ++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 160 insertions(+), 39 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 05d895e..312b527 100644 --- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java @@ -20,8 +20,11 @@ import com.zy.common.utils.NavigateMapData; import com.zy.common.utils.NavigatePositionConvert; import com.zy.common.utils.RedisUtil; +import com.zy.common.utils.ShuttleOperaUtils; import com.zy.core.News; +import com.zy.core.action.ShuttleAction; import com.zy.core.model.DeviceCommandMsgModel; +import com.zy.core.model.command.ShuttleAssignCommand; import com.zy.core.utils.DeviceMsgUtils; import com.zy.core.cache.OutputQueue; import com.zy.core.enums.*; @@ -49,6 +52,7 @@ private DeviceConfig deviceConfig; private RedisUtil redisUtil; private ShuttleProtocol shuttleProtocol; + private ShuttleAction shuttleAction = null; private static final boolean DEBUG = false;//璋冭瘯妯″紡 @@ -85,38 +89,35 @@ }); 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); -// } -// Thread.sleep(100); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// }); -// executeThread.start(); + //璁惧鎵ц + Thread executeThread = new Thread(() -> { + while (true) { + try { + if (shuttleAction == null) { + try { + shuttleAction = SpringUtils.getBean(ShuttleAction.class); + }catch (Exception e){ + } + 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() { @@ -752,6 +753,9 @@ @Override public synchronized boolean setProtocolStatus(ShuttleProtocolStatusType status) { + if (status.equals(ShuttleProtocolStatusType.IDLE)) { + this.shuttleProtocol.setIdleTime(System.currentTimeMillis()); + } this.shuttleProtocol.setProtocolStatus(status); return true; } @@ -821,6 +825,13 @@ } @Override + public boolean setTrafficControl(boolean enable, List<NavigateNode> nodeList) { + shuttleProtocol.setTrafficControl(enable); + shuttleProtocol.setTrafficControlNodes(nodeList); + return true; + } + + @Override public void updateDeviceDataLogTime(long time) { shuttleProtocol.setDeviceDataLog(time); } @@ -839,6 +850,116 @@ body.put("responseType", "state"); return null; + } + + @Override + public boolean restartCalcPath() { + ConfigService configService = SpringUtils.getBean(ConfigService.class); + if (configService == null) { + return false; + } + + ShuttleAction shuttleAction = SpringUtils.getBean(ShuttleAction.class); + if (shuttleAction == null) { + return false; + } + + ShuttleOperaUtils shuttleOperaUtils = SpringUtils.getBean(ShuttleOperaUtils.class); + if (shuttleOperaUtils == null) { + return false; + } + + ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class); + if (objectMapper == null) { + return false; + } + + boolean trafficControlRestartCalcPath = false; + Config trafficControlRestartCalcPathConfig = configService.selectOne(new EntityWrapper<Config>() + .eq("code", "trafficControlRestartCalcPath") + ); + if(trafficControlRestartCalcPathConfig != null) { + trafficControlRestartCalcPath = trafficControlRestartCalcPathConfig.getValue().equals("Y") ? true : false; + } + + if (!trafficControlRestartCalcPath) { + return false; + } + + if (shuttleProtocol.getTaskNo() == 0) { + return false; + } + + if (!this.isDeviceIdle()) { + return false; + } + + Object object = redisUtil.get(RedisKeyType.SHUTTLE_RESTART_CALC_PATH.key + shuttleProtocol.getShuttleNo()); + if (object != null) { + return false; + } + + Integer taskNo = shuttleProtocol.getTaskNo(); + Object obj = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + taskNo); + if (obj == null) { + return false; + } + + ShuttleRedisCommand redisCommand = null; + try { + redisCommand = objectMapper.readValue(String.valueOf(obj), ShuttleRedisCommand.class); + } catch (IOException e) { + throw new RuntimeException(e); + } + + if (redisCommand == null) { + return false; + } + + ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); + String locNo = assignCommand.getLocNo(); + List<NavigationMapType> mapTypes = assignCommand.getMapTypes(); + if (locNo == null) { + return false; + } + + if (mapTypes == null) { + return false; + } + + String currentLocNo = shuttleProtocol.getCurrentLocNo(); + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(currentLocNo, locNo, mapTypes, assignCommand, this); + if (commands == null) { + return false; + } + + if (assignCommand.getTaskMode() == ShuttleTaskModeType.TRANSPORT.id) { + List<ShuttleCommand> originCommands = assignCommand.getCommands(); + if (originCommands == null) { + return false; + } + + ShuttleCommand firstCommand = originCommands.get(0); + ShuttleCommand endCommand = originCommands.get(originCommands.size() - 1); + + if (firstCommand.getMode() != ShuttleCommandModeType.PALLET_LIFT.id) { + return false; + } + + if (endCommand.getMode() != ShuttleCommandModeType.PALLET_DOWN.id) { + return false; + } + + commands.add(0, firstCommand); + commands.add(endCommand); + } + + assignCommand.setCommands(commands); + + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + redisUtil.set(RedisKeyType.SHUTTLE_RESTART_CALC_PATH.key + shuttleProtocol.getShuttleNo(), true, 60); + return true; } @Override @@ -1091,16 +1212,16 @@ private JSONObject queryCommandStatus(String resultKey) { // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� - // 灏濊瘯50娆� JSONObject result = null; - for (int i = 0; i < 50; i++) { + long startTime = System.currentTimeMillis(); + while (true) { + if((System.currentTimeMillis() - startTime) > 1000 * 10) { + break; + } + result = getRequestBody(resultKey); if (result == null) { - try { - Thread.sleep(500); - } catch (Exception e) { - e.printStackTrace(); - } + continue; }else { break; } -- Gitblit v1.9.1