From 7692db6072ef569b5734d218cb11fa82e80171d1 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期四, 22 一月 2026 17:12:17 +0800
Subject: [PATCH] agv出库逻辑调整

---
 src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java |    2 
 src/main/java/com/zy/asrs/task/handler/AgvHandler.java      |  168 ++++++----------
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java |   21 +
 src/main/java/com/zy/asrs/task/AgvScheduler.java            |  409 ++++++++++++++++++++--------------------
 4 files changed, 285 insertions(+), 315 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
index cc85e5f..269f4eb 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -229,7 +229,7 @@
         if (!Cools.isEmpty(locNo)) {
             LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", locNo));
             if (Cools.isEmpty(locMast)) {
-                throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:" + locNo);
+                locMast.setLocSts("O");
             }
             if (!Cools.isEmpty(locSts)) {
                 locMast.setLocSts(locSts);
diff --git a/src/main/java/com/zy/asrs/task/AgvScheduler.java b/src/main/java/com/zy/asrs/task/AgvScheduler.java
index e04f9ef..aab2508 100644
--- a/src/main/java/com/zy/asrs/task/AgvScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AgvScheduler.java
@@ -24,6 +24,7 @@
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
  * @author pang.jiabao
@@ -60,17 +61,27 @@
      * 纭繚姣忔澶勭悊涓嶅悓鐨勪换鍔★紝閬垮厤涓�鐩村鐞嗗悓涓�涓换鍔�
      */
     private Long lastProcessedTaskId = null;
-    
+
     /**
      * 璁板綍涓婃鍒嗛厤绔欑偣鐨勪换鍔D锛岀敤浜庤疆璇㈠鐞�
      */
     private Long lastAllocatedTaskId = null;
 
     /**
-     * 鍒嗛厤绔欑偣瀹氭椂浠诲姟
+     * 鍒嗛厤绔欑偣浠诲姟鎵ц鏍囧織锛岀‘淇濆悓涓�鏃堕棿鍙湁涓�涓嚎绋嬪湪鎵ц鍒嗛厤绔欑偣寰幆
+     */
+    private final AtomicBoolean isAllocateSite = new AtomicBoolean(false);
+    /**
+     * 鍛煎彨AGV瀹氭椂浠诲姟鎵ц鏍囧織锛岀‘淇濆悓涓�鏃堕棿鍙湁涓�涓嚎绋嬪湪鎵ц鍒嗛厤绔欑偣寰幆
+     */
+    private final AtomicBoolean iscallAgv = new AtomicBoolean(false);
+
+    /**
+     * agv宸ヤ綔妗e垎閰嶇珯鐐瑰畾鏃朵换鍔�
      * 鏌ヨ鐘舵��7锛堝緟鍛煎彨AGV锛変絾娌℃湁鍒嗛厤绔欑偣鐨勪换鍔★紝涓哄叾鍒嗛厤鍙敤绔欑偣
      * 鍙礋璐e垎閰嶇珯鐐癸紝涓嶅懠鍙獳GV
      * 姣忔鍙鐞嗕竴涓换鍔★紝閬垮厤楂樺苟鍙戞墽琛�
+     * 浣跨敤AtomicBoolean纭繚鍗曠嚎绋嬫墽琛屽惊鐜�
      */
     @Scheduled(cron = "0/5 * * * * ? ")
     private void allocateSite() {
@@ -78,147 +89,141 @@
             log.debug("瀹氭椂浠诲姟allocateSite锛氳皟搴﹀櫒鏈惎鐢紝璺宠繃鎵ц");
             return;
         }
-        
+        if (!isAllocateSite.compareAndSet(false, true)) {
+            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.eq("is_deleted", 0); // 鎺掗櫎宸插垹闄ょ殑浠诲姟
         wrapper.andNew()
-            .isNull("sta_no")
-            .or()
-            .eq("sta_no", "")
-            .or()
-            .eq("sta_no", "0");
+                .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()) {
+        wrapper.last("OFFSET 0 ROWS FETCH NEXT 21 ROWS ONLY");
+        List<Task> taskList = taskService.selectList(wrapper);
+
+
+        if (taskList.isEmpty()) {
             log.debug("瀹氭椂浠诲姟allocateSite锛氭病鏈夊緟鍒嗛厤绔欑偣鐨勪换鍔★紙wrk_sts=7锛宼ask_type=agv锛宻ta_no涓虹┖锛�");
+            isAllocateSite.set(false);
             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);
+
+
+        try {
+            for (Task task : taskList) {
+                String errorMsg = agvHandler.allocateSiteForTask(task);
+                // 璋冪敤鍒嗛厤绔欑偣閫昏緫
+
+                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 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);
+                }
+
+                // 姣忎釜浠诲姟澶勭悊瀹屽悗绛夊緟1绉掞紝
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                    log.warn("瀹氭椂浠诲姟allocateSite锛氬欢杩熻涓柇", e);
+                    break; // 濡傛灉琚腑鏂紝閫�鍑哄惊鐜�
+                }
+            }
+        } finally {
+            // 纭繚鏍囧織浣嶈閲嶇疆锛屽嵆浣垮彂鐢熷紓甯镐篃鑳介噴鏀鹃攣
+            isAllocateSite.set(false);
         }
