From d7020a8f1ec6f55167b4ad14941de0e28ce3d8c1 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期五, 16 一月 2026 14:19:59 +0800
Subject: [PATCH] agv出库逻辑

---
 src/main/java/com/zy/asrs/task/handler/AgvHandler.java      |   56 ++++++++++++++++++++++++++-
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java |   57 ++++++++++++++++++++++++++++
 2 files changed, 110 insertions(+), 3 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 3529881..458f54b 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -322,15 +322,65 @@
             return null;
         }
         
+        // 鎺掗櫎鏈夋鍦ㄦ惉杩愪换鍔$殑绔欑偣锛堢姸鎬�8锛氬凡鍛煎彨AGV锛屾鍦ㄦ惉杩愶級
+        List<BasDevp> availableDevList = new ArrayList<>();
+        Integer taskIoType = task.getIoType();
+        
+        if (taskIoType != null) {
+            // 鏍规嵁浠诲姟绫诲瀷纭畾瑕佹鏌ョ殑io_type鍒楄〃
+            List<Integer> checkIoTypes;
+            String taskTypeName;
+            if (taskIoType < 100) {
+                // 鍏ュ簱浠诲姟锛氬彧妫�鏌ュ叆搴撶被鍨嬶紙1, 10, 53, 57锛�
+                checkIoTypes = Arrays.asList(1, 10, 53, 57);
+                taskTypeName = "鍏ュ簱";
+            } else {
+                // 鍑哄簱浠诲姟锛氬彧妫�鏌ュ嚭搴撶被鍨嬶紙101, 110, 103, 107锛�
+                checkIoTypes = Arrays.asList(101, 110, 103, 107);
+                taskTypeName = "鍑哄簱";
+            }
+            
+            // 妫�鏌ユ瘡涓珯鐐规槸鍚︽湁姝e湪鎼繍鐨勫悓绫诲瀷浠诲姟
+            for (BasDevp dev : devList) {
+                String staNo = String.valueOf(dev.getDevNo());
+                // 鏌ヨ璇ョ珯鐐规槸鍚︽湁鐘舵��8锛堟鍦ㄦ惉杩愶級鐨勫悓绫诲瀷浠诲姟
+                List<Task> transportingTasks = taskService.selectList(
+                    new EntityWrapper<Task>()
+                        .eq("sta_no", staNo)
+                        .eq("task_type", "agv")
+                        .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愮姸鎬佺殑浠诲姟
+                        .in("io_type", checkIoTypes)
+                );
+                
+                if (transportingTasks.isEmpty()) {
+                    // 璇ョ珯鐐规病鏈夋鍦ㄦ惉杩愮殑浠诲姟锛屽彲浠ュ垎閰�
+                    availableDevList.add(dev);
+                } else {
+                    log.debug("绔欑偣{}鏈墈}涓鍦ㄦ惉杩愮殑{}AGV浠诲姟锛岃烦杩囧垎閰�", 
+                        staNo, transportingTasks.size(), taskTypeName);
+                }
+            }
+        } else {
+            // 濡傛灉ioType涓虹┖锛屼笉杩涜杩囨护锛堜繚鎸佸師鏈夐�昏緫锛�
+            availableDevList = devList;
+        }
+        
+        // 濡傛灉鎵�鏈夌珯鐐归兘鍦ㄦ惉杩愶紝鍒欎笉鍒嗛厤绔欑偣
+        if (availableDevList.isEmpty()) {
+            log.warn("浠诲姟ID锛歿}鐨勬墍鏈夊�欓�夌珯鐐归兘鏈夋鍦ㄦ惉杩愮殑{}浠诲姟锛屾殏涓嶅垎閰嶇珯鐐�", 
+                task.getId(), taskIoType != null && taskIoType < 100 ? "鍏ュ簱" : "鍑哄簱");
+            return null;
+        }
+        
         // 鍏ュ簱浠诲姟鏁版帓搴�
-        devList.sort(Comparator.comparing(BasDevp::getInQty));
+        availableDevList.sort(Comparator.comparing(BasDevp::getInQty));
         
         // 閫夋嫨绔欑偣
         BasDevp basDevp;
-        int minInQty = devList.get(0).getInQty();
+        int minInQty = availableDevList.get(0).getInQty();
         
         // 绛涢�夊嚭浠诲姟鏁版渶灏戠殑绔欑偣鍒楄〃
-        List<BasDevp> minTaskSites = devList.stream()
+        List<BasDevp> minTaskSites = availableDevList.stream()
                 .filter(dev -> dev.getInQty() == minInQty)
                 .collect(Collectors.toList());
         
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 bd754ab..f8883ff 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -69,6 +69,9 @@
     
     @Autowired
     private AgvProperties agvProperties;
+    
+    @Autowired
+    private WrkMastLogService wrkMastLogService;
 
     public ReturnT<String> start(WrkMast wrkMast) {
         // 4.鍏ュ簱瀹屾垚
@@ -757,6 +760,60 @@
             return;
         }
         
