From cea1758e1f540e3f5f807951f128b7385b32afe6 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期六, 24 一月 2026 17:03:04 +0800
Subject: [PATCH] agv增加主动查询状态

---
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java |   92 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 83 insertions(+), 9 deletions(-)

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 399614d..1726ec5 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -629,9 +629,40 @@
     public ReturnT<String> agvDoOut(Task task) {
         if (task.getIoType().equals(101)) {
             Date now = new Date();
+            
+            // 妫�鏌ourceLocNo鏄惁涓虹┖
+            if (task.getSourceLocNo() == null || task.getSourceLocNo().isEmpty()) {
+//                log.warn("浠诲姟ID锛歿}鐨剆ourceLocNo涓虹┖锛岃烦杩囧簱浣嶆搷浣滐紙鍙兘鏄粠绔欑偣鍏ュ簱鐨勪换鍔★級", task.getId());
+                task.setWrkSts(15L);
+                if (!taskService.updateById(task)) {
+                    throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
+                return SUCCESS;
+            }
+            
+            // 鏌ヨ搴撲綅淇℃伅
             LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", task.getSourceLocNo()));
             if (Objects.isNull(locMast)) {
-                throw new RuntimeException("鏁版嵁閿欒锛氬簱浣嶄俊鎭笉鑳戒负绌猴紒锛�");
+                // 濡傛灉鏌ヨ涓嶅埌搴撲綅锛屽彲鑳芥槸sourceLocNo鏄珯鐐瑰彿鑰屼笉鏄簱浣嶅彿
+                // 妫�鏌asDevp琛ㄤ腑鏄惁瀛樺湪璇ョ珯鐐�
+                try {
+                    Integer siteNo = Integer.parseInt(task.getSourceLocNo());
+                    List<BasDevp> basDevpList = basDevpMapper.selectList(new EntityWrapper<BasDevp>().eq("dev_no", siteNo));
+                    if (basDevpList != null && !basDevpList.isEmpty()) {
+                        // sourceLocNo鏄珯鐐瑰彿锛岃繖鏄粠绔欑偣鍏ュ簱鐨勪换鍔★紝涓嶉渶瑕佸鐞嗗簱浣�
+//                        log.info("浠诲姟ID锛歿}鐨剆ourceLocNo鏄珯鐐瑰彿锛歿}锛岃烦杩囧簱浣嶆搷浣滐紙浠庣珯鐐瑰叆搴撲换鍔★級", task.getId(), task.getSourceLocNo());
+                        task.setWrkSts(15L);
+                        if (!taskService.updateById(task)) {
+                            throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                        return SUCCESS;
+                    }
+                } catch (NumberFormatException e) {
+                    // sourceLocNo涓嶆槸鏁板瓧锛屽彲鑳芥槸搴撲綅鍙锋牸寮忛敊璇�
+                    log.warn("浠诲姟ID锛歿}鐨剆ourceLocNo锛歿}涓嶆槸鏈夋晥鐨勬暟瀛楁牸寮�", task.getId(), task.getSourceLocNo());
+                }
+                // 鏃笉鏄簱浣嶄篃涓嶆槸绔欑偣锛屾姏鍑哄紓甯�
+                throw new RuntimeException("鏁版嵁閿欒锛氬簱浣嶄俊鎭笉鑳戒负绌猴紒锛佷换鍔D锛�" + task.getId() + "锛宻ourceLocNo锛�" + task.getSourceLocNo());
             }
             List<TaskDetl> wrkDetls101 = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo()));
             if (wrkDetls101.isEmpty()) {
@@ -711,6 +742,7 @@
                 .eq("barcode", completedTask.getBarcode())
                 .in("io_type", 110, 101) // 绌烘澘鍑哄簱鎴栧叏鏉垮嚭搴�
                 .eq("wrk_sts", 7) // 寰呭懠鍙獳GV鐘舵��
+                .andNew("(is_deleted = 0)")
         );
         if (!existingTasks.isEmpty()) {
             log.info("浠诲姟ID锛歿}鐨勬墭鐩樼爜锛歿}宸插瓨鍦ㄧ┖鎵�/婊℃墭鍑哄簱浠诲姟锛岃烦杩囩敓鎴�", completedTask.getId(), completedTask.getBarcode());
@@ -791,8 +823,9 @@
             return;
         }
         
-        // 妫�鏌ュ伐浣滄。鏄惁宸插畬鎴愭垨宸茶浆鍘嗗彶妗�
+        // 妫�鏌ュ伐浣滄。鏄惁宸插畬鎴愭垨宸茶浆鍘嗗彶妗o紝骞惰幏鍙栧伐浣滄。鐨勭洰鏍囩珯浣滀负AGV鐨勬簮搴撲綅
         boolean workCompleted = false;
+        String wrkMastStaNo = null; // 宸ヤ綔妗g殑鐩爣绔欙紝灏嗕綔涓篈GV鐨勬簮搴撲綅
         if (outTask.getWrkNo() != null) {
             // 妫�鏌ュ伐浣滄。鏄惁瀛樺湪涓斿凡瀹屾垚
             WrkMast wrkMast = wrkMastService.selectOne(
@@ -804,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笉瀛樺湪锛屾鏌ュ巻鍙叉。
@@ -816,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);
                     }
                 }
             }
