From d66dc4c24233969c7649692aa37c53a8ad4c272c Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 30 四月 2024 08:28:20 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java | 152 +++++++++++++++++++++++++++++++++++---------------
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java | 26 +++++---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java | 2
3 files changed, 121 insertions(+), 59 deletions(-)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java
index c020d7a..5abf648 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java
@@ -29,7 +29,7 @@
public static DeviceCtgType get(String el) {
for (DeviceCtgType value : DeviceCtgType.values()) {
- if (el.equals(value.toString())) {
+ if (el.toUpperCase().equals(value.toString())) {
return value;
}
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
index 571adb5..677c6f0 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
@@ -161,19 +161,23 @@
}
public boolean is_valid(int x, int y) {
- // 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉�
- if (map[x][y] < 0) return false;
- for (NavigateNode node : Exist) {
- //濡傛灉缁撶偣鍑虹幇杩囷紝涓嶅悎娉�
- if (node.getX() == x && node.getY() == y) {
- return false;
+ try {
+ // 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉�
+ if (map[x][y] < 0) return false;
+ for (NavigateNode node : Exist) {
+ //濡傛灉缁撶偣鍑虹幇杩囷紝涓嶅悎娉�
+ if (node.getX() == x && node.getY() == y) {
+ return false;
+ }
+ if (is_exist(new NavigateNode(x, y))) {
+ return false;
+ }
}
- if (is_exist(new NavigateNode(x, y))) {
- return false;
- }
+ //浠ヤ笂鎯呭喌閮芥病鏈夊垯鍚堟硶
+ return true;
+ } catch (Exception e) {
+ return false;
}
- //浠ヤ笂鎯呭喌閮芥病鏈夊垯鍚堟硶
- return true;
}
public boolean is_exist(NavigateNode node)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
index 2edd07e..096c96d 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
@@ -56,7 +56,7 @@
private ShuttleProtocol shuttleProtocol;
private Socket socket;
- private static final boolean DEBUG = true;//璋冭瘯妯″紡
+ private static final boolean DEBUG = false;//璋冭瘯妯″紡
private List<JSONObject> socketResults = new ArrayList<>();
@@ -120,31 +120,44 @@
}
}
- public JSONObject getRequestBody(Integer requestId) {
- // 鑾峰彇鏈嶅姟鍣ㄥ搷搴�
- JSONObject result = null;
- for (int i = 0; i < socketResults.size(); i++) {
- JSONObject socketResult = socketResults.get(i);
- if (!socketResult.get("msgType").equals("responseMsg")) {//涓嶆槸鍝嶅簲鍐呭
- continue;
+ public JSONObject getRequestBody(String type) {
+ try {
+ // 鑾峰彇鏈嶅姟鍣ㄥ搷搴�
+ JSONObject result = null;
+ if (type.equals("readState")) {
+ type = "state";
}
- JSONObject resultResponse = JSON.parseObject(socketResult.get("response").toString());
- JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString());
- int responseId = Integer.parseInt(resultHeader.get("responseId").toString());
- if (!DEBUG && responseId != requestId) {
- continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓�
+ for (int i = 0; i < socketResults.size(); i++) {
+ JSONObject socketResult = socketResults.get(i);
+ if (!socketResult.get("msgType").equals("responseMsg")) {//涓嶆槸鍝嶅簲鍐呭
+ continue;
+ }
+
+ JSONObject resultResponse = JSON.parseObject(socketResult.get("response").toString());
+ JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString());
+ String responseType = resultBody.get("responseType").toString();
+ if (DEBUG) {
+ result = socketResult;
+ break;
+ }
+
+ if (!responseType.equals(type)) {
+ continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓�
+ }
+
+ result = socketResult;
+ break;
}
- result = socketResult;
- break;
- }
+ if (result == null) {
+ return null;//鏃犲搷搴旂粨鏋�
+ }
- if (result == null) {
- return null;//鏃犲搷搴旂粨鏋�
+ return filterBodyData(result);//杩斿洖Body缁撴灉闆�
+ } catch (Exception e) {
+ return null;
}
-
- return filterBodyData(result);//杩斿洖Body缁撴灉闆�
}
private void read() {
@@ -163,22 +176,23 @@
private void readStatus() {
try {
+ if (null == shuttleProtocol) {
+ shuttleProtocol = new ShuttleProtocol();
+ shuttleProtocol.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
+ shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+ shuttleProtocol.setDevice(device);
+
+ InnerSuhttleExtend extend = new InnerSuhttleExtend();
+ shuttleProtocol.setExtend(extend);
+ }
+
//----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(Integer.parseInt(device.getDeviceNo()));
JSONObject data = requestCommand(readStatusCommand);
if (data == null) {
- shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
+// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
}else {
- if (null == shuttleProtocol) {
- shuttleProtocol = new ShuttleProtocol();
- shuttleProtocol.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
- shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
- shuttleProtocol.setDevice(device);
-
- InnerSuhttleExtend extend = new InnerSuhttleExtend();
- shuttleProtocol.setExtend(extend);
- }
//----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
//灏忚溅璁惧鐘舵��
@@ -186,7 +200,7 @@
//灏忚溅妯″紡
shuttleProtocol.setMode(data.getInteger("workingMode"));
//褰撳墠浜岀淮鐮�
- shuttleProtocol.setCurrentCode(data.getString("coord"));
+ shuttleProtocol.setCurrentCode(data.getString("point"));
//鐢垫睜鐢甸噺
shuttleProtocol.setBatteryPower(data.getString("powerPercent"));
//鐢垫睜鐢靛帇
@@ -219,9 +233,9 @@
shuttleProtocol.setLastOnlineTime(System.currentTimeMillis());
///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end
- //灏忚溅澶勪簬杩愯涓紝灏嗘爣璁扮疆涓篺alse
+ //灏忚溅澶勪簬杩愯涓紝灏嗘爣璁扮疆涓簍rue
if (shuttleProtocol.getDeviceStatus() == 1) {
- shuttleProtocol.setPakMk(false);
+ shuttleProtocol.setPakMk(true);
}
if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 0) {
@@ -304,8 +318,9 @@
String requestType = resultBody.getString("requestType");
Integer requestId = resultHeader.getInteger("requestId");
if (requestType.equals("init")) {
+ Integer code = resultBody.getInteger("code");
//灏忚溅澶嶄綅璇锋眰
- ShuttleCommand initCommand = getInitCommand(requestId);
+ ShuttleCommand initCommand = getInitCommand(requestId, code);
//鍙戝嚭璇锋眰
NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class);
JSONObject requestResult = requestCommand(httpCommand);
@@ -420,7 +435,7 @@
InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend();
- boolean res = this.shuttleProtocol.getDeviceStatus() == 0
+ boolean res = this.shuttleProtocol.getDeviceStatus() == 1
&& this.shuttleProtocol.getMode() == 1
&& this.shuttleProtocol.getPakMk()
&& this.shuttleProtocol.getErrorCode().equals("0")
@@ -443,7 +458,7 @@
InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend();
- boolean res = this.shuttleProtocol.getDeviceStatus() == 0
+ boolean res = this.shuttleProtocol.getDeviceStatus() == 1
&& this.shuttleProtocol.getMode() == 1
&& this.shuttleProtocol.getPakMk()
&& this.shuttleProtocol.getErrorCode().equals("0")
@@ -466,7 +481,7 @@
InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend();
- boolean res = this.shuttleProtocol.getDeviceStatus() == 0
+ boolean res = this.shuttleProtocol.getDeviceStatus() == 1
&& this.shuttleProtocol.getMode() == 1
&& this.shuttleProtocol.getPakMk()
&& this.shuttleProtocol.getErrorCode().equals("0")
@@ -625,8 +640,8 @@
data.put("z", z);
data.put("x", mapNode.getXBase());
data.put("y", mapNode.getYBase());
+ path.add(data);
}
-
httpStandard.setRequest(request);
@@ -660,7 +675,7 @@
ShuttleCommand command = new ShuttleCommand();
command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
- command.setBody(JSON.toJSONString(body));
+ command.setBody(JSON.toJSONString(httpStandard));
command.setMode(lift ? ShuttleCommandModeType.PALLET_LIFT.id : ShuttleCommandModeType.PALLET_DOWN.id);
return command;
}
@@ -685,13 +700,46 @@
}
//鑾峰彇灏忚溅澶嶄綅鍝嶅簲鍛戒护
- public ShuttleCommand getInitCommand(Integer taskNo) {
+ public ShuttleCommand getInitCommand(Integer taskNo, Integer code) {
+ LocService locService = SpringUtils.getBean(LocService.class);
+ NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
NyShuttleHttpCommand httpStandard = getHttpStandard(Integer.parseInt(device.getDeviceNo()), taskNo);
NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest();
+ //code -> {Integer@13781} 1101101
+ int lev = code % 100;
+ int bay = code / 100 % 1000;
+ int row = code / 100000;
+
+ HashMap<String, Object> map = new HashMap<>();
+ map.put("x", row);
+ map.put("y", bay);
+ map.put("z", lev);
+
+ String mapStr = JSON.toJSONString(map);
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getCode, mapStr)
+ .eq(Loc::getStatus, 1)
+ .eq(Loc::getHostId, this.device.getHostId()));
+ if (loc == null) {
+ throw new CoolException("鍦板潃鐮佷笉瀛樺湪");
+ }
+
+ navigateMapData.setLev(lev);
+ List<List<MapNode>> mapData = navigateMapData.getJsonData(NavigationMapType.NONE.id, null, null);
+ List<MapNode> mapNodes = mapData.get(loc.getRow());
+ MapNode mapNode = mapNodes.get(loc.getBay());
+
+ HashMap<String, Object> location = new HashMap<>();
+ location.put("xp", row);
+ location.put("yp", bay);
+ location.put("z", lev);
+ location.put("x", mapNode.getXBase());
+ location.put("y", mapNode.getYBase());
+
HashMap<String, Object> body = new HashMap<>();
body.put("responseType", "init");//澶嶄綅
- body.put("location", new ArrayList<>());//鍒濆鍖栧潗鏍�
+ body.put("location", location);//鍒濆鍖栧潗鏍�
body.put("devicePoints", new ArrayList<>());//鎻愬崌鏈虹偣浣�
body.put("specialPoints", new ArrayList<>());//鐗规畩鏉$爜鍧愭爣
request.setBody(body);
@@ -784,11 +832,18 @@
writer.flush();
// System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand));
+ String requestType = null;
+ try {
+ requestType = httpCommand.getRequest().getBody().get("requestType").toString();
+ } catch (Exception e) {
+ return null;
+ }
+
// 鑾峰彇鏈嶅姟鍣ㄥ搷搴�
// 灏濊瘯10娆�
JSONObject result = null;
for (int i = 0; i < 10; i++) {
- result = getRequestBody(httpCommand.getRequest().getHeader().getRequestId());
+ result = getRequestBody(requestType);
if (result == null) {
try {
Thread.sleep(100);
@@ -796,6 +851,7 @@
e.printStackTrace();
}
}
+ break;
}
return result;//杩斿洖Body缁撴灉闆�
}
@@ -827,11 +883,13 @@
//WCS绯荤粺鍧愭爣杞墰鐪煎潗鏍�
private static int[] WCSXyzToNyXyz(int x, int y, int z) {
- //WCS绯荤粺Y杞� => 鐗涚溂X杞磋浆鎹㈠叕寮�
- int x1 = Math.abs(y - 61) + 11;
- //WCS绯荤粺X杞� => 鐗涚溂Y杞磋浆鎹㈠叕寮�
- int y1 = x + 10;
- return new int[]{x1, y1, z};
+// //WCS绯荤粺Y杞� => 鐗涚溂X杞磋浆鎹㈠叕寮�
+// int x1 = Math.abs(y - 61) + 11;
+// //WCS绯荤粺X杞� => 鐗涚溂Y杞磋浆鎹㈠叕寮�
+// int y1 = x + 10;
+ int x1 = x + 10;
+ int y1 = y + 10;
+ return new int[]{y1, x1, z};
}
@Data
--
Gitblit v1.9.1