+
+
     }
 
     /**
      * 鍛煎彨AGV瀹氭椂浠诲姟
      * 鏌ヨ鐘舵��7锛堝緟鍛煎彨AGV锛変笖宸插垎閰嶇珯鐐圭殑浠诲姟锛屽懠鍙獳GV
      * 鍛煎彨鎴愬姛鍚庯紝鐘舵�佷粠7锛堝緟鍛煎彨AGV锛夊彉涓�8锛堟鍦ㄦ惉杩愶級
-     * 姣忔鍙鐞嗕竴涓换鍔★紝閬垮厤楂樺苟鍙戞墽琛�
-     * 浣跨敤杞鏈哄埗锛岀‘淇濅笉浼氫竴鐩村鐞嗗悓涓�涓换鍔�
      */
     @Scheduled(cron = "0/5 * * * * ? ")
     private void callAgv() {
         if (!schedulerProperties.isEnabled()) {
-            log.debug("瀹氭椂浠诲姟callAgv锛氳皟搴﹀櫒鏈惎鐢紝璺宠繃鎵ц");
+            log.debug("鍛煎彨AGV瀹氭椂浠诲姟锛氳皟搴﹀櫒鏈惎鐢紝璺宠繃鎵ц");
             return;
         }
-        
-        // 鏋勫缓鏌ヨ鏉′欢锛氭煡璇㈢姸鎬�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(
-            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涓嶄负绌猴級");
+        if (!iscallAgv.compareAndSet(false, true)) {
+            log.debug("鍛煎彨AGV瀹氭椂浠诲姟锛氫笂涓�娆″垎閰嶇珯鐐逛换鍔¤繕鍦ㄦ墽琛屼腑锛岃烦杩囨湰娆℃墽琛�");
             return;
         }
-        
-        // 璋冪敤澶勭悊閫昏緫锛氬懠鍙獳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);
+        try {
+            // 鏋勫缓鏌ヨ鏉′欢锛氭煡璇㈢姸鎬�7锛堝緟鍛煎彨AGV锛変笖宸插垎閰嶇珯鐐圭殑浠诲姟
+            EntityWrapper<Task> wrapper = new EntityWrapper<Task>();
+            wrapper.eq("wrk_sts", 7); // 寰呭懠鍙獳GV鐘舵��
+            wrapper.eq("task_type", "agv"); // AGV浠诲姟绫诲瀷
+            wrapper.eq("is_deleted", 0); // 鎺掗櫎宸插垹闄ょ殑浠诲姟
+            wrapper.isNotNull("sta_no"); // 蹇呴』鏈夌珯鐐瑰垎閰�
+            wrapper.ne("sta_no", ""); // 绔欑偣涓嶈兘涓虹┖瀛楃涓�
+            wrapper.ne("sta_no", "0"); // 绔欑偣涓嶈兘涓�0
+            wrapper.orderBy("id", true); // 鎸塱d鍗囧簭鎺掑簭
+            wrapper.last("OFFSET 0 ROWS FETCH NEXT 22 ROWS ONLY");
+            // 濡傛灉涓婃澶勭悊杩囦换鍔★紝浠庝笅涓�涓换鍔″紑濮嬫煡璇紙杞锛�
+//            if (lastProcessedTaskId != null) {
+//                wrapper.gt("id", lastProcessedTaskId);
+//            }
+
+            // 鏌ヨ寰呭懠鍙玜gv浠诲姟
+            List<Task> taskList = taskService.selectList(wrapper);
+
+
+            if (taskList.isEmpty()) {
+                log.debug("鍛煎彨AGV瀹氭椂浠诲姟锛氭病鏈夊緟鍛煎彨AGV鐨勪换鍔★紙wrk_sts=7锛宼ask_type=agv锛宻ta_no涓嶄负绌猴級");
+                iscallAgv.set(false);
+                return;
+            }
+            for (Task task : taskList) {
+                // 璋冪敤澶勭悊閫昏緫锛氬懠鍙獳GV锛屾垚鍔熷悗鐘舵�佷粠7鍙樹负8
+                String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
+                log.info("鍛煎彨AGV瀹氭椂浠诲姟锛氬紑濮嬪鐞嗕换鍔D锛歿}锛坵rk_no={}锛宨oType={}锛宻ta_no={}锛�",
+                        displayTaskId, task.getWrkNo(), task.getIoType(), task.getStaNo());
+                boolean processed = agvHandler.callAgv(Collections.singletonList(task));
+
+                // 鍙湁褰撲换鍔℃垚鍔熷鐞嗭紙鎴愬姛鍛煎彨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);
+                }
+                // 姣忎釜浠诲姟澶勭悊瀹屽悗绛夊緟1绉掞紝
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                    log.warn("鍛煎彨AGV瀹氭椂浠诲姟锛氬欢杩熻涓柇", e);
+                    break; // 濡傛灉琚腑鏂紝閫�鍑哄惊鐜�
+                }
+            }
+        } finally {
+            // 纭繚鏍囧織浣嶈閲嶇疆锛屽嵆浣垮彂鐢熷紓甯镐篃鑳介噴鏀鹃攣
+            iscallAgv.set(false);
         }
     }
 
