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/WorkMastHandler.java |  355 ++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 276 insertions(+), 79 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 d1336b3..f8883ff 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -9,6 +9,9 @@
 import com.zy.asrs.service.impl.BasStationServiceImpl;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
+import com.zy.common.model.enums.WorkNoType;
+import com.zy.common.properties.AgvProperties;
+import com.zy.common.service.CommonService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +19,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -56,6 +60,18 @@
     private TaskDetlService taskDetlService;
     @Autowired
     private BasStationServiceImpl basStationService;
+
+    @Autowired
+    private LocCacheDetlService locCacheDetlService;
+    
+    @Autowired
+    private CommonService commonService;
+    
+    @Autowired
+    private AgvProperties agvProperties;
+    
+    @Autowired
+    private WrkMastLogService wrkMastLogService;
 
     public ReturnT<String> start(WrkMast wrkMast) {
         // 4.鍏ュ簱瀹屾垚
@@ -125,7 +141,8 @@
                             }
                         } else {
                             locDetl = new LocDetl();
-                            locDetl.sync(wrkDetl);
+                            BeanUtils.copyProperties(wrkDetl, locDetl);
+//                            locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
                             locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
@@ -196,7 +213,8 @@
                             }
                         } else {
                             locDetl = new LocDetl();
-                            locDetl.sync(wrkDetl);
+                            BeanUtils.copyProperties(wrkDetl, locDetl);
+//                            locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
                             locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
@@ -302,7 +320,8 @@
                             }
                         } else {
                             locDetl = new LocDetl();
-                            locDetl.sync(wrkDetl);
+                            BeanUtils.copyProperties(wrkDetl, locDetl);
+//                            locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
                             locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
@@ -584,6 +603,9 @@
             // 14.鍑哄簱瀹屾垚
         } else if (task.getWrkSts() == 14) {
             return agvDoOut(task);
+            // 15.鍑哄簱鏇存柊瀹屾垚 - 鐢熸垚绌烘墭/婊℃墭鍑哄簱浠诲姟
+        } else if (task.getWrkSts() == 15) {
+            return generateEmptyOrFullPalletOutTaskForCompleted(task);
         }
         return SUCCESS;
     }
@@ -595,6 +617,7 @@
      * @description: AGV鍑哄簱浠诲姟
      * @version 1.0
      */
+    @Transactional(rollbackFor = Exception.class)
     public ReturnT<String> agvDoOut(Task task) {
         if (task.getIoType().equals(101)) {
             Date now = new Date();
@@ -606,26 +629,6 @@
             if (wrkDetls101.isEmpty()) {
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 宸ヤ綔鏄庣粏妗d负绌�; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
-            }
-            for (TaskDetl wrkDetl : wrkDetls101) {
-                // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
-                OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
-                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
-                if (orderDetlPakout == null) {
-                    orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
-                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
-                }
-                try {
-                    if (!Cools.isEmpty(orderDetlPakout)) {
-                        if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
-                                orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
-                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
-                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                            return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
-                        }
-                    }
-                } catch (Exception ignore) {
-                }
             }
             // 鍒犻櫎宸ヤ綔妗f簮搴撲綅鐨勫簱瀛樻槑缁�
             if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", task.getSourceLocNo()))) {
@@ -645,78 +648,272 @@
             } else {
                 throw new CoolException("褰撳墠搴撲綅鐘舵��" + locMast.getLocSts() + ", 鏃犳硶鎵ц鍑哄簱鎿嶄綔锛侊紒");
             }
-
-            BasStation devNo = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo()));
-            if (Objects.isNull(devNo)) {
-                throw new CoolException("绔欑偣锛�" + task.getSourceStaNo() + ", 涓嶅瓨鍦紒锛�");
-            }
-            devNo.setLocSts(LocStsType.LOC_STS_TYPE_F.type);
-            devNo.setModiTime(new Date());
-            if (!basStationService.updateById(devNo)) {
-                throw new CoolException("绔欑偣淇℃伅淇敼澶辫触锛侊紒");
-            }
             task.setWrkSts(15L);
             if (!taskService.updateById(task)) {
                 throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
             }
-        } else {
+            // 娉ㄦ剰锛氱敓鎴愮┖鎵�/婊℃墭鍑哄簱浠诲姟鐨勯�昏緫宸茬Щ鑷崇姸鎬�15鐨勫鐞嗘柟娉曚腑
+        } else if(task.getIoType().equals(53) || task.getIoType().equals(54) || task.getIoType().equals(57)){
+            LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", task.getSourceLocNo()));
+            if (Objects.isNull(locCache)) {
+                throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒");
+            }
+            if (!locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type)) {
+                throw new CoolException("褰撳墠搴撲綅鐘舵�佷负锛�" + LocStsType.LOC_STS_TYPE_R.type + "." + LocStsType.LOC_STS_TYPE_R.desc + "锛屼笉鏄嚭搴撻绾︾姸鎬�");
+            }
 
