From 0d04bc5d8080b82338302fba0a59fccff2eaedfc Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期日, 06 七月 2025 11:28:29 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 104 insertions(+), 10 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java index bcd4c5a..0e5f8c9 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java @@ -11,14 +11,17 @@ 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.BasLift; import com.zy.asrs.wcs.core.entity.BasShuttle; import com.zy.asrs.wcs.core.entity.Loc; 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.*; +import com.zy.asrs.wcs.core.service.BasLiftService; import com.zy.asrs.wcs.core.service.BasShuttleService; import com.zy.asrs.wcs.core.service.LocService; +import com.zy.asrs.wcs.core.utils.LiftDispatcher; import com.zy.asrs.wcs.core.utils.NavigateUtils; import com.zy.asrs.wcs.core.utils.Utils; import com.zy.asrs.wcs.rcs.News; @@ -46,7 +49,7 @@ @SuppressWarnings("all") public class SurayShuttleThread implements ShuttleThread { - private static final String API_URL = "http://127.0.0.1:8082"; + private static String API_URL = "http://127.0.0.1:8082"; private Device device; private RedisUtil redisUtil; @@ -55,6 +58,7 @@ public SurayShuttleThread(Device device,RedisUtil redisUtil) { this.device = device; this.redisUtil = redisUtil; + API_URL = "http://" + device.getIp() + ":" + device.getPort(); } @Override @@ -113,6 +117,11 @@ if (deviceStatus == 255) { //绂荤嚎 shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + }else if (deviceStatus == 3) { + //灏辩华鐘舵�佷笖绂荤嚎 + if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE)) { + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + } } if(deviceStatus != 4 || deviceStatus != 6 || deviceStatus != 7 || deviceStatus != 8 || deviceStatus != 255 || deviceStatus != -1) { @@ -123,7 +132,7 @@ //褰撳墠浜岀淮鐮� shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode")); //鐢垫睜鐢甸噺 - shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0%" : data.getString("battery")); + shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0" : data.getString("battery")); //鏁呴殰 shuttleProtocol.setErrorCode(deviceStatus == 6 ? "1" : "0"); @@ -238,6 +247,16 @@ @Override public synchronized boolean movePath(List<NavigateNode> nodes, Integer taskNo) { try { + //榛樿鍦板浘姣嶈建鏂瑰悜x + String mapDirection = "x"; + DictService dictService = SpringUtils.getBean(DictService.class); + Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>() + .eq(Dict::getFlag, "direction_map") + .eq(Dict::getStatus, 1)); + if (dict != null) { + mapDirection = dict.getValue(); + } + String loginToken = requestLoginToken(); if (loginToken == null) { return false; @@ -262,13 +281,13 @@ NavigateNode startPath = sectionNodes.get(0); //缁撴潫璺緞 NavigateNode targetPath = sectionNodes.get(sectionNodes.size() - 1); - if (ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT + if (mapDirection.equals("y") && ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT || ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.RIGHT) { - //瀛愯建鏂瑰悜 - oper = 6; - } else { //姣嶈建鏂瑰悜 oper = 5; + } else { + //瀛愯建鏂瑰悜 + oper = 6; } for (int i = 0; i < sectionNodes.size(); i++) { @@ -422,6 +441,37 @@ } @Override + public boolean updateLocation(ShuttleCommand command) { + try { + String loginToken = requestLoginToken(); + if (loginToken == null) { + return false; + } + + HashMap<String, Object> headers = new HashMap<>(); + headers.put("Authorization", "Bearer " + loginToken); + + String response = new HttpHandler.Builder() + .setUri(API_URL) + .setPath("/RDS/changeLocation") + .setHeaders(headers) + .setJson(command.getBody()) + .setTimeout(60, TimeUnit.SECONDS) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + Integer code = jsonObject.getInteger("code"); + if (code.equals(200)) { + this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + @Override public boolean isIdle() { return this.isIdle(null); } @@ -504,7 +554,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; } @@ -596,6 +646,11 @@ case SHUTTLE_MOVE_DOWN_PALLET://绌挎杞︾Щ鍔ㄥ苟鎵樼洏涓嬮檷 case SHUTTLE_MOVE_FROM_LIFT://鍑烘彁鍗囨満 case SHUTTLE_MOVE_TO_LIFT://杩涙彁鍗囨満 + case SHUTTLE_PALLET_LIFT://鎵樼洏椤跺崌 + case SHUTTLE_PALLET_DOWN://鎵樼洏涓嬮檷 + case SHUTTLE_CHARGE_ON://鍏呯數寮� + case SHUTTLE_CHARGE_OFF://鍏呯數鍏� + case SHUTTLE_MOVE_STANDBY://绌挎杞︾Щ鍔ㄥ埌寰呮満浣� return deviceTaskNo; default: return taskNo; @@ -663,6 +718,17 @@ body.put("nodeY", loc.getBay()); body.put("nodeZ", loc.getLev()); + //妫�娴嬬洰鏍囩偣鏄惁涓烘彁鍗囨満 + BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class); + BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getRow, loc.getRow()) + .eq(BasLift::getBay, loc.getBay()) + .eq(BasLift::getHostId, this.device.getHostId())); + if (basLift != null) { + LiftDispatcher liftDispatcher = SpringUtils.getBean(LiftDispatcher.class); + Integer realLev = liftDispatcher.getLiftLevOffset(basLift.getDeviceId().intValue(), loc.getLev()); + body.put("nodeZ", realLev); + } + ShuttleCommand command = new ShuttleCommand(); command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); command.setBody(JSON.toJSONString(body)); @@ -673,11 +739,13 @@ @Override public ShuttleCommand getLiftCommand(Integer taskNo, Boolean lift) { + int deviceTaskNo = this.generateDeviceTaskNo(taskNo, lift ? MotionCtgType.SHUTTLE_PALLET_LIFT : MotionCtgType.SHUTTLE_PALLET_DOWN); + HashMap<String, Object> body = new HashMap<>(); body.put("messageName", "actionOrder"); body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo())); - body.put("taskId", taskNo); + body.put("taskId", deviceTaskNo); body.put("action", lift ? 1 : 2); ShuttleCommand command = new ShuttleCommand(); @@ -689,11 +757,13 @@ @Override public ShuttleCommand getChargeCommand(Integer taskNo, Boolean charge) { + int deviceTaskNo = this.generateDeviceTaskNo(taskNo, charge ? MotionCtgType.SHUTTLE_CHARGE_ON : MotionCtgType.SHUTTLE_CHARGE_OFF); + HashMap<String, Object> body = new HashMap<>(); body.put("messageName", "runOrder"); body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo())); - body.put("taskId", taskNo); + body.put("taskId", deviceTaskNo); body.put("action", charge ? 3 : 4); ShuttleCommand command = new ShuttleCommand(); @@ -703,11 +773,33 @@ return command; } + @Override + public ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo) { + HashMap<String, Object> body = new HashMap<>(); + body.put("messageName", "runOrder"); + body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo())); + + String coord = "(" + Utils.getRow(locNo) + "," + Utils.getBay(locNo) + "," + Utils.getLev(locNo) + ")"; + body.put("coord", coord); + + ShuttleCommand command = new ShuttleCommand(); + command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); + command.setBody(JSON.toJSONString(body)); + command.setMode(ShuttleCommandModeType.UPDATE_LOCATION.id); + return command; + } + //***************璁惧灞傞�氳-涓嶅悓鍘傚晢璁惧閫氳鏂规涓嶄竴鑷�*************** //璇锋眰鐧诲綍 private String requestLoginToken() { try { + Object redisToken = redisUtil.get(DeviceRedisConstant.RDS_LOGIN_TOKEN); + if(redisToken != null) { + return redisToken.toString(); + } + HashMap<String, Object> param = new HashMap<>(); param.put("username", "admin"); param.put("password", "admin123"); @@ -721,7 +813,9 @@ JSONObject jsonObject = JSON.parseObject(response); Integer code = jsonObject.getInteger("code"); if (code.equals(200)) { - return jsonObject.getString("token"); + String token = jsonObject.getString("token"); + redisUtil.set(DeviceRedisConstant.RDS_LOGIN_TOKEN, token, 60 * 15); + return token; } } catch (Exception e) { e.printStackTrace(); -- Gitblit v1.9.1