From 99a13ac3e2c52881577cbf4a69ccc17f349eeec7 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期三, 17 四月 2024 09:22:12 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java | 158 +++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 141 insertions(+), 17 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 bee13fe..461c4e2 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,21 +3,26 @@
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.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.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;
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;
@@ -32,6 +37,7 @@
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.concurrent.TimeUnit;
@Slf4j
@SuppressWarnings("all")
@@ -110,7 +116,8 @@
shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode"));
//鐢垫睜鐢甸噺
shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0%" : data.getString("battery"));
-
+ //鏁呴殰
+ shuttleProtocol.setErrorCode(deviceStatus == 6 ? "1" : "0");
//鏄惁椤跺崌
shuttleProtocol.setHasLift(data.getInteger("palletStatus") == 1 ? true : false);
@@ -130,7 +137,7 @@
///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end
//灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue
- if (!shuttleProtocol.getIdle()) {
+ if (deviceStatus == 1 || deviceStatus == 2 || deviceStatus == 5) {
shuttleProtocol.setPakMk(true);
}
@@ -201,7 +208,10 @@
@Override
public ShuttleProtocol getStatus() {
- return this.shuttleProtocol;
+ if (this.shuttleProtocol == null) {
+ return null;
+ }
+ return this.shuttleProtocol.clone();
}
@Override
@@ -223,25 +233,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);
+ NavigateNode startPath = sectionNodes.get(0);
+ //缁撴潫璺緞
+ NavigateNode targetPath = sectionNodes.get(sectionNodes.size() - 1);
if (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;
@@ -263,6 +285,7 @@
.setPath("/RDS/runRoute")
.setHeaders(headers)
.setJson(JSON.toJSONString(param))
+ .setTimeout(60, TimeUnit.SECONDS)
.build()
.doPost();
JSONObject jsonObject = JSON.parseObject(response);
@@ -292,6 +315,7 @@
.setPath("/RDS/runOrder")
.setHeaders(headers)
.setJson(command.getBody())
+ .setTimeout(60, TimeUnit.SECONDS)
.build()
.doPost();
JSONObject jsonObject = JSON.parseObject(response);
@@ -321,6 +345,7 @@
.setPath("/RDS/actionOrder")
.setHeaders(headers)
.setJson(command.getBody())
+ .setTimeout(60, TimeUnit.SECONDS)
.build()
.doPost();
JSONObject jsonObject = JSON.parseObject(response);
@@ -350,6 +375,7 @@
.setPath("/RDS/actionOrder")
.setHeaders(headers)
.setJson(command.getBody())
+ .setTimeout(60, TimeUnit.SECONDS)
.build()
.doPost();
JSONObject jsonObject = JSON.parseObject(response);
@@ -370,7 +396,17 @@
@Override
public boolean isIdle() {
- if (this.shuttleProtocol.getIdle() == null
+ return this.isIdle(null);
+ }
+
+ @Override
+ public boolean isIdle(ExecuteSupport support) {
+ if (null != support) {
+ if (!support.judgement()) {
+ return false;
+ }
+ }
+ if (this.shuttleProtocol.getDeviceStatus() == null
|| this.shuttleProtocol.getPakMk() == null
|| this.shuttleProtocol.getErrorCode() == null
|| this.shuttleProtocol.getProtocolStatus() == null
@@ -378,17 +414,33 @@
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)
+ ;
+ 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;
}
@Override
public boolean isRequireCharge() {
- if (this.shuttleProtocol.getIdle() == null
+ if (this.shuttleProtocol.getDeviceStatus() == null
|| this.shuttleProtocol.getPakMk() == null
|| this.shuttleProtocol.getErrorCode() == null
|| this.shuttleProtocol.getProtocolStatus() == null
@@ -396,7 +448,7 @@
return false;
}
- boolean res = this.shuttleProtocol.getIdle()
+ boolean res = (this.shuttleProtocol.getDeviceStatus() == 3)
&& this.shuttleProtocol.getPakMk()
&& this.shuttleProtocol.getErrorCode().equals("0")
&& this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id
@@ -441,10 +493,82 @@
@Override
public boolean isChargingCompleted() {
+ if (this.shuttleProtocol.getBatteryPower() == null) {
+ return false;
+ }
+
+ if (Integer.valueOf(this.shuttleProtocol.getBatteryPower()) >= 100) {
+ 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://杩涙彁鍗囨満
+ 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 ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "runOrder");
--
Gitblit v1.9.1