From 9611dc686299be640ce5e5f5990c747765161ec7 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期三, 21 一月 2026 10:59:38 +0800
Subject: [PATCH] agv逻辑调整2

---
 src/main/java/com/zy/asrs/task/AgvScheduler.java |  346 ++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 293 insertions(+), 53 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/AgvScheduler.java b/src/main/java/com/zy/asrs/task/AgvScheduler.java
index 4139ec6..e04f9ef 100644
--- a/src/main/java/com/zy/asrs/task/AgvScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AgvScheduler.java
@@ -21,6 +21,7 @@
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -55,23 +56,170 @@
     private SchedulerProperties schedulerProperties;
 
     /**
-     * 鍛煎彨agv鎼繍
+     * 璁板綍涓婃澶勭悊鐨勪换鍔D锛岀敤浜庤疆璇㈠鐞�
+     * 纭繚姣忔澶勭悊涓嶅悓鐨勪换鍔★紝閬垮厤涓�鐩村鐞嗗悓涓�涓换鍔�
+     */
+    private Long lastProcessedTaskId = null;
+    
+    /**
+     * 璁板綍涓婃鍒嗛厤绔欑偣鐨勪换鍔D锛岀敤浜庤疆璇㈠鐞�
+     */
+    private Long lastAllocatedTaskId = null;
+
+    /**
+     * 鍒嗛厤绔欑偣瀹氭椂浠诲姟
+     * 鏌ヨ鐘舵��7锛堝緟鍛煎彨AGV锛変絾娌℃湁鍒嗛厤绔欑偣鐨勪换鍔★紝涓哄叾鍒嗛厤鍙敤绔欑偣
+     * 鍙礋璐e垎閰嶇珯鐐癸紝涓嶅懠鍙獳GV
+     * 姣忔鍙鐞嗕竴涓换鍔★紝閬垮厤楂樺苟鍙戞墽琛�
+     */
+    @Scheduled(cron = "0/5 * * * * ? ")
+    private void allocateSite() {
+        if (!schedulerProperties.isEnabled()) {
+            log.debug("瀹氭椂浠诲姟allocateSite锛氳皟搴﹀櫒鏈惎鐢紝璺宠繃鎵ц");
+            return;
+        }
+        
+        // 鏋勫缓鏌ヨ鏉′欢锛氭煡璇㈡墍鏈夊緟鍛煎彨AGV浣嗘病鏈夊垎閰嶇珯鐐圭殑浠诲姟
+        EntityWrapper<Task> wrapper = new EntityWrapper<Task>();
+        wrapper.eq("wrk_sts", 7); // 寰呭懠鍙獳GV鐘舵��
+        wrapper.eq("task_type", "agv"); // AGV浠诲姟绫诲瀷
+        wrapper.andNew("(is_deleted = 0)");
+        wrapper.andNew()
+            .isNull("sta_no")
+            .or()
+            .eq("sta_no", "")
+            .or()
+            .eq("sta_no", "0");
+        wrapper.orderBy("id", true); // 鎸塱d鍗囧簭鎺掑簭
+        
+        // 濡傛灉涓婃澶勭悊杩囦换鍔★紝浠庝笅涓�涓换鍔″紑濮嬫煡璇紙杞锛�
+        if (lastAllocatedTaskId != null) {
+            wrapper.gt("id", lastAllocatedTaskId);
+        }
+        
+        // 鏌ヨ寰呭垎閰嶇珯鐐圭殑浠诲姟锛屾瘡娆″彧鏌ヨ涓�涓�
+        List<Task> taskList = taskService.selectList(
+            wrapper.last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY")
+        );
+        
+        // 濡傛灉浠庝笂娆′换鍔′箣鍚庢病鏈夋壘鍒颁换鍔★紝浠庡ご寮�濮嬫煡璇紙瀹炵幇寰幆杞锛�
+        if (taskList.isEmpty() && lastAllocatedTaskId != null) {
+            lastAllocatedTaskId = null; // 閲嶇疆锛屼粠澶村紑濮�
+            taskList = taskService.selectList(
+                new EntityWrapper<Task>()
+                    .eq("wrk_sts", 7)
+                    .eq("task_type", "agv")
+                    .andNew("(is_deleted = 0)")
+                    .andNew()
+                    .isNull("sta_no")
+                    .or()
+                    .eq("sta_no", "")
+                    .or()
+                    .eq("sta_no", "0")
+                    .orderBy("id", true)
+                    .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY")
+            );
+        }
+        
+        if(taskList.isEmpty()) {
+            log.debug("瀹氭椂浠诲姟allocateSite锛氭病鏈夊緟鍒嗛厤绔欑偣鐨勪换鍔★紙wrk_sts=7锛宼ask_type=agv锛宻ta_no涓虹┖锛�");
+            return;
+        }
+        
+        // 璋冪敤鍒嗛厤绔欑偣閫昏緫
+        Task task = taskList.get(0);
+        String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
+        log.info("瀹氭椂浠诲姟allocateSite锛氬紑濮嬩负浠诲姟ID锛歿}鍒嗛厤绔欑偣锛坵rk_no={}锛宨oType={}锛�", 
+            displayTaskId, task.getWrkNo(), task.getIoType());
+        
+        String errorMsg = agvHandler.allocateSiteForTask(task);
+        
+        // 妫�鏌ユ槸鍚︽垚鍔熷垎閰嶄簡绔欑偣
+        String staNo = task.getStaNo();
+        if (errorMsg == null && staNo != null && !staNo.isEmpty() && !staNo.equals("0")) {
+            // 鍒嗛厤绔欑偣鎴愬姛
+            lastAllocatedTaskId = task.getId();
+            log.info("瀹氭椂浠诲姟allocateSite锛氫换鍔D锛歿}鎴愬姛鍒嗛厤绔欑偣锛歿}锛屾洿鏂發astAllocatedTaskId涓簕}", 
+                displayTaskId, staNo, lastAllocatedTaskId);
+        } else {
+            // 鏃犳硶鍒嗛厤绔欑偣锛屼笉鏇存柊lastAllocatedTaskId锛屼笅娆′細閲嶆柊灏濊瘯
+            log.info("瀹氭椂浠诲姟allocateSite锛氫换鍔D锛歿}鏃犳硶鍒嗛厤绔欑偣锛歿}锛屼笉鏇存柊lastAllocatedTaskId锛堝綋鍓嶏細{}锛夛紝涓嬫灏嗛噸鏂板皾璇�", 
+                displayTaskId, errorMsg != null ? errorMsg : "鎵�鏈夌珯鐐归兘琚崰鐢�", lastAllocatedTaskId);
+        }
+    }
+
+    /**
+     * 鍛煎彨AGV瀹氭椂浠诲姟
+     * 鏌ヨ鐘舵��7锛堝緟鍛煎彨AGV锛変笖宸插垎閰嶇珯鐐圭殑浠诲姟锛屽懠鍙獳GV
+     * 鍛煎彨鎴愬姛鍚庯紝鐘舵�佷粠7锛堝緟鍛煎彨AGV锛夊彉涓�8锛堟鍦ㄦ惉杩愶級
+     * 姣忔鍙鐞嗕竴涓换鍔★紝閬垮厤楂樺苟鍙戞墽琛�
+     * 浣跨敤杞鏈哄埗锛岀‘淇濅笉浼氫竴鐩村鐞嗗悓涓�涓换鍔�
      */
     @Scheduled(cron = "0/5 * * * * ? ")
     private void callAgv() {
         if (!schedulerProperties.isEnabled()) {
+            log.debug("瀹氭椂浠诲姟callAgv锛氳皟搴﹀櫒鏈惎鐢紝璺宠繃鎵ц");
             return;
         }
-        // 鏌ヨ寰呭懠鍙玜gv浠诲姟锛屾寜id鍗囧簭鎺掑簭锛坕d鏈�灏忕殑浼樺厛鍛煎彨锛�
+        
+        // 鏋勫缓鏌ヨ鏉′欢锛氭煡璇㈢姸鎬�7锛堝緟鍛煎彨AGV锛変笖宸插垎閰嶇珯鐐圭殑浠诲姟
+        EntityWrapper<Task> wrapper = new EntityWrapper<Task>();
+        wrapper.eq("wrk_sts", 7); // 寰呭懠鍙獳GV鐘舵��
+        wrapper.eq("task_type", "agv"); // AGV浠诲姟绫诲瀷
+        wrapper.andNew("(is_deleted = 0)");
+        wrapper.isNotNull("sta_no"); // 蹇呴』鏈夌珯鐐瑰垎閰�
+        wrapper.ne("sta_no", ""); // 绔欑偣涓嶈兘涓虹┖瀛楃涓�
+        wrapper.ne("sta_no", "0"); // 绔欑偣涓嶈兘涓�0
+        wrapper.orderBy("id", true); // 鎸塱d鍗囧簭鎺掑簭
+        
+        // 濡傛灉涓婃澶勭悊杩囦换鍔★紝浠庝笅涓�涓换鍔″紑濮嬫煡璇紙杞锛�
+        if (lastProcessedTaskId != null) {
+            wrapper.gt("id", lastProcessedTaskId);
+        }
+        
+        // 鏌ヨ寰呭懠鍙玜gv浠诲姟锛屾瘡娆″彧鏌ヨ涓�涓�
         List<Task> taskList = taskService.selectList(
-            new EntityWrapper<Task>()
-                .eq("wrk_sts", 7)
-                .orderBy("id", true) // 鎸塱d鍗囧簭锛宨d鏈�灏忕殑浼樺厛
+            wrapper.last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY")
         );
+        
+        // 濡傛灉浠庝笂娆′换鍔′箣鍚庢病鏈夋壘鍒颁换鍔★紝浠庡ご寮�濮嬫煡璇紙瀹炵幇寰幆杞锛�
+        if (taskList.isEmpty() && lastProcessedTaskId != null) {
+            lastProcessedTaskId = null; // 閲嶇疆锛屼粠澶村紑濮�
+            taskList = taskService.selectList(
+                new EntityWrapper<Task>()
+                    .eq("wrk_sts", 7)
+                    .eq("task_type", "agv")
+                    .andNew("(is_deleted = 0)")
+                    .isNotNull("sta_no")
+                    .ne("sta_no", "")
+                    .ne("sta_no", "0")
+                    .orderBy("id", true)
+                    .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY")
+            );
+        }
+        
         if(taskList.isEmpty()) {
+            log.debug("瀹氭椂浠诲姟callAgv锛氭病鏈夊緟鍛煎彨AGV鐨勪换鍔★紙wrk_sts=7锛宼ask_type=agv锛宻ta_no涓嶄负绌猴級");
             return;
         }
-        agvHandler.callAgv(taskList);
+        
+        // 璋冪敤澶勭悊閫昏緫锛氬懠鍙獳GV锛屾垚鍔熷悗鐘舵�佷粠7鍙樹负8
+        Task task = taskList.get(0);
+        String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
+        log.info("瀹氭椂浠诲姟callAgv锛氬紑濮嬪鐞嗕换鍔D锛歿}锛坵rk_no={}锛宨oType={}锛宻ta_no={}锛�", 
+            displayTaskId, task.getWrkNo(), task.getIoType(), task.getStaNo());
+        boolean processed = agvHandler.callAgv(taskList);
+        
+        // 鍙湁褰撲换鍔℃垚鍔熷鐞嗭紙鎴愬姛鍛煎彨AGV锛岀姸鎬佷粠7鍙樹负8锛夋椂锛屾墠鏇存柊lastProcessedTaskId
+        // 濡傛灉浠诲姟琚烦杩囷紙绔欑偣琚崰鐢ㄧ瓑锛夛紝涓嶆洿鏂發astProcessedTaskId锛屼笅娆′細閲嶆柊灏濊瘯
+        if (processed) {
+            lastProcessedTaskId = task.getId();
+            log.info("瀹氭椂浠诲姟callAgv锛氫换鍔D锛歿}鎴愬姛鍛煎彨AGV锛岀姸鎬佸凡浠�7鍙樹负8锛屾洿鏂發astProcessedTaskId涓簕}锛屼笅娆″皢澶勭悊涓嬩竴涓换鍔�", 
+                displayTaskId, lastProcessedTaskId);
+        } else {
+            log.info("瀹氭椂浠诲姟callAgv锛氫换鍔D锛歿}琚烦杩囷紝涓嶆洿鏂發astProcessedTaskId锛堝綋鍓嶏細{}锛夛紝涓嬫灏嗛噸鏂板皾璇曞鐞嗘浠诲姟", 
+                displayTaskId, lastProcessedTaskId);
+        }
     }
 
     /**
@@ -115,7 +263,7 @@
         if (!schedulerProperties.isEnabled()) {
             return;
         }
-        List<Task> taskList = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 9));
+        List<Task> taskList = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 9).andNew("(is_deleted = 0)"));
         if(taskList.isEmpty()) {
             return;
         }
@@ -153,7 +301,8 @@
                 Wrapper<Task> taskWrapper1 = new EntityWrapper<Task>()
                     .eq("task_type", "agv")
                     .eq("wrk_sts", 8L)  // 宸插懠鍙獳GV鐘舵��
-                    .eq("wrk_no", wrkMast.getWrkNo());
+                    .eq("wrk_no", wrkMast.getWrkNo())
+                    .andNew("(is_deleted = 0)");
                 List<Task> agvTasks = taskService.selectList(taskWrapper1);
                 
                 // 濡傛灉閫氳繃wrk_no娌℃壘鍒帮紝涓旀湁鏉$爜锛屽垯閫氳繃鏉$爜鏌ヨ
@@ -161,7 +310,8 @@
                     Wrapper<Task> taskWrapper2 = new EntityWrapper<Task>()
                         .eq("task_type", "agv")
                         .eq("wrk_sts", 8L)
-                        .eq("barcode", wrkMast.getBarcode());
+                        .eq("barcode", wrkMast.getBarcode())
+                        .andNew("(is_deleted = 0)");
                     agvTasks = taskService.selectList(taskWrapper2);
                 }
                 
@@ -176,8 +326,10 @@
                         if (taskService.updateById(agvTask)) {
                             completedTasks.add(agvTask);
                             completedCount++;
+                            // taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝濡傛灉宸ヤ綔鍙蜂负绌哄垯浣跨敤浠诲姟ID
+                            String displayTaskId = (agvTask.getWrkNo() != null) ? String.valueOf(agvTask.getWrkNo()) : String.valueOf(agvTask.getId());
                             log.info("鍏ュ簱浠诲姟宸ヤ綔妗e凡鍏ュ簱鎴愬姛锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}", 
-                                agvTask.getId(), wrkMast.getWrkNo(), wrkMast.getBarcode());
+                                displayTaskId, wrkMast.getWrkNo(), wrkMast.getBarcode());
                         }
                     }
                 }
@@ -202,11 +354,131 @@
     }
 
     /**
+     * 妫�鏌ュ苟淇寮傚父鐘舵�佺殑AGV浠诲姟锛氭鍦ㄦ惉杩愪絾娌℃湁鍒嗛厤绔欑偣
+     * 杩欑鎯呭喌鍙兘鏄暟鎹紓甯告垨骞跺彂闂瀵艰嚧鐨�
+     */
+    @Scheduled(cron = "0/30 * * * * ? ")
+    private void checkAbnormalTasksWithoutSite() {
+        if (!schedulerProperties.isEnabled()) {
+            return;
+        }
+        try {
+            // 鏌ヨ鐘舵�佷负8锛堟鍦ㄦ惉杩愶級浣嗘病鏈夊垎閰嶇珯鐐圭殑浠诲姟
+            List<Task> abnormalTasks = taskService.selectList(
+                new EntityWrapper<Task>()
+                    .eq("task_type", "agv")
+                    .eq("wrk_sts", 8L)  // 姝e湪鎼繍
+                    .andNew("(is_deleted = 0)")
+                    .andNew()
+                    .isNull("sta_no")
+                    .or()
+                    .eq("sta_no", "")
+                    .or()
+                    .eq("sta_no", "0")
+            );
+            
+            if (abnormalTasks.isEmpty()) {
+                return;
+            }
+            
+            log.warn("妫�娴嬪埌{}涓紓甯哥姸鎬佺殑AGV浠诲姟锛氭鍦ㄦ惉杩愪絾娌℃湁鍒嗛厤绔欑偣锛屽紑濮嬩慨澶�", abnormalTasks.size());
+            
+            Date now = new Date();
+            int fixedCount = 0;
+            int completedCount = 0;
+            
+            for (Task task : abnormalTasks) {
+                String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
+                
+                // 妫�鏌ュ伐浣滄。鍜屽巻鍙叉。鐘舵��
+                WrkMast wrkMast = null;
+                WrkMastLog wrkMastLog = null;
+                
+                if (task.getWrkNo() != null) {
+                    wrkMast = wrkMastService.selectOne(
+                        new EntityWrapper<WrkMast>().eq("wrk_no", task.getWrkNo())
+                    );
+                    wrkMastLog = wrkMastLogService.selectOne(
+                        new EntityWrapper<WrkMastLog>().eq("wrk_no", task.getWrkNo())
+                    );
+                }
+                
+                // 濡傛灉宸ヤ綔妗e凡瀹屾垚鎴栧凡杞巻鍙叉。锛岀洿鎺ョ粨鏉熶换鍔�
+                boolean shouldComplete = false;
+                String reason = "";
+                
+                if (wrkMastLog != null) {
+                    shouldComplete = true;
+                    reason = "宸ヤ綔妗e凡杞巻鍙叉。";
+                } else if (wrkMast != null) {
+                    Long wrkSts = wrkMast.getWrkSts();
+                    Integer ioType = task.getIoType();
+                    
+                    if (wrkSts != null && ioType != null) {
+                        // 鍏ュ簱浠诲姟锛氱姸鎬�4鎴�5
+                        if ((ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) &&
+                            (wrkSts == 4L || wrkSts == 5L)) {
+                            shouldComplete = true;
+                            reason = String.format("宸ヤ綔妗e凡瀹屾垚锛堝叆搴擄級锛岀姸鎬侊細%d", wrkSts);
+                        }
+                        // 鍑哄簱浠诲姟锛氱姸鎬�14鎴�15
+                        else if ((ioType == 101 || ioType == 110 || ioType == 103 || ioType == 107) &&
+                                 (wrkSts == 14L || wrkSts == 15L)) {
+                            shouldComplete = true;
+                            reason = String.format("宸ヤ綔妗e凡瀹屾垚锛堝嚭搴擄級锛岀姸鎬侊細%d", wrkSts);
+                        }
+                    }
+                }
+                
+                if (shouldComplete) {
+                    // 宸ヤ綔妗e凡瀹屾垚锛岀洿鎺ョ粨鏉熶换鍔�
+                    task.setWrkSts(9L);
+                    task.setModiTime(now);
+                    if (taskService.updateById(task)) {
+                        try {
+                            agvHandler.moveTaskToHistory(Collections.singletonList(task));
+                            completedCount++;
+                            log.info("淇寮傚父浠诲姟锛歿}锛寋}锛屽凡缁撴潫浠诲姟骞惰浆绉诲埌鍘嗗彶琛紝taskId锛歿}", 
+                                reason, displayTaskId, displayTaskId);
+                        } catch (Exception e) {
+                            log.error("淇寮傚父浠诲姟锛氳浆绉讳换鍔″埌鍘嗗彶琛ㄥけ璐ワ紝taskId锛歿}", displayTaskId, e);
+                        }
+                    }
+                } else {
+                    // 宸ヤ綔妗f湭瀹屾垚锛屽皾璇曞垎閰嶇珯鐐规垨閲嶇疆鐘舵��
+                    // 鍏堝皾璇曞垎閰嶇珯鐐�
+                    String errorMsg = agvHandler.allocateSiteForTask(task);
+                    if (errorMsg == null && task.getStaNo() != null && !task.getStaNo().isEmpty() && !task.getStaNo().equals("0")) {
+                        // 鍒嗛厤绔欑偣鎴愬姛
+                        fixedCount++;
+                        log.info("淇寮傚父浠诲姟锛氬凡涓轰换鍔″垎閰嶇珯鐐癸紝taskId锛歿}锛岀珯鐐癸細{}", displayTaskId, task.getStaNo());
+                    } else {
+                        // 鏃犳硶鍒嗛厤绔欑偣锛岄噸缃姸鎬佷负7锛堝緟鍛煎彨AGV锛夛紝绛夊緟涓嬫鍒嗛厤
+                        task.setWrkSts(7L);
+                        task.setModiTime(now);
+                        if (taskService.updateById(task)) {
+                            fixedCount++;
+                            log.warn("淇寮傚父浠诲姟锛氭棤娉曞垎閰嶇珯鐐癸紝閲嶇疆鐘舵�佷负7锛堝緟鍛煎彨AGV锛夛紝taskId锛歿}锛屽師鍥狅細{}", 
+                                displayTaskId, errorMsg != null ? errorMsg : "鎵�鏈夌珯鐐归兘琚崰鐢�");
+                        }
+                    }
+                }
+            }
+            
+            if (fixedCount > 0 || completedCount > 0) {
+                log.info("淇寮傚父浠诲姟瀹屾垚锛氫慨澶嶄簡{}涓换鍔★紝缁撴潫浜唟}涓凡瀹屾垚宸ヤ綔妗g殑浠诲姟", fixedCount, completedCount);
+            }
+        } catch (Exception e) {
+            log.error("妫�鏌ュ苟淇寮傚父鐘舵�佺殑AGV浠诲姟寮傚父", e);
+        }
+    }
+
+    /**
      * 妫�鏌GV浠诲姟瀵瑰簲鐨勫伐浣滄。鏄惁宸插畬鎴愭垨宸茶浆鍘嗗彶妗e苟瀹岀粨
      * 澶勭悊琚烦杩囩殑AGV浠诲姟锛�
-     * 1. 濡傛灉宸ヤ綔妗e凡瀹屾垚锛坵rk_sts=4,5,14,15锛夋垨宸茶浆鍘嗗彶妗e苟瀹岀粨锛屽垯瀹岀粨AGV浠诲姟
-     * 2. 濡傛灉宸ヤ綔妗e拰鍘嗗彶妗i兘娌℃湁鏁版嵁锛屼絾鏄疉GV宸茬‘璁ゆ帴鏀跺懡浠ゅ悗瓒呰繃1灏忔椂澶勪簬鎼繍涓紙鐘舵��8锛夛紝涔熺粨鏉烝GV浠诲姟
-     *    娉ㄦ剰锛氬彧鏈堿GV纭鎺ユ敹鍛戒护鍚庯紙plcStrTime涓嶄负绌猴級鎵嶅紑濮嬭鏃讹紝濡傛灉AGV鎺ュ彈鍛戒护澶辫触锛屼細缁х画鍛煎彨AGV
+     * 1. 濡傛灉宸ヤ綔妗e凡瀹屾垚锛坵rk_sts=4,5,14,15锛夛紝鍒欏畬缁揂GV浠诲姟
+     * 2. 濡傛灉宸ヤ綔妗h繘鍏ュ巻鍙叉。锛岀珛鍗崇粨鏉烝GV浠诲姟
+     * 3. 濡傛灉鍏ュ簱鎴愬姛锛屼篃缁撴潫鎺夋惉杩愪换鍔★紙宸插湪checkInboundCompletedTasks涓疄鐜帮級
      */
     @Scheduled(cron = "0/10 * * * * ? ")
     private void checkCompletedTasksInHistory() {
@@ -219,6 +491,7 @@
                 new EntityWrapper<Task>()
                     .eq("task_type", "agv")
                     .eq("wrk_sts", 8L)  // 宸插懠鍙獳GV鐘舵��
+                    .andNew("(is_deleted = 0)")
             );
             
             if (agvTasks.isEmpty()) {
@@ -228,8 +501,6 @@
             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;
@@ -282,43 +553,10 @@
                     }
                 }
                 
