From 3644989d8aa96bcb5ac837f6c79dff4de5f83736 Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期一, 21 四月 2025 16:35:11 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java | 472 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 429 insertions(+), 43 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 5986a9b..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 @@ -3,36 +3,53 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.zy.asrs.common.utils.HttpHandler; import com.zy.asrs.framework.common.DateUtils; 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.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.enums.ShuttleCommandModeType; -import com.zy.asrs.wcs.core.model.enums.ShuttleRunDirection; +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; import com.zy.asrs.wcs.rcs.cache.OutputQueue; +import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant; +import com.zy.asrs.wcs.rcs.entity.DeviceDataLog; import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType; +import com.zy.asrs.wcs.rcs.model.enums.SlaveType; import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol; +import com.zy.asrs.wcs.rcs.service.DeviceDataLogService; import com.zy.asrs.wcs.rcs.thread.ShuttleThread; import com.zy.asrs.wcs.core.utils.RedisUtil; import com.zy.asrs.wcs.rcs.entity.Device; +import com.zy.asrs.wcs.system.entity.Dict; +import com.zy.asrs.wcs.system.service.DictService; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.TimeUnit; @Slf4j @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; @@ -41,6 +58,7 @@ public SurayShuttleThread(Device device,RedisUtil redisUtil) { this.device = device; this.redisUtil = redisUtil; + API_URL = "http://" + device.getIp() + ":" + device.getPort(); } @Override @@ -96,55 +114,98 @@ //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- //灏忚溅璁惧鐘舵�� Integer deviceStatus = data.getInteger("deviceStatus"); + 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) { + shuttleProtocol.setMode(1);//鑷姩鐘舵�� + } + shuttleProtocol.setDeviceStatus(deviceStatus); //褰撳墠浜岀淮鐮� 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"); //鏄惁椤跺崌 shuttleProtocol.setHasLift(data.getInteger("palletStatus") == 1 ? true : false); //鏄惁鏈夋墭鐩� - shuttleProtocol.setHasPallet(data.getInteger("hasPallet") != 2 ? true : false); + shuttleProtocol.setHasPallet(data.getInteger("hasPallet") == null ? true : data.getInteger("hasPallet") != 2 ? true : false); //琛岄┒鏂瑰悜 shuttleProtocol.setRunDirection(data.getString("direction") == null ? "none" : data.getString("direction")); //鏄惁涓哄厖鐢电姸鎬� shuttleProtocol.setHasCharge((deviceStatus == 5 || deviceStatus == 13) ? true : false); //*********璇诲彇鎵╁睍瀛楁********** - InnerSuhttleExtend extend = JSON.parseObject(JSON.toJSONString(shuttleProtocol.getExtend()), InnerSuhttleExtend.class); + InnerSuhttleExtend extend = (InnerSuhttleExtend) shuttleProtocol.getExtend(); extend.setMapVersion(data.getString("version"));//鍦板浘鐗堟湰 extend.setStatusDescription(data.getString("statusDescription"));//鐘舵�佹弿杩� shuttleProtocol.setExtend(extend);//鎵╁睍瀛楁 + //鏈�杩戜竴娆″湪绾挎椂闂� + shuttleProtocol.setLastOnlineTime(System.currentTimeMillis()); ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end //灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue - if (!shuttleProtocol.getIdle()) { + if (deviceStatus == 1 || deviceStatus == 2 || deviceStatus == 5) { shuttleProtocol.setPakMk(true); } -// if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == ShuttleDeviceStatusType.IDLE.id) { -// //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽 -// shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE); -// } + if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 3) { + //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽 + shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE); + } -// if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) { -// //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰� -// //淇濆瓨鏁版嵁璁板綍 -// DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); -// DeviceDataLog deviceDataLog = new DeviceDataLog(); -// deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result.Content)); -// deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol)); -// deviceDataLog.setType("shuttle"); -// deviceDataLog.setDeviceNo(shuttleProtocol.getShuttleNo().intValue()); -// deviceDataLog.setCreateTime(new Date()); -// deviceDataLogService.insert(deviceDataLog); -// -// //鏇存柊閲囬泦鏃堕棿 -// shuttleProtocol.setDeviceDataLog(System.currentTimeMillis()); -// } + if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) { + //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰� + //淇濆瓨鏁版嵁璁板綍 + DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); + DeviceDataLog deviceDataLog = new DeviceDataLog(); + deviceDataLog.setOriginData(JSON.toJSONString(data)); + deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol)); + deviceDataLog.setType(String.valueOf(SlaveType.Shuttle)); + deviceDataLog.setDeviceNo(String.valueOf(shuttleProtocol.getShuttleNo())); + deviceDataLog.setCreateTime(new Date()); + deviceDataLog.setHostId(device.getHostId()); + deviceDataLogService.save(deviceDataLog); + + //鏇存柊閲囬泦鏃堕棿 + shuttleProtocol.setDeviceDataLog(System.currentTimeMillis()); + } + + //灏嗗洓鍚戠┛姊溅鐘舵�佷繚瀛樿嚦鏁版嵁搴� + BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); + BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>() + .eq(BasShuttle::getShuttleNo, device.getDeviceNo()) + .eq(BasShuttle::getHostId, device.getHostId())); + if (basShuttle == null) { + basShuttle = new BasShuttle(); + //鍥涘悜绌挎杞﹀彿 + basShuttle.setShuttleNo(Integer.valueOf(device.getDeviceNo())); + basShuttle.setStatus(1); + basShuttle.setDeleted(0); + basShuttle.setHostId(device.getHostId()); + basShuttle.setDeviceId(device.getId().intValue()); + shuttleService.save(basShuttle); + } + //浠诲姟鍙� + basShuttle.setTaskNo(shuttleProtocol.getTaskNo().intValue()); + //淇敼鏃堕棿 + basShuttle.setUpdateTime(new Date()); + //璁惧鐘舵�� + basShuttle.setProtocol(JSON.toJSONString(shuttleProtocol)); + if (shuttleService.updateById(basShuttle)) { + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), device.getDeviceNo())); + } } else { OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇鍥涘悜绌挎杞︾姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), device.getDeviceNo())); throw new CoolException(MessageFormat.format("璇诲彇鍥涘悜绌挎杞︾姸鎬佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", device.getDeviceNo(), device.getIp(), device.getPort())); @@ -167,7 +228,15 @@ @Override public ShuttleProtocol getStatus() { - return this.shuttleProtocol; + return getStatus(true); + } + + @Override + public ShuttleProtocol getStatus(boolean clone) { + if (this.shuttleProtocol == null) { + return null; + } + return clone ? this.shuttleProtocol.clone() : this.shuttleProtocol; } @Override @@ -178,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; @@ -189,25 +268,37 @@ ArrayList<HashMap<String, Object>> modes = new ArrayList<>(); //鑾峰彇鍒嗘璺緞 ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodes); - for (ArrayList<NavigateNode> sectionNodes : data) { + for (int idx = 0; idx < data.size(); idx++) { + ArrayList<NavigateNode> sectionNodes = data.get(idx); + boolean isRemoveFooterNode = false;//鏄惁鍓旈櫎灏捐妭鐐� + if (idx != data.size() - 1) { + isRemoveFooterNode = true;//鍓旈櫎灏捐妭鐐� + } + boolean flag = true; int oper; //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - if (ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT + NavigateNode startPath = sectionNodes.get(0); + //缁撴潫璺緞 + NavigateNode targetPath = sectionNodes.get(sectionNodes.size() - 1); + if (mapDirection.equals("y") && ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT || ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.RIGHT) { //姣嶈建鏂瑰悜 oper = 5; - }else { + } else { //瀛愯建鏂瑰悜 oper = 6; } - for (NavigateNode node : sectionNodes) { + for (int i = 0; i < sectionNodes.size(); i++) { + if (isRemoveFooterNode && i == sectionNodes.size() - 1) { + continue; + } + NavigateNode node = sectionNodes.get(i); HashMap<String, Object> map = new HashMap<>(); - map.put("nodexX", node.getX()); - map.put("nodexY", node.getY()); - map.put("nodexZ", node.getZ()); + map.put("nodeX", node.getX()); + map.put("nodeY", node.getY()); + map.put("nodeZ", node.getZ()); if (flag) { map.put("oper", oper); flag = false; @@ -229,11 +320,16 @@ .setPath("/RDS/runRoute") .setHeaders(headers) .setJson(JSON.toJSONString(param)) + .setTimeout(60, TimeUnit.SECONDS) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); Integer code = jsonObject.getInteger("code"); + System.out.println("璺緞涓嬪彂" + taskNo); + System.out.println(JSON.toJSONString(jsonObject)); + System.out.println(JSON.toJSONString(param)); if (code.equals(200)) { + System.out.println("璺緞涓嬪彂" + taskNo); return true; } } catch (Exception e) { @@ -258,11 +354,14 @@ .setPath("/RDS/runOrder") .setHeaders(headers) .setJson(command.getBody()) + .setTimeout(60, TimeUnit.SECONDS) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); Integer code = jsonObject.getInteger("code"); + System.out.println(JSON.toJSONString(command.getBody())); if (code.equals(200)) { + this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 return true; } } catch (Exception e) { @@ -287,11 +386,13 @@ .setPath("/RDS/actionOrder") .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) { @@ -316,11 +417,13 @@ .setPath("/RDS/actionOrder") .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) { @@ -331,12 +434,58 @@ @Override public synchronized boolean reset(ShuttleCommand command) { + setSyncTaskNo(0); + setProtocolStatus(ShuttleProtocolStatusType.IDLE); + enableMoveLoc(null, false); + return true; + } + + @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() { - if (this.shuttleProtocol.getIdle() == null + return this.isIdle(null); + } + + @Override + public boolean isIdle(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 || this.shuttleProtocol.getProtocolStatus() == null @@ -344,16 +493,214 @@ return false; } - boolean res = this.shuttleProtocol.getIdle() + boolean res = (this.shuttleProtocol.getDeviceStatus() == 3 || this.shuttleProtocol.getDeviceStatus() == 11) && this.shuttleProtocol.getPakMk() && this.shuttleProtocol.getErrorCode().equals("0") - && this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id + && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id + || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id + || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id); + 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 + ) { + return false; + } + + boolean res = (this.shuttleProtocol.getDeviceStatus() == 3 || this.shuttleProtocol.getDeviceStatus() == 11) + && this.shuttleProtocol.getPakMk() + && this.shuttleProtocol.getErrorCode().equals("0") ; return res; } @Override - public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) { + public boolean isRequireCharge() { + if (this.shuttleProtocol.getDeviceStatus() == null + || this.shuttleProtocol.getPakMk() == null + || this.shuttleProtocol.getErrorCode() == null + || this.shuttleProtocol.getProtocolStatus() == null + ) { + return false; + } + + boolean res = (this.shuttleProtocol.getDeviceStatus() == 3) + && this.shuttleProtocol.getPakMk() + && this.shuttleProtocol.getErrorCode().equals("0") + && this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id + ; + if (!res) { + return res; + } else { + // 鐢甸噺灏忎簬闃堝�奸渶瑕佽繘琛屽厖鐢� + try { + BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); + if (shuttleService == null) { + return false; + } + BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, this.device.getId())); + if (basShuttle == null) { + return false; + } + Integer chargeLine = basShuttle.getChargeLine(); + if (chargeLine == null) { + return false; + } + return Integer.valueOf(this.shuttleProtocol.getBatteryPower()) < chargeLine; + } catch (Exception e) { + return false; + } + } + } + + @Override + public boolean isCharging() { + if (this.shuttleProtocol.getDeviceStatus() == null) { + return false; + } + + if (this.shuttleProtocol.getDeviceStatus() == 5 || this.shuttleProtocol.getDeviceStatus() == 13) { + //鍏呯數涓拰鐢垫睜鍧囪 =銆� 鍏呯數 + return true; + } + return false; + } + + @Override + public boolean isChargingCompleted() { + Integer maxPower = 100; + DictService dictService = SpringUtils.getBean(DictService.class); + if (dictService != null) { + Dict chargeMaxValue = dictService.getOne(new LambdaQueryWrapper<Dict>() + .eq(Dict::getFlag, "chargeMaxValue") + .eq(Dict::getStatus, 1)); + if (chargeMaxValue != null) { + maxPower = Integer.parseInt(chargeMaxValue.getValue()); + } + } + + if (this.shuttleProtocol.getBatteryPower() == null) { + return false; + } + + if (Integer.valueOf(this.shuttleProtocol.getBatteryPower()) >= maxPower) { + return true; + } + return false; + } + + @Override + public List<NavigateNode> getMoveAdvancePath() { + ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class); + ArrayList<NavigateNode> path = new ArrayList<>(); + if (shuttleProtocol.getTaskNo() != 0) { + //瀛樺湪浠诲姟锛岃幏鍙栨寚浠� + Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_WORK_FLAG + shuttleProtocol.getTaskNo()); + if (object != null) { + ShuttleRedisCommand redisCommand = null; + try { + redisCommand = objectMapper.readValue(String.valueOf(object), ShuttleRedisCommand.class); + } catch (JsonProcessingException e) { + return path; + } + List<NavigateNode> nodes = redisCommand.getAssignCommand().getNodes();//绌挎杞﹂璁¤矾寰� + if (nodes == null) { + return path; + } + if (!nodes.isEmpty()) { + path.addAll(nodes); + } + } + } + return path; + } + + @Override + public int generateDeviceTaskNo(int taskNo, MotionCtgType motionCtgType) { + int deviceTaskNo = taskNo; + try { + deviceTaskNo = Utils.getTaskNo("SURAY_SHUTTLE"); + } catch (Exception e) { + return taskNo; + } + + switch (Objects.requireNonNull(MotionCtgType.get(String.valueOf(motionCtgType)))){ + case SHUTTLE_MOVE://绌挎杞︾Щ鍔� + case SHUTTLE_MOVE_LIFT_PALLET://绌挎杞﹂《鍗囧苟绉诲姩 + 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; + } + } + + @Override + public synchronized boolean setProtocolStatus(ShuttleProtocolStatusType status) { + this.shuttleProtocol.setProtocolStatus(status); + return true; + } + + @Override + public synchronized boolean setSyncTaskNo(Integer taskNo) { + this.shuttleProtocol.setSyncTaskNo(taskNo); + return true; + } + + @Override + public synchronized boolean setPakMk(boolean pakMk) { + this.shuttleProtocol.setPakMk(pakMk); + return true; + } + + @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) { HashMap<String, Object> body = new HashMap<>(); body.put("messageName", "runOrder"); body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); @@ -371,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)); @@ -381,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(); @@ -397,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(); @@ -411,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"); @@ -429,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