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