@@ -233,22 +238,22 @@
 
         // 鑾峰彇鍛煎彨agv閰嶇疆
         List<Config> configs = configService.selectList(new EntityWrapper<Config>().in("code", "eastCallAgvControl", "westCallAgvControl").eq("status", 1));
-        if(configs.isEmpty()) {
+        if (configs.isEmpty()) {
             return;
         }
 
         // 鑾峰彇agv鍑哄簱鍙敤绔欑偣
         List<String> sites = new ArrayList<>();
-        for(Config config: configs) {
+        for (Config config : configs) {
             String value = config.getValue();
-            if(Cools.isEmpty(value)) {
+            if (Cools.isEmpty(value)) {
                 continue;
             }
             String[] split = value.split(";");
             sites.addAll(Arrays.asList(split));
         }
 
-        if(sites.isEmpty()) {
+        if (sites.isEmpty()) {
             return;
         }
 
@@ -263,8 +268,8 @@
         if (!schedulerProperties.isEnabled()) {
             return;
         }
-        List<Task> taskList = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 9).andNew("(is_deleted = 0)"));
-        if(taskList.isEmpty()) {
+        List<Task> taskList = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 9).eq("is_deleted", 0));
+        if (taskList.isEmpty()) {
             return;
         }
         agvHandler.moveTaskToHistory(taskList);
@@ -282,44 +287,44 @@
         try {
             // 鏌ヨ鍏ュ簱鎴愬姛鐨勫伐浣滄。锛堢姸鎬�4锛氬叆搴撳畬鎴愶紝鍏ュ簱绫诲瀷锛�1,10,53,57锛�
             List<WrkMast> completedWrkMasts = wrkMastService.selectList(
-                new EntityWrapper<WrkMast>()
-                    .eq("wrk_sts", 4L)  // 鍏ュ簱瀹屾垚
-                    .in("io_type", 1, 10, 53, 57)  // 鍏ュ簱绫诲瀷
-                    .isNotNull("wrk_no")
+                    new EntityWrapper<WrkMast>()
+                            .eq("wrk_sts", 4L)  // 鍏ュ簱瀹屾垚
+                            .in("io_type", 1, 10, 53, 57)  // 鍏ュ簱绫诲瀷
+                            .isNotNull("wrk_no")
             );
-            
+
             if (completedWrkMasts.isEmpty()) {
                 return;
             }
-            
+
             Date now = new Date();
             int completedCount = 0;
             List<Task> completedTasks = new ArrayList<>();
-            
+
             for (WrkMast wrkMast : completedWrkMasts) {
                 // 鏌ユ壘瀵瑰簲鐨凙GV浠诲姟锛堜紭鍏堥�氳繃wrk_no鏌ヨ锛�
                 Wrapper<Task> taskWrapper1 = new EntityWrapper<Task>()
-                    .eq("task_type", "agv")
-                    .eq("wrk_sts", 8L)  // 宸插懠鍙獳GV鐘舵��
-                    .eq("wrk_no", wrkMast.getWrkNo())
-                    .andNew("(is_deleted = 0)");
+                        .eq("task_type", "agv")
+                        .eq("wrk_sts", 8L)  // 宸插懠鍙獳GV鐘舵��
+                        .eq("wrk_no", wrkMast.getWrkNo())
+                        .eq("is_deleted", 0); // 鎺掗櫎宸插垹闄ょ殑浠诲姟
                 List<Task> agvTasks = taskService.selectList(taskWrapper1);
-                
+
                 // 濡傛灉閫氳繃wrk_no娌℃壘鍒帮紝涓旀湁鏉$爜锛屽垯閫氳繃鏉$爜鏌ヨ
                 if (agvTasks.isEmpty() && !Cools.isEmpty(wrkMast.getBarcode())) {
                     Wrapper<Task> taskWrapper2 = new EntityWrapper<Task>()
-                        .eq("task_type", "agv")
-                        .eq("wrk_sts", 8L)
-                        .eq("barcode", wrkMast.getBarcode())
-                        .andNew("(is_deleted = 0)");
+                            .eq("task_type", "agv")
+                            .eq("wrk_sts", 8L)
+                            .eq("barcode", wrkMast.getBarcode())
+                            .eq("is_deleted", 0); // 鎺掗櫎宸插垹闄ょ殑浠诲姟
                     agvTasks = taskService.selectList(taskWrapper2);
                 }
-                
+
                 for (Task agvTask : agvTasks) {
                     // 纭繚鏄叆搴撲换鍔�
-                    if (agvTask.getIoType() != null && 
-                        (agvTask.getIoType() == 1 || agvTask.getIoType() == 10 || 
-                         agvTask.getIoType() == 53 || agvTask.getIoType() == 57)) {
+                    if (agvTask.getIoType() != null &&
+                            (agvTask.getIoType() == 1 || agvTask.getIoType() == 10 ||
+                                    agvTask.getIoType() == 53 || agvTask.getIoType() == 57)) {
                         // 鏇存柊AGV浠诲姟鐘舵�佷负瀹屾垚
                         agvTask.setWrkSts(9L);
                         agvTask.setModiTime(now);
@@ -328,13 +333,13 @@
                             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锛歿}", 
-                                displayTaskId, wrkMast.getWrkNo(), wrkMast.getBarcode());
+                            log.info("鍏ュ簱浠诲姟宸ヤ綔妗e凡鍏ュ簱鎴愬姛锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}",
+                                    displayTaskId, wrkMast.getWrkNo(), wrkMast.getBarcode());
                         }
                     }
                 }
             }
