From 65539f6fb4d836180f784c2c4e0bc441764cd23f Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期一, 19 一月 2026 11:02:44 +0800
Subject: [PATCH] agv逻辑调整
---
src/main/java/com/zy/asrs/task/AgvScheduler.java | 96 +++++++++++++++++++++++++++++-------------------
1 files changed, 58 insertions(+), 38 deletions(-)
diff --git a/src/main/java/com/zy/asrs/task/AgvScheduler.java b/src/main/java/com/zy/asrs/task/AgvScheduler.java
index cd317c9..4139ec6 100644
--- a/src/main/java/com/zy/asrs/task/AgvScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AgvScheduler.java
@@ -203,7 +203,10 @@
/**
* 妫�鏌GV浠诲姟瀵瑰簲鐨勫伐浣滄。鏄惁宸插畬鎴愭垨宸茶浆鍘嗗彶妗e苟瀹岀粨
- * 澶勭悊琚烦杩囩殑AGV浠诲姟锛氬鏋滃伐浣滄。宸插畬鎴愶紙wrk_sts=4,5,14,15锛夋垨宸茶浆鍘嗗彶妗e苟瀹岀粨锛屽垯瀹岀粨AGV浠诲姟
+ * 澶勭悊琚烦杩囩殑AGV浠诲姟锛�
+ * 1. 濡傛灉宸ヤ綔妗e凡瀹屾垚锛坵rk_sts=4,5,14,15锛夋垨宸茶浆鍘嗗彶妗e苟瀹岀粨锛屽垯瀹岀粨AGV浠诲姟
+ * 2. 濡傛灉宸ヤ綔妗e拰鍘嗗彶妗i兘娌℃湁鏁版嵁锛屼絾鏄疉GV宸茬‘璁ゆ帴鏀跺懡浠ゅ悗瓒呰繃1灏忔椂澶勪簬鎼繍涓紙鐘舵��8锛夛紝涔熺粨鏉烝GV浠诲姟
+ * 娉ㄦ剰锛氬彧鏈堿GV纭鎺ユ敹鍛戒护鍚庯紙plcStrTime涓嶄负绌猴級鎵嶅紑濮嬭鏃讹紝濡傛灉AGV鎺ュ彈鍛戒护澶辫触锛屼細缁х画鍛煎彨AGV
*/
@Scheduled(cron = "0/10 * * * * ? ")
private void checkCompletedTasksInHistory() {
@@ -216,7 +219,6 @@
new EntityWrapper<Task>()
.eq("task_type", "agv")
.eq("wrk_sts", 8L) // 宸插懠鍙獳GV鐘舵��
- .isNotNull("wrk_no")
);
if (agvTasks.isEmpty()) {
@@ -226,6 +228,8 @@
Date now = new Date();
int completedCount = 0;
List<Task> completedTasks = new ArrayList<>();
+ // 1灏忔椂鐨勬绉掓暟锛堜粠AGV纭鎺ユ敹鍛戒护寮�濮嬭鏃讹級
+ long oneHourInMillis = 60 * 60 * 1000L;
for (Task agvTask : agvTasks) {
boolean isCompleted = false;
@@ -237,6 +241,24 @@
wrkMast = wrkMastService.selectOne(
new EntityWrapper<WrkMast>().eq("wrk_no", agvTask.getWrkNo())
);
+ }
+
+ // 妫�鏌ュ巻鍙叉。鏄惁瀛樺湪锛堟棤璁哄伐浣滄。鏄惁瀛樺湪閮介渶瑕佹鏌ワ級
+ WrkMastLog wrkMastLog = null;
+ // 浼樺厛閫氳繃wrk_no鏌ヨ鍘嗗彶妗�
+ if (agvTask.getWrkNo() != null) {
+ wrkMastLog = wrkMastLogService.selectOne(
+ 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())
+ );
+ if (!logList.isEmpty()) {
+ wrkMastLog = logList.get(0); // 鍙栫涓�涓�
+ }
}
// 濡傛灉宸ヤ綔妗e瓨鍦紝妫�鏌ユ槸鍚﹀凡瀹屾垚
@@ -258,47 +280,45 @@
reason = String.format("宸ヤ綔妗e凡瀹屾垚锛岀姸鎬侊細%d", wrkSts);
}
}
- } else {
- // 濡傛灉宸ヤ綔妗d笉瀛樺湪锛屾鏌ュ巻鍙叉。
- WrkMastLog wrkMastLog = null;
+ }
+
+ // 濡傛灉宸ヤ綔妗d笉瀛樺湪鎴栨湭瀹屾垚锛屾鏌ュ巻鍙叉。鏄惁宸插畬缁�
+ if (!isCompleted && wrkMastLog != null) {
+ Integer ioType = agvTask.getIoType();
+ long logWrkSts = wrkMastLog.getWrkSts();
- // 浼樺厛閫氳繃wrk_no鏌ヨ鍘嗗彶妗�
- if (agvTask.getWrkNo() != null) {
- wrkMastLog = wrkMastLogService.selectOne(
- 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())
- );
- if (!logList.isEmpty()) {
- wrkMastLog = logList.get(0); // 鍙栫涓�涓�
+ if (ioType != null) {
+ // 鍏ュ簱浠诲姟锛氱姸鎬�5锛堝簱瀛樻洿鏂板畬鎴愶級
+ if ((ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) &&
+ logWrkSts == 5L) {
+ isCompleted = true;
+ reason = String.format("宸ヤ綔妗e凡杞巻鍙叉。骞跺畬缁擄紝鍘嗗彶妗g姸鎬侊細%d", logWrkSts);
+ }
+ // 鍑哄簱浠诲姟锛氱姸鎬�15锛堝嚭搴撴洿鏂板畬鎴愶級
+ else if ((ioType == 101 || ioType == 110 || ioType == 103 || ioType == 107) &&
+ logWrkSts == 15L) {
+ isCompleted = true;
+ reason = String.format("宸ヤ綔妗e凡杞巻鍙叉。骞跺畬缁擄紝鍘嗗彶妗g姸鎬侊細%d", logWrkSts);
}
}
+ }
+
+ // 濡傛灉宸ヤ綔妗e拰鍘嗗彶妗i兘娌℃湁鏁版嵁锛屾鏌ユ槸鍚﹁秴杩�1灏忔椂锛堜粠AGV纭鎺ユ敹鍛戒护寮�濮嬭鏃讹級
+ if (!isCompleted && wrkMast == null && wrkMastLog == null) {
+ // 鍙湁AGV纭鎺ユ敹鍛戒护鍚庯紙plcStrTime涓嶄负绌猴級鎵嶅紑濮嬭鏃�
+ // 濡傛灉plcStrTime涓虹┖锛岃鏄嶢GV杩樻病鏈夌‘璁ゆ帴鏀跺懡浠わ紝浼氱户缁懠鍙紝涓嶇粨鏉熶换鍔�
+ Date agvConfirmedTime = agvTask.getPlcStrTime();
- // 濡傛灉鍘嗗彶妗e瓨鍦ㄤ笖宸插畬缁擄紝鍒欏畬缁揂GV浠诲姟
- if (wrkMastLog != null) {
- Integer ioType = agvTask.getIoType();
- long logWrkSts = wrkMastLog.getWrkSts();
-
- if (ioType != null) {
- // 鍏ュ簱浠诲姟锛氱姸鎬�5锛堝簱瀛樻洿鏂板畬鎴愶級
- if ((ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) &&
- logWrkSts == 5L) {
- isCompleted = true;
- reason = String.format("宸ヤ綔妗e凡杞巻鍙叉。骞跺畬缁擄紝鍘嗗彶妗g姸鎬侊細%d", logWrkSts);
- }
- // 鍑哄簱浠诲姟锛氱姸鎬�15锛堝嚭搴撴洿鏂板畬鎴愶級
- else if ((ioType == 101 || ioType == 110 || ioType == 103 || ioType == 107) &&
- logWrkSts == 15L) {
- isCompleted = true;
- reason = String.format("宸ヤ綔妗e凡杞巻鍙叉。骞跺畬缁擄紝鍘嗗彶妗g姸鎬侊細%d", logWrkSts);
- }
+ if (agvConfirmedTime != null) {
+ long timeDiff = now.getTime() - agvConfirmedTime.getTime();
+ if (timeDiff >= oneHourInMillis) {
+ isCompleted = true;
+ long hours = timeDiff / (60 * 60 * 1000L);
+ long minutes = (timeDiff % (60 * 60 * 1000L)) / (60 * 1000L);
+ reason = String.format("宸ヤ綔妗e拰鍘嗗彶妗i兘涓嶅瓨鍦紝AGV纭鎺ユ敹鍛戒护鍚庤秴杩�1灏忔椂锛堝疄闄咃細%d灏忔椂%d鍒嗛挓锛夊浜庢惉杩愪腑锛岃嚜鍔ㄧ粨鏉�", hours, minutes);
}
}
+ // 濡傛灉plcStrTime涓虹┖锛岃鏄嶢GV杩樻病鏈夌‘璁ゆ帴鏀跺懡浠わ紝涓嶇粨鏉熶换鍔★紝缁х画绛夊緟鍛煎彨
}
// 濡傛灉宸插畬鎴愶紝鏇存柊AGV浠诲姟鐘舵�佸苟鏀堕泦鍒板垪琛�
@@ -325,7 +345,7 @@
}
if (completedCount > 0) {
- log.info("鏈妫�鏌ュ畬缁撲簡{}涓狝GV鍛煎彨鍗曪紙宸ヤ綔妗e凡瀹屾垚鎴栧凡杞巻鍙叉。锛�", completedCount);
+ log.info("鏈妫�鏌ュ畬缁撲簡{}涓狝GV鍛煎彨鍗曪紙宸ヤ綔妗e凡瀹屾垚鎴栧凡杞巻鍙叉。鎴栫‘璁ゆ帴鏀跺悗瓒呮椂锛�", completedCount);
}
} catch (Exception e) {
log.error("妫�鏌ュ伐浣滄。宸插畬鎴愭垨鍘嗗彶妗e畬缁撲换鍔″苟瀹岀粨AGV鍛煎彨鍗曞紓甯�", e);
--
Gitblit v1.9.1