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/SurayLiftThread.java | 187 +++++++++++++++++++++++++++++++++------------- 1 files changed, 132 insertions(+), 55 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java index 1766542..87c894a 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java @@ -12,9 +12,11 @@ import com.zy.asrs.wcs.core.entity.BasLift; import com.zy.asrs.wcs.core.model.command.LiftCommand; import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType; +import com.zy.asrs.wcs.core.model.enums.MotionCtgType; import com.zy.asrs.wcs.core.service.BasLiftService; 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.LiftProtocolStatusType; import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol; @@ -27,14 +29,13 @@ import java.text.MessageFormat; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; +import java.util.*; @Slf4j @SuppressWarnings("all") public class SurayLiftThread implements LiftThread { - 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; @@ -43,6 +44,7 @@ public SurayLiftThread(Device device,RedisUtil redisUtil) { this.device = device; this.redisUtil = redisUtil; + API_URL = "http://" + device.getIp() + ":" + device.getPort(); } @Override @@ -91,18 +93,25 @@ //----------璇诲彇鎻愬崌鏈虹姸鎬�----------- //妯″紡 liftProtocol.setModel(true); + + boolean runningState = data.getInteger("runningState") == 1; + if (!data.getInteger("completeTaskNo").equals(data.getInteger("taskNo"))) { + runningState = true;//宸ヤ綔鍙蜂笉涓�鑷达紝璁や负澶勪簬杩愯涓� + } //杩愯鐘舵�� - liftProtocol.setRun(data.getInteger("runningState") == 1); + liftProtocol.setRun(runningState); //灏辩华鐘舵�� liftProtocol.setReady(data.getInteger("readyState") == 1); //鏈夋墭鐩� liftProtocol.setHasTray(data.getString("haveCargo").equals("Y")); //鏈夊皬杞� - liftProtocol.setHasCar(data.getString("haveCar").equals("Y")); + liftProtocol.setHasCar(data.getInteger("haveCar") == 1); //鏁呴殰鐮� liftProtocol.setErrorCode("0"); //灞� liftProtocol.setLev(data.getInteger("curFloor")); + //宸插畬鎴愮殑浠诲姟鍙� + liftProtocol.setCompleteTaskNo(data.getString("completeTaskNo")); //************琛ュ厖鎵╁睍瀛楁************* @@ -326,6 +335,30 @@ @Override public synchronized boolean reset(LiftCommand 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/lifterOperation") + .setHeaders(headers) + .setJson(command.getBody()) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + Integer code = jsonObject.getInteger("code"); + if (code.equals(200)) { + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } return false; } @@ -335,22 +368,68 @@ } @Override - public boolean isIdle(ExecuteSupport support) { - if (null != support) { - if (!support.judgement()) { - return false; + public boolean isIdle(MotionCtgType flag) { + if (flag == null) { + InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();//鑾峰彇鎵╁睍瀛楁 + // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂层�佹湭閿佸畾 + if (this.liftProtocol.getModel() + && !this.liftProtocol.getRun() + && this.liftProtocol.getPakMk() + && this.liftProtocol.getReady() + && this.liftProtocol.getErrorCode().equals("0") + && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE) + || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING)) + && !extend.getLock() + ) { + return true; } + return false; } + + switch (Objects.requireNonNull(MotionCtgType.get(String.valueOf(flag)))){ + case SHUTTLE_MOVE_FROM_LIFT://绌挎杞﹀嚭鎻愬崌鏈� + case SHUTTLE_MOVE_TO_LIFT://绌挎杞﹁繘鎻愬崌鏈� + case LIFT_SHUTTLE_ARRIVAL://鎻愬崌鏈鸿В閿� + return isIdleShuttleMoveToLift(); + case LIFT_LOCK://鎻愬崌鏈洪攣瀹� + case LIFT_UNLOCK://鎻愬崌鏈鸿В閿� + return isIdleLiftLock(); + } + + return false; + } + + //绌挎杞﹁繘鎻愬崌鏈烘椂-鎻愬崌鏈虹姸鎬佸垽鏂� + private boolean isIdleShuttleMoveToLift() { InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();//鑾峰彇鎵╁睍瀛楁 - // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂层�佹湭閿佸畾 + // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂� if (this.liftProtocol.getModel() && !this.liftProtocol.getRun() && this.liftProtocol.getPakMk() - && this.liftProtocol.getReady() && this.liftProtocol.getErrorCode().equals("0") && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE) || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING)) - && !extend.getLock() + ) { + if (!extend.getLock()) { + //鎻愬崌鏈烘湭閿佸畾锛岄渶瑕佸垽鏂槸鍚﹀氨缁� + if (!this.liftProtocol.getReady()) { + return false; + } + } + return true; + } + return false; + } + + //鎻愬崌鏈洪攣瀹�-鎻愬崌鏈虹姸鎬佸垽鏂� + private boolean isIdleLiftLock() { + // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂� + if (this.liftProtocol.getModel() + && !this.liftProtocol.getRun() + && this.liftProtocol.getPakMk() + && this.liftProtocol.getErrorCode().equals("0") + && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE) + || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING)) ) { return true; } @@ -405,41 +484,16 @@ return extend.getLock(); } - @Override - public boolean commandFinished(Integer taskNo) { - try { - LiftCommand command = getTaskClearCommand(); - 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/lifterOperation") - .setHeaders(headers) - .setJson(command.getBody()) - .build() - .doPost(); - JSONObject jsonObject = JSON.parseObject(response); - Integer code = jsonObject.getInteger("code"); - if (code.equals(200)) { - return true; - } - } catch (Exception e) { - e.printStackTrace(); - } - return false; - } - //***************璁惧灞傞�氳-涓嶅悓鍘傚晢璁惧閫氳鏂规涓嶄竴鑷�*************** //璇锋眰鐧诲綍 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"); @@ -453,7 +507,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(); @@ -499,7 +555,7 @@ //绌鸿浇绉诲姩 @Override - public LiftCommand getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) { + public List<LiftCommand> getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) { int taskMode = 3;//绌鸿浇绉诲姩 HashMap<String, Object> body = new HashMap<>(); @@ -519,12 +575,16 @@ command.setMode(LiftCommandModeType.MOVE.id); command.setOriginLev(0); command.setTargetLev(targetLev); - return command; + + ArrayList<LiftCommand> list = new ArrayList<>(); + list.add(command); + list.addAll(getTaskClearCommand()); + return list; } //杞借溅绉诲姩 @Override - public LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) { + public List<LiftCommand> getMoveWithShuttleCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) { HashMap<String, Object> body = new HashMap<>(); body.put("messageName", "lifterTask"); body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); @@ -542,12 +602,16 @@ command.setMode(LiftCommandModeType.MOVE.id); command.setOriginLev(sourceLev); command.setTargetLev(targetLev); - return command; + + ArrayList<LiftCommand> list = new ArrayList<>(); + list.add(command); + list.addAll(getTaskClearCommand()); + return list; } //鎵樼洏鍑哄叆 @Override - public LiftCommand getPalletInOutCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer originSta, Integer targetSta, LiftCommandModeType mode) { + public List<LiftCommand> getPalletInOutCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer originSta, Integer targetSta, LiftCommandModeType mode) { HashMap<String, Object> body = new HashMap<>(); body.put("messageName", "lifterTask"); body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); @@ -567,12 +631,16 @@ command.setTargetLev(targetLev); command.setOriginSta(originSta); command.setTargetSta(targetSta); - return command; + + ArrayList<LiftCommand> list = new ArrayList<>(); + list.add(command); + list.addAll(getTaskClearCommand()); + return list; } //閿佸畾/瑙i攣鎻愬崌鏈� @Override - public LiftCommand getLockCommand(Integer taskNo, Boolean lock) { + public List<LiftCommand> getLockCommand(Integer taskNo, Boolean lock) { HashMap<String, Object> body = new HashMap<>(); body.put("messageName", "lifterOperation"); body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); @@ -585,12 +653,15 @@ command.setLiftNo(Integer.valueOf(this.device.getDeviceNo())); command.setBody(JSON.toJSONString(body)); command.setMode(lock ? LiftCommandModeType.LOCK.id : LiftCommandModeType.UNLOCK.id); - return command; + + ArrayList<LiftCommand> list = new ArrayList<>(); + list.add(command); + return list; } //灏忚溅宸插埌浣�/宸查┒绂讳俊鍙� @Override - public LiftCommand getShuttleSignalCommand(Integer taskNo, Boolean signal) { + public List<LiftCommand> getShuttleSignalCommand(Integer taskNo, Boolean signal) { HashMap<String, Object> body = new HashMap<>(); body.put("messageName", "lifterOperation"); body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); @@ -602,11 +673,14 @@ command.setLiftNo(Integer.valueOf(this.device.getDeviceNo())); command.setBody(JSON.toJSONString(body)); command.setMode(signal ? LiftCommandModeType.LOCK.id : LiftCommandModeType.UNLOCK.id); - return command; + + ArrayList<LiftCommand> list = new ArrayList<>(); + list.add(command); + return list; } //鑾峰彇鎻愬崌鏈轰换鍔℃竻闄ゅ懡浠� - private LiftCommand getTaskClearCommand() { + private List<LiftCommand> getTaskClearCommand() { HashMap<String, Object> body = new HashMap<>(); body.put("messageName", "lifterOperation"); body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); @@ -617,7 +691,10 @@ command.setLiftNo(Integer.valueOf(this.device.getDeviceNo())); command.setBody(JSON.toJSONString(body)); command.setMode(LiftCommandModeType.RESET.id); - return command; + + ArrayList<LiftCommand> list = new ArrayList<>(); + list.add(command); + return list; } /** -- Gitblit v1.9.1