-            
+
             // 绔嬪嵆灏嗗畬鎴愮殑AGV浠诲姟杞Щ鍒板巻鍙茶〃锛屼笉淇濈暀鍦═ask琛ㄤ腑
             if (!completedTasks.isEmpty()) {
                 try {
@@ -344,7 +349,7 @@
                     log.error("鍏ュ簱瀹屾垚锛岃浆绉籄GV浠诲姟鍒板巻鍙茶〃澶辫触", e);
                 }
             }
-            
+
             if (completedCount > 0) {
                 log.info("鏈妫�鏌ュ畬缁撲簡{}涓叆搴揂GV鍛煎彨鍗�", completedCount);
             }
@@ -365,71 +370,71 @@
         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")
+                    new EntityWrapper<Task>()
+                            .eq("task_type", "agv")
+                            .eq("wrk_sts", 8L)  // 姝e湪鎼繍
+                            .eq("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())
+                            new EntityWrapper<WrkMast>().eq("wrk_no", task.getWrkNo())
                     );
                     wrkMastLog = wrkMastLogService.selectOne(
-                        new EntityWrapper<WrkMastLog>().eq("wrk_no", task.getWrkNo())
+                            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)) {
+                                (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)) {
+                                (wrkSts == 14L || wrkSts == 15L)) {
                             shouldComplete = true;
                             reason = String.format("宸ヤ綔妗e凡瀹屾垚锛堝嚭搴擄級锛岀姸鎬侊細%d", wrkSts);
                         }
                     }
                 }
-                
+
                 if (shouldComplete) {
                     // 宸ヤ綔妗e凡瀹屾垚锛岀洿鎺ョ粨鏉熶换鍔�
                     task.setWrkSts(9L);
@@ -438,13 +443,13 @@
                         try {
                             agvHandler.moveTaskToHistory(Collections.singletonList(task));
                             completedCount++;
-                            log.info("淇寮傚父浠诲姟锛歿}锛寋}锛屽凡缁撴潫浠诲姟骞惰浆绉诲埌鍘嗗彶琛紝taskId锛歿}", 
-                                reason, displayTaskId, displayTaskId);
+                            log.info("淇寮傚父浠诲姟锛歿}锛寋}锛屽凡缁撴潫浠诲姟骞惰浆绉诲埌鍘嗗彶琛紝taskId锛歿}",
+                                    reason, displayTaskId, displayTaskId);
                         } catch (Exception e) {
                             log.error("淇寮傚父浠诲姟锛氳浆绉讳换鍔″埌鍘嗗彶琛ㄥけ璐ワ紝taskId锛歿}", displayTaskId, e);
                         }
                     }
