From b6428016edf3de843020bc95fd1708d3bb1961e5 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期一, 07 七月 2025 16:41:51 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 480 ++++++++++++++++++++++++++++++------------------------------ 1 files changed, 240 insertions(+), 240 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 e3a1b4c..c375106 100644 --- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java @@ -8,6 +8,7 @@ import com.core.exception.CoolException; 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; @@ -22,11 +23,13 @@ import com.zy.common.utils.NavigatePositionConvert; import com.zy.common.utils.RedisUtil; 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; -import com.zy.core.model.ShuttleSlave; +import com.zy.core.model.DeviceMsgModel; import com.zy.core.model.command.NyShuttleHttpCommand; import com.zy.core.model.command.ShuttleCommand; import com.zy.core.model.command.ShuttleRedisCommand; @@ -38,11 +41,7 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.net.Socket; import java.text.MessageFormat; import java.util.*; @@ -50,10 +49,9 @@ @SuppressWarnings("all") public class NyShuttleThread implements ShuttleThread { - private ShuttleSlave slave; + private DeviceConfig deviceConfig; private RedisUtil redisUtil; private ShuttleProtocol shuttleProtocol; - private Socket socket; private static final boolean DEBUG = false;//璋冭瘯妯″紡 @@ -63,35 +61,23 @@ //鍘熷璁惧鏁版嵁 private Object originDeviceData; - public NyShuttleThread(ShuttleSlave slave, RedisUtil redisUtil) { - this.slave = slave; + public NyShuttleThread(DeviceConfig deviceConfig, RedisUtil redisUtil) { + this.deviceConfig = deviceConfig; this.redisUtil = redisUtil; } @Override public void run() { - News.info("{}鍙峰洓鍚戣溅绾跨▼鍚姩", slave.getId()); - this.connect(); - - //鐩戝惉娑堟伅骞跺瓨鍌� - Thread innerThread = new Thread(() -> { - while (true) { - try { - listenSocketMessage(); - listenInit();//鐩戝惉鍒濆鍖栦簨浠� - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - innerThread.start(); + News.info("{}鍙峰洓鍚戣溅绾跨▼鍚姩", deviceConfig.getDeviceNo()); //璁惧璇诲彇 Thread readThread = new Thread(() -> { while (true) { try { - read(); - Thread.sleep(50); + listenMessageFromRedis(); + listenInit();//鐩戝惉鍒濆鍖栦簨浠� + readStatus(); + Thread.sleep(100); } catch (Exception e) { log.error("ShuttleThread Fail", e); } @@ -103,12 +89,18 @@ Thread executeThread = new Thread(() -> { while (true) { try { - ShuttleAction shuttleAction = SpringUtils.getBean(ShuttleAction.class); + 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 + slave.getId()); + Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo()); if (object == null) { continue; } @@ -116,14 +108,14 @@ Integer taskNo = Integer.valueOf(String.valueOf(object)); if (taskNo != 0) { //瀛樺湪浠诲姟闇�瑕佹墽琛� - boolean result = shuttleAction.executeWork(slave.getId(), taskNo); + boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo); } // //灏忚溅绌洪棽涓旀湁璺戝簱绋嬪簭 -// shuttleAction.moveLoc(slave.getId()); +// shuttleAction.moveLoc(deviceConfig.getDeviceNo()); //婕旂ず妯″紡 - shuttleAction.demo(slave.getId()); + shuttleAction.demo(deviceConfig.getDeviceNo()); Thread.sleep(200); } catch (Exception e) { @@ -163,56 +155,43 @@ deviceDataLog.setOriginData(JSON.toJSONString(this.originDeviceData)); deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol)); deviceDataLog.setType(String.valueOf(SlaveType.Shuttle)); - deviceDataLog.setDeviceNo(slave.getId()); + 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()), slave.getId())); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), deviceConfig.getDeviceNo())); } } } - private void listenSocketMessage() { + private void listenMessageFromRedis() { try { - if (this.socket == null) { + DeviceMsgUtils deviceMsgUtils = null; + try { + deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class); + }catch (Exception e){ + + } + if (deviceMsgUtils == null) { + return; + } + DeviceMsgModel deviceMsg = deviceMsgUtils.getDeviceMsg(SlaveType.Shuttle, deviceConfig.getDeviceNo()); + if(deviceMsg == null){ return; } - // 鑾峰彇杈撳叆娴� - BufferedReader reader = new BufferedReader(new InputStreamReader(this.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 data = JSON.parseObject(JSON.toJSONString(deviceMsg.getDeviceMsg())); - JSONObject result = JSON.parseObject(sb.toString());//寰楀埌鍝嶅簲缁撴灉闆� - - String msgType = result.getString("msgType"); - if ("responseMsg".equals(msgType)) { - JSONObject response = result.getJSONObject("response"); - JSONObject body = response.getJSONObject("body"); - if (body.containsKey("workingMode")) { - //read - socketReadResults.add(body); - return; - } + if (deviceMsg.getDeviceMsgType().equals("status")) { + data.put("originDeviceData", deviceMsg.getDeviceOriginMsg()); + socketReadResults.add(data); + } else { + socketResults.add(data);//娣诲姞鏁版嵁 } - - if (!socketResults.isEmpty() && socketResults.size() >= 20) { - socketResults.remove(0);//娓呯悊澶磋妭鐐� - } - socketResults.add(result);//娣诲姞鏁版嵁 } catch (Exception e) { -// e.printStackTrace(); + e.printStackTrace(); } } @@ -263,24 +242,11 @@ } } - private void read() { - try { - if (this.socket == null || this.socket.isClosed()) { - //閾炬帴鏂紑閲嶆柊閾炬帴 - this.connect(); - } - readStatus(); - } catch (Exception e) { - e.printStackTrace(); - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戣鍙栧洓鍚戠┛姊溅鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - } - } - private void readStatus() { try { if (null == shuttleProtocol) { shuttleProtocol = new ShuttleProtocol(); - shuttleProtocol.setShuttleNo(slave.getId()); + shuttleProtocol.setShuttleNo(deviceConfig.getDeviceNo()); shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); InnerSuhttleExtend extend = new InnerSuhttleExtend(); @@ -288,103 +254,100 @@ } //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- - NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(slave.getId()); - requestCommandAsync(readStatusCommand);//璇锋眰鐘舵�� + DeviceMsgUtils deviceMsgUtils = null; + try { + deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class); + }catch (Exception e){ + + } + if(deviceMsgUtils == null){ + return; + } + + NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(deviceConfig.getDeviceNo()); + //鎸囦护瓒呰繃浜旀潯锛屼笉鍐嶄笅鍙戜换鍔$姸鎬佽姹� + TreeSet<String> deviceCommandMsgListKey = deviceMsgUtils.getDeviceCommandMsgListKey(SlaveType.Shuttle, deviceConfig.getDeviceNo()); + if (deviceCommandMsgListKey.size() < 5) { + requestCommandAsync(readStatusCommand);//璇锋眰鐘舵�� + } if (this.socketReadResults.isEmpty()) { if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) { //鏈�鍚庝竴娆′笂绾挎椂闂磋秴杩�60s锛岃瀹氱绾� - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); } return; } JSONObject data = this.socketReadResults.get(0); this.socketReadResults.remove(0); - if (data == null) { - if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) { - //鏈�鍚庝竴娆′笂绾挎椂闂磋秴杩�60s锛岃瀹氱绾� - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); - } - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - }else { + //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- + //灏忚溅璁惧鐘舵�� + shuttleProtocol.setDeviceStatus(data.getInteger("deviceStatus")); + //灏忚溅妯″紡 + shuttleProtocol.setMode(data.getInteger("mode")); + //褰撳墠浜岀淮鐮� + shuttleProtocol.setCurrentCode(data.getString("currentCode")); + //鐢垫睜鐢甸噺 + shuttleProtocol.setBatteryPower(data.getString("batteryPower")); + //鐢垫睜鐢靛帇 + shuttleProtocol.setBatteryVoltage(data.getInteger("batteryVoltage")); + //鏁呴殰 + shuttleProtocol.setErrorCode(data.getString("errorCode")); + //鏄惁椤跺崌 + shuttleProtocol.setHasLift(data.getBoolean("hasLift")); + //鏄惁鏈夋墭鐩� + shuttleProtocol.setHasPallet(data.getBoolean("hasPallet")); + //琛岄┒鏂瑰悜 + shuttleProtocol.setRunDirection(data.getString("runDirection")); + //鏄惁涓哄厖鐢电姸鎬� + shuttleProtocol.setHasCharge(data.getBoolean("hasCharge")); + //杩愯閫熷害 + shuttleProtocol.setSpeed(data.getInteger("speed")); - //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- - //灏忚溅璁惧鐘舵�� - shuttleProtocol.setDeviceStatus(data.getInteger("free")); - //灏忚溅妯″紡 - shuttleProtocol.setMode(data.getInteger("workingMode")); - //褰撳墠浜岀淮鐮� - shuttleProtocol.setCurrentCode(data.getString("point")); - //鐢垫睜鐢甸噺 - shuttleProtocol.setBatteryPower(data.getString("powerPercent")); - //鐢垫睜鐢靛帇 - shuttleProtocol.setBatteryVoltage(data.getInteger("voltage")); - //鏁呴殰 - shuttleProtocol.setErrorCode(data.getJSONArray("errCode").getString(0)); + //*********璇诲彇鎵╁睍瀛楁********** + JSONObject extendData = data.getJSONObject("extend"); + InnerSuhttleExtend extend = (InnerSuhttleExtend) shuttleProtocol.getExtend(); + //绠″埗鐘舵�� + extend.setSuspendState(extendData.getInteger("suspendState")); + //鏈�楂樼數鑺數鍘�(mV) + extend.setMaxCellVoltage(extendData.getInteger("maxCellVoltage")); + //鏈�浣庣數鑺數鍘�(mV) + extend.setMinCellVoltage(extendData.getInteger("minCellVoltage")); + //鐢垫睜鐢靛帇 + extend.setVoltage(extendData.getInteger("voltage")); + //鍏呮斁鐢靛惊鐜鏁� + extend.setChargeCycleTimes(extendData.getInteger("chargeCycleTimes")); + //鍓╀綑鐢甸噺 + extend.setSurplusQuantity(extendData.getInteger("surplusQuantity")); + //鎬荤數閲� + extend.setCountQuantity(extendData.getInteger("countQuantity")); + shuttleProtocol.setExtend(extend);//鎵╁睍瀛楁 - //鏄惁椤跺崌 - shuttleProtocol.setHasLift(data.getInteger("liftPosition") == 2 ? true : false); - //鏄惁鏈夋墭鐩� - shuttleProtocol.setHasPallet(data.getInteger("loadState") == 1 ? true : false); - //琛岄┒鏂瑰悜 - shuttleProtocol.setRunDirection(data.getString("runDir") == null ? "none" : data.getString("runDir")); - //鏄惁涓哄厖鐢电姸鎬� - shuttleProtocol.setHasCharge(data.getInteger("chargState") == 1 ? true : false); - //杩愯閫熷害 - shuttleProtocol.setSpeed(data.getInteger("speed")); + //鏈�杩戜竴娆″湪绾挎椂闂� + shuttleProtocol.setLastOnlineTime(System.currentTimeMillis()); + //璇诲彇鍥涘悜绌挎杞︾姸鎬�-end - //*********璇诲彇鎵╁睍瀛楁********** - InnerSuhttleExtend extend = (InnerSuhttleExtend) shuttleProtocol.getExtend(); - //绠″埗鐘舵�� - extend.setSuspendState(data.getInteger("suspendState")); - //鏈�楂樼數鑺數鍘�(mV) - extend.setMaxCellVoltage(data.getInteger("maxCellVoltage")); - //鏈�浣庣數鑺數鍘�(mV) - extend.setMinCellVoltage(data.getInteger("minCellVoltage")); - //鐢垫睜鐢靛帇 - extend.setVoltage(data.getInteger("voltage")); - //鍏呮斁鐢靛惊鐜鏁� - extend.setChargeCycleTimes(data.getInteger("chargeCycleTimes")); - //鍓╀綑鐢甸噺 - extend.setSurplusQuantity(data.getInteger("surplusQuantity")); - //鎬荤數閲� - extend.setCountQuantity(data.getInteger("countQuantity")); - shuttleProtocol.setExtend(extend);//鎵╁睍瀛楁 - - //鏈�杩戜竴娆″湪绾挎椂闂� - shuttleProtocol.setLastOnlineTime(System.currentTimeMillis()); - ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end - - //灏忚溅澶勪簬杩愯涓紝灏嗘爣璁扮疆涓簍rue - if (shuttleProtocol.getDeviceStatus() == 0) { - shuttleProtocol.setPakMk(true); - } - - if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 1) { - //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽 - shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE); - } - - if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE) && shuttleProtocol.getDeviceStatus().intValue() == 1) { - shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE); - } - - this.originDeviceData = data; - - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + //灏忚溅澶勪簬杩愯涓紝灏嗘爣璁扮疆涓簍rue + if (shuttleProtocol.getDeviceStatus() == 0) { + shuttleProtocol.setPakMk(true); } + + if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 1) { + //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽 + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + } + + if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE) && shuttleProtocol.getDeviceStatus().intValue() == 1) { + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + } + + this.originDeviceData = data.getString("originDeviceData"); + + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), deviceConfig.getDeviceNo())); } catch (Exception e) { e.printStackTrace(); - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - try { - this.socket.close(); - this.socket = null; - Thread.sleep(1000); - this.connect(); - } catch (IOException | InterruptedException exception) { - e.printStackTrace(); - } + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort())); } } @@ -411,6 +374,9 @@ String requestType = resultBody.getString("requestType"); Integer requestId = resultHeader.getInteger("requestId"); if (requestType.equals("init")) { + removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄� + socketResults.remove(removeIdx); + Integer code = resultBody.getInteger("code"); //灏忚溅澶嶄綅璇锋眰 ShuttleCommand initCommand = getInitCommand(requestId, code); @@ -418,16 +384,10 @@ NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class); JSONObject requestResult = requestCommand(httpCommand); - removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄� - - log.info(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", slave.getId(), code, slave.getIp(), slave.getPort())); - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", slave.getId(), code, slave.getIp(), slave.getPort())); + 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; } - } - - if (removeIdx != -1) { - socketResults.remove(removeIdx); } } catch (Exception e) { e.printStackTrace(); @@ -683,7 +643,7 @@ if (shuttleService == null) { return false; } - BasShuttle basShuttle = shuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", slave.getId())); + BasShuttle basShuttle = shuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", deviceConfig.getDeviceNo())); if (basShuttle == null) { return false; } @@ -723,6 +683,19 @@ maxPower = Integer.parseInt(chargeMaxValue.getValue()); } } + + //***************鍒ゆ柇鏄惁婊″厖鏍″噯*************** + Config shuttleMaxPowerVerifyConfig = configService.selectOne(new EntityWrapper<Config>() + .eq("code", "shuttleMaxPowerVerify") + .eq("status", 1)); + if (shuttleMaxPowerVerifyConfig != null) { + if (shuttleMaxPowerVerifyConfig.getValue().equals("true")) { + if (this.shuttleProtocol.getBatteryVoltage() < 5630) { + return false;//鐢靛帇涓嶅缁х画鍏呯數 + } + } + } + //***************鍒ゆ柇鏄惁婊″厖鏍″噯*************** if (this.shuttleProtocol.getHasCharge() == null) { return false; @@ -885,9 +858,25 @@ } @Override + public JSONObject parseStatusToMsg(ShuttleProtocol shuttleProtocol) { + JSONObject result = new JSONObject(); + result.put("msgType", "responseMsg"); + result.put("robotId", 5002); + + JSONObject header = new JSONObject(); + header.put("responseId", 5005631); + header.put("version", "RGV-APP-F427-N24036-1112"); + + JSONObject body = new JSONObject(); + body.put("responseType", "state"); + + return null; + } + + @Override public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) { NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); - NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo); + NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo); NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); ArrayList<HashMap<String, Object>> path = new ArrayList<>(); @@ -932,7 +921,7 @@ } ShuttleCommand command = new ShuttleCommand(); - command.setShuttleNo(slave.getId()); + command.setShuttleNo(deviceConfig.getDeviceNo()); command.setBody(JSON.toJSONString(httpStandard)); command.setMode(ShuttleCommandModeType.MOVE.id); command.setTargetLocNo(locMast.getLocNo()); @@ -942,7 +931,7 @@ @Override public ShuttleCommand getLiftCommand(Integer taskNo, Boolean lift) { - NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo); + NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo); NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); Integer taskId = getTaskId();//TaskID闇�瑕侀殢鏈� @@ -954,7 +943,7 @@ httpStandard.setRequest(request); ShuttleCommand command = new ShuttleCommand(); - command.setShuttleNo(slave.getId()); + command.setShuttleNo(deviceConfig.getDeviceNo()); command.setBody(JSON.toJSONString(httpStandard)); command.setMode(lift ? ShuttleCommandModeType.PALLET_LIFT.id : ShuttleCommandModeType.PALLET_DOWN.id); command.setTaskNo(taskId); @@ -963,7 +952,7 @@ @Override public ShuttleCommand getChargeCommand(Integer taskNo, Boolean charge) { - NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo); + NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo); NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); Integer taskId = getTaskId();//TaskID闇�瑕侀殢鏈� @@ -975,7 +964,7 @@ httpStandard.setRequest(request); ShuttleCommand command = new ShuttleCommand(); - command.setShuttleNo(slave.getId()); + command.setShuttleNo(deviceConfig.getDeviceNo()); command.setBody(JSON.toJSONString(httpStandard)); command.setMode(charge ? ShuttleCommandModeType.CHARGE_OPEN.id : ShuttleCommandModeType.CHARGE_CLOSE.id); command.setTaskNo(taskId); @@ -984,7 +973,7 @@ @Override public ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo) { - NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo); + NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo); NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); HashMap<String, Object> body = new HashMap<>(); @@ -995,7 +984,7 @@ httpStandard.setRequest(request); ShuttleCommand command = new ShuttleCommand(); - command.setShuttleNo(slave.getId()); + command.setShuttleNo(deviceConfig.getDeviceNo()); command.setBody(JSON.toJSONString(httpStandard)); command.setMode(ShuttleCommandModeType.UPDATE_LOCATION.id); command.setTaskNo(taskNo); @@ -1006,7 +995,7 @@ public ShuttleCommand getInitCommand(Integer taskNo, Integer code) { LocMastService locMastService = SpringUtils.getBean(LocMastService.class); NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); - NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo); + NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo); NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); //code -> {Integer@13781} 1101101 @@ -1047,7 +1036,7 @@ httpStandard.setRequest(request); ShuttleCommand command = new ShuttleCommand(); - command.setShuttleNo(slave.getId()); + command.setShuttleNo(deviceConfig.getDeviceNo()); command.setBody(JSON.toJSONString(httpStandard)); command.setMode(ShuttleCommandModeType.RESET.id); command.setTaskNo(taskNo); @@ -1056,17 +1045,6 @@ @Override public boolean connect() { - try { - Socket socket = new Socket(slave.getIp(), slave.getPort()); - socket.setSoTimeout(10000); - socket.setKeepAlive(true); - this.socket = socket; - log.info(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - } catch (IOException e) { - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - return false; - } - return true; } @@ -1119,64 +1097,86 @@ return httpStandard; } - //鍙戝嚭璇锋眰 + //鍙戝嚭璇锋眰-鍚屾 private JSONObject requestCommand(NyShuttleHttpCommand httpCommand) throws IOException { - if (this.socket == null) { - return null; - } - - //鍘嬬缉鏁版嵁鍖� - JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand)); - data.remove("nodes"); - - // 鑾峰彇杈撳嚭娴� - OutputStreamWriter writer = new OutputStreamWriter(this.socket.getOutputStream()); - writer.write(JSON.toJSONString(data) + "\r\n"); - writer.flush(); -// System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand)); - - 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鍙兘鍙栫┖锛屼笉鎶ラ敊锛屾甯告儏鍐� - } - - // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� - // 灏濊瘯10娆� - JSONObject result = null; - for (int i = 0; i < 10; i++) { - result = getRequestBody(requestType, taskId); - if (result == null) { - try { - Thread.sleep(100); - } catch (Exception e) { - e.printStackTrace(); - } - }else { - break; + DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class); + if (deviceMsgUtils == null) { + return null; } + + //鍘嬬缉鏁版嵁鍖� + JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand)); + data.remove("nodes"); + + DeviceCommandMsgModel commandMsgModel = new DeviceCommandMsgModel(); + commandMsgModel.setDeviceId(deviceConfig.getDeviceNo()); + 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鍙兘鍙栫┖锛屼笉鎶ラ敊锛屾甯告儏鍐� + } + + // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� + // 灏濊瘯30娆� + JSONObject result = null; + for (int i = 0; i < 30; i++) { + result = getRequestBody(requestType, taskId); + if (result == null) { + try { + Thread.sleep(100); + } catch (Exception e) { + e.printStackTrace(); + } + }else { + break; + } + } + return result;//杩斿洖Body缁撴灉闆� + }catch (Exception e) { + e.printStackTrace(); } - return result;//杩斿洖Body缁撴灉闆� + return null; } + //鍙戝嚭璇锋眰-绉绘 private void requestCommandAsync(NyShuttleHttpCommand httpCommand) throws IOException { - if (this.socket == null) { - return; + try { + DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class); + if (deviceMsgUtils == null) { + return; + } + + //鍘嬬缉鏁版嵁鍖� + JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand)); + data.remove("nodes"); + + DeviceCommandMsgModel commandMsgModel = new DeviceCommandMsgModel(); + commandMsgModel.setDeviceId(deviceConfig.getDeviceNo()); + 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鍙兘鍙栫┖锛屼笉鎶ラ敊锛屾甯告儏鍐� + } + }catch (Exception e) { + e.printStackTrace(); } - - //鍘嬬缉鏁版嵁鍖� - JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand)); - data.remove("nodes"); - - // 鑾峰彇杈撳嚭娴� - OutputStreamWriter writer = new OutputStreamWriter(this.socket.getOutputStream()); - writer.write(JSON.toJSONString(data) + "\r\n"); - writer.flush(); -// System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand)); } private JSONObject filterBodyData(JSONObject data) { -- Gitblit v1.9.1