+            locCache.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
+            locCache.setModiTime(new Date());
+            locCache.setBarcode(null);
+            locCache.setModiTime(new Date());
+            locCache.setIoTime(new Date());
+            if (!locCacheService.updateById(locCache)) {
+                throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒");
+            }
+
+            boolean deleted = locCacheDetlService.delete(new EntityWrapper<LocCacheDetl>().eq("loc_id", locCache.getId()));
+
+            if (!deleted){
+                throw new CoolException("搴撲綅鏄庣粏鍒犻櫎澶辫触锛�");
+            }
+
+            task.setWrkSts(15L);
+            task.setModiTime(new Date());
+            if (!taskService.updateById(task)) {
+                throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+            }
         }
         return SUCCESS;
     }
 
+    /**
+     * 鐘舵��15锛堝嚭搴撴洿鏂板畬鎴愶級鏃讹紝鐢熸垚绌烘墭鍑哄簱鎴栨弧鎵樺嚭搴撲换鍔★紝灏嗘墭鐩樻斁鍏ョ紦瀛樺簱浣�
+     * @param completedTask 宸插畬鎴愬嚭搴撴洿鏂扮殑浠诲姟锛堢姸鎬�15锛�
+     * @return 澶勭悊缁撴灉
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public ReturnT<String> generateEmptyOrFullPalletOutTaskForCompleted(Task completedTask) {
+        // 鍙鐞唅oType=101鐨勫叏鏉垮嚭搴撲换鍔�
+        if (!completedTask.getIoType().equals(101)) {
+            return SUCCESS;
+        }
+        
+        // 妫�鏌ユ槸鍚﹀凡缁忕敓鎴愯繃绌烘墭/婊℃墭鍑哄簱浠诲姟锛堥伩鍏嶉噸澶嶇敓鎴愶級
+        List<Task> existingTasks = taskService.selectList(new EntityWrapper<Task>()
+                .eq("barcode", completedTask.getBarcode())
+                .in("io_type", 110, 101) // 绌烘澘鍑哄簱鎴栧叏鏉垮嚭搴�
+                .eq("wrk_sts", 7) // 寰呭懠鍙獳GV鐘舵��
+        );
+        if (!existingTasks.isEmpty()) {
+            log.info("浠诲姟ID锛歿}鐨勬墭鐩樼爜锛歿}宸插瓨鍦ㄧ┖鎵�/婊℃墭鍑哄簱浠诲姟锛岃烦杩囩敓鎴�", completedTask.getId(), completedTask.getBarcode());
+            return SUCCESS;
+        }
+        
+        try {
+            generateEmptyOrFullPalletOutTask(completedTask, null);
+            return SUCCESS;
+        } catch (Exception e) {
+            log.error("鐘舵��15鏃剁敓鎴愮┖鎵�/婊℃墭鍑哄簱浠诲姟澶辫触锛屼换鍔D锛歿}锛岄敊璇細{}", completedTask.getId(), e.getMessage(), e);
+            return FAIL.setMsg("鐢熸垚绌烘墭/婊℃墭鍑哄簱浠诲姟澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鍑哄簱瀹屾垚鍚庯紝鐢熸垚绌烘墭鍑哄簱鎴栨弧鎵樺嚭搴撲换鍔★紝灏嗘墭鐩樻斁鍏ョ紦瀛樺簱浣�
+     * @param outTask 鍑哄簱浠诲姟
+     * @param sourceLocCache 婧愬簱浣嶏紙鍙负null锛�
+     */
+    private void generateEmptyOrFullPalletOutTask(Task outTask, LocCache sourceLocCache) {
+        // 鍒ゆ柇鎵樼洏绫诲瀷锛氱┖鎵樻垨婊℃墭
+        boolean isEmptyPallet = "Y".equals(outTask.getEmptyMk());
+        Integer ioType = isEmptyPallet ? 110 : 101; // 110=绌烘澘鍑哄簱锛�101=鍏ㄦ澘鍑哄簱锛堟弧鎵樺嚭搴擄級
+        
+        log.info("鍑哄簱浠诲姟瀹屾垚锛岀敓鎴恵}浠诲姟锛屼换鍔D锛歿}锛屾墭鐩樼爜锛歿}", isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId(), outTask.getBarcode());
+        
+        // 鍒嗛厤缂撳瓨搴撲綅锛坵hs_type=2锛�
+        LocCache cacheLoc = locCacheService.selectOne(new EntityWrapper<LocCache>()
+                .eq("whs_type", agvProperties.getWhsTypeMapping().getCacheArea()) // whs_type=2 缂撳瓨鍖�
+                .eq("frozen", 0)
+                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type) // O.闂茬疆
+                .ne("full_plt", isEmptyPallet ? "Y" : "N") // 绌烘墭涓嶉�夋弧鏉垮簱浣嶏紝婊℃墭涓嶉�夌┖鏉垮簱浣�
+                .orderAsc(Arrays.asList("row1", "bay1", "lev1"))
+                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+        
+        if (cacheLoc == null) {
+            log.warn("娌℃湁鍙敤鐨勭紦瀛樺簱浣嶏紝鏃犳硶鐢熸垚{}浠诲姟锛屼换鍔D锛歿}", isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId());
+            return;
+        }
+        
+        // 鑾峰彇鍑哄簱绔欑偣锛堝嚭搴撲换鍔$殑staNo鏄嚭搴撶珯鐐癸紝灏嗕綔涓虹┖鎵�/婊℃墭鍑哄簱浠诲姟鐨勬簮绔欑偣锛�
+        String outboundStaNo = outTask.getStaNo();
+        if (outboundStaNo == null || outboundStaNo.isEmpty()) {
+            log.warn("鍑哄簱浠诲姟娌℃湁鍑哄簱绔欑偣锛屾棤娉曠敓鎴恵}浠诲姟锛屼换鍔D锛歿}", isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId());
+            return;
+        }
+        
+        // 鏍规嵁缂撳瓨鍖洪厤缃�夋嫨绔欑偣鍜屾満鍣ㄤ汉缁勶紙瑗夸晶锛�
+        List<String> cacheStations = agvProperties.getWestStations();
+        String robotGroup = agvProperties.getRobotGroupWest();
+        
+        if (cacheStations.isEmpty()) {
+            log.warn("缂撳瓨鍖烘病鏈夐厤缃珯鐐癸紝鏃犳硶鐢熸垚{}浠诲姟锛屼换鍔D锛歿}", isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId());
+            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);
+        
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
+        
+        // 鍒涘缓绌烘墭鍑哄簱/婊℃墭鍑哄簱浠诲姟
+        Task cacheTask = new Task();
+        Date now = new Date();
+        cacheTask.setWrkNo(workNo)
+                .setIoTime(now)
+                .setWrkSts(7L) // 宸ヤ綔鐘舵�侊細7.寰呭懠鍙獳GV
+                .setIoType(ioType) // 110=绌烘澘鍑哄簱锛�101=鍏ㄦ澘鍑哄簱
+                .setTaskType("agv")
+                .setIoPri(10D)
+                .setStaNo(cacheStaNo) // 鐩爣绔欑偣锛堢紦瀛樺尯绔欑偣锛�
+                .setSourceStaNo(outboundStaNo) // 婧愮珯鐐癸紙鍑哄簱绔欑偣锛�
+                .setInvWh(robotGroup) // 鏈哄櫒浜虹粍锛堣タ渚э級
+                .setFullPlt(isEmptyPallet ? "N" : "Y") // 婊℃澘锛氱┖鎵�=N锛屾弧鎵�=Y
+                .setPicking("N")
+                .setExitMk("N")
+                .setSourceLocNo(null) // 鍑哄簱浠诲姟涓嶉渶瑕佹簮搴撲綅
+                .setLocNo(cacheLoc.getLocNo()) // 鐩爣搴撲綅锛堢紦瀛樺簱浣嶏級
+                .setEmptyMk(isEmptyPallet ? "Y" : "N") // 绌烘澘鏍囪
+                .setBarcode(outTask.getBarcode()) // 鎵樼洏鐮�
+                .setLinkMis("N")
+                .setAppeTime(now)
+                .setModiTime(now);
+        
+        if (!taskService.insert(cacheTask)) {
+            log.error("鐢熸垚{}浠诲姟澶辫触锛屼换鍔D锛歿}", isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", outTask.getId());
+            return;
+        }
+        
+        // 鏇存柊缂撳瓨搴撲綅鐘舵�侊細O.闂茬疆 鈫� S.鍏ュ簱棰勭害
+        cacheLoc.setLocSts(LocStsType.LOC_STS_TYPE_S.type);
+        cacheLoc.setBarcode(outTask.getBarcode());
+        cacheLoc.setModiTime(now);
+        if (!locCacheService.updateById(cacheLoc)) {
+            log.error("鏇存柊缂撳瓨搴撲綅鐘舵�佸け璐ワ紝搴撲綅锛歿}", cacheLoc.getLocNo());
+            // 鍥炴粴浠诲姟
+            taskService.deleteById(cacheTask.getId());
+            return;
+        }
+        
+        log.info("鎴愬姛鐢熸垚{}浠诲姟锛屼换鍔D锛歿}锛屽伐浣滃彿锛歿}锛屾簮绔欑偣锛歿}锛岀洰鏍囩珯鐐癸細{}锛岀紦瀛樺簱浣嶏細{}", 
+                isEmptyPallet ? "绌烘墭鍑哄簱" : "婊℃墭鍑哄簱", cacheTask.getId(), workNo, outboundStaNo, cacheStaNo, cacheLoc.getLocNo());
+    }
 
     @Transactional(rollbackFor = Exception.class)
     public ReturnT<String> agvDoIn(Task wrkMast) {
-        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
-        if (Objects.isNull(locCache)) {
-            throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒");
-        }
-        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 + "锛屼笉鏄嚭搴撻绾︾姸鎬�");
-        }
-        List<WaitPakin> apallet = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
-        if (Objects.isNull(apallet)) {
-            throw new CoolException("鏁版嵁閿欒锛氱粍鎵樻暟鎹笉瀛樺湪锛侊紒");
-        }
-        apallet.forEach(pakin -> {
-            LocDetl detl = new LocDetl();
-            BeanUtils.copyProperties(pakin, detl);
-            detl.setBarcode(pakin.getBarcode())
-                    .setAnfme(pakin.getAnfme())
-                    .setBrand(pakin.getBrand())
-                    .setAppeTime(new Date())
-                    .setSpecs(pakin.getSpecs())
-                    .setColor(pakin.getColor())
-                    .setLocNo(locCache.getLocNo())
-                    .setAreaId(locCache.getAreaId())
-                    .setAreaName(locCache.getAreaName())
-                    .setUnit(pakin.getUnit())
-                    .setBatch(pakin.getBatch());
-            if (!locDetlService.insert(detl)) {
-                throw new CoolException("搴撲綅鏄庣粏淇濆瓨澶辫触锛侊紒");
+        if (wrkMast.getIoType().equals(1)) {
+            LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
+            if (Objects.isNull(locCache)) {
+                throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒");
             }
-        });
+            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 + "锛屼笉鏄嚭搴撻绾︾姸鎬�");
+            }
+            List<TaskDetl> taskDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("task_id", wrkMast.getId()));
+            if (Objects.isNull(taskDetls)) {
+                throw new CoolException("鏁版嵁閿欒锛氱粍鎵樻暟鎹笉瀛樺湪锛侊紒");
+            }
+            taskDetls.forEach(pakin -> {
+                LocCacheDetl detl = new LocCacheDetl();
+                BeanUtils.copyProperties(pakin, detl);
+                detl.setBarcode(pakin.getBarcode())
+                        .setLocId(locCache.getId())
+                        .setAnfme(pakin.getAnfme())
+                        .setBrand(pakin.getBrand())
+                        .setAppeTime(new Date())
+                        .setSpecs(pakin.getSpecs())
+                        .setColor(pakin.getColor())
+                        .setLocNo(locCache.getLocNo())
+                        .setAreaId(locCache.getAreaId())
+                        .setAreaName(locCache.getAreaName())
+                        .setUnit(pakin.getUnit())
+                        .setBatch(pakin.getBatch());
+                if (!locCacheDetlService.insert(detl)) {
+                    throw new CoolException("搴撲綅鏄庣粏淇濆瓨澶辫触锛侊紒");
+                }
+            });
 