-                } else {
+                }/* else {
                     // 宸ヤ綔妗f湭瀹屾垚锛屽皾璇曞垎閰嶇珯鐐规垨閲嶇疆鐘舵��
                     // 鍏堝皾璇曞垎閰嶇珯鐐�
                     String errorMsg = agvHandler.allocateSiteForTask(task);
@@ -458,13 +463,13 @@
                         task.setModiTime(now);
                         if (taskService.updateById(task)) {
                             fixedCount++;
-                            log.warn("淇寮傚父浠诲姟锛氭棤娉曞垎閰嶇珯鐐癸紝閲嶇疆鐘舵�佷负7锛堝緟鍛煎彨AGV锛夛紝taskId锛歿}锛屽師鍥狅細{}", 
-                                displayTaskId, errorMsg != null ? errorMsg : "鎵�鏈夌珯鐐归兘琚崰鐢�");
+                            log.warn("淇寮傚父浠诲姟锛氭棤娉曞垎閰嶇珯鐐癸紝閲嶇疆鐘舵�佷负7锛堝緟鍛煎彨AGV锛夛紝taskId锛歿}锛屽師鍥狅細{}",
+                                    displayTaskId, errorMsg != null ? errorMsg : "鎵�鏈夌珯鐐归兘琚崰鐢�");
                         }
                     }
-                }
+                }*/
             }
-            
+
             if (fixedCount > 0 || completedCount > 0) {
                 log.info("淇寮傚父浠诲姟瀹屾垚锛氫慨澶嶄簡{}涓换鍔★紝缁撴潫浜唟}涓凡瀹屾垚宸ヤ綔妗g殑浠诲姟", fixedCount, completedCount);
             }
@@ -488,77 +493,77 @@
         try {
             // 鏌ヨ鐘舵�佷负8锛堝凡鍛煎彨AGV锛夌殑AGV浠诲姟
             List<Task> agvTasks = taskService.selectList(
-                new EntityWrapper<Task>()
-                    .eq("task_type", "agv")
-                    .eq("wrk_sts", 8L)  // 宸插懠鍙獳GV鐘舵��
-                    .andNew("(is_deleted = 0)")
+                    new EntityWrapper<Task>()
+                            .eq("task_type", "agv")
+                            .eq("wrk_sts", 8L)  // 宸插懠鍙獳GV鐘舵��
+                            .eq("is_deleted", 0) // 鎺掗櫎宸插垹闄ょ殑浠诲姟
             );
-            
+
             if (agvTasks.isEmpty()) {
                 return;
             }
-            
+
             Date now = new Date();
             int completedCount = 0;
             List<Task> completedTasks = new ArrayList<>();
-            
+
             for (Task agvTask : agvTasks) {
                 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;
                 // 浼樺厛閫氳繃wrk_no鏌ヨ鍘嗗彶妗�
                 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);
@@ -568,12 +573,12 @@
                         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, displayTaskId, agvTask.getWrkNo(), agvTask.getBarcode(), agvTask.getStaNo());
+                        log.info("{}锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}锛岀珯鐐癸細{}",
+                                reason, displayTaskId, agvTask.getWrkNo(), agvTask.getBarcode(), agvTask.getStaNo());
                     }
                 }
             }
-            
+
             // 绔嬪嵆灏嗗畬鎴愮殑AGV浠诲姟杞Щ鍒板巻鍙茶〃锛屼笉淇濈暀鍦═ask琛ㄤ腑
             if (!completedTasks.isEmpty()) {
                 try {
@@ -583,7 +588,7 @@
                     log.error("鍏ュ簱/鍑哄簱瀹屾垚锛岃浆绉籄GV浠诲姟鍒板巻鍙茶〃澶辫触", e);
                 }
             }
-            
+
             if (completedCount > 0) {
                 log.info("鏈妫�鏌ュ畬缁撲簡{}涓狝GV鍛煎彨鍗曪紙宸ヤ綔妗e凡瀹屾垚鎴栧凡杞巻鍙叉。锛�", completedCount);
             }
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..f6eaf9e 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -189,7 +189,7 @@
                     .in("wrk_sts", 7L, 8L)
                     .in("io_type", ioTypes)
                     .ne("id", task.getId()) // 鎺掗櫎褰撳墠浠诲姟鏈韩