-                // 濡傛灉宸ヤ綔妗d笉瀛樺湪鎴栨湭瀹屾垚锛屾鏌ュ巻鍙叉。鏄惁宸插畬缁�
+                // 1. 濡傛灉宸ヤ綔妗h繘鍏ュ巻鍙叉。锛岀珛鍗崇粨鏉烝GV浠诲姟锛堝彧瑕佸巻鍙叉。瀛樺湪灏辩粨鏉燂級
                 if (!isCompleted && 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);
-                        }
-                    }
-                }
-                
-                // 濡傛灉宸ヤ綔妗e拰鍘嗗彶妗i兘娌℃湁鏁版嵁锛屾鏌ユ槸鍚﹁秴杩�1灏忔椂锛堜粠AGV纭鎺ユ敹鍛戒护寮�濮嬭鏃讹級
-                if (!isCompleted && wrkMast == null && wrkMastLog == null) {
-                    // 鍙湁AGV纭鎺ユ敹鍛戒护鍚庯紙plcStrTime涓嶄负绌猴級鎵嶅紑濮嬭鏃�
-                    // 濡傛灉plcStrTime涓虹┖锛岃鏄嶢GV杩樻病鏈夌‘璁ゆ帴鏀跺懡浠わ紝浼氱户缁懠鍙紝涓嶇粨鏉熶换鍔�
-                    Date agvConfirmedTime = agvTask.getPlcStrTime();
-                    
-                    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杩樻病鏈夌‘璁ゆ帴鏀跺懡浠わ紝涓嶇粨鏉熶换鍔★紝缁х画绛夊緟鍛煎彨
+                    isCompleted = true;
+                    reason = String.format("宸ヤ綔妗e凡杞巻鍙叉。锛岀珛鍗崇粨鏉烝GV浠诲姟锛屽巻鍙叉。鐘舵�侊細%d", wrkMastLog.getWrkSts());
                 }
                 
                 // 濡傛灉宸插畬鎴愶紝鏇存柊AGV浠诲姟鐘舵�佸苟鏀堕泦鍒板垪琛�
@@ -328,8 +566,10 @@
                     if (taskService.updateById(agvTask)) {
                         completedTasks.add(agvTask);
                         completedCount++;
+                        // taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝濡傛灉宸ヤ綔鍙蜂负绌哄垯浣跨敤浠诲姟ID
+                        String displayTaskId = (agvTask.getWrkNo() != null) ? String.valueOf(agvTask.getWrkNo()) : String.valueOf(agvTask.getId());
                         log.info("{}锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}锛岀珯鐐癸細{}", 
-                            reason, agvTask.getId(), agvTask.getWrkNo(), agvTask.getBarcode(), agvTask.getStaNo());
+                            reason, displayTaskId, agvTask.getWrkNo(), agvTask.getBarcode(), agvTask.getStaNo());
                     }
                 }
             }
@@ -345,7 +585,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