From cea1758e1f540e3f5f807951f128b7385b32afe6 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期六, 24 一月 2026 17:03:04 +0800
Subject: [PATCH] agv增加主动查询状态
---
src/main/java/com/zy/asrs/task/handler/AgvHandler.java | 588 +++++++++++++++++++++------------------------------------
1 files changed, 219 insertions(+), 369 deletions(-)
diff --git a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
index c346977..d475681 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -80,13 +80,13 @@
/**
* 鍛煎彨AGV
- *
+ * <p>
* 閲嶈锛氭鏂规硶鍙兘浠� AgvScheduler.callAgv() 瀹氭椂浠诲姟涓皟鐢紒
* 鎵�鏈堿GV鍛煎彨璇锋眰蹇呴』閫氳繃瀹氭椂浠诲姟缁熶竴澶勭悊锛岀‘淇濓細
* 1. 浠诲姟鎸夐『搴忓鐞嗭紝閬垮厤骞跺彂鍐茬獊
* 2. 绔欑偣鍒嗛厤鍜孉GV鍛煎彨鍒嗙锛岃亴璐f竻鏅�
* 3. 缁熶竴鐨勯敊璇鐞嗗拰閲嶈瘯鏈哄埗
- *
+ *
* @param taskList 浠诲姟鍒楄〃锛堥�氬父鍙寘鍚竴涓换鍔★級
* @return 鏄惁鎴愬姛澶勭悊浜嗕换鍔★紙鎴愬姛鍛煎彨AGV锛岀姸鎬佷粠7鍙樹负8锛�
*/
@@ -95,16 +95,16 @@
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
boolean calledFromScheduler = false;
for (StackTraceElement element : stackTrace) {
- if (element.getClassName().contains("AgvScheduler") &&
- element.getMethodName().equals("callAgv")) {
+ if (element.getClassName().contains("AgvScheduler") &&
+ element.getMethodName().equals("callAgv")) {
calledFromScheduler = true;
break;
}
}
-
+
if (!calledFromScheduler) {
- log.error("涓ラ噸閿欒锛歝allAgv鏂规硶鍙兘浠嶢gvScheduler.callAgv()瀹氭椂浠诲姟涓皟鐢紒褰撳墠璋冪敤鍫嗘爤锛歿}",
- Arrays.stream(stackTrace).limit(5).map(StackTraceElement::toString).collect(Collectors.joining("\n")));
+ log.error("涓ラ噸閿欒锛歝allAgv鏂规硶鍙兘浠嶢gvScheduler.callAgv()瀹氭椂浠诲姟涓皟鐢紒褰撳墠璋冪敤鍫嗘爤锛歿}",
+ Arrays.stream(stackTrace).limit(5).map(StackTraceElement::toString).collect(Collectors.joining("\n")));
return false;
}
@@ -117,21 +117,21 @@
if (taskList == null || taskList.isEmpty()) {
return false;
}
-
+
// 鍙鐞嗙涓�涓换鍔�
Task task = taskList.get(0);
-
+
// 鍛煎彨AGV瀹氭椂浠诲姟鍙鐞嗗凡鍒嗛厤绔欑偣鐨勪换鍔★紝绔欑偣鍒嗛厤鐢卞崟鐙殑瀹氭椂浠诲姟澶勭悊
String staNo = task.getStaNo();
String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
-
+
// 妫�鏌ョ珯鐐规槸鍚︽湁鏁堬紙涓嶄负绌恒�佷笉涓虹┖瀛楃涓层�佷笉涓�0锛�
if (staNo == null || staNo.isEmpty() || staNo.equals("0")) {
// 娌℃湁鏈夋晥绔欑偣锛岃烦杩囷紙绔欑偣鍒嗛厤鐢盿llocateSite瀹氭椂浠诲姟澶勭悊锛�
log.warn("瀹氭椂浠诲姟callAgv锛氫换鍔D锛歿}娌℃湁鏈夋晥绔欑偣鍒嗛厤锛坰ta_no={}锛夛紝璺宠繃鍙戦�侊紝绛夊緟鍒嗛厤绔欑偣瀹氭椂浠诲姟澶勭悊", displayTaskId, staNo);
return false; // 杩斿洖false锛岃〃绀烘湭鎴愬姛澶勭悊
}
-
+
// 妫�鏌ョ珯鐐规槸鍚︽湁鏁堬紙涓嶄负0涓斿瓨鍦級
try {
Integer siteNo = Integer.parseInt(staNo);
@@ -156,10 +156,10 @@
taskService.updateById(task);
return false; // 杩斿洖false锛岃鍒嗛厤绔欑偣瀹氭椂浠诲姟閲嶆柊鍒嗛厤
}
-
+
log.info("瀹氭椂浠诲姟callAgv锛氫换鍔D锛歿}宸叉湁绔欑偣鍒嗛厤锛歿}锛屽噯澶囧彂閫丄GV鍛戒护", displayTaskId, staNo);
-
-
+
+
// 妫�鏌ョ珯鐐规槸鍚︽湁鐘舵��8鐨勫悓绫诲瀷浠诲姟锛屾湁鍒欒烦杩囷紙涓嶆竻绌虹珯鐐癸級
// 瑙勫垯锛氭渶澶氱粰姣忎釜绔欑偣鍒嗛厤1鏉′换鍔★紝鏈畬鎴愬垯绛夊緟
// 鍒ゆ柇浠诲姟鏄惁瀹屾垚锛氶�氳繃鏌ヨagv宸ヤ綔妗o紙wrk_mast锛夛紝濡傛灉鏌ヤ笉鍒板氨鏄畬鎴愪簡
@@ -178,24 +178,24 @@
ioTypes = Arrays.asList(101, 110, 103, 107);
taskType = "鍑哄簱";
}
-
+
// 閫氳繃SQL鏌ヨ璇ョ珯鐐规墍鏈堿GV浠诲姟锛堝寘鎷姸鎬�7鍜�8锛�
// 瑙勫垯锛氭渶澶氱粰姣忎釜绔欑偣鍒嗛厤1鏉′换鍔★紝鏈畬鎴愬垯绛夊緟
// 鍒ゆ柇浠诲姟鏄惁瀹屾垚锛氶�氳繃鏌ヨagv宸ヤ綔妗o紙wrk_mast锛夛紝濡傛灉鏌ヤ笉鍒板氨鏄畬鎴愪簡
List<Task> allTasks = taskService.selectList(
- new EntityWrapper<Task>()
- .eq("sta_no", staNo)
- .eq("task_type", "agv")
- .in("wrk_sts", 7L, 8L)
- .in("io_type", ioTypes)
- .ne("id", task.getId()) // 鎺掗櫎褰撳墠浠诲姟鏈韩
- .andNew("(is_deleted = 0)")
+ new EntityWrapper<Task>()
+ .eq("sta_no", staNo)
+ .eq("task_type", "agv")
+ .in("wrk_sts", 7L, 8L)
+ .in("io_type", ioTypes)
+ .ne("id", task.getId()) // 鎺掗櫎褰撳墠浠诲姟鏈韩
+ .eq("is_deleted", 0) // 鎺掗櫎宸插垹闄ょ殑浠诲姟
);
-
+
int taskCount = allTasks != null ? allTasks.size() : 0;
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}鏌ヨ鍒皗}涓狝GV浠诲姟锛堟帓闄ゅ綋鍓嶄换鍔★級锛屽紑濮嬫鏌ユ槸鍚︽湁鏈畬鎴愮殑浠诲姟",
- displayTaskId, staNo, taskCount);
-
+ log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}鏌ヨ鍒皗}涓狝GV浠诲姟锛堟帓闄ゅ綋鍓嶄换鍔★級锛屽紑濮嬫鏌ユ槸鍚︽湁鏈畬鎴愮殑浠诲姟",
+ displayTaskId, staNo, taskCount);
+
// 妫�鏌ユ槸鍚︽湁鏈夋晥鐨勬湭瀹屾垚浠诲姟锛堥�氳繃鏌ヨagv宸ヤ綔妗e垽鏂級
boolean hasValidTask = false;
if (taskCount > 0) {
@@ -203,83 +203,83 @@
if (agvTask.getWrkNo() != null) {
// 鏌ヨ宸ヤ綔妗o紝濡傛灉鏌ヤ笉鍒板氨鏄畬鎴愪簡
WrkMast wrkMast = wrkMastService.selectOne(
- new EntityWrapper<WrkMast>().eq("wrk_no", agvTask.getWrkNo())
+ new EntityWrapper<WrkMast>().eq("wrk_no", agvTask.getWrkNo())
);
if (wrkMast != null) {
// 宸ヤ綔妗e瓨鍦紝妫�鏌ユ槸鍚﹀凡瀹屾垚
Long wrkSts = wrkMast.getWrkSts();
Integer ioType = agvTask.getIoType();
-
+
if (wrkSts != null && ioType != null) {
// 鍏ュ簱浠诲姟锛氱姸鎬�4鎴�5琛ㄧず瀹屾垚
boolean isCompleted = false;
if ((ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) &&
- (wrkSts == 4L || wrkSts == 5L)) {
+ (wrkSts == 4L || wrkSts == 5L)) {
isCompleted = true;
}
// 鍑哄簱浠诲姟锛氱姸鎬�14鎴�15琛ㄧず瀹屾垚
else if ((ioType == 101 || ioType == 110 || ioType == 103 || ioType == 107) &&
- (wrkSts == 14L || wrkSts == 15L)) {
+ (wrkSts == 14L || wrkSts == 15L)) {
isCompleted = true;
}
-
+
if (!isCompleted) {
// 宸ヤ綔妗e瓨鍦ㄤ笖鏈畬鎴愶紝瑙嗕负鏈夋晥浠诲姟
hasValidTask = true;
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}宸叉湁1鏉℃湭瀹屾垚鐨剓}AGV浠诲姟锛堝伐浣滃彿锛歿}锛屽伐浣滄。鐘舵�侊細{}锛夛紝璺宠繃褰撳墠浠诲姟锛岀瓑寰呭畬鎴�",
- displayTaskId, staNo, taskType, agvTask.getWrkNo(), wrkSts);
+ log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}宸叉湁1鏉℃湭瀹屾垚鐨剓}AGV浠诲姟锛堝伐浣滃彿锛歿}锛屽伐浣滄。鐘舵�侊細{}锛夛紝璺宠繃褰撳墠浠诲姟锛岀瓑寰呭畬鎴�",
+ displayTaskId, staNo, taskType, agvTask.getWrkNo(), wrkSts);
break;
} else {
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}鐨勪换鍔}锛堝伐浣滃彿锛歿}锛夊凡瀹屾垚锛堝伐浣滄。鐘舵�侊細{}锛夛紝涓嶇畻鏈夋晥浠诲姟",
- displayTaskId, staNo, agvTask.getId(), agvTask.getWrkNo(), wrkSts);
+ log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}鐨勪换鍔}锛堝伐浣滃彿锛歿}锛夊凡瀹屾垚锛堝伐浣滄。鐘舵�侊細{}锛夛紝涓嶇畻鏈夋晥浠诲姟",
+ displayTaskId, staNo, agvTask.getId(), agvTask.getWrkNo(), wrkSts);
}
} else {
// 宸ヤ綔妗e瓨鍦ㄤ絾鐘舵�佹湭鐭ワ紝瑙嗕负鏈夋晥浠诲姟
hasValidTask = true;
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}宸叉湁1鏉}AGV浠诲姟锛堝伐浣滃彿锛歿}锛屽伐浣滄。鐘舵�佹湭鐭ワ級锛岃烦杩囧綋鍓嶄换鍔★紝绛夊緟瀹屾垚",
- displayTaskId, staNo, taskType, agvTask.getWrkNo());
+ log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}宸叉湁1鏉}AGV浠诲姟锛堝伐浣滃彿锛歿}锛屽伐浣滄。鐘舵�佹湭鐭ワ級锛岃烦杩囧綋鍓嶄换鍔★紝绛夊緟瀹屾垚",
+ displayTaskId, staNo, taskType, agvTask.getWrkNo());
break;
}
} else {
// 濡傛灉宸ヤ綔妗f煡涓嶅埌锛岃涓哄凡瀹屾垚锛屼笉绠楁湁鏁堜换鍔�
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}鐨勪换鍔}锛堝伐浣滃彿锛歿}锛夊伐浣滄。鏌ヤ笉鍒帮紝瑙嗕负宸插畬鎴愶紝涓嶇畻鏈夋晥浠诲姟",
- displayTaskId, staNo, agvTask.getId(), agvTask.getWrkNo());
+ log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}鐨勪换鍔}锛堝伐浣滃彿锛歿}锛夊伐浣滄。鏌ヤ笉鍒帮紝瑙嗕负宸插畬鎴愶紝涓嶇畻鏈夋晥浠诲姟",
+ displayTaskId, staNo, agvTask.getId(), agvTask.getWrkNo());
}
}
}
} else {
log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}娌℃湁鍏朵粬AGV浠诲姟锛屽彲浠ュ垎閰�", displayTaskId, staNo);
}
-
+
// 濡傛灉绔欑偣鏈夋湁鏁堢殑鏈畬鎴愪换鍔★紝璺宠繃褰撳墠浠诲姟
if (hasValidTask) {
- log.warn("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}鏈夋湭瀹屾垚鐨剓}AGV浠诲姟锛岃烦杩囧綋鍓嶄换鍔★紝绛夊緟瀹屾垚銆備笅娆″皢閲嶆柊灏濊瘯澶勭悊姝や换鍔�",
- displayTaskId, staNo, taskType);
+ log.warn("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}鏈夋湭瀹屾垚鐨剓}AGV浠诲姟锛岃烦杩囧綋鍓嶄换鍔★紝绛夊緟瀹屾垚銆備笅娆″皢閲嶆柊灏濊瘯澶勭悊姝や换鍔�",
+ displayTaskId, staNo, taskType);
return false; // 杩斿洖false锛岃〃绀烘湭鎴愬姛澶勭悊锛屼笅娆′細閲嶆柊灏濊瘯
}
-
+
// 妫�鏌ユ槸鍚︽湁鐘舵��8涓斿凡鏀跺埌AGV纭鐨勪换鍔★紙鐢ㄤ簬鏃ュ織璁板綍锛�
List<Task> transportingTasks = taskService.selectList(
- new EntityWrapper<Task>()
- .eq("sta_no", staNo)
- .eq("task_type", "agv")
- .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愶紙8锛夌殑浠诲姟
- .isNotNull("plc_str_time") // 鍙鏌ュ凡鏀跺埌AGV纭鐨勪换鍔★紙plc_str_time涓嶄负绌猴級
- .in("io_type", ioTypes)
- .ne("id", task.getId()) // 鎺掗櫎褰撳墠浠诲姟鏈韩
- .andNew("(is_deleted = 0)")
+ new EntityWrapper<Task>()
+ .eq("sta_no", staNo)
+ .eq("task_type", "agv")
+ .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愶紙8锛夌殑浠诲姟
+ .isNotNull("plc_str_time") // 鍙鏌ュ凡鏀跺埌AGV纭鐨勪换鍔★紙plc_str_time涓嶄负绌猴級
+ .in("io_type", ioTypes)
+ .ne("id", task.getId()) // 鎺掗櫎褰撳墠浠诲姟鏈韩
+ .eq("is_deleted", 0) // 鎺掗櫎宸插垹闄ょ殑浠诲姟
);
-
+
// 妫�鏌ュ苟鑷姩缁撴潫宸插畬鎴愬伐浣滄。鐨凙GV浠诲姟
int originalCount = transportingTasks.size();
List<Task> validTransportingTasks = checkAndCompleteFinishedTasks(transportingTasks, taskType);
int completedCount = originalCount - validTransportingTasks.size();
-
+
if (completedCount > 0) {
- log.info("瀹氭椂浠诲姟锛氱珯鐐箋}鑷姩缁撴潫浜唟}涓凡瀹屾垚宸ヤ綔妗g殑AGV浠诲姟锛屽墿浣檣}涓鍦ㄦ惉杩愮殑浠诲姟",
- staNo, completedCount, validTransportingTasks.size());
+ log.info("瀹氭椂浠诲姟锛氱珯鐐箋}鑷姩缁撴潫浜唟}涓凡瀹屾垚宸ヤ綔妗g殑AGV浠诲姟锛屽墿浣檣}涓鍦ㄦ惉杩愮殑浠诲姟",
+ staNo, completedCount, validTransportingTasks.size());
}
-
+
if (!validTransportingTasks.isEmpty()) {
List<Integer> transportingTaskIds = validTransportingTasks.stream()
.map(Task::getWrkNo)
@@ -298,7 +298,7 @@
.append(",鍒涘缓鏃堕棿=").append(t.getAppeTime() != null ? t.getAppeTime().toString() : "鏈煡")
.append(")");
}
- log.info("瀹氭椂浠诲姟锛氱珯鐐箋}鏈墈}涓鍦ㄦ惉杩愮殑{}AGV浠诲姟锛堝伐浣滃彿锛歿}锛夛紝璺宠繃褰撳墠浠诲姟ID锛歿}锛屼笅娆″皢閲嶆柊灏濊瘯銆備换鍔¤鎯咃細{}",
+ log.info("瀹氭椂浠诲姟锛氱珯鐐箋}鏈墈}涓鍦ㄦ惉杩愮殑{}AGV浠诲姟锛堝伐浣滃彿锛歿}锛夛紝璺宠繃褰撳墠浠诲姟ID锛歿}锛屼笅娆″皢閲嶆柊灏濊瘯銆備换鍔¤鎯咃細{}",
staNo, validTransportingTasks.size(), taskType, transportingTaskIds, displayTaskId, taskDetailInfo.toString());
return false; // 杩斿洖false锛岃〃绀烘湭鎴愬姛澶勭悊锛屼笅娆′細閲嶆柊灏濊瘯
} else if (completedCount > 0) {
@@ -306,9 +306,9 @@
log.info("瀹氭椂浠诲姟锛氱珯鐐箋}鐨勬墍鏈夊崰鐢ㄤ换鍔″凡鑷姩缁撴潫锛岀珯鐐瑰凡閲婃斁锛屽彲浠ュ垎閰嶇粰褰撳墠浠诲姟ID锛歿}", staNo, task.getId());
}
}
-
+
log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}妫�鏌ラ�氳繃锛屽噯澶囧彂閫丄GV鍛戒护", displayTaskId, staNo);
-
+
// 鍛煎彨agv
String response = "";
boolean success = false;
@@ -332,32 +332,24 @@
break;
default:
}
- String body = getRequest(task,namespace);
-
+ String body = getRequest(task, namespace);
+
// 鑾峰彇褰撳墠閲嶈瘯娆℃暟
int currentRetryCount = getRetryCount(task);
int maxRetryCount = agvProperties.getCallRetry().getMaxRetryCount();
boolean retryEnabled = agvProperties.getCallRetry().isEnabled();
-
- // 濡傛灉閲嶈瘯娆℃暟宸茶揪鍒版渶澶у�硷紝璺宠繃鏈鍙戦��
- if (retryEnabled && currentRetryCount >= maxRetryCount) {
- // log.warn("{}鍛煎彨agv鎼繍 - 浠诲姟ID锛歿}宸茶揪鍒版渶澶ч噸璇曟鏁帮紙{}锛夛紝鍋滄閲嶈瘯",
- // namespace, task.getId(), maxRetryCount);
- // 璁板綍鏈�缁堝け璐ヤ俊鎭�
- task.setErrorTime(new Date());
- task.setErrorMemo(String.format("AGV鍛煎彨澶辫触锛屽凡杈惧埌鏈�澶ч噸璇曟鏁帮紙%d娆★級", maxRetryCount));
- taskService.updateById(task);
- return true; // 宸茶揪鍒版渶澶ч噸璇曟鏁帮紝涓嶅啀閲嶈瘯锛岃繑鍥瀟rue琛ㄧず宸插鐞嗭紙铏界劧澶辫触锛�
- }
-
- // 鎵撳嵃璇锋眰淇℃伅锛堝寘鍚噸璇曟鏁帮級
- // if (currentRetryCount > 0) {
- // log.info("{}鍛煎彨agv鎼繍锛堢{}娆¢噸璇曪級 - 璇锋眰鍦板潃锛歿}", namespace, currentRetryCount + 1, url);
- // } else {
- // log.info("{}鍛煎彨agv鎼繍 - 璇锋眰鍦板潃锛歿}", namespace, url);
- // }
- // log.info("{}鍛煎彨agv鎼繍 - 璇锋眰鍙傛暟锛歿}", namespace, body);
-
+
+ // 濡傛灉閲嶈瘯娆℃暟宸茶揪鍒版渶澶у�硷紝璺宠繃鏈鍙戦��
+ if (retryEnabled && currentRetryCount >= maxRetryCount) {
+ // log.warn("{}鍛煎彨agv鎼繍 - 浠诲姟ID锛歿}宸茶揪鍒版渶澶ч噸璇曟鏁帮紙{}锛夛紝鍋滄閲嶈瘯",
+ // namespace, task.getId(), maxRetryCount);
+ // 璁板綍鏈�缁堝け璐ヤ俊鎭�
+ task.setErrorTime(new Date());
+ task.setErrorMemo(String.format("AGV鍛煎彨澶辫触锛屽凡杈惧埌鏈�澶ч噸璇曟鏁帮紙%d娆★級", maxRetryCount));
+ taskService.updateById(task);
+ return true; // 宸茶揪鍒版渶澶ч噸璇曟鏁帮紝涓嶅啀閲嶈瘯锛岃繑鍥瀟rue琛ㄧず宸插鐞嗭紙铏界劧澶辫触锛�
+ }
+
boolean result = false; // 榛樿杩斿洖false锛岃〃绀烘湭鎴愬姛澶勭悊
try {
// 浣跨敤浠欏伐M4鎺ュ彛
@@ -368,23 +360,16 @@
.build()
.doPost();
// 鎵撳嵃杩斿洖鍙傛暟
- // log.info("{}鍛煎彨agv鎼繍 - 杩斿洖鍙傛暟锛歿}", namespace, response);
-
+ log.info("浠欏伐-{}鍛煎彨agv鎼繍锛岃姹傚弬鏁般�寋}銆� - 杩斿洖鍙傛暟锛歿}", namespace, body, response);
+
// 妫�鏌ュ搷搴旀槸鍚︿负绌�
if (response == null || response.trim().isEmpty()) {
String errorMsg = "AGV鎺ュ彛杩斿洖涓虹┖";
log.warn("瀹氭椂浠诲姟锛歿}鍛煎彨agv鎼繍澶辫触 - 浠诲姟ID锛歿}锛寋}", namespace, displayTaskId, errorMsg);
- handleCallFailure(task, namespace, errorMsg, retryEnabled, maxRetryCount, currentRetryCount);
- // 濡傛灉杈惧埌鏈�澶ч噸璇曟鏁帮紝杩斿洖true琛ㄧず宸插鐞嗭紙铏界劧澶辫触锛�
- // 鍚﹀垯杩斿洖false锛岃瀹氭椂浠诲姟閲嶆柊灏濊瘯
- if (retryEnabled && currentRetryCount >= maxRetryCount) {
- result = true; // 宸茶揪鍒版渶澶ч噸璇曟鏁帮紝杩斿洖true琛ㄧず宸插鐞嗭紙铏界劧澶辫触锛�
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛孉GV鍛煎彨澶辫触涓斿凡杈惧埌鏈�澶ч噸璇曟鏁帮紙{}娆★級锛屾爣璁颁负宸插鐞嗭紝涓嶅啀閲嶈瘯",
- displayTaskId, maxRetryCount);
- } else {
- result = false; // 杩斿洖false锛岃瀹氭椂浠诲姟閲嶆柊灏濊瘯
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛屼笅娆″皢閲嶆柊灏濊瘯鍙戦�丄GV鍛戒护", displayTaskId);
- }
+ task.setWrkSts(10L);
+ task.setErrorTime(new Date());
+ task.setErrorMemo(String.format("AGV鎺ュ彛杩斿洖涓虹┖"));
+ taskService.updateById(task);
} else {
// 灏濊瘯瑙f瀽JSON鍝嶅簲锛屾崟鑾稪SON瑙f瀽寮傚父
JSONObject jsonObject = null;
@@ -394,46 +379,12 @@
// JSON瑙f瀽澶辫触锛屽搷搴斿彲鑳戒笉鏄湁鏁堢殑JSON鏍煎紡锛堝"Server Error"绛夛級
String errorMsg = String.format("AGV鎺ュ彛杩斿洖闈濲SON鏍煎紡鍝嶅簲锛屽搷搴斿唴瀹癸細%s锛岃В鏋愰敊璇細%s", response, e.getMessage());
log.error("瀹氭椂浠诲姟锛歿}鍛煎彨agv鎼繍澶辫触 - 浠诲姟ID锛歿}锛寋}", namespace, displayTaskId, errorMsg);
-
- // 鏈嶅姟鍣ㄩ敊璇椂锛屾爣璁扮珯鐐逛负涓嶅彲鐢紝娓呯┖绔欑偣鍒嗛厤锛屼笉鍐嶄负褰撳墠浠诲姟鍒嗛厤绔欑偣
- try {
- Integer siteNo = Integer.parseInt(staNo);
- // 鏌ヨ绔欑偣淇℃伅
- List<BasDevp> basDevpList = basDevpMapper.selectList(new EntityWrapper<BasDevp>().eq("dev_no", siteNo));
- if (basDevpList != null && !basDevpList.isEmpty()) {
- BasDevp basDevp = basDevpList.get(0);
- // 鏍囪绔欑偣涓轰笉鍙敤锛堣缃甤anining='N'锛�
- basDevp.setCanining("N");
- basDevpMapper.updateById(basDevp);
- log.warn("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛孉GV鎺ュ彛杩斿洖鏈嶅姟鍣ㄩ敊璇紝宸叉爣璁扮珯鐐箋}涓轰笉鍙敤锛坈anining='N'锛�",
- displayTaskId, siteNo);
-
- // 鍑忓皯绔欑偣鐨勫叆搴撲换鍔℃暟锛堜箣鍓嶅垎閰嶇珯鐐规椂宸茬粡澧炲姞浜唅n_qty锛�
- basDevpMapper.decrementInQty(siteNo);
- log.debug("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐箋}鐨刬n_qty宸插噺灏�", displayTaskId, siteNo);
- }
- } catch (Exception ex) {
- log.error("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛屾爣璁扮珯鐐箋}涓轰笉鍙敤鏃跺彂鐢熷紓甯革細{}", displayTaskId, staNo, ex.getMessage());
- }
-
- // 娓呯┖褰撳墠浠诲姟鐨勭珯鐐瑰垎閰�
- log.warn("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛孉GV鎺ュ彛杩斿洖鏈嶅姟鍣ㄩ敊璇紝娓呯┖绔欑偣鍒嗛厤锛歿}锛屼笉鍐嶄负褰撳墠浠诲姟鍒嗛厤绔欑偣",
- displayTaskId, staNo);
- task.setStaNo(null);
- taskService.updateById(task);
-
- // 鏍囪浠诲姟涓哄け璐ワ紝涓嶅啀灏濊瘯鍒嗛厤
+ task.setWrkSts(10L);
task.setErrorTime(new Date());
- task.setErrorMemo(String.format("AGV鎺ュ彛杩斿洖鏈嶅姟鍣ㄩ敊璇紝绔欑偣宸叉爣璁颁负涓嶅彲鐢細%s", errorMsg));
+ task.setErrorMemo(errorMsg);
taskService.updateById(task);
-
- handleCallFailure(task, namespace, errorMsg, retryEnabled, maxRetryCount, currentRetryCount);
- // 鏈嶅姟鍣ㄩ敊璇椂锛屼笉鍐嶅皾璇曞垎閰嶏紝鐩存帴鏍囪涓哄凡澶勭悊
- result = true; // 杩斿洖true琛ㄧず宸插鐞嗭紙铏界劧澶辫触锛夛紝涓嶅啀灏濊瘯鍒嗛厤
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛孉GV鍛煎彨澶辫触锛堟湇鍔″櫒閿欒锛夛紝绔欑偣宸叉爣璁颁负涓嶅彲鐢紝浠诲姟宸叉爣璁颁负澶辫触锛屼笉鍐嶅皾璇曞垎閰�",
- displayTaskId);
}
-
+
// 濡傛灉JSON瑙f瀽鎴愬姛锛岀户缁鐞�
if (jsonObject != null) {
Integer code = jsonObject.getInteger("code");
@@ -444,13 +395,15 @@
Long currentStatus = task.getWrkSts();
if (currentStatus == null || currentStatus != 8L) {
task.setWrkSts(8L);
+
log.info("瀹氭椂浠诲姟锛歿}鍛煎彨agv鎼繍鎴愬姛 - 浠诲姟ID锛歿}锛岀姸鎬佷粠{}鏇存柊涓�8", namespace, displayTaskId, currentStatus);
} else {
log.info("瀹氭椂浠诲姟锛歿}鍛煎彨agv鎼繍鎴愬姛锛堥噸璇曪級 - 浠诲姟ID锛歿}锛岀姸鎬佷繚鎸佷负8", namespace, displayTaskId);
}
+ task.setLocNo(task.getStaNo());
task.setMemo(clearRetryInfo(task.getMemo())); // 娓呴櫎閲嶈瘯淇℃伅
- task.setErrorTime(null);
- task.setErrorMemo(null);
+ task.setErrorTime(new Date());
+ task.setErrorMemo(jsonObject.toJSONString());
taskService.updateById(task);
log.info("瀹氭椂浠诲姟锛歿}鍛煎彨agv鎼繍鎴愬姛 - 浠诲姟ID锛歿}", namespace, displayTaskId);
result = true; // 杩斿洖true锛岃〃绀烘垚鍔熷鐞�
@@ -458,62 +411,29 @@
String message = jsonObject.getString("message");
String errorMsg = String.format("閿欒鐮侊細%s锛岄敊璇俊鎭細%s", code, message);
log.warn("瀹氭椂浠诲姟锛歿}鍛煎彨agv鎼繍澶辫触 - 浠诲姟ID锛歿}锛寋}", namespace, displayTaskId, errorMsg);
-
- // 妫�鏌ユ槸鍚︽槸绔欑偣鎴栧簱浣嶇浉鍏崇殑閿欒锛屽鏋滄槸锛屾竻绌虹珯鐐瑰垎閰嶏紝璁╁畾鏃朵换鍔¢噸鏂板垎閰�
- boolean shouldReallocateSite = false;
- if (message != null) {
- String lowerMessage = message.toLowerCase();
- // 搴撲綅涓嶅瓨鍦ㄣ�佺珯鐐逛笉瀛樺湪绛夐敊璇紝搴旇閲嶆柊鍒嗛厤绔欑偣
- if (lowerMessage.contains("搴撲綅涓嶅瓨鍦�") ||
- lowerMessage.contains("绔欑偣涓嶅瓨鍦�") ||
- lowerMessage.contains("浣嶇疆涓嶅瓨鍦�") ||
- lowerMessage.contains("搴撲綅鏃犳晥") ||
- lowerMessage.contains("绔欑偣鏃犳晥")) {
- shouldReallocateSite = true;
- }
- }
-
- if (shouldReallocateSite) {
- // 娓呯┖绔欑偣鍒嗛厤锛岃瀹氭椂浠诲姟閲嶆柊鍒嗛厤绔欑偣
- log.warn("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛孉GV鍛煎彨澶辫触锛坽}锛夛紝娓呯┖绔欑偣鍒嗛厤锛歿}锛屼笅娆″皢閲嶆柊鍒嗛厤绔欑偣",
- displayTaskId, errorMsg, staNo);
- task.setStaNo(null);
- taskService.updateById(task);
- }
-
- handleCallFailure(task, namespace, errorMsg, retryEnabled, maxRetryCount, currentRetryCount);
-
- // 濡傛灉杈惧埌鏈�澶ч噸璇曟鏁帮紝杩斿洖true琛ㄧず宸插鐞嗭紙铏界劧澶辫触锛�
- // 鍚﹀垯杩斿洖false锛岃瀹氭椂浠诲姟閲嶆柊灏濊瘯锛堝鏋滅珯鐐硅娓呯┖锛屼細閲嶆柊鍒嗛厤绔欑偣锛涘鏋滅珯鐐规湭娓呯┖锛屼細閲嶆柊鍙戦�丄GV锛�
- if (retryEnabled && currentRetryCount >= maxRetryCount) {
- result = true; // 宸茶揪鍒版渶澶ч噸璇曟鏁帮紝杩斿洖true琛ㄧず宸插鐞嗭紙铏界劧澶辫触锛�
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛孉GV鍛煎彨澶辫触涓斿凡杈惧埌鏈�澶ч噸璇曟鏁帮紙{}娆★級锛屾爣璁颁负宸插鐞嗭紝涓嶅啀閲嶈瘯",
- displayTaskId, maxRetryCount);
- } else {
- result = false; // 杩斿洖false锛岃瀹氭椂浠诲姟閲嶆柊灏濊瘯锛堥噸鏂板垎閰嶇珯鐐规垨閲嶆柊鍙戦�丄GV锛�
- if (shouldReallocateSite) {
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛岀珯鐐瑰凡娓呯┖锛屼笅娆″皢閲嶆柊鍒嗛厤绔欑偣", displayTaskId);
- } else {
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛屼笅娆″皢閲嶆柊灏濊瘯鍙戦�丄GV鍛戒护", displayTaskId);
- }
- }
+
+ task.setWrkSts(10L);
+ task.setLocNo(task.getStaNo());
+ task.setErrorTime(new Date());
+ task.setErrorMemo(jsonObject.toJSONString());
+ taskService.updateById(task);
+
}
}
}
} catch (Exception e) {
String errorMsg = "寮傚父淇℃伅锛�" + e.getMessage();
- log.error("瀹氭椂浠诲姟锛歿}鍛煎彨agv鎼繍寮傚父 - 浠诲姟ID锛歿}锛岃姹傚湴鍧�锛歿}锛岃姹傚弬鏁帮細{}锛寋}",
+ log.error("瀹氭椂浠诲姟锛歿}鍛煎彨agv鎼繍寮傚父 - 浠诲姟ID锛歿}锛岃姹傚湴鍧�锛歿}锛岃姹傚弬鏁帮細{}锛寋}",
namespace, displayTaskId, url, body, errorMsg, e);
- handleCallFailure(task, namespace, errorMsg, retryEnabled, maxRetryCount, currentRetryCount);
- // 濡傛灉杈惧埌鏈�澶ч噸璇曟鏁帮紝杩斿洖true琛ㄧず宸插鐞嗭紙铏界劧澶辫触锛�
- // 鍚﹀垯杩斿洖false锛岃瀹氭椂浠诲姟閲嶆柊灏濊瘯
- if (retryEnabled && currentRetryCount >= maxRetryCount) {
- result = true; // 宸茶揪鍒版渶澶ч噸璇曟鏁帮紝杩斿洖true琛ㄧず宸插鐞嗭紙铏界劧澶辫触锛�
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛孉GV鍛煎彨寮傚父涓斿凡杈惧埌鏈�澶ч噸璇曟鏁帮紙{}娆★級锛屾爣璁颁负宸插鐞嗭紝涓嶅啀閲嶈瘯",
- displayTaskId, maxRetryCount);
+ if (errorMsg.contains("connect timed out")) {
+ log.error("瀹氭椂浠诲姟锛歿}鍛煎彨agv鎼繍寮傚父 - 浠诲姟ID锛歿}锛岀綉缁滆姹傝秴鏃�",
+ namespace, displayTaskId);
} else {
- result = false; // 杩斿洖false锛岃瀹氭椂浠诲姟閲嶆柊灏濊瘯
- log.info("瀹氭椂浠诲姟锛氫换鍔D锛歿}锛屼笅娆″皢閲嶆柊灏濊瘯鍙戦�丄GV鍛戒护", displayTaskId);
+ task.setWrkSts(10L);
+ task.setLocNo(task.getStaNo());
+ task.setErrorTime(new Date());
+ task.setErrorMemo(errorMsg);
+ taskService.updateById(task);
}
} finally {
try {
@@ -536,15 +456,16 @@
/**
* 澶勭悊AGV鍛煎彨澶辫触鐨勬儏鍐�
- * @param task 浠诲姟瀵硅薄
- * @param namespace 鍛藉悕绌洪棿锛堝叆搴�/鍑哄簱/杞Щ锛�
- * @param errorMsg 閿欒淇℃伅
- * @param retryEnabled 鏄惁鍚敤閲嶈瘯
- * @param maxRetryCount 鏈�澶ч噸璇曟鏁�
+ *
+ * @param task 浠诲姟瀵硅薄
+ * @param namespace 鍛藉悕绌洪棿锛堝叆搴�/鍑哄簱/杞Щ锛�
+ * @param errorMsg 閿欒淇℃伅
+ * @param retryEnabled 鏄惁鍚敤閲嶈瘯
+ * @param maxRetryCount 鏈�澶ч噸璇曟鏁�
* @param currentRetryCount 褰撳墠閲嶈瘯娆℃暟
*/
- private void handleCallFailure(Task task, String namespace, String errorMsg,
- boolean retryEnabled, int maxRetryCount, int currentRetryCount) {
+ private void handleCallFailure(Task task, String namespace, String errorMsg,
+ boolean retryEnabled, int maxRetryCount, int currentRetryCount) {
if (retryEnabled && currentRetryCount < maxRetryCount) {
// 澧炲姞閲嶈瘯娆℃暟
int newRetryCount = currentRetryCount + 1;
@@ -571,74 +492,76 @@
/**
* 妫�鏌ュ苟鑷姩缁撴潫宸插畬鎴愬伐浣滄。鐨凙GV浠诲姟
* 濡傛灉浠诲姟瀵瑰簲鐨勫伐浣滄。宸茬粡瀹屾垚锛堝叆搴撴垚鍔燂級锛屽垯鑷姩缁撴潫璇GV浠诲姟
+ *
* @param transportingTasks 姝e湪鎼繍鐨勪换鍔″垪琛�
- * @param taskTypeName 浠诲姟绫诲瀷鍚嶇О锛堢敤浜庢棩蹇楋級
+ * @param taskTypeName 浠诲姟绫诲瀷鍚嶇О锛堢敤浜庢棩蹇楋級
* @return 浠嶇劧鏈夋晥鐨勬鍦ㄦ惉杩愮殑浠诲姟鍒楄〃锛堝凡瀹屾垚鐨勫凡琚Щ闄わ級
*/
- private List<Task> checkAndCompleteFinishedTasks(List<Task> transportingTasks, String taskTypeName) {
+ @Transactional(rollbackFor = Exception.class)
+ public List<Task> checkAndCompleteFinishedTasks(List<Task> transportingTasks, String taskTypeName) {
if (transportingTasks == null || transportingTasks.isEmpty()) {
return transportingTasks;
}
-
+
List<Task> validTasks = new ArrayList<>();
Date now = new Date();
-
+
for (Task agvTask : transportingTasks) {
boolean isCompleted = false;
String reason = "";
-
+
// 妫�鏌ュ伐浣滄。鏄惁瀛樺湪
WrkMast wrkMast = null;
if (agvTask.getWrkNo() != null) {
wrkMast = wrkMastService.selectOne(
- new EntityWrapper<WrkMast>().eq("wrk_no", agvTask.getWrkNo())
+ new EntityWrapper<WrkMast>().eq("wrk_no", agvTask.getWrkNo())
);
}
-
+
// 妫�鏌ュ巻鍙叉。鏄惁瀛樺湪
WrkMastLog wrkMastLog = null;
if (agvTask.getWrkNo() != null) {
wrkMastLog = wrkMastLogService.selectOne(
- new EntityWrapper<WrkMastLog>().eq("wrk_no", agvTask.getWrkNo())
+ new EntityWrapper<WrkMastLog>().eq("wrk_no", agvTask.getWrkNo())
);
}
// 濡傛灉閫氳繃wrk_no娌℃壘鍒帮紝涓旀湁鏉$爜锛屽垯閫氳繃鏉$爜鏌ヨ
if (wrkMastLog == null && !Cools.isEmpty(agvTask.getBarcode())) {
List<WrkMastLog> logList = wrkMastLogService.selectList(
- new EntityWrapper<WrkMastLog>().eq("barcode", agvTask.getBarcode())
+ new EntityWrapper<WrkMastLog>().eq("barcode", agvTask.getBarcode())
);
if (!logList.isEmpty()) {
wrkMastLog = logList.get(0);
}
}
-
+
// 濡傛灉宸ヤ綔妗e瓨鍦紝妫�鏌ユ槸鍚﹀凡瀹屾垚
if (wrkMast != null) {
Long wrkSts = wrkMast.getWrkSts();
Integer ioType = agvTask.getIoType();
-
+
if (wrkSts != null && ioType != null) {
// 鍏ュ簱浠诲姟锛氱姸鎬�4锛堝叆搴撳畬鎴愶級鎴�5锛堝簱瀛樻洿鏂板畬鎴愶級
if ((ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) &&
- (wrkSts == 4L || wrkSts == 5L)) {
+ (wrkSts == 4L || wrkSts == 5L)) {
isCompleted = true;
reason = String.format("宸ヤ綔妗e凡瀹屾垚锛岀姸鎬侊細%d", wrkSts);
}
// 鍑哄簱浠诲姟锛氱姸鎬�14锛堝凡鍑哄簱鏈‘璁わ級鎴�15锛堝嚭搴撴洿鏂板畬鎴愶級
else if ((ioType == 101 || ioType == 110 || ioType == 103 || ioType == 107) &&
- (wrkSts == 14L || wrkSts == 15L)) {
+ (wrkSts == 14L || wrkSts == 15L)) {
isCompleted = true;
reason = String.format("宸ヤ綔妗e凡瀹屾垚锛岀姸鎬侊細%d", wrkSts);
}
}
}
-
+
// 1. 濡傛灉宸ヤ綔妗h繘鍏ュ巻鍙叉。锛岀珛鍗崇粨鏉烝GV浠诲姟锛堝彧瑕佸巻鍙叉。瀛樺湪灏辩粨鏉燂級
if (!isCompleted && wrkMastLog != null) {
isCompleted = true;
reason = String.format("宸ヤ綔妗e凡杞巻鍙叉。锛岀珛鍗崇粨鏉烝GV浠诲姟锛屽巻鍙叉。鐘舵�侊細%d", wrkMastLog.getWrkSts());
}
-
+
// 濡傛灉宸插畬鎴愶紝鏇存柊AGV浠诲姟鐘舵�佷负瀹屾垚
if (isCompleted) {
agvTask.setWrkSts(9L);
@@ -646,8 +569,8 @@
if (taskService.updateById(agvTask)) {
// taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝濡傛灉宸ヤ綔鍙蜂负绌哄垯浣跨敤浠诲姟ID
String displayTaskId = (agvTask.getWrkNo() != null) ? String.valueOf(agvTask.getWrkNo()) : String.valueOf(agvTask.getId());
- log.info("{}锛岃嚜鍔ㄧ粨鏉烝GV浠诲姟锛宼askId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}锛岀珯鐐癸細{}锛岄噴鏀剧珯鐐逛緵鏂颁换鍔′娇鐢�",
- reason, displayTaskId, agvTask.getWrkNo(), agvTask.getBarcode(), agvTask.getStaNo());
+ log.info("{}锛岃嚜鍔ㄧ粨鏉烝GV浠诲姟锛宼askId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}锛岀珯鐐癸細{}锛岄噴鏀剧珯鐐逛緵鏂颁换鍔′娇鐢�",
+ reason, displayTaskId, agvTask.getWrkNo(), agvTask.getBarcode(), agvTask.getStaNo());
// 杞Щ鍒板巻鍙茶〃锛堜細鑷姩鍑忓皯绔欑偣鐨刬n_qty锛�
try {
moveTaskToHistory(Collections.singletonList(agvTask));
@@ -656,8 +579,8 @@
log.error("鑷姩缁撴潫AGV浠诲姟鍚庤浆绉诲巻鍙茶〃澶辫触锛宼askId锛歿}", displayTaskId, e);
}
} else {
- log.error("鑷姩缁撴潫AGV浠诲姟澶辫触锛屾洿鏂颁换鍔$姸鎬佸け璐ワ紝taskId锛歿}",
- (agvTask.getWrkNo() != null) ? String.valueOf(agvTask.getWrkNo()) : String.valueOf(agvTask.getId()));
+ log.error("鑷姩缁撴潫AGV浠诲姟澶辫触锛屾洿鏂颁换鍔$姸鎬佸け璐ワ紝taskId锛歿}",
+ (agvTask.getWrkNo() != null) ? String.valueOf(agvTask.getWrkNo()) : String.valueOf(agvTask.getId()));
}
} else {
// 浠诲姟浠嶇劧鏈夋晥锛屼繚鐣欏湪鍒楄〃涓�
@@ -666,19 +589,21 @@
if (wrkMast == null && wrkMastLog == null) {
log.debug("浠诲姟ID锛歿}锛堢珯鐐癸細{}锛変粛鐒舵湁鏁堬細宸ヤ綔妗e拰鍘嗗彶妗i兘涓嶅瓨鍦紝鍙兘宸ヤ綔妗h繕鏈垱寤�", displayTaskId, agvTask.getStaNo());
} else if (wrkMast != null) {
- log.debug("浠诲姟ID锛歿}锛堢珯鐐癸細{}锛変粛鐒舵湁鏁堬細宸ヤ綔妗g姸鎬�={}锛屼换鍔$被鍨�={}锛屾湭杈惧埌瀹屾垚鏉′欢",
- displayTaskId, agvTask.getStaNo(), wrkMast.getWrkSts(), agvTask.getIoType());
+ log.debug("浠诲姟ID锛歿}锛堢珯鐐癸細{}锛変粛鐒舵湁鏁堬細宸ヤ綔妗g姸鎬�={}锛屼换鍔$被鍨�={}锛屾湭杈惧埌瀹屾垚鏉′欢",
+ displayTaskId, agvTask.getStaNo(), wrkMast.getWrkSts(), agvTask.getIoType());
}
validTasks.add(agvTask);
}
}
-
+
return validTasks;
}
+
/**
* 浠巑emo瀛楁涓幏鍙栭噸璇曟鏁�
* memo鏍煎紡锛氬鏋滃寘鍚�"retryCount:鏁板瓧"锛屽垯杩斿洖璇ユ暟瀛楋紝鍚﹀垯杩斿洖0
+ *
* @param task 浠诲姟瀵硅薄
* @return 閲嶈瘯娆℃暟
*/
@@ -708,7 +633,8 @@
/**
* 鏇存柊memo瀛楁涓殑閲嶈瘯娆℃暟
- * @param memo 鍘熷memo鍐呭
+ *
+ * @param memo 鍘熷memo鍐呭
* @param retryCount 鏂扮殑閲嶈瘯娆℃暟
* @return 鏇存柊鍚庣殑memo鍐呭
*/
@@ -728,6 +654,7 @@
/**
* 娓呴櫎memo瀛楁涓殑閲嶈瘯淇℃伅
+ *
* @param memo 鍘熷memo鍐呭
* @return 娓呴櫎鍚庣殑memo鍐呭
*/
@@ -745,7 +672,7 @@
/**
* 鏋勯�犺姹傚唴瀹癸紙浠欏伐M4鏍煎紡锛�
*/
- private String getRequest(Task task, String nameSpace) {
+ public String getRequest(Task task, String nameSpace) {
JSONObject object = new JSONObject();
// taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝鏍煎紡锛歍 + 宸ヤ綔鍙�
// 濡傛灉宸ヤ綔鍙蜂负绌猴紝鍒欎娇鐢ㄤ换鍔D浣滀负澶囬��
@@ -793,9 +720,11 @@
return object.toJSONString();
}
+
/**
* 涓轰换鍔″垎閰嶇珯鐐癸紙瀹氭椂浠诲姟涓皟鐢級
* 娉ㄦ剰锛氬彧浼氬垎閰嶄竴涓珯鐐癸紝鎵惧埌绗竴涓鍚堟潯浠剁殑绔欑偣灏卞垎閰嶅苟閫�鍑�
+ *
* @param task 浠诲姟瀵硅薄
* @return 濡傛灉鏃犳硶鍒嗛厤绔欑偣锛岃繑鍥為敊璇俊鎭紱濡傛灉鍒嗛厤鎴愬姛锛岃繑鍥瀗ull骞舵洿鏂皌ask鐨剆taNo
*/
@@ -803,13 +732,13 @@
public String allocateSiteForTask(Task task) {
// taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝濡傛灉宸ヤ綔鍙蜂负绌哄垯浣跨敤浠诲姟ID
String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
- log.debug("寮�濮嬩负浠诲姟ID锛歿}鍒嗛厤绔欑偣锛屼换鍔$被鍨嬶細{}锛屾満鍣ㄤ汉缁勶細{}",
- displayTaskId, task.getIoType(), task.getInvWh());
+ log.debug("寮�濮嬩负浠诲姟ID锛歿}鍒嗛厤绔欑偣锛屼换鍔$被鍨嬶細{}锛屾満鍣ㄤ汉缁勶細{}",
+ displayTaskId, task.getIoType(), task.getInvWh());
// 鏍规嵁浠诲姟鐨刬nvWh锛堟満鍣ㄤ汉缁勶級鍒ゆ柇鏄笢渚ц繕鏄タ渚�
String robotGroup = task.getInvWh();
List<String> targetStations;
String groupKey;
-
+
if (robotGroup != null && robotGroup.equals(agvProperties.getRobotGroupEast())) {
// 涓滀晶绔欑偣
targetStations = agvProperties.getEastStations();
@@ -824,135 +753,40 @@
groupKey = "east";
log.warn("浠诲姟ID锛歿}鐨勬満鍣ㄤ汉缁剓}鏈瘑鍒紝浣跨敤榛樿涓滀晶绔欑偣", displayTaskId, robotGroup);
}
-
+
if (targetStations.isEmpty()) {
String errorMsg = "娌℃湁鍙敤鐨勭洰鏍囩珯鐐归厤缃�";
log.warn("浠诲姟ID锛歿}锛寋}", displayTaskId, errorMsg);
return errorMsg;
}
-
+
// 灏嗙珯鐐瑰瓧绗︿覆鍒楄〃杞崲涓烘暣鏁板垪琛�
List<Integer> siteIntList = targetStations.stream()
.map(Integer::parseInt)
.collect(Collectors.toList());
-
- log.info("浠诲姟ID锛歿}锛寋}绔欑偣缁勯厤缃殑绔欑偣锛歿}锛屽叡{}涓珯鐐�",
- displayTaskId, groupKey.equals("east") ? agvProperties.getEastDisplayName() : agvProperties.getWestDisplayName(),
- targetStations, targetStations.size());
-
- // 鍒ゆ柇鑳藉叆绔欑偣锛坕n_enable="Y"琛ㄧず鑳藉叆锛夛紝鎺掗櫎dev_no=0鐨勬棤鏁堢珯鐐�
- List<BasDevp> allDevList = basDevpMapper.selectList(
- new EntityWrapper<BasDevp>()
- .in("dev_no", siteIntList)
- .ne("dev_no", 0) // 鎺掗櫎dev_no=0鐨勬棤鏁堢珯鐐�
- );
- // 璁板綍鎵�鏈夌珯鐐圭殑鐘舵�佷俊鎭�
- StringBuilder siteStatusInfo = new StringBuilder();
- for (BasDevp dev : allDevList) {
- if (siteStatusInfo.length() > 0) {
- siteStatusInfo.append("; ");
- }
- siteStatusInfo.append("绔欑偣").append(dev.getDevNo())
- .append("(in_enable=").append(dev.getInEnable())
- .append(",canining=").append(dev.getCanining()).append(")");
- }
- log.info("浠诲姟ID锛歿}锛屽�欓�夌珯鐐圭姸鎬侊細{}", displayTaskId, siteStatusInfo.toString());
-
- List<Integer> sites = allDevList.stream()
- .filter(dev -> "Y".equals(dev.getInEnable()))
- .map(BasDevp::getDevNo)
- .filter(devNo -> devNo != null && devNo != 0) // 鍐嶆杩囨护锛岀‘淇濅笉涓簄ull鎴�0
- .collect(Collectors.toList());
-
- // 妫�鏌ユ槸鍚︽湁绔欑偣涓嶅彲鐢紝濡傛灉鏈夛紝璇存槑闇�瑕佸湪鍙敤鐨勭珯鐐逛箣闂村钩鍧囧垎閰�
- List<Integer> unavailableSites = new ArrayList<>(siteIntList);
- unavailableSites.removeAll(sites);
- if (!unavailableSites.isEmpty()) {
- log.info("浠诲姟ID锛歿}锛寋}绔欑偣缁勪腑鏈墈}涓珯鐐逛笉鍙敤锛坕n_enable!='Y'锛夛細{}锛屽皢鍦▄}涓彲鐢ㄧ珯鐐逛箣闂村钩鍧囧垎閰�",
+
+ log.info("浠诲姟ID锛歿}锛寋}绔欑偣缁勯厤缃殑绔欑偣锛歿}锛屽叡{}涓珯鐐�",
displayTaskId, groupKey.equals("east") ? agvProperties.getEastDisplayName() : agvProperties.getWestDisplayName(),
- unavailableSites.size(), unavailableSites, sites.size());
- }
-
- if (sites.isEmpty()) {
- String errorMsg = "娌℃湁鑳藉叆绔欑偣锛坕n_enable='Y'锛�";
- log.warn("浠诲姟ID锛歿}锛寋}锛屽�欓�夌珯鐐瑰垪琛細{}锛岀珯鐐圭姸鎬侊細{}", displayTaskId, errorMsg, targetStations, siteStatusInfo.toString());
- return errorMsg;
- }
-
+ targetStations, targetStations.size());
+
+
// 鍏堟鏌ョ珯鐐归厤缃紙canining="Y"鍙叆锛夛紝鎺掗櫎dev_no=0鐨勬棤鏁堢珯鐐�
List<BasDevp> devListWithConfig = basDevpMapper.selectList(new EntityWrapper<BasDevp>()
- .in("dev_no", sites)
+ .in("dev_no", siteIntList)
.eq("in_enable", "Y")
.eq("canining", "Y")
+ .eq("loading", "N")
.ne("dev_no", 0) // 鎺掗櫎dev_no=0鐨勬棤鏁堢珯鐐�
);
-
- if (devListWithConfig.isEmpty()) {
- // 绔欑偣閰嶇疆涓嶅厑璁稿叆搴擄紙canining != "Y"锛夛紝鏆備笉鍒嗛厤锛岀瓑寰呴厤缃紑閫氾紙鍙湪瀹氭椂浠诲姟涓褰曟棩蹇楋級
- // 璁板綍姣忎釜绔欑偣鐨刢anining鐘舵��
- StringBuilder caniningStatusInfo = new StringBuilder();
- for (Integer siteNo : sites) {
- BasDevp dev = allDevList.stream()
- .filter(d -> d.getDevNo().equals(siteNo))
- .findFirst()
- .orElse(null);
- if (dev != null) {
- if (caniningStatusInfo.length() > 0) {
- caniningStatusInfo.append("; ");
- }
- caniningStatusInfo.append("绔欑偣").append(siteNo)
- .append("(canining=").append(dev.getCanining()).append(")");
- }
- }
- log.warn("浠诲姟ID锛歿}娌℃湁鍙叆绔欑偣锛堢珯鐐规湭寮�閫氬彲鍏ュ厑璁革細canining='Y'锛夛紝鏆備笉鍒嗛厤绔欑偣锛岀瓑寰呴厤缃紑閫氥�傝兘鍏ョ珯鐐瑰垪琛細{}锛宑anining鐘舵�侊細{}",
- displayTaskId, sites, caniningStatusInfo.toString());
- return null; // 杩斿洖null锛岃〃绀烘殏涓嶅垎閰嶏紝绛夊緟閰嶇疆寮�閫�
+
+ if (devListWithConfig == null || devListWithConfig.isEmpty()) {
+ log.warn("浠诲姟ID锛歿}娌℃湁鍙叆绔欑偣锛堢珯鐐规湭寮�閫氬彲鍏ュ厑璁革細canining='Y'锛夛紝鏆備笉鍒嗛厤绔欑偣锛岀瓑寰呴厤缃紑閫氥�傜珯鐐瑰垪琛細{}",
+ displayTaskId, targetStations);
+ return null;
}
-
- // 鑾峰彇娌℃湁鍑哄簱浠诲姟鐨勭珯鐐癸紙浠庡凡閰嶇疆鍙叆鐨勭珯鐐逛腑绛涢�夛級
- List<Integer> configuredSites = devListWithConfig.stream()
- .map(BasDevp::getDevNo)
- .collect(Collectors.toList());
- log.info("浠诲姟ID锛歿}锛屽凡閰嶇疆鍙叆绔欑偣鍒楄〃锛歿}", displayTaskId, configuredSites);
- List<Integer> canInSites = basDevpMapper.getCanInSites(configuredSites);
- if (canInSites.isEmpty()) {
- // 鎵�鏈夊凡閰嶇疆鍙叆鐨勭珯鐐归兘鏈夊嚭搴撲换鍔★紝鏆備笉鍒嗛厤锛岀瓑寰呬笅娆″畾鏃朵换鍔″啀灏濊瘯锛堝彧鍦ㄥ畾鏃朵换鍔′腑璁板綍鏃ュ織锛�
- log.warn("浠诲姟ID锛歿}娌℃湁鍙叆绔欑偣锛堣绛夊緟鍑哄簱瀹屾垚锛夛紝鏆備笉鍒嗛厤绔欑偣锛岀瓑寰呬笅娆″畾鏃朵换鍔″啀灏濊瘯銆傚凡閰嶇疆鍙叆绔欑偣鍒楄〃锛歿}", displayTaskId, configuredSites);
- return null; // 杩斿洖null锛岃〃绀烘殏涓嶅垎閰嶏紝绛夊緟涓嬫瀹氭椂浠诲姟鍐嶅皾璇�
- }
- log.info("浠诲姟ID锛歿}锛屾病鏈夊嚭搴撲换鍔$殑绔欑偣鍒楄〃锛歿}", displayTaskId, canInSites);
-
- // 瀵绘壘鍏ュ簱浠诲姟鏈�灏戠殑绔欑偣锛堜笖蹇呴』in_enable="Y"鑳藉叆 鍜� canining="Y"鍙叆锛夛紝鎺掗櫎dev_no=0鐨勬棤鏁堢珯鐐�
- List<BasDevp> devList = basDevpMapper.selectList(new EntityWrapper<BasDevp>()
- .in("dev_no", canInSites)
- .eq("in_enable", "Y")
- .eq("canining", "Y")
- .ne("dev_no", 0) // 鎺掗櫎dev_no=0鐨勬棤鏁堢珯鐐�
- ).stream()
- .filter(dev -> dev.getDevNo() != null && dev.getDevNo() != 0) // 鍐嶆杩囨护锛岀‘淇濅笉涓簄ull鎴�0
- .collect(Collectors.toList());
-
- if (devList.isEmpty()) {
- // 鐞嗚涓婁笉搴旇鍒拌繖閲岋紝鍥犱负鍓嶉潰宸茬粡妫�鏌ヨ繃浜嗭紝浣嗕负浜嗗畨鍏ㄨ捣瑙佽繕鏄繚鐣�
- String errorMsg = "娌℃湁鍙叆绔欑偣锛坕n_enable='Y'涓攃anining='Y'锛�";
- log.warn("浠诲姟ID锛歿}锛寋}锛屽彲鍏ョ珯鐐瑰垪琛細{}", displayTaskId, errorMsg, canInSites);
- return errorMsg;
- }
-
- // 璁板綍姣忎釜绔欑偣鐨勫叆搴撲换鍔℃暟
- StringBuilder siteInQtyInfo = new StringBuilder();
- for (BasDevp dev : devList) {
- if (siteInQtyInfo.length() > 0) {
- siteInQtyInfo.append("; ");
- }
- siteInQtyInfo.append("绔欑偣").append(dev.getDevNo())
- .append("(鍏ュ簱浠诲姟鏁�=").append(dev.getInQty()).append(")");
- }
- log.info("浠诲姟ID锛歿}锛屽彲鍏ョ珯鐐瑰強鍏跺叆搴撲换鍔℃暟锛歿}", displayTaskId, siteInQtyInfo.toString());
-
+
// 鍏堟寜瑙勫垯鎺掑簭锛堝叆搴撲换鍔℃暟鎺掑簭锛�
- devList.sort(Comparator.comparing(BasDevp::getInQty));
-
+ devListWithConfig.sort(Comparator.comparing(BasDevp::getInQty));
// 鏍规嵁浠诲姟绫诲瀷纭畾瑕佹鏌ョ殑io_type鍒楄〃
Integer taskIoType = task.getIoType();
List<Integer> checkIoTypes = null;
@@ -968,20 +802,20 @@
taskTypeName = "鍑哄簱";
}
}
-
+
// 鍏堟煡璇gv宸ヤ綔妗d腑鏈鍒嗛厤绔欑偣鐨勭珯鐐�
// 鏌ヨagv宸ヤ綔妗d腑鎵�鏈夊凡鍒嗛厤绔欑偣鐨勪换鍔★紙sta_no涓嶄负绌恒�佷笉涓虹┖瀛楃涓层�佷笉涓�0锛�
final List<String> allocatedSiteNos;
if (checkIoTypes != null && !checkIoTypes.isEmpty()) {
List<Task> allocatedTasks = taskService.selectList(
- new EntityWrapper<Task>()
- .eq("task_type", "agv")
- .in("wrk_sts", 7L, 8L) // 寰呭懠鍙獳GV鍜屾鍦ㄦ惉杩愮殑浠诲姟
- .in("io_type", checkIoTypes)
- .isNotNull("sta_no")
- .ne("sta_no", "")
- .ne("sta_no", "0")
- .andNew("(is_deleted = 0)")
+ new EntityWrapper<Task>()
+ .eq("task_type", "agv")
+ .in("wrk_sts", 7L, 8L) // 寰呭懠鍙獳GV鍜屾鍦ㄦ惉杩愮殑浠诲姟
+ .in("io_type", checkIoTypes)
+ .isNotNull("sta_no")
+ .ne("sta_no", "")
+ .ne("sta_no", "0")
+ .andNew("(is_deleted = 0)")
);
// 鑾峰彇宸插垎閰嶇殑绔欑偣缂栧彿鍒楄〃
allocatedSiteNos = allocatedTasks.stream()
@@ -992,15 +826,22 @@
} else {
allocatedSiteNos = new ArrayList<>();
}
-
+
// 浠庡彲鐢ㄧ珯鐐逛腑绛涢�夊嚭鏈鍒嗛厤鐨勭珯鐐�
- List<BasDevp> unallocatedSites = devList.stream()
+ List<BasDevp> unallocatedSites = devListWithConfig.stream()
.filter(dev -> {
String staNo = String.valueOf(dev.getDevNo());
return !allocatedSiteNos.contains(staNo);
})
.collect(Collectors.toList());
-
+ List<BasDevp> unallocatedSites2 = new ArrayList<>();
+ for (int i = 0; devListWithConfig.size() > i; i++) {
+ unallocatedSites2.add(devListWithConfig.get(i));
+ }
+// if(unallocatedSites==null || unallocatedSites.isEmpty()){
+// unallocatedSites=unallocatedSites2;
+//
+// }
// 鍙娇鐢ㄦ湭鍒嗛厤绔欑偣
if (unallocatedSites.isEmpty()) {
// 鏈垎閰嶇珯鐐逛负绌猴細涓嶅垎閰嶇珯鐐�
@@ -1011,20 +852,20 @@
}
allocatedSitesInfo.append("绔欑偣").append(staNo).append("宸茶鍒嗛厤");
}
- log.warn("浠诲姟ID锛歿}锛屾墍鏈夊彲鐢ㄧ珯鐐归兘宸茶鍒嗛厤锛屾殏涓嶅垎閰嶇珯鐐癸紝绛夊緟涓嬫瀹氭椂浠诲姟鍐嶅皾璇曘�傚凡鍒嗛厤绔欑偣锛歿}",
- displayTaskId, allocatedSitesInfo.length() > 0 ? allocatedSitesInfo.toString() : "鏃犺缁嗕俊鎭�");
+ log.warn("浠诲姟ID锛歿}锛屾墍鏈夊彲鐢ㄧ珯鐐归兘宸茶鍒嗛厤锛屾殏涓嶅垎閰嶇珯鐐癸紝绛夊緟涓嬫瀹氭椂浠诲姟鍐嶅皾璇曘�傚凡鍒嗛厤绔欑偣锛歿}",
+ displayTaskId, allocatedSitesInfo.length() > 0 ? allocatedSitesInfo.toString() : "鏃犺缁嗕俊鎭�");
return null; // 杩斿洖null锛岃〃绀烘殏涓嶅垎閰嶏紝绛夊緟涓嬫瀹氭椂浠诲姟鍐嶅皾璇�
}
-
+
// 瀛樺湪鏈垎閰嶇珯鐐癸細鏍规嵁閰嶇疆鐨勫垎閰嶇瓥鐣ラ�夋嫨鍏蜂綋绔欑偣
// 鍏堟寜瑙勫垯鎺掑簭锛堝叆搴撲换鍔℃暟鎺掑簭锛�
unallocatedSites.sort(Comparator.comparing(BasDevp::getInQty));
-
+
// 鏍规嵁閰嶇疆閫夋嫨鍒嗛厤绛栫暐锛岀‘瀹氫紭鍏堝垎閰嶇殑绔欑偣椤哄簭
List<BasDevp> orderedSites = new ArrayList<>();
String strategy = agvProperties.getSiteAllocation().getStrategy();
boolean enableRoundRobin = agvProperties.getSiteAllocation().isEnableRoundRobin();
-
+
// 璁板綍鏄惁浣跨敤杞绛栫暐锛屼互鍙婅疆璇㈣鏁板櫒锛堢敤浜庡湪鎴愬姛鍒嗛厤绔欑偣鍚庨�掑锛�
AtomicInteger roundRobinCounter = null;
int roundRobinStartIndex = 0;
@@ -1035,48 +876,48 @@
// 灏嗚疆璇㈤�変腑鐨勭珯鐐规斁鍦ㄦ渶鍓嶉潰
orderedSites.addAll(unallocatedSites.subList(roundRobinStartIndex, unallocatedSites.size()));
orderedSites.addAll(unallocatedSites.subList(0, roundRobinStartIndex));
- log.info("浠诲姟ID锛歿}锛屼娇鐢ㄨ疆璇㈠垎閰嶇瓥鐣ワ紝绔欑偣缁勶細{}锛岃疆璇㈣捣濮嬬储寮曪細{}锛屽�欓�夌珯鐐癸細{}锛堝叡{}涓湭鍒嗛厤绔欑偣锛�",
- displayTaskId, groupKey, roundRobinStartIndex,
- unallocatedSites.stream().map(d -> String.valueOf(d.getDevNo())).collect(Collectors.joining(",")),
- unallocatedSites.size());
+ log.info("浠诲姟ID锛歿}锛屼娇鐢ㄨ疆璇㈠垎閰嶇瓥鐣ワ紝绔欑偣缁勶細{}锛岃疆璇㈣捣濮嬬储寮曪細{}锛屽�欓�夌珯鐐癸細{}锛堝叡{}涓湭鍒嗛厤绔欑偣锛�",
+ displayTaskId, groupKey, roundRobinStartIndex,
+ unallocatedSites.stream().map(d -> String.valueOf(d.getDevNo())).collect(Collectors.joining(",")),
+ unallocatedSites.size());
} else if (unallocatedSites.size() > 1 && enableRoundRobin && "random".equals(strategy)) {
// 闅忔満鍒嗛厤锛氬厛闅忔満鎺掑簭鏈垎閰嶇珯鐐�
List<BasDevp> shuffledSites = new ArrayList<>(unallocatedSites);
Collections.shuffle(shuffledSites);
orderedSites.addAll(shuffledSites);
- log.info("浠诲姟ID锛歿}锛屼娇鐢ㄩ殢鏈哄垎閰嶇瓥鐣ワ紝鍊欓�夌珯鐐癸細{}",
- displayTaskId, unallocatedSites.stream().map(d -> String.valueOf(d.getDevNo())).collect(Collectors.joining(",")));
+ log.info("浠诲姟ID锛歿}锛屼娇鐢ㄩ殢鏈哄垎閰嶇瓥鐣ワ紝鍊欓�夌珯鐐癸細{}",
+ displayTaskId, unallocatedSites.stream().map(d -> String.valueOf(d.getDevNo())).collect(Collectors.joining(",")));
} else {
// 榛樿锛氭寜鍏ュ簱浠诲姟鏁版帓搴忥紙宸茬粡鎺掑簭濂戒簡锛�
orderedSites = unallocatedSites;
}
-
+
// 鏃㈢劧宸茬粡绛涢�夊嚭浜嗘湭鍒嗛厤绔欑偣锛岀洿鎺ユ牴鎹垎閰嶇瓥鐣ラ�夋嫨绗竴涓珯鐐瑰嵆鍙�
// 鏈垎閰嶇珯鐐瑰湪AGV宸ヤ綔妗d腑閮芥病鏈夊凡鍒嗛厤鐨勪换鍔★紝鍙互鐩存帴鍒嗛厤
BasDevp selectedSite = orderedSites.get(0);
Integer endSite = selectedSite.getDevNo();
String staNo = String.valueOf(endSite);
-
- log.info("浠诲姟ID锛歿}锛屼粠{}涓湭鍒嗛厤绔欑偣涓�夋嫨绔欑偣{}锛堝叆搴撲换鍔℃暟锛歿}锛夛紝鍊欓�夌珯鐐癸細{}",
- displayTaskId, orderedSites.size(), staNo, selectedSite.getInQty(),
- orderedSites.stream().map(d -> String.valueOf(d.getDevNo())).collect(Collectors.joining(",")));
-
+
+ log.info("浠诲姟ID锛歿}锛屼粠{}涓湭鍒嗛厤绔欑偣涓�夋嫨绔欑偣{}锛堝叆搴撲换鍔℃暟锛歿}锛夛紝鍊欓�夌珯鐐癸細{}",
+ displayTaskId, orderedSites.size(), staNo, selectedSite.getInQty(),
+ orderedSites.stream().map(d -> String.valueOf(d.getDevNo())).collect(Collectors.joining(",")));
+
// 濡傛灉浣跨敤杞绛栫暐涓旀垚鍔熷垎閰嶇珯鐐癸紝閫掑杞璁℃暟鍣紙纭繚涓嬫浠庝笅涓�涓珯鐐瑰紑濮嬶級
if (roundRobinCounter != null && unallocatedSites.size() > 1) {
roundRobinCounter.getAndIncrement();
log.debug("浠诲姟ID锛歿}鎴愬姛鍒嗛厤鍒扮珯鐐箋}锛岃疆璇㈣鏁板櫒宸查�掑锛屼笅娆″皢浠庝笅涓�涓珯鐐瑰紑濮嬭疆璇�", displayTaskId, staNo);
}
-
+
// 妫�鏌ョ珯鐐规槸鍚︽湁鏁堬紙涓嶈兘涓�0鎴杗ull锛�
if (endSite == null || endSite == 0) {
String errorMsg = String.format("鍒嗛厤鐨勭珯鐐规棤鏁堬紙dev_no=%s锛�", endSite);
log.error("浠诲姟ID锛歿}锛寋}", displayTaskId, errorMsg);
return errorMsg;
}
-
+
// 鍏ュ簱鏆傚瓨+1
basDevpMapper.incrementInQty(endSite);
-
+
// 鏇存柊浠诲姟鐨勭珯鐐圭紪鍙凤紝骞剁‘淇濈姸鎬佷负7锛堝緟鍛煎彨AGV锛�
task.setStaNo(String.valueOf(endSite));
if (task.getWrkSts() == null || task.getWrkSts() != 7L) {
@@ -1084,25 +925,26 @@
log.debug("浠诲姟ID锛歿}鍒嗛厤绔欑偣鏃讹紝鐘舵�佷笉鏄�7锛屽凡鏇存柊涓�7锛堝緟鍛煎彨AGV锛�", displayTaskId);
}
taskService.updateById(task);
-
+
log.info("浠诲姟ID锛歿}宸插垎閰嶇珯鐐癸細{}锛屾満鍣ㄤ汉缁勶細{}锛屼换鍔$被鍨嬶細{}", displayTaskId, endSite, robotGroup, taskTypeName);
return null; // 鍒嗛厤鎴愬姛锛岃繑鍥瀗ull
}
/**
* 鏍规嵁绔欑偣缂栧彿鍒ゆ柇鏈哄櫒浜虹粍
+ *
* @param staNo 绔欑偣缂栧彿
* @return 鏈哄櫒浜虹粍鍚嶇О
*/
- private String determineRobotGroupByStation(String staNo) {
+ private String determineRobotGroupByStation(String staNo) {
if (staNo == null || staNo.isEmpty()) {
return agvProperties.getRobotGroupEast(); // 榛樿浣跨敤涓滀晶鏈哄櫒浜虹粍
}
-
+
// 浠庨厤缃腑鑾峰彇绔欑偣鍒楄〃
Set<String> eastStations = new HashSet<>(agvProperties.getEastStations());
Set<String> westStations = new HashSet<>(agvProperties.getWestStations());
-
+
// 鍒ゆ柇绔欑偣灞炰簬鍝竴渚�
if (eastStations.contains(staNo)) {
return agvProperties.getRobotGroupEast(); // 涓滀晶鏈哄櫒浜�
@@ -1113,6 +955,7 @@
return agvProperties.getRobotGroupEast(); // 榛樿浣跨敤涓滀晶鏈哄櫒浜虹粍
}
}
+
/**
* 浠诲姟瀹屾垚杞巻鍙� 閲婃斁鏆傚瓨鐐�
@@ -1130,7 +973,7 @@
// 鎵归噺鍒犻櫎鍘熶换鍔�
List<Long> taskIds = taskList.stream().map(Task::getId).collect(Collectors.toList());
- taskService.delete(new EntityWrapper<Task>().in("id",taskIds));
+ taskService.delete(new EntityWrapper<Task>().in("id", taskIds));
// 鎵归噺鏇存柊鏆傚瓨鐐圭姸鎬�
List<String> locOList = new ArrayList<>();
@@ -1181,15 +1024,21 @@
log.info("agv浠诲姟妗h浆鍘嗗彶鎴愬姛锛歿}", taskIds);
}
+ @Transactional(rollbackFor = Exception.class)
+ public void moveTaskToHistory(Task agvTask) {
+ moveTaskToHistory(Collections.singletonList(agvTask));
+
+ }
+
/**
* 璐х墿鍒拌揪鍑哄簱鍙o紝鐢熸垚agv浠诲姟
*/
public void createAgvOutTasks(List<String> sites) {
// 鑾峰彇鍒板彲鐢ㄥ嚭搴撶珯鐐圭殑浠诲姟
- List<WrkMast> wrkMastList = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("call_agv", 1).in("sta_no",sites));
+ List<WrkMast> wrkMastList = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("call_agv", 1).in("sta_no", sites));
- for(WrkMast wrkMast:wrkMastList) {
+ for (WrkMast wrkMast : wrkMastList) {
// todo 璁$畻agv鐩爣鏆傚瓨浣�
int endSite = 2004;
@@ -1201,12 +1050,13 @@
wrkMastMapper.updateById(wrkMast);
// 鏇存柊鏆傚瓨浣嶇姸鎬� S.鍏ュ簱棰勭害
- basStationMapper.updateLocStsBatch( Collections.singletonList(String.valueOf(endSite)), "S");
+ basStationMapper.updateLocStsBatch(Collections.singletonList(String.valueOf(endSite)), "S");
}
}
/**
* 鍙栨秷AGV浠诲姟锛堜粰宸4鎺ュ彛锛�
+ *
* @param task 浠诲姟瀵硅薄
* @return 鏄惁鎴愬姛
*/
@@ -1225,7 +1075,7 @@
String url = ApiInterfaceConstant.AGV_IP + ApiInterfaceConstant.AGV_CANCEL_TASK_PATH;
String namespace = "";
String kind = "";
-
+
// 鏍规嵁浠诲姟绫诲瀷纭畾kind鍜宯amespace
switch (task.getIoType()) {
case 1:
@@ -1266,7 +1116,7 @@
.setJson(body)
.build()
.doPost();
-
+
JSONObject jsonObject = JSON.parseObject(response);
if (jsonObject.getInteger("code") != null && jsonObject.getInteger("code").equals(200)) {
success = true;
--
Gitblit v1.9.1