-                    .andNew("(is_deleted = 0)")
+                    .eq("is_deleted", 0) // 鎺掗櫎宸插垹闄ょ殑浠诲姟
             );
             
             int taskCount = allTasks != null ? allTasks.size() : 0;
@@ -267,7 +267,7 @@
                     .isNotNull("plc_str_time") // 鍙鏌ュ凡鏀跺埌AGV纭鐨勪换鍔★紙plc_str_time涓嶄负绌猴級
                     .in("io_type", ioTypes)
                     .ne("id", task.getId()) // 鎺掗櫎褰撳墠浠诲姟鏈韩
-                    .andNew("(is_deleted = 0)")
+                    .eq("is_deleted", 0) // 鎺掗櫎宸插垹闄ょ殑浠诲姟
             );
             
             // 妫�鏌ュ苟鑷姩缁撴潫宸插畬鎴愬伐浣滄。鐨凙GV浠诲姟
@@ -368,7 +368,7 @@
                     .build()
                     .doPost();
             // 鎵撳嵃杩斿洖鍙傛暟
-            // log.info("{}鍛煎彨agv鎼繍 - 杩斿洖鍙傛暟锛歿}", namespace, response);
+             log.info("{}鍛煎彨agv鎼繍锛岃姹傚弬鏁般�寋}銆� - 杩斿洖鍙傛暟锛歿}", namespace,body, response);
             
             // 妫�鏌ュ搷搴旀槸鍚︿负绌�
             if (response == null || response.trim().isEmpty()) {
@@ -575,7 +575,8 @@
      * @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;
         }
@@ -676,6 +677,8 @@
         return validTasks;
     }
 
+
+
     /**
      * 浠巑emo瀛楁涓幏鍙栭噸璇曟鏁�
      * memo鏍煎紡锛氬鏋滃寘鍚�"retryCount:鏁板瓧"锛屽垯杩斿洖璇ユ暟瀛楋紝鍚﹀垯杩斿洖0
@@ -745,7 +748,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,6 +796,7 @@
         return object.toJSONString();
     }
 
+
     /**
      * 涓轰换鍔″垎閰嶇珯鐐癸紙瀹氭椂浠诲姟涓皟鐢級
      * 娉ㄦ剰锛氬彧浼氬垎閰嶄竴涓珯鐐癸紝鎵惧埌绗竴涓鍚堟潯浠剁殑绔欑偣灏卞垎閰嶅苟閫�鍑�
@@ -800,16 +804,16 @@
      * @return 濡傛灉鏃犳硶鍒嗛厤绔欑偣锛岃繑鍥為敊璇俊鎭紱濡傛灉鍒嗛厤鎴愬姛锛岃繑鍥瀗ull骞舵洿鏂皌ask鐨剆taNo
      */
     @Transactional(rollbackFor = Exception.class)
-    public String allocateSiteForTask(Task task) {
+    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锛歿}鍒嗛厤绔欑偣锛屼换鍔$被鍨嬶細{}锛屾満鍣ㄤ汉缁勶細{}", 
+        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,22 +828,22 @@
             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锛歿}锛寋}绔欑偣缁勯厤缃殑绔欑偣锛歿}锛屽叡{}涓珯鐐�", 
+
+        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>()
@@ -857,102 +861,45 @@
                     .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锛歿}锛寋}绔欑偣缁勪腑鏈墈}涓珯鐐逛笉鍙敤锛坕n_enable!='Y'锛夛細{}锛屽皢鍦▄}涓彲鐢ㄧ珯鐐逛箣闂村钩鍧囧垎閰�",
                 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;
         }
-        
+
         // 鍏堟鏌ョ珯鐐归厤缃紙canining="Y"鍙叆锛夛紝鎺掗櫎dev_no=0鐨勬棤鏁堢珯鐐�
         List<BasDevp> devListWithConfig = basDevpMapper.selectList(new EntityWrapper<BasDevp>()
                 .in("dev_no", sites)
                 .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, sites);
+            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,7 +915,7 @@
                 taskTypeName = "鍑哄簱";
             }
         }
-        
+
         // 鍏堟煡璇gv宸ヤ綔妗d腑鏈鍒嗛厤绔欑偣鐨勭珯鐐�
         // 鏌ヨagv宸ヤ綔妗d腑鎵�鏈夊凡鍒嗛厤绔欑偣鐨勪换鍔★紙sta_no涓嶄负绌恒�佷笉涓虹┖瀛楃涓层�佷笉涓�0锛�
         final List<String> allocatedSiteNos;
