From 37733cc39c04b863a0b997c7fa3d9ac6a24e08be Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期三, 19 六月 2024 15:58:19 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java | 114 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 95 insertions(+), 19 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 1233ccd..a8f70d1 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,6 +9,7 @@ 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; @@ -23,6 +24,7 @@ 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; @@ -98,17 +100,15 @@ BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); // 璇诲彇鏈嶅姟鍣ㄧ殑鍝嶅簲 StringBuffer sb = new StringBuffer(); - String response = null; char[] chars = new char[2048];//缂撳啿鍖� - do { + while (true) { reader.read(chars); - String trim = new String(chars).trim(); + String trim = new String(chars); sb.append(trim); - if (sb.lastIndexOf("\r\n") != -1) { + if (trim.lastIndexOf("\r\n") != -1) { break; } - } while (response != null); -// System.out.println("Received response from server: " + sb); + } JSONObject result = JSON.parseObject(sb.toString());//寰楀埌鍝嶅簲缁撴灉闆� if (!socketResults.isEmpty() && socketResults.size() >= 5) { @@ -190,7 +190,10 @@ 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 { @@ -206,7 +209,7 @@ //鐢垫睜鐢靛帇 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); @@ -272,6 +275,7 @@ basShuttle.setStatus(1); basShuttle.setDeleted(0); basShuttle.setHostId(device.getHostId()); + basShuttle.setDeviceId(device.getId().intValue()); shuttleService.save(basShuttle); } //浠诲姟鍙� @@ -319,6 +323,7 @@ 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); //鍙戝嚭璇锋眰 @@ -340,10 +345,15 @@ @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 @@ -361,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; @@ -408,6 +446,7 @@ public boolean reset(ShuttleCommand command) { setSyncTaskNo(0); setProtocolStatus(ShuttleProtocolStatusType.IDLE); + enableMoveLoc(null, false); return true; } @@ -574,6 +613,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) { //瀛樺湪浠诲姟锛岃幏鍙栨寚浠� @@ -592,6 +632,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; @@ -621,6 +673,30 @@ } @Override + 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); @@ -642,8 +718,8 @@ 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("x"))); - int yp = Integer.parseInt(String.valueOf(nyNode.get("y"))); + 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); @@ -653,8 +729,8 @@ data.put("xp", xp); data.put("yp", yp); data.put("z", z); - data.put("x", mapNode.getXBase()); - data.put("y", mapNode.getYBase()); + data.put("x", mapNode.getYBase()); + data.put("y", mapNode.getXBase()); path.add(data); } @@ -749,8 +825,8 @@ location.put("xp", row); location.put("yp", bay); location.put("z", lev); - location.put("x", mapNode.getXBase()); - location.put("y", mapNode.getYBase()); + location.put("x", mapNode.getYBase()); + location.put("y", mapNode.getXBase()); HashMap<String, Object> body = new HashMap<>(); body.put("responseType", "init");//澶嶄綅 -- Gitblit v1.9.1