From 8a4d482469e2078cce3cf227c11be862e94b860d Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期五, 12 四月 2024 20:25:24 +0800
Subject: [PATCH] Merge branch 'Four-Way-Rack' of http://47.97.1.152:5880/r/zy-asrs-master into Four-Way-Rack
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java | 51 ++++++++++++-----
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleAssignCommand.java | 5 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleRedisCommand.java | 2
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java | 34 ++++++++---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java | 14 ++--
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java | 22 -------
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java | 2
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/NavigateNode.java | 15 ++++
8 files changed, 90 insertions(+), 55 deletions(-)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
index f3e2a32..44aad5b 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
@@ -1,10 +1,9 @@
package com.zy.asrs.wcs.core.action;
import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.zy.asrs.wcs.common.ExecuteSupport;
-import com.zy.asrs.wcs.core.entity.BasShuttle;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.asrs.wcs.core.entity.Loc;
import com.zy.asrs.wcs.core.entity.Task;
import com.zy.asrs.wcs.core.model.NavigateNode;
@@ -27,6 +26,7 @@
import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
+import org.aspectj.apache.bcel.generic.RET;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -46,6 +46,8 @@
private LocService locService;
@Autowired
private ShuttleDispatcher shuttleDispatcher;
+ @Autowired
+ private ObjectMapper objectMapper;
public synchronized boolean assignWork(Device device, ShuttleAssignCommand assignCommand) {
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
@@ -87,7 +89,14 @@
if (obj == null) {
return false;
}
- ShuttleRedisCommand redisCommand = JSON.parseObject(obj.toString(), ShuttleRedisCommand.class);
+
+ ShuttleRedisCommand redisCommand = null;
+ try {
+ redisCommand = objectMapper.readValue(String.valueOf(obj), ShuttleRedisCommand.class);
+ } catch (JsonProcessingException e) {
+ throw new RuntimeException(e);
+ }
+
if (redisCommand == null) {
return false;
}
@@ -177,12 +186,12 @@
// 绯荤粺浠诲姟
if (assignCommand.getAuto()) {
- if (!assignCommand.getCharge()) {
- //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
- shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
- }else {
- shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
- }
+// if (!assignCommand.getCharge()) {
+// //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
+// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+// }else {
+// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
+// }
News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
// 鎵嬪姩浠诲姟
@@ -211,6 +220,11 @@
return false;
}
+ commandStep++;
+ //鏇存柊redis鏁版嵁
+ redisCommand.setCommandStep(commandStep);
+ //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+ redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
return true;
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
index 7eef25c..33e9853 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -1,5 +1,6 @@
package com.zy.asrs.wcs.core.kernel.command;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.exception.CoolException;
@@ -29,10 +30,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
/**
* Created by vincent on 2023/10/23
@@ -99,7 +97,7 @@
// 濡傛灉宸茬粡鍦ㄥ綋鍓嶆潯鐮佸垯杩囨护
if (String.valueOf(shuttleProtocol.getCurrentCode()).equals(locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getLocNo, motion.getTarget())
- .eq(Loc::getHostId, motion.getHostId())).getCode())) {
+ .eq(Loc::getHostId, motion.getHostId())).getCode())) {
return true;
}
shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
@@ -341,7 +339,11 @@
News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
return null;
}
- List<NavigateNode> allNode = new ArrayList<>(nodeList);
+
+ List<NavigateNode> allNode = new ArrayList<>();
+ for (NavigateNode node : nodeList) {
+ allNode.add(node.clone());
+ }
List<ShuttleCommand> commands = new ArrayList<>();
//鑾峰彇鍒嗘璺緞
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/NavigateNode.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/NavigateNode.java
index 266287b..d432b7c 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/NavigateNode.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/NavigateNode.java
@@ -2,11 +2,15 @@
import lombok.Data;
+import java.io.Serializable;
+
/**
* A*瀵昏矾绠楁硶Node鑺傜偣
*/
@Data
-public class NavigateNode implements Comparable<NavigateNode>{
+public class NavigateNode implements Comparable<NavigateNode>, Cloneable, Serializable {
+
+ private static final long serialVersionUID = 1L;
private int x;//鍧愭爣x
private int y;//鍧愭爣y
@@ -46,4 +50,13 @@
return Integer.compare(this.F, o.F);
}
+ @Override
+ public NavigateNode clone() {
+ try {
+ return (NavigateNode) super.clone();
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleAssignCommand.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleAssignCommand.java
index 3d6ee5b..cedc3c2 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleAssignCommand.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleAssignCommand.java
@@ -3,11 +3,14 @@
import com.zy.asrs.wcs.core.model.NavigateNode;
import lombok.Data;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Data
-public class ShuttleAssignCommand {
+public class ShuttleAssignCommand implements Serializable {
+
+ private static final long serialVersionUID = 1L;
/**
* 鍥涘悜绌挎杞﹀彿
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleRedisCommand.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleRedisCommand.java
index 4cfac1a..534d3a3 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleRedisCommand.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/command/ShuttleRedisCommand.java
@@ -10,6 +10,8 @@
@Data
public class ShuttleRedisCommand implements Serializable {
+ private static final long serialVersionUID = 1L;
+
//鍥涘悜绌挎杞﹀彿
private Integer shuttleNo;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
index 97b5d64..c3d506c 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
@@ -207,28 +207,6 @@
return "";
}
- /**
- * 鑾峰彇灏忚溅绌洪棽鐘舵��
- */
- public Boolean getIdle() {
- if (this.deviceStatus == null) {
- return false;
- }
-
- ShuttleDeviceStatusService shuttleDeviceStatusService = SpringUtils.getBean(ShuttleDeviceStatusService.class);
- ShuttleDeviceStatus status = shuttleDeviceStatusService.getOne(new LambdaQueryWrapper<ShuttleDeviceStatus>()
- .eq(ShuttleDeviceStatus::getHostId, this.device.getHostId())
- .eq(ShuttleDeviceStatus::getDevicePlc, this.device.getDevicePlc())
- .eq(ShuttleDeviceStatus::getStatus, 1)
- .eq(ShuttleDeviceStatus::getDeviceStatus, this.deviceStatus));
- if (status != null) {
- if (status.getFlag() != null && status.getFlag().equals(String.valueOf(ShuttleDeviceStatusType.IDLE))) {
- return true;//绌洪棽涓�
- }
- }
- return false;//榛樿涓嶇┖闂�
- }
-
public Integer getTaskNo() {
RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
if (null != redisUtil) {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
index 13544ee..2e9c880 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
@@ -36,6 +36,8 @@
List<NavigateNode> getMoveAdvancePath();//鑾峰彇绌挎杞︿换鍔¤矾寰�
+ int generateDeviceTaskNo(int taskNo);//鐢熸垚纭欢璁惧宸ヤ綔鍙�
+
//***************鑾峰彇鍛戒护*****************
ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed);//鑾峰彇绉诲姩鍛戒护
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 600cd12..9dedf44 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
@@ -135,7 +135,7 @@
///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end
//灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue
- if (!shuttleProtocol.getIdle()) {
+ if (deviceStatus == 1 || deviceStatus == 2 || deviceStatus == 5) {
shuttleProtocol.setPakMk(true);
}
@@ -228,25 +228,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;
@@ -260,7 +272,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", taskNo);
+ param.put("taskId", generateDeviceTaskNo(taskNo));
param.put("nodeNum", nodes.size());
param.put("modes", modes);
String response = new HttpHandler.Builder()
@@ -389,7 +401,7 @@
return false;
}
}
- if (this.shuttleProtocol.getIdle() == null
+ if (this.shuttleProtocol.getDeviceStatus() == null
|| this.shuttleProtocol.getPakMk() == null
|| this.shuttleProtocol.getErrorCode() == null
|| this.shuttleProtocol.getProtocolStatus() == null
@@ -397,7 +409,7 @@
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
@@ -407,7 +419,7 @@
@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
@@ -415,7 +427,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
@@ -475,7 +487,7 @@
ArrayList<NavigateNode> path = new ArrayList<>();
if (shuttleProtocol.getTaskNo() != 0) {
//瀛樺湪浠诲姟锛岃幏鍙栨寚浠�
- Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_FLAG + shuttleProtocol.getTaskNo());
+ Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_WORK_FLAG + shuttleProtocol.getTaskNo());
if (object != null) {
ShuttleRedisCommand redisCommand = JSON.parseObject(object.toString(), ShuttleRedisCommand.class);
List<NavigateNode> nodes = redisCommand.getAssignCommand().getNodes();//绌挎杞﹂璁¤矾寰�
@@ -488,12 +500,21 @@
}
@Override
+ public int generateDeviceTaskNo(int taskNo) {
+ int no = taskNo % 255;
+ if (no <= 1) {
+ no = 2;
+ }
+ return no;
+ }
+
+ @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");
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", generateDeviceTaskNo(taskNo));
LocService locService = SpringUtils.getBean(LocService.class);
Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
--
Gitblit v1.9.1