From 28eb4a986facf602abe0bf4b92ca430cf713395d Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 10 二月 2026 16:29:26 +0800
Subject: [PATCH] 入库回复库位

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java |  119 ++++++++++++++++++++++++++++++++---------------------------
 1 files changed, 65 insertions(+), 54 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
index f71d431..29bbfa0 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -47,6 +47,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -124,75 +125,79 @@
         // 楠岃瘉璁惧绔欑偣
         DeviceSite deviceSite = validateDeviceSite(param);
 
-        // 鎻愬墠瀹氫箟waitPakin锛岄伩鍏嶄綔鐢ㄥ煙闂
+        // 鎻愬墠瀹氫箟 waitPakin / waitPakinItems锛屼緵鍚庣画鍏朵粬鍏ュ簱閫昏緫浣跨敤
         WaitPakin waitPakin = null;
+        List<WaitPakinItem> waitPakinItems = Collections.emptyList();
 
-        // 鍏堥獙璇佺粍鎷栫姸鎬侊紝鑾峰彇缁勬墭鏄庣粏淇℃伅锛堢敤浜庢壒鍙峰尮閰嶅拰鍗曞彿妫�鏌ワ級
-        waitPakin = validateWaitPakin(param.getBarcode());
-        List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(
-                new LambdaQueryWrapper<WaitPakinItem>()
-                        .eq(WaitPakinItem::getPakinId, waitPakin.getId()));
-
-        // 鍏堟鏌ユ槸鍚︽湁鎷f枡鍏ュ簱浠诲姟锛堥渶瑕佸悓鏃跺尮閰嶇鍙峰拰鎵瑰彿锛�
+        // 1. 鍏堟煡璇换鍔$鐞嗕腑鐨勬嫞鏂欏叆搴撲换鍔°�佺洏鐐瑰叆搴撲换鍔★紙浠呮寜绠卞彿+绫诲瀷+鐘舵�侊紝涓嶄緷璧栫粍鎵橈級
         Task pickInTask = null;
-        // 妫�鏌ユ槸鍚︽湁鐩樼偣鍏ュ簱浠诲姟锛堥渶瑕佸悓鏃跺尮閰嶇鍙峰拰鎵瑰彿锛�
         Task checkInTask = null;
-
-        if (!waitPakinItems.isEmpty()) {
-            // 鑾峰彇缁勬墭鏄庣粏涓殑鎵瑰彿鍒楄〃锛堝幓閲嶏級
-            List<String> batchList = waitPakinItems.stream()
+        // 鍙�夛細鑻ユ湁缁勬墭鍒欏彇鎵瑰彿锛岀敤浜庡浠诲姟鏃朵紭鍏堟寜鎵瑰彿鍖归厤
+        WaitPakin waitPakinForBatch = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+                .eq(WaitPakin::getBarcode, param.getBarcode())
+                .in(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val));
+        List<String> batchList = Collections.emptyList();
+        if (waitPakinForBatch != null) {
+            List<WaitPakinItem> itemsForBatch = waitPakinItemService.list(
+                    new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakinForBatch.getId()));
+            batchList = itemsForBatch.stream()
                     .map(WaitPakinItem::getBatch)
                     .filter(Objects::nonNull)
                     .filter(batch -> !batch.trim().isEmpty())
                     .distinct()
                     .collect(Collectors.toList());
-
             if (!batchList.isEmpty()) {
-                log.info("妫�鏌ョ粍鎵樻槑缁嗘壒鍙� - 鎵瑰彿鍒楄〃锛歿}", batchList);
+                log.info("妫�鏌ョ粍鎵樻槑缁嗘壒鍙凤紙鐢ㄤ簬鍖归厤鎷f枡/鐩樼偣鍏ュ簱浠诲姟锛� - 鎵瑰彿鍒楄〃锛歿}", batchList);
+            }
+        }
 
-                // 鏌ヨ鎷f枡鍏ュ簱浠诲姟锛氱鍙峰尮閰嶄笖鐘舵�佷负1銆�2鎴�199锛圧CS鐢宠鍏ュ簱鏃讹紝鐘舵��199闇�瑕佸彉鎴�2锛�
-                List<Task> pickInTasks = taskService.list(new LambdaQueryWrapper<Task>()
-                        .eq(Task::getBarcode, param.getBarcode())
-                        .eq(Task::getTaskType, TaskType.TASK_TYPE_PICK_IN.type)
-                        .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WAVE_SEED.id)
-                        .orderByDesc(Task::getCreateTime));
+        // 鏌ヨ浠诲姟绠$悊锛氭嫞鏂欏叆搴撲换鍔★紙绠卞彿+绫诲瀷53+鐘舵��1/2/199锛�
+        List<Task> pickInTasks = taskService.list(new LambdaQueryWrapper<Task>()
+                .eq(Task::getBarcode, param.getBarcode())
+                .eq(Task::getTaskType, TaskType.TASK_TYPE_PICK_IN.type)
+                .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WCS_EXECUTE_IN.id, TaskStsType.WAVE_SEED.id)
+                .orderByDesc(Task::getCreateTime));
+        for (Task task : pickInTasks) {
+            if (batchList.isEmpty()) {
+                pickInTask = task;
+                log.info("鎵惧埌鍖归厤鐨勬嫞鏂欏叆搴撲换鍔★紙鎸夌鍙凤級 - 浠诲姟缂栫爜锛歿}锛岀鍙凤細{}", task.getTaskCode(), param.getBarcode());
+                break;
+            }
+            List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
+                    .eq(TaskItem::getTaskId, task.getId())
+                    .in(TaskItem::getBatch, batchList));
+            if (!taskItems.isEmpty()) {
+                pickInTask = task;
+                log.info("鎵惧埌鍖归厤鐨勬嫞鏂欏叆搴撲换鍔★紙绠卞彿鍜屾壒鍙烽兘鍖归厤锛� - 浠诲姟缂栫爜锛歿}锛屾壒鍙凤細{}", task.getTaskCode(), batchList);
+                break;
+            }
+        }
 