@@ -831,6 +868,7 @@
                 .eq("task_type", "agv")
                 .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愮姸鎬佺殑浠诲姟
                 .in("io_type", 101, 110) // 鍑哄簱鍒扮紦瀛樺尯鐨勪换鍔$被鍨�
+                .andNew("(is_deleted = 0)")
         );
         
         // 濡傛灉鏈夋鍦ㄦ惉杩愮殑浠诲姟锛屼笖宸ヤ綔妗f湭瀹屾垚锛屽垯涓嶅垎閰嶇紦瀛樺簱浣�
@@ -858,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
@@ -870,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")
@@ -894,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());
     }
     
     /**
@@ -1145,6 +1185,7 @@
                     .eq("task_type", "agv")
                     .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愮姸鎬佺殑浠诲姟
                     .in("io_type", checkIoTypes)
+                    .andNew("(is_deleted = 0)")
             );
             
             if (!transportingTasks.isEmpty()) {
@@ -1182,9 +1223,42 @@
         if (ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) {
             // ioType == 1 闇�瑕佸鐞嗙粍鎵樻暟鎹�
             if (ioType == 1) {
+                // 妫�鏌ocNo鏄惁涓虹┖
+                if (wrkMast.getLocNo() == null || wrkMast.getLocNo().isEmpty()) {
+                    log.warn("浠诲姟ID锛歿}鐨刲ocNo涓虹┖锛岃烦杩囧簱浣嶆搷浣滐紙鍙兘鏄粠绔欑偣鍏ュ簱鐨勪换鍔★級", wrkMast.getId());
+                    // 鏇存柊浠诲姟鐘舵�佷负5锛堝簱瀛樻洿鏂板畬鎴愶級
+                    wrkMast.setWrkSts(5L);
+                    wrkMast.setModiTime(new Date());
+                    if (!taskService.updateById(wrkMast)) {
+                        throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                    }
+                    return SUCCESS;
+                }
+                
                 LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
                 if (Objects.isNull(locCache)) {
-                    throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒");
+                    // 濡傛灉鏌ヨ涓嶅埌搴撲綅锛屽彲鑳芥槸locNo鏄珯鐐瑰彿鑰屼笉鏄簱浣嶅彿
+                    // 妫�鏌asDevp琛ㄤ腑鏄惁瀛樺湪璇ョ珯鐐�
+                    try {
+                        Integer siteNo = Integer.parseInt(wrkMast.getLocNo());
+                        List<BasDevp> basDevpList = basDevpMapper.selectList(new EntityWrapper<BasDevp>().eq("dev_no", siteNo));
+                        if (basDevpList != null && !basDevpList.isEmpty()) {
+                            // locNo鏄珯鐐瑰彿锛岃繖鏄粠绔欑偣鍏ュ簱鐨勪换鍔★紝涓嶉渶瑕佸鐞嗗簱浣嶆槑缁�
+                            log.info("浠诲姟ID锛歿}鐨刲ocNo鏄珯鐐瑰彿锛歿}锛岃烦杩囧簱浣嶆搷浣滐紙浠庣珯鐐瑰叆搴撲换鍔★級", wrkMast.getId(), wrkMast.getLocNo());
+                            // 鏇存柊浠诲姟鐘舵�佷负5锛堝簱瀛樻洿鏂板畬鎴愶級
+                            wrkMast.setWrkSts(5L);
+                            wrkMast.setModiTime(new Date());
+                            if (!taskService.updateById(wrkMast)) {
+                                throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                            }
+                            return SUCCESS;
+                        }
+                    } catch (NumberFormatException e) {
+                        // locNo涓嶆槸鏁板瓧锛屽彲鑳芥槸搴撲綅鍙锋牸寮忛敊璇�
+                        log.warn("浠诲姟ID锛歿}鐨刲ocNo锛歿}涓嶆槸鏈夋晥鐨勬暟瀛楁牸寮�", wrkMast.getId(), wrkMast.getLocNo());
+                    }
+                    // 鏃笉鏄簱浣嶄篃涓嶆槸绔欑偣锛屾姏鍑哄紓甯�
+                    throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒浠诲姟ID锛�" + wrkMast.getId() + "锛宭ocNo锛�" + wrkMast.getLocNo());
                 }
                 if (!locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_S.type)) {
                     throw new CoolException("褰撳墠搴撲綅鐘舵�佷负锛�" + LocStsType.LOC_STS_TYPE_S.type + "." + LocStsType.LOC_STS_TYPE_S.desc + "锛屼笉鏄嚭搴撻绾︾姸鎬�");

--
Gitblit v1.9.1