+        // 妫�鏌ュ伐浣滄。鏄惁宸插畬鎴愭垨宸茶浆鍘嗗彶妗�
+        boolean workCompleted = false;
+        if (outTask.getWrkNo() != null) {
+            // 妫�鏌ュ伐浣滄。鏄惁瀛樺湪涓斿凡瀹屾垚
+            WrkMast wrkMast = wrkMastService.selectOne(
+                new EntityWrapper<WrkMast>().eq("wrk_no", outTask.getWrkNo())
+            );
+            
+            if (wrkMast != null) {
+                Long wrkSts = wrkMast.getWrkSts();
+                // 鍑哄簱浠诲姟瀹屾垚鐘舵�侊細14锛堝凡鍑哄簱鏈‘璁わ級鎴�15锛堝嚭搴撴洿鏂板畬鎴愶級
+                if (wrkSts != null && (wrkSts == 14L || wrkSts == 15L)) {
+                    workCompleted = true;
+                    log.debug("宸ヤ綔妗}宸插畬鎴愶紝鐘舵�侊細{}", outTask.getWrkNo(), wrkSts);
+                }
+            } else {
+                // 濡傛灉宸ヤ綔妗d笉瀛樺湪锛屾鏌ュ巻鍙叉。
+                WrkMastLog wrkMastLog = wrkMastLogService.selectOne(
+                    new EntityWrapper<WrkMastLog>().eq("wrk_no", outTask.getWrkNo())
+                );
+                if (wrkMastLog != null) {
+                    long logWrkSts = wrkMastLog.getWrkSts();
+                    // 鍑哄簱浠诲姟鍘嗗彶妗e畬鎴愮姸鎬侊細15锛堝嚭搴撴洿鏂板畬鎴愶級
+                    if (logWrkSts == 15L) {
+                        workCompleted = true;
+                        log.debug("宸ヤ綔妗}宸茶浆鍘嗗彶妗e苟瀹岀粨锛屽巻鍙叉。鐘舵�侊細{}", outTask.getWrkNo(), logWrkSts);
+                    }
+                }
+            }
+        }
+        
+        // 妫�鏌ユ槸鍚︽湁浠庤鍑哄簱绔欑偣鍒扮紦瀛樺尯鐨勬鍦ㄦ惉杩愪换鍔★紙鐘舵��8锛氬凡鍛煎彨AGV锛屾鍦ㄦ惉杩愶級
+        // 鍑哄簱鍒扮紦瀛樺尯鐨勪换鍔$被鍨嬶細101锛堝叏鏉垮嚭搴擄級鎴�110锛堢┖鏉垮嚭搴擄級
+        List<Task> transportingTasks = taskService.selectList(
+            new EntityWrapper<Task>()
+                .eq("source_sta_no", outboundStaNo) // 婧愮珯鐐规槸鍑哄簱绔欑偣
+                .in("sta_no", cacheStations) // 鐩爣绔欑偣鏄紦瀛樺尯绔欑偣
+                .eq("task_type", "agv")
+                .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愮姸鎬佺殑浠诲姟
+                .in("io_type", 101, 110) // 鍑哄簱鍒扮紦瀛樺尯鐨勪换鍔$被鍨�
+        );
+        
+        // 濡傛灉鏈夋鍦ㄦ惉杩愮殑浠诲姟锛屼笖宸ヤ綔妗f湭瀹屾垚锛屽垯涓嶅垎閰嶇紦瀛樺簱浣�
+        if (!transportingTasks.isEmpty() && !workCompleted) {
+            log.info("鍑哄簱绔欑偣{}鍒扮紦瀛樺尯鏈墈}涓鍦ㄦ惉杩愮殑AGV浠诲姟锛屼笖宸ヤ綔妗f湭瀹屾垚锛屾殏涓嶅垎閰嶇紦瀛樺簱浣嶏紝绛夊緟鎼繍瀹屾垚銆傚嚭搴撲换鍔D锛歿}", 
+                outboundStaNo, transportingTasks.size(), outTask.getId());
+            return; // 鏈夋鍦ㄦ惉杩愮殑浠诲姟涓斿伐浣滄。鏈畬鎴愶紝涓嶅垎閰嶇紦瀛樺簱浣嶏紝绛夊緟涓嬫妫�鏌�
+        }
+        
+        if (!transportingTasks.isEmpty() && workCompleted) {
+            log.info("鍑哄簱绔欑偣{}鍒扮紦瀛樺尯鏈墈}涓鍦ㄦ惉杩愮殑AGV浠诲姟锛屼絾宸ヤ綔妗e凡瀹屾垚鎴栧凡杞巻鍙叉。锛屽厑璁稿垎閰嶇紦瀛樺簱浣嶃�傚嚭搴撲换鍔D锛歿}", 
+                outboundStaNo, transportingTasks.size(), outTask.getId());
+        }
+        
         // 閫夋嫨缂撳瓨鍖虹洰鏍囩珯鐐癸紙浣跨敤绗竴涓彲鐢ㄧ珯鐐癸紝鎴栧彲浠ヤ紭鍖栦负閫夋嫨浠诲姟鏈�灏戠殑绔欑偣锛�
         String cacheStaNo = cacheStations.get(0);
         

--
Gitblit v1.9.1