From edf5eb33c88d88062e295db466a654ac0a646ded Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期一, 21 四月 2025 11:12:32 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java | 446 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 375 insertions(+), 71 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java index b90f420..10176d4 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java @@ -9,17 +9,22 @@ import com.zy.asrs.framework.common.SpringUtils; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wcs.common.ExecuteSupport; +import com.zy.asrs.wcs.core.domain.param.ShuttleMoveLocParam; import com.zy.asrs.wcs.core.entity.BasShuttle; import com.zy.asrs.wcs.core.entity.Loc; +import com.zy.asrs.wcs.core.model.MapNode; import com.zy.asrs.wcs.core.model.NavigateNode; import com.zy.asrs.wcs.core.model.command.ShuttleCommand; import com.zy.asrs.wcs.core.model.command.ShuttleRedisCommand; import com.zy.asrs.wcs.core.model.enums.MotionCtgType; +import com.zy.asrs.wcs.core.model.enums.NavigationMapType; import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType; import com.zy.asrs.wcs.core.service.BasShuttleService; import com.zy.asrs.wcs.core.service.LocService; +import com.zy.asrs.wcs.core.utils.NavigateMapData; import com.zy.asrs.wcs.core.utils.NavigatePositionConvert; import com.zy.asrs.wcs.core.utils.RedisUtil; +import com.zy.asrs.wcs.core.utils.Utils; import com.zy.asrs.wcs.rcs.News; import com.zy.asrs.wcs.rcs.cache.OutputQueue; import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant; @@ -53,6 +58,10 @@ private ShuttleProtocol shuttleProtocol; private Socket socket; + private static final boolean DEBUG = false;//璋冭瘯妯″紡 + + private List<JSONObject> socketResults = new ArrayList<>(); + public NyShuttleThread(Device device, RedisUtil redisUtil) { this.device = device; this.redisUtil = redisUtil; @@ -62,6 +71,15 @@ public void run() { News.info("{}鍙峰洓鍚戣溅绾跨▼鍚姩", device.getDeviceNo()); this.connect(); + + //鐩戝惉娑堟伅骞跺瓨鍌� + Thread innerThread = new Thread(() -> { + while (true) { + listenSocketMessage(); + } + }); + innerThread.start(); + while (true) { try { read(); @@ -72,6 +90,76 @@ } } + private void listenSocketMessage() { + try { + if (this.socket == 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 result = JSON.parseObject(sb.toString());//寰楀埌鍝嶅簲缁撴灉闆� + if (!socketResults.isEmpty() && socketResults.size() >= 5) { + socketResults.remove(0);//娓呯悊澶磋妭鐐� + } + socketResults.add(result);//娣诲姞鏁版嵁 + } catch (Exception e) { +// e.printStackTrace(); + } + } + + public JSONObject getRequestBody(String type) { + try { + // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� + JSONObject result = null; + if (type.equals("readState")) { + type = "state"; + } + + 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; + break; + } + + if (!responseType.equals(type)) { + continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓� + } + + result = socketResult; + break; + } + + if (result == null) { + return null;//鏃犲搷搴旂粨鏋� + } + + return filterBodyData(result);//杩斿洖Body缁撴灉闆� + } catch (Exception e) { + return null; + } + } + private void read() { try { if (this.socket == null || this.socket.isClosed()) { @@ -79,6 +167,7 @@ this.connect(); } readStatus(); + listenInit();//鐩戝惉鍒濆鍖栦簨浠� } catch (Exception e) { e.printStackTrace(); OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戣鍙栧洓鍚戠┛姊溅鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort())); @@ -87,36 +176,40 @@ private void readStatus() { try { + if (null == shuttleProtocol) { + shuttleProtocol = new ShuttleProtocol(); + shuttleProtocol.setShuttleNo(Integer.valueOf(device.getDeviceNo())); + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + shuttleProtocol.setDevice(device); + + InnerSuhttleExtend extend = new InnerSuhttleExtend(); + shuttleProtocol.setExtend(extend); + } + //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(Integer.parseInt(device.getDeviceNo())); JSONObject data = requestCommand(readStatusCommand); if (data == null) { - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + 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()), device.getId(), device.getIp(), device.getPort())); }else { - if (null == shuttleProtocol) { - shuttleProtocol = new ShuttleProtocol(); - shuttleProtocol.setShuttleNo(Integer.valueOf(device.getDeviceNo())); - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); - shuttleProtocol.setDevice(device); - - InnerSuhttleExtend extend = new InnerSuhttleExtend(); - shuttleProtocol.setExtend(extend); - } //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- //灏忚溅璁惧鐘舵�� shuttleProtocol.setDeviceStatus(data.getInteger("free")); //灏忚溅妯″紡 - shuttleProtocol.setDeviceStatus(data.getInteger("workingMode")); + shuttleProtocol.setMode(data.getInteger("workingMode")); //褰撳墠浜岀淮鐮� - shuttleProtocol.setCurrentCode(data.getString("coord")); + shuttleProtocol.setCurrentCode(data.getString("point")); //鐢垫睜鐢甸噺 shuttleProtocol.setBatteryPower(data.getString("powerPercent")); //鐢垫睜鐢靛帇 shuttleProtocol.setBatteryVoltage(data.getInteger("voltage")); //鏁呴殰 - shuttleProtocol.setErrorCode(data.getString("errState")); + shuttleProtocol.setErrorCode(data.getJSONArray("errCode").getString(0)); //鏄惁椤跺崌 shuttleProtocol.setHasLift(data.getInteger("liftPosition") == 1 ? true : false); @@ -143,9 +236,9 @@ shuttleProtocol.setLastOnlineTime(System.currentTimeMillis()); ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end - //灏忚溅澶勪簬杩愯涓紝灏嗘爣璁扮疆涓篺alse + //灏忚溅澶勪簬杩愯涓紝灏嗘爣璁扮疆涓簍rue if (shuttleProtocol.getDeviceStatus() == 1) { - shuttleProtocol.setPakMk(false); + shuttleProtocol.setPakMk(true); } if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 0) { @@ -182,6 +275,7 @@ basShuttle.setStatus(1); basShuttle.setDeleted(0); basShuttle.setHostId(device.getHostId()); + basShuttle.setDeviceId(device.getId().intValue()); shuttleService.save(basShuttle); } //浠诲姟鍙� @@ -208,12 +302,58 @@ } } + /** + * 鐩戝惉灏忚溅澶嶄綅鍒濆鍖栦俊鍙� + */ + public void listenInit() { + try { + // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� + JSONObject result = null; + int removeIdx = -1; + for (int i = 0; i < socketResults.size(); i++) { + JSONObject socketResult = socketResults.get(i); + if (!socketResult.get("msgType").equals("requestMsg")) {//涓嶆槸璇锋眰鍐呭 + continue; + } + + 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")) { + Integer code = resultBody.getInteger("code"); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", code, device.getId(), device.getIp(), device.getPort())); + //灏忚溅澶嶄綅璇锋眰 + ShuttleCommand initCommand = getInitCommand(requestId, code); + //鍙戝嚭璇锋眰 + NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class); + JSONObject requestResult = requestCommand(httpCommand); + + removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄� + break; + } + } + + if (removeIdx != -1) { + socketResults.remove(removeIdx); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override public ShuttleProtocol getStatus() { + return getStatus(true); + } + + @Override + public ShuttleProtocol getStatus(boolean clone) { if (this.shuttleProtocol == null) { return null; } - return this.shuttleProtocol.clone(); + return clone ? this.shuttleProtocol.clone() : this.shuttleProtocol; } @Override @@ -231,11 +371,39 @@ try { //鍙戝嚭璇锋眰 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); - JSONObject result = requestCommand(httpCommand); - if (result == null) { - return false;//璇锋眰澶辫触 + Map<String, Object> body = httpCommand.getRequest().getBody(); + Object pathObj = body.get("path"); + List<JSONObject> path = JSON.parseArray(JSON.toJSONString(pathObj), JSONObject.class); + ArrayList<NyShuttleHttpCommand> commandList = new ArrayList<>(); + while (!path.isEmpty()) { + ArrayList<Map<String, Object>> list = new ArrayList<>(); + if (path.size() > 10) { + List<JSONObject> subList = path.subList(0, 10); + list.addAll(subList); + subList.clear(); + }else { + list.addAll(path); + path.clear(); + } + + NyShuttleHttpCommand httpCommandCopy = JSON.parseObject(JSON.toJSONString(httpCommand), NyShuttleHttpCommand.class); + JSONObject bodyCopy = JSON.parseObject(JSON.toJSONString(body)); + + NyShuttleHttpCommand.NyRequest request = httpCommandCopy.getRequest(); + bodyCopy.put("path", list); + request.setBody(bodyCopy); + httpCommandCopy.setRequest(request); + + commandList.add(httpCommandCopy);//add copy } - this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 + + for (NyShuttleHttpCommand requestCommand : commandList) { + JSONObject result = requestCommand(requestCommand); + if (result == null) { + return false;//璇锋眰澶辫触 + } + this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 + } return true; } catch (IOException e) { return false; @@ -276,7 +444,15 @@ @Override public boolean reset(ShuttleCommand command) { - return false; + setSyncTaskNo(0); + setProtocolStatus(ShuttleProtocolStatusType.IDLE); + enableMoveLoc(null, false); + return true; + } + + @Override + public boolean updateLocation(ShuttleCommand param) { + return true;//杩樻病绉绘杩囨潵 } @Override @@ -287,10 +463,12 @@ @Override public boolean isIdle(ExecuteSupport support) { if (null != support) { - if (!support.judgement()) { - return false; + Boolean judgement = support.judgement(); + if (judgement != null && !judgement) { + return true; } } + if (this.shuttleProtocol.getDeviceStatus() == null || this.shuttleProtocol.getPakMk() == null || this.shuttleProtocol.getErrorCode() == null @@ -303,18 +481,31 @@ InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend(); - boolean res = this.shuttleProtocol.getDeviceStatus() == 0 + boolean res = this.shuttleProtocol.getDeviceStatus() == 1 && this.shuttleProtocol.getMode() == 1 && this.shuttleProtocol.getPakMk() && this.shuttleProtocol.getErrorCode().equals("0") - && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id) - && extend.getSuspendState() == 0 - ; + && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id + || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id + || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id) + && extend.getSuspendState() == 0; return res; } @Override public boolean isDeviceIdle() { + return isDeviceIdle(null); + } + + @Override + public boolean isDeviceIdle(ExecuteSupport support) { + if (null != support) { + Boolean judgement = support.judgement(); + if (judgement != null && !judgement) { + return true; + } + } + if (this.shuttleProtocol.getDeviceStatus() == null || this.shuttleProtocol.getPakMk() == null || this.shuttleProtocol.getErrorCode() == null @@ -326,7 +517,7 @@ InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend(); - boolean res = this.shuttleProtocol.getDeviceStatus() == 0 + boolean res = this.shuttleProtocol.getDeviceStatus() == 1 && this.shuttleProtocol.getMode() == 1 && this.shuttleProtocol.getPakMk() && this.shuttleProtocol.getErrorCode().equals("0") @@ -349,7 +540,7 @@ InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend(); - boolean res = this.shuttleProtocol.getDeviceStatus() == 0 + boolean res = this.shuttleProtocol.getDeviceStatus() == 1 && this.shuttleProtocol.getMode() == 1 && this.shuttleProtocol.getPakMk() && this.shuttleProtocol.getErrorCode().equals("0") @@ -365,7 +556,7 @@ if (shuttleService == null) { return false; } - BasShuttle basShuttle = shuttleService.getById(this.device.getDeviceNo()); + BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, this.device.getId())); if (basShuttle == null) { return false; } @@ -427,6 +618,7 @@ @Override public List<NavigateNode> getMoveAdvancePath() { ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class); + NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); ArrayList<NavigateNode> path = new ArrayList<>(); if (shuttleProtocol.getTaskNo() != 0) { //瀛樺湪浠诲姟锛岃幏鍙栨寚浠� @@ -445,6 +637,18 @@ if (!nodes.isEmpty()) { path.addAll(nodes); } + + //灏嗚矾寰勯攣涓庡皬杞﹁矾寰勮繘琛屽尮閰� + ArrayList<NavigateNode> tmp = new ArrayList<>(); + //妫�娴嬭矾寰勬槸鍚﹁閿佸畾 + int[][] map = navigateMapData.getDataFromRedis(NavigationMapType.DFX.id, null, null); + for (NavigateNode node : path) { + if(map[node.getX()][node.getY()] == -999) { + tmp.add(node); + } + } + + path = tmp; } } return path; @@ -474,16 +678,66 @@ } @Override - public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) { + public boolean enableMoveLoc(ShuttleMoveLocParam param, boolean enable) { + if (enable) { + shuttleProtocol.setMoveLoc(true);//寮�鍚窇搴� + shuttleProtocol.setMoveType(param.getMoveType()); + shuttleProtocol.setXStart(param.getStartX()); + shuttleProtocol.setXTarget(param.getTargetX()); + shuttleProtocol.setXCurrent(param.getStartX()); + shuttleProtocol.setYStart(param.getStartY()); + shuttleProtocol.setYTarget(param.getTargetY()); + shuttleProtocol.setYCurrent(param.getStartY()); + }else { + shuttleProtocol.setMoveLoc(false); + shuttleProtocol.setMoveType(0); + shuttleProtocol.setXStart(0); + shuttleProtocol.setXTarget(0); + shuttleProtocol.setXCurrent(0); + shuttleProtocol.setYStart(0); + shuttleProtocol.setYTarget(0); + shuttleProtocol.setYCurrent(0); + } + return true; + } + + @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(Integer.parseInt(device.getDeviceNo()), taskNo); NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); + + ArrayList<HashMap<String, Object>> path = new ArrayList<>(); HashMap<String, Object> body = new HashMap<>(); body.put("requestType", "move");//绉诲姩鍛戒护 body.put("taskId", getTaskId());//TaskID闇�瑕侀殢鏈� - body.put("start", navigateNodeToNyPointNode(NavigatePositionConvert.codeToNode(startCodeNum, device.getHostId())));//璧风偣 - body.put("target", navigateNodeToNyPointNode(NavigatePositionConvert.codeToNode(distCodeNum, device.getHostId())));//缁堢偣 +// body.put("start", navigateNodeToNyPointNode(NavigatePositionConvert.codeToNode(startCodeNum, device.getHostId())));//璧风偣 +// body.put("target", navigateNodeToNyPointNode(NavigatePositionConvert.codeToNode(distCodeNum, device.getHostId())));//缁堢偣 + body.put("path", path); request.setBody(body); + + NavigateNode startNode = nodes.get(0); + navigateMapData.setLev(startNode.getZ()); + for (NavigateNode node : nodes) { + HashMap<String, Object> data = new HashMap<>(); + String codeNum = NavigatePositionConvert.xyToPosition(node.getX(), node.getY(), node.getZ(), device.getHostId()); + Map<String, Object> nyNode = navigateNodeToNyPointNode(NavigatePositionConvert.codeToNode(codeNum, device.getHostId())); + int xp = Integer.parseInt(String.valueOf(nyNode.get("y"))); + int yp = Integer.parseInt(String.valueOf(nyNode.get("x"))); + int z = Integer.parseInt(String.valueOf(nyNode.get("z"))); + + List<List<MapNode>> mapData = navigateMapData.getJsonData(NavigationMapType.NONE.id, null, null); + List<MapNode> mapNodes = mapData.get(node.getX()); + MapNode mapNode = mapNodes.get(node.getY()); + + data.put("xp", xp); + data.put("yp", yp); + data.put("z", z); + data.put("x", mapNode.getYBase()); + data.put("y", mapNode.getXBase()); + path.add(data); + } httpStandard.setRequest(request); @@ -517,7 +771,7 @@ ShuttleCommand command = new ShuttleCommand(); command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); - command.setBody(JSON.toJSONString(body)); + command.setBody(JSON.toJSONString(httpStandard)); command.setMode(lift ? ShuttleCommandModeType.PALLET_LIFT.id : ShuttleCommandModeType.PALLET_DOWN.id); return command; } @@ -542,17 +796,71 @@ } @Override + public ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo) { + return null;//杩樻病绉绘杩囨潵 + } + + //鑾峰彇灏忚溅澶嶄綅鍝嶅簲鍛戒护 + public ShuttleCommand getInitCommand(Integer taskNo, Integer code) { + LocService locService = SpringUtils.getBean(LocService.class); + NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); + NyShuttleHttpCommand httpStandard = getHttpStandard(Integer.parseInt(device.getDeviceNo()), taskNo); + NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); + + //code -> {Integer@13781} 1101101 + int lev = code % 100; + int bay = code / 100 % 1000; + int row = code / 100000; + + HashMap<String, Object> map = new HashMap<>(); + map.put("x", row); + map.put("y", bay); + map.put("z", lev); + + String mapStr = JSON.toJSONString(map); + Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() + .eq(Loc::getCode, mapStr) + .eq(Loc::getStatus, 1) + .eq(Loc::getHostId, this.device.getHostId())); + if (loc == null) { + throw new CoolException("鍦板潃鐮佷笉瀛樺湪"); + } + + navigateMapData.setLev(lev); + List<List<MapNode>> mapData = navigateMapData.getJsonData(NavigationMapType.NONE.id, null, null); + List<MapNode> mapNodes = mapData.get(loc.getRow()); + MapNode mapNode = mapNodes.get(loc.getBay()); + + HashMap<String, Object> location = new HashMap<>(); + location.put("xp", row); + location.put("yp", bay); + location.put("z", lev); + location.put("x", mapNode.getYBase()); + location.put("y", mapNode.getXBase()); + + HashMap<String, Object> body = new HashMap<>(); + body.put("responseType", "init");//澶嶄綅 + body.put("location", location);//鍒濆鍖栧潗鏍� + body.put("devicePoints", new ArrayList<>());//鎻愬崌鏈虹偣浣� + body.put("specialPoints", new ArrayList<>());//鐗规畩鏉$爜鍧愭爣 + request.setBody(body); + + httpStandard.setRequest(request); + + ShuttleCommand command = new ShuttleCommand(); + command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); + command.setBody(JSON.toJSONString(httpStandard)); + command.setMode(ShuttleCommandModeType.RESET.id); + return command; + } + + @Override public boolean connect() { try { Socket socket = new Socket(device.getIp(),device.getPort()); - socket.setSoTimeout(60000); + socket.setSoTimeout(10000); socket.setKeepAlive(true); this.socket = socket; - if (null == shuttleProtocol) { - shuttleProtocol = new ShuttleProtocol(); - shuttleProtocol.setShuttleNo(Integer.parseInt(device.getDeviceNo())); - } - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); log.info(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort())); } catch (IOException e) { OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort())); @@ -619,43 +927,37 @@ JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand)); data.remove("nodes"); - // 鑾峰彇杈撳叆娴佸拰杈撳嚭娴� - BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); + // 鑾峰彇杈撳嚭娴� 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)); - // 璇诲彇鏈嶅姟鍣ㄧ殑鍝嶅簲 - StringBuffer sb = new StringBuffer(); - String response = null; - char[] chars = new char[2048];//缂撳啿鍖� - do { - reader.read(chars); - String trim = new String(chars).trim(); - sb.append(trim); - if (sb.lastIndexOf("\r\n") != -1) { - break; - } - } while (response != null); -// System.out.println("Received response from server: " + sb); - - JSONObject result = JSON.parseObject(sb.toString());//寰楀埌鍝嶅簲缁撴灉闆� - if (!result.get("msgType").equals("responseMsg")) {//涓嶆槸鍝嶅簲鍐呭 + String requestType = null; + try { + requestType = httpCommand.getRequest().getBody().get("requestType").toString(); + } catch (Exception e) { return null; } - JSONObject resultResponse = JSON.parseObject(result.get("response").toString()); - JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString()); - int responseId = Integer.parseInt(resultHeader.get("responseId").toString()); - if (responseId != httpCommand.getRequest().getHeader().getRequestId()) { - return null;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓� + // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� + // 灏濊瘯10娆� + JSONObject result = null; + for (int i = 0; i < 10; i++) { + result = getRequestBody(requestType); + if (result == null) { + try { + Thread.sleep(100); + } catch (Exception e) { + e.printStackTrace(); + } + } + break; } - - return filterBodyData(result);//杩斿洖Body缁撴灉闆� + return result;//杩斿洖Body缁撴灉闆� } - private static JSONObject filterBodyData(JSONObject data) { + private JSONObject filterBodyData(JSONObject data) { Object response = data.get("response"); if (response == null) { return null; @@ -682,11 +984,13 @@ //WCS绯荤粺鍧愭爣杞墰鐪煎潗鏍� private static int[] WCSXyzToNyXyz(int x, int y, int z) { - //WCS绯荤粺Y杞� => 鐗涚溂X杞磋浆鎹㈠叕寮� - int x1 = Math.abs(y - 61) + 11; - //WCS绯荤粺X杞� => 鐗涚溂Y杞磋浆鎹㈠叕寮� - int y1 = x + 10; - return new int[]{x1, y1, z}; +// //WCS绯荤粺Y杞� => 鐗涚溂X杞磋浆鎹㈠叕寮� +// int x1 = Math.abs(y - 61) + 11; +// //WCS绯荤粺X杞� => 鐗涚溂Y杞磋浆鎹㈠叕寮� +// int y1 = x + 10; + int x1 = x + 10; + int y1 = y + 10; + return new int[]{y1, x1, z}; } @Data -- Gitblit v1.9.1