@@ -992,15 +939,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 +965,20 @@
                 }
                 allocatedSitesInfo.append("绔欑偣").append(staNo).append("宸茶鍒嗛厤");
             }
-            log.warn("浠诲姟ID锛歿}锛屾墍鏈夊彲鐢ㄧ珯鐐归兘宸茶鍒嗛厤锛屾殏涓嶅垎閰嶇珯鐐癸紝绛夊緟涓嬫瀹氭椂浠诲姟鍐嶅皾璇曘�傚凡鍒嗛厤绔欑偣锛歿}", 
+            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 +989,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(",")), 
+            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锛歿}锛屼娇鐢ㄩ殢鏈哄垎閰嶇瓥鐣ワ紝鍊欓�夌珯鐐癸細{}", 
+            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锛歿}锛屼粠{}涓湭鍒嗛厤绔欑偣涓�夋嫨绔欑偣{}锛堝叆搴撲换鍔℃暟锛歿}锛夛紝鍊欓�夌珯鐐癸細{}", 
+
+        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,11 +1038,10 @@
             log.debug("浠诲姟ID锛歿}鍒嗛厤绔欑偣鏃讹紝鐘舵�佷笉鏄�7锛屽凡鏇存柊涓�7锛堝緟鍛煎彨AGV锛�", displayTaskId);
         }
         taskService.updateById(task);
-        
+
         log.info("浠诲姟ID锛歿}宸插垎閰嶇珯鐐癸細{}锛屾満鍣ㄤ汉缁勶細{}锛屼换鍔$被鍨嬶細{}", displayTaskId, endSite, robotGroup, taskTypeName);
         return null; // 鍒嗛厤鎴愬姛锛岃繑鍥瀗ull
     }
-
     /**
      * 鏍规嵁绔欑偣缂栧彿鍒ゆ柇鏈哄櫒浜虹粍
      * @param staNo 绔欑偣缂栧彿
@@ -1113,6 +1066,7 @@
             return agvProperties.getRobotGroupEast(); // 榛樿浣跨敤涓滀晶鏈哄櫒浜虹粍
         }
     }
+
 
     /**
      * 浠诲姟瀹屾垚杞巻鍙� 閲婃斁鏆傚瓨鐐�
@@ -1180,7 +1134,11 @@
 
         log.info("agv浠诲姟妗h浆鍘嗗彶鎴愬姛锛歿}", taskIds);
     }
+    @Transactional(rollbackFor = Exception.class)
+    public void moveTaskToHistory(Task agvTask) {
+        moveTaskToHistory(Collections.singletonList(agvTask));
 
+    }
     /**
      * 璐х墿鍒拌揪鍑哄簱鍙o紝鐢熸垚agv浠诲姟
      */
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index 0974a79..1726ec5 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -823,8 +823,9 @@
             return;
         }
         
-        // 妫�鏌ュ伐浣滄。鏄惁宸插畬鎴愭垨宸茶浆鍘嗗彶妗�
+        // 妫�鏌ュ伐浣滄。鏄惁宸插畬鎴愭垨宸茶浆鍘嗗彶妗o紝骞惰幏鍙栧伐浣滄。鐨勭洰鏍囩珯浣滀负AGV鐨勬簮搴撲綅
         boolean workCompleted = false;