-                // 閫氳繃TaskItem鐨刡atch瀛楁鍖归厤鎵瑰彿
-                for (Task task : pickInTasks) {
-                    List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
-                            .eq(TaskItem::getTaskId, task.getId())
-                            .in(TaskItem::getBatch, batchList));
-
-                    if (!taskItems.isEmpty()) {
-                        pickInTask = task;
-                        log.info("鎵惧埌鍖归厤鐨勬嫞鏂欏叆搴撲换鍔★紙绠卞彿鍜屾壒鍙烽兘鍖归厤锛� - 浠诲姟缂栫爜锛歿}锛屾壒鍙凤細{}",
-                                task.getTaskCode(), batchList);
-                        break;
-                    }
+        // 鏌ヨ浠诲姟绠$悊锛氱洏鐐瑰叆搴撲换鍔★紙绠卞彿+绫诲瀷+鐘舵��1/2/199锛�
+        if (pickInTask == null) {
+            List<Task> checkInTasks = taskService.list(new LambdaQueryWrapper<Task>()
+                    .eq(Task::getBarcode, param.getBarcode())
+                    .eq(Task::getTaskType, TaskType.TASK_TYPE_CHECK_IN.type)
+                    .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WCS_EXECUTE_IN.id, TaskStsType.WAVE_SEED.id)
+                    .orderByDesc(Task::getCreateTime));
+            for (Task task : checkInTasks) {
+                if (batchList.isEmpty()) {
+                    checkInTask = task;
+                    log.info("鎵惧埌鍖归厤鐨勭洏鐐瑰叆搴撲换鍔★紙鎸夌鍙凤級 - 浠诲姟缂栫爜锛歿}锛岀鍙凤細{}", task.getTaskCode(), param.getBarcode());
+                    break;
                 }
-
-                // 鏌ヨ鐩樼偣鍏ュ簱浠诲姟锛氱鍙峰尮閰嶄笖鐘舵�佷负1銆�2鎴�199锛圧CS鐢宠鍏ュ簱鏃讹紝鐘舵��199闇�瑕佸彉鎴�2锛�
-                List<Task> checkInTasks = taskService.list(new LambdaQueryWrapper<Task>()
-                        .eq(Task::getBarcode, param.getBarcode())
-                        .eq(Task::getTaskType, TaskType.TASK_TYPE_CHECK_IN.type)
-                        .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WCS_EXECUTE_IN.id, TaskStsType.WAVE_SEED.id)
-                        .orderByDesc(Task::getCreateTime));
-
-                // 閫氳繃TaskItem鐨刡atch瀛楁鍖归厤鎵瑰彿
-                for (Task task : checkInTasks) {
-                    List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
-                            .eq(TaskItem::getTaskId, task.getId())
-                            .in(TaskItem::getBatch, batchList));
-
-                    if (!taskItems.isEmpty()) {
-                        checkInTask = task;
-                        log.info("鎵惧埌鍖归厤鐨勭洏鐐瑰叆搴撲换鍔★紙绠卞彿鍜屾壒鍙烽兘鍖归厤锛� - 浠诲姟缂栫爜锛歿}锛屾壒鍙凤細{}",
-                                task.getTaskCode(), batchList);
-                        break;
-                    }
+                List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
+                        .eq(TaskItem::getTaskId, task.getId())
+                        .in(TaskItem::getBatch, batchList));
+                if (!taskItems.isEmpty()) {
+                    checkInTask = task;
+                    log.info("鎵惧埌鍖归厤鐨勭洏鐐瑰叆搴撲换鍔★紙绠卞彿鍜屾壒鍙烽兘鍖归厤锛� - 浠诲姟缂栫爜锛歿}锛屾壒鍙凤細{}", task.getTaskCode(), batchList);
+                    break;
                 }
             }
         }
+
+
 
         // 濡傛灉鏄嫞鏂欏叆搴撲换鍔★紝鐩存帴杩斿洖锛屼笉鏍¢獙缁勬墭
         if (Objects.nonNull(pickInTask)) {
@@ -300,6 +305,12 @@
             return msgDto;
         }
 
+        // 2. 鑻ユ湭鍛戒腑鎷f枡/鐩樼偣鍏ュ簱锛屽啀鏍¢獙缁勬墭骞剁户缁叾浠栧叆搴撻�昏緫
+        if (pickInTask == null && checkInTask == null) {
+            waitPakin = validateWaitPakin(param.getBarcode());
+            waitPakinItems = waitPakinItemService.list(
+                    new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId()));
+        }
         // 妫�鏌ュ叾浠栧叆搴撲换鍔$被鍨嬶紙鐢ㄧ鍙锋煡璇紝鐘舵�佷负1鎴�2锛�
         // 娉ㄦ剰锛氱洏鐐瑰叆搴撳凡鍗曠嫭澶勭悊锛屼笉鍐嶅寘鍚湪姝ゅ垪琛ㄤ腑
         List<Integer> otherInboundTaskTypes = Arrays.asList(
@@ -408,7 +419,7 @@
     private WaitPakin validateWaitPakin(String barcode) {
         WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
                 .eq(WaitPakin::getBarcode, barcode)
-                .in(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val));
+                    .in(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val));
 
         if (Cools.isEmpty(waitPakin)) {
             throw new CoolException("璇锋鏌ョ粍鎷栫姸鎬佹槸鍚﹀畬鎴愶紒锛�");

--
Gitblit v1.9.1