-        locCache.setLocSts(LocStsType.LOC_STS_TYPE_F.type);
-        locCache.setModiTime(new Date());
-        locCache.setBarcode(wrkMast.getBarcode());
-        locCache.setModiTime(new Date());
-        locCache.setIoTime(new Date());
-        if (!locCacheService.updateById(locCache)) {
-            throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒");
-        }
-        wrkMast.setWrkSts(5L);
-        wrkMast.setModiTime(new Date());
-        if (!taskService.updateById(wrkMast)) {
-            throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+            locCache.setLocSts(LocStsType.LOC_STS_TYPE_F.type);
+            locCache.setModiTime(new Date());
+            locCache.setBarcode(wrkMast.getBarcode());
+            locCache.setModiTime(new Date());
+            locCache.setIoTime(new Date());
+            if (!locCacheService.updateById(locCache)) {
+                throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒");
+            }
+            wrkMast.setWrkSts(5L);
+            wrkMast.setModiTime(new Date());
+            if (!taskService.updateById(wrkMast)) {
+                throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+            }
+        }else {
+            throw new CoolException("鏁版嵁閿欒锛歩oType涓嶅瓨鍦紒锛�");
         }
 
-        Set<Long> list = apallet.stream().map(WaitPakin::getOrderId).collect(Collectors.toSet());
-        List<OrderPakin> pakins = orderPakinService.selectList(new EntityWrapper<OrderPakin>().in("id", list));
-        if (Objects.isNull(pakins) || pakins.isEmpty()) {
-            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
-        }
 
         return SUCCESS;
     }

--
Gitblit v1.9.1