+        String wrkMastStaNo = null; // 宸ヤ綔妗g殑鐩爣绔欙紝灏嗕綔涓篈GV鐨勬簮搴撲綅
         if (outTask.getWrkNo() != null) {
             // 妫�鏌ュ伐浣滄。鏄惁瀛樺湪涓斿凡瀹屾垚
             WrkMast wrkMast = wrkMastService.selectOne(
@@ -836,7 +837,9 @@
                 // 鍑哄簱浠诲姟瀹屾垚鐘舵�侊細14锛堝凡鍑哄簱鏈‘璁わ級鎴�15锛堝嚭搴撴洿鏂板畬鎴愶級
                 if (wrkSts != null && (wrkSts == 14L || wrkSts == 15L)) {
                     workCompleted = true;
-                    log.debug("宸ヤ綔妗}宸插畬鎴愶紝鐘舵�侊細{}", outTask.getWrkNo(), wrkSts);
+                    // 鑾峰彇宸ヤ綔妗g殑鐩爣绔欎綔涓篈GV鐨勬簮搴撲綅
+                    wrkMastStaNo = wrkMast.getStaNo();
+                    log.debug("宸ヤ綔妗}宸插畬鎴愶紝鐘舵�侊細{}锛岀洰鏍囩珯锛歿}", outTask.getWrkNo(), wrkSts, wrkMastStaNo);
                 }
             } else {
                 // 濡傛灉宸ヤ綔妗d笉瀛樺湪锛屾鏌ュ巻鍙叉。
@@ -848,7 +851,9 @@
                     // 鍑哄簱浠诲姟鍘嗗彶妗e畬鎴愮姸鎬侊細15锛堝嚭搴撴洿鏂板畬鎴愶級
                     if (logWrkSts == 15L) {
                         workCompleted = true;
-                        log.debug("宸ヤ綔妗}宸茶浆鍘嗗彶妗e苟瀹岀粨锛屽巻鍙叉。鐘舵�侊細{}", outTask.getWrkNo(), logWrkSts);
+                        // 浠庡巻鍙叉。鑾峰彇鐩爣绔欎綔涓篈GV鐨勬簮搴撲綅
+                        wrkMastStaNo = wrkMastLog.getStaNo() != null ? String.valueOf(wrkMastLog.getStaNo()) : null;
+                        log.debug("宸ヤ綔妗}宸茶浆鍘嗗彶妗e苟瀹岀粨锛屽巻鍙叉。鐘舵�侊細{}锛岀洰鏍囩珯锛歿}", outTask.getWrkNo(), logWrkSts, wrkMastStaNo);
                     }
                 }
             }
@@ -891,6 +896,8 @@
         // 鍒涘缓绌烘墭鍑哄簱/婊℃墭鍑哄簱浠诲姟
         Task cacheTask = new Task();
         Date now = new Date();
+        // 鍑哄簱宸ヤ綔妗e畬鎴愭椂锛屽伐浣滄。鐨勭洰鏍囩珯灏辨槸AGV鐨勬簮搴撲綅
+        // AGV鐨勭洰鏍囩珯鏄痑sr_loc_cache閲岄潰WA寮�澶寸殑搴撲綅
         cacheTask.setWrkNo(workNo)
                 .setIoTime(now)
                 .setWrkSts(7L) // 宸ヤ綔鐘舵�侊細7.寰呭懠鍙獳GV
@@ -903,8 +910,8 @@
                 .setFullPlt(isEmptyPallet ? "N" : "Y") // 婊℃澘锛氱┖鎵�=N锛屾弧鎵�=Y
                 .setPicking("N")
                 .setExitMk("N")
-                .setSourceLocNo(null) // 鍑哄簱浠诲姟涓嶉渶瑕佹簮搴撲綅
-                .setLocNo(cacheLoc.getLocNo()) // 鐩爣搴撲綅锛堢紦瀛樺簱浣嶏級
+                .setSourceLocNo(wrkMastStaNo) // AGV鐨勬簮搴撲綅锛氬嚭搴撳伐浣滄。鐨勭洰鏍囩珯
+                .setLocNo(cacheLoc.getLocNo()) // AGV鐨勭洰鏍囧簱浣嶏細asr_loc_cache閲岄潰WA寮�澶寸殑搴撲綅
                 .setEmptyMk(isEmptyPallet ? "Y" : "N") // 绌烘澘鏍囪
                 .setBarcode(outTask.getBarcode()) // 鎵樼洏鐮�
                 .setLinkMis("N")
@@ -927,8 +934,8 @@
             return;
         }
         
-        log.info("鎴愬姛鐢熸垚{}浠诲姟锛屼换鍔D锛歿}锛屽伐浣滃彿锛歿}锛屾簮绔欑偣锛歿}锛岀洰鏍囩珯鐐癸細{}锛岀紦瀛樺簱浣嶏細{}", 
-                isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", cacheTask.getId(), workNo, outboundStaNo, cacheStaNo, cacheLoc.getLocNo());
+        log.info("鎴愬姛鐢熸垚{}浠诲姟锛屼换鍔D锛歿}锛屽伐浣滃彿锛歿}锛屾簮绔欑偣锛歿}锛岀洰鏍囩珯鐐癸細{}锛屾簮搴撲綅锛堝伐浣滄。鐩爣绔欙級锛歿}锛岀洰鏍囧簱浣嶏紙WA缂撳瓨搴撲綅锛夛細{}", 
+                isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", cacheTask.getId(), workNo, outboundStaNo, cacheStaNo, wrkMastStaNo, cacheLoc.getLocNo());
     }
     
     /**

--
Gitblit v1.9.1