From 46054fc49e33fe4f1aba8da23b74b8f14664bdfe Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期日, 28 四月 2024 09:06:42 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 100 insertions(+), 16 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 9dedf44..e1df620 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,6 +3,8 @@ 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; @@ -13,11 +15,11 @@ 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.ShuttleCommandModeType; -import com.zy.asrs.wcs.core.model.enums.ShuttleRunDirection; +import com.zy.asrs.wcs.core.model.enums.*; import com.zy.asrs.wcs.core.service.BasShuttleService; import com.zy.asrs.wcs.core.service.LocService; 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; @@ -29,6 +31,8 @@ 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; @@ -109,6 +113,11 @@ //绂荤嚎 shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); } + + 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")); @@ -132,6 +141,8 @@ extend.setStatusDescription(data.getString("statusDescription"));//鐘舵�佹弿杩� shuttleProtocol.setExtend(extend);//鎵╁睍瀛楁 + //鏈�杩戜竴娆″湪绾挎椂闂� + shuttleProtocol.setLastOnlineTime(System.currentTimeMillis()); ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end //灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue @@ -206,7 +217,10 @@ @Override public ShuttleProtocol getStatus() { - return this.shuttleProtocol; + if (this.shuttleProtocol == null) { + return null; + } + return this.shuttleProtocol.clone(); } @Override @@ -272,7 +286,7 @@ param.put("messageName", "runRoute"); param.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); param.put("deviceNo", device.getDeviceNo()); - param.put("taskId", generateDeviceTaskNo(taskNo)); + param.put("taskId", taskNo); param.put("nodeNum", nodes.size()); param.put("modes", modes); String response = new HttpHandler.Builder() @@ -316,6 +330,7 @@ JSONObject jsonObject = JSON.parseObject(response); Integer code = jsonObject.getInteger("code"); if (code.equals(200)) { + this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 return true; } } catch (Exception e) { @@ -346,6 +361,7 @@ JSONObject jsonObject = JSON.parseObject(response); Integer code = jsonObject.getInteger("code"); if (code.equals(200)) { + this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 return true; } } catch (Exception e) { @@ -376,6 +392,7 @@ JSONObject jsonObject = JSON.parseObject(response); Integer code = jsonObject.getInteger("code"); if (code.equals(200)) { + this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 return true; } } catch (Exception e) { @@ -386,7 +403,9 @@ @Override public synchronized boolean reset(ShuttleCommand command) { - return false; + this.shuttleProtocol.setTaskNo(0); + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + return true; } @Override @@ -412,7 +431,23 @@ 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) + ; + return res; + } + + @Override + public boolean isDeviceIdle() { + 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; } @@ -451,7 +486,6 @@ } return Integer.valueOf(this.shuttleProtocol.getBatteryPower()) < chargeLine; } catch (Exception e) { - News.error("fail", e); return false; } } @@ -472,11 +506,22 @@ @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()) >= 100) { + if (Integer.valueOf(this.shuttleProtocol.getBatteryPower()) >= maxPower) { return true; } return false; @@ -484,13 +529,22 @@ @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 = JSON.parseObject(object.toString(), ShuttleRedisCommand.class); + 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); } @@ -500,21 +554,51 @@ } @Override - public int generateDeviceTaskNo(int taskNo) { - int no = taskNo % 255; - if (no <= 1) { - no = 2; + public int generateDeviceTaskNo(int taskNo, MotionCtgType motionCtgType) { + int deviceTaskNo = taskNo; + try { + deviceTaskNo = Utils.getTaskNo("SURAY_SHUTTLE"); + } catch (Exception e) { + return taskNo; } - return no; + + 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://杩涙彁鍗囨満 + return deviceTaskNo; + default: + return taskNo; + } } @Override - public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) { + 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 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())); body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo())); - body.put("taskId", generateDeviceTaskNo(taskNo)); + body.put("taskId", taskNo); LocService locService = SpringUtils.getBean(LocService.class); Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() -- Gitblit v1.9.1