From 314729da5f6f84a6112344a2210aadfeeb2bac0c Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期一, 21 四月 2025 10:35:43 +0800
Subject: [PATCH] #出库找待机位优化
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java | 184 ++++++++++++++++++++++++++++++++-------------
1 files changed, 130 insertions(+), 54 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 3ca11e8..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,8 +29,7 @@
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
+import java.util.*;
@Slf4j
@SuppressWarnings("all")
@@ -92,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"));
//************琛ュ厖鎵╁睍瀛楁*************
@@ -327,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;
}
@@ -336,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;
}
@@ -406,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");
@@ -454,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();
@@ -500,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<>();
@@ -520,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()));
@@ -543,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()));
@@ -568,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()));
@@ -586,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()));
@@ -603,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()));
@@ -618,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