From 98d88ac8caf7f0991d741079474c262f1e252927 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期五, 06 三月 2026 08:14:54 +0800
Subject: [PATCH] 拣货过程中的出库库存匹配

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java |  109 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 73 insertions(+), 36 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index b0f52cc..371527f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -590,38 +590,74 @@
         }
 
         tasks.forEach(task -> {
-            TaskLog taskLog = new TaskLog();
-            BeanUtils.copyProperties(task, taskLog);
-            taskLog.setTaskId(task.getId()).setId(null);
-            if (!taskLogService.save(taskLog)) {
-                throw new CoolException("浠诲姟鍘嗗彶妗d繚瀛樺け璐ワ紒锛�");
-            }
-            List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
-
-            if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)) {
-                for (TaskItem taskItem : taskItems) {
-                    if (Objects.isNull(taskItem.getOrderId())) {
-                        continue;
-                    }
-                    WkOrder order = asnOrderService.getById(taskItem.getOrderId());
-                    if (Objects.isNull(order)) {
-                        continue;
-                    }
-                    //鍏ュ簱鍗曚换鍔℃槑缁嗕笂鎶�
-                    WkOrderItem wkOrderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
-                            .eq(WkOrderItem::getOrderId, order.getId())
-                            .eq(WkOrderItem::getFieldsIndex, taskItem.getFieldsIndex()));
-                    if (Objects.isNull(wkOrderItem)) {
-                        throw new CoolException("鏁版嵁閿欒锛屽崟鎹槑缁嗕笉瀛樺湪鎴栧凡瀹屾垚锛侊紒");
-                    }
-                    /**鍏ュ簱鍗曟槑缁嗕笂鎶�*/
-                    reportMsgService.reportOrderItem(wkOrderItem);
+            // 鍙鍑哄簱 200 鍋氬悓绠辩爜妫�鏌ワ細鍚岀鐮佷笅鑻ユ湁 101/196/198/199 绛夛紙鏈埌 200锛夊垯璺宠繃锛岀瓑鍏ㄩ儴 200 鎵嶄竴娆″鐞嗭紱鎷f枡鍏ュ簱 100 涓嶅彈褰卞搷
+            List<Task> toProcess = Collections.singletonList(task);
+            if (TaskStsType.UPDATED_OUT.id.equals(task.getTaskStatus()) && TaskType.TASK_TYPE_PICK_AGAIN_OUT.type.equals(task.getTaskType()) && StringUtils.isNotBlank(task.getBarcode())) {
+                long not200 = taskService.count(new LambdaQueryWrapper<Task>()
+                        .eq(Task::getBarcode, task.getBarcode())
+                        .ne(Task::getTaskStatus, TaskStsType.UPDATED_OUT.id));
+                if (not200 > 0) {
+                    return; // 鍚岀鐮佸皻鏈� 101/196/198/199 绛夐潪 200 浠诲姟锛屼笉澶勭悊锛岀户缁瓑寰�
                 }
-            } else if ((task.getTaskType() >= TaskType.TASK_TYPE_OUT.type && task.getTaskType() <= TaskType.TASK_TYPE_EMPITY_OUT.type)
-                    || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)) {
+                // 鍚岀鐮佸凡鍏ㄩ儴 200锛氫竴娆℃�у鐞嗚绠辩爜涓嬫墍鏈� 200 鎷f枡鍑哄簱锛堝悎璁℃墸鍑忋�佹洿鏂板簱瀛樸�佺敓鎴愪竴寮犳嫞鏂欏叆搴撳崟銆佹洿鏂板簱浣嶇姸鎬侊級
+                List<Task> all200 = taskService.list(new LambdaQueryWrapper<Task>()
+                        .eq(Task::getBarcode, task.getBarcode())
+                        .eq(Task::getTaskType, TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
+                        .eq(Task::getTaskStatus, TaskStsType.UPDATED_OUT.id)
+                        .orderByAsc(Task::getId));
+                if (!all200.isEmpty()) {
+                    taskService.processPickOutBarcodeAll200(all200);
+                    toProcess = all200;
+                }
+            }
+            for (Task t : toProcess) {
+                TaskLog taskLog = new TaskLog();
+                BeanUtils.copyProperties(t, taskLog);
+                taskLog.setTaskId(t.getId()).setId(null);
+                if (!taskLogService.save(taskLog)) {
+                    throw new CoolException("浠诲姟鍘嗗彶妗d繚瀛樺け璐ワ紒锛�");
+                }
+                List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, t.getId()));
+
+            // 涓婃姤ERP鏆傛椂娉ㄩ噴锛�/rsf-open-api/erp/report/order锛�
+            // if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)) {
+            //     for (TaskItem taskItem : taskItems) {
+            //         if (Objects.isNull(taskItem.getOrderId())) {
+            //             continue;
+            //         }
+            //         WkOrder order = asnOrderService.getById(taskItem.getOrderId());
+            //         if (Objects.isNull(order)) {
+            //             continue;
+            //         }
+            //         // 鍏ュ簱鍗曚换鍔℃槑缁嗕笂鎶ワ細浼樺厛鎸� orderItemId锛堝崟鎹槑缁咺D锛夋煡锛屽惁鍒欐寜 orderId+matnrId(+fieldsIndex) 鏌ワ紝纭繚鑳芥壘鍒板崟鎹槑缁�
+            //         WkOrderItem wkOrderItem = null;
+            //         if (taskItem.getOrderItemId() != null) {
+            //             wkOrderItem = asnOrderItemService.getById(taskItem.getOrderItemId());
+            //         }
+            //         if (wkOrderItem == null) {
+            //             LambdaQueryWrapper<WkOrderItem> qw = new LambdaQueryWrapper<WkOrderItem>()
+            //                     .eq(WkOrderItem::getOrderId, order.getId())
+            //                     .eq(WkOrderItem::getMatnrId, taskItem.getMatnrId());
+            //             if (StringUtils.isNotBlank(taskItem.getFieldsIndex())) {
+            //                 qw.eq(WkOrderItem::getFieldsIndex, taskItem.getFieldsIndex());
+            //             }
+            //             wkOrderItem = asnOrderItemService.getOne(qw);
+            //         }
+            //         if (Objects.isNull(wkOrderItem)) {
+            //             logger.warn("浠诲姟鍘嗗彶妗e鐞嗭細鍗曟嵁鏄庣粏涓嶅瓨鍦ㄦ垨宸插畬鎴愶紝璺宠繃涓婃姤 - taskId={}, orderId={}, orderItemId={}, matnrId={}, fieldsIndex={}", task.getId(), order.getId(), taskItem.getOrderItemId(), taskItem.getMatnrId(), taskItem.getFieldsIndex());
+            //             continue;
+            //         }
+            //         /**鍏ュ簱鍗曟槑缁嗕笂鎶�*/
+            //         reportMsgService.reportOrderItem(wkOrderItem);
+            //     }
+            // } else
+            if (t.getTaskType().equals(TaskType.TASK_TYPE_IN.type)) {
+                // 鍏ュ簱绫诲瀷浠呰浆鍘嗗彶锛屼笉涓婃姤ERP锛堝凡娉ㄩ噴锛�
+            } else if ((t.getTaskType() >= TaskType.TASK_TYPE_OUT.type && t.getTaskType() <= TaskType.TASK_TYPE_EMPITY_OUT.type)
+                    || t.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)) {
                 /**鍒ゆ柇鍗曟嵁鏄惁瀹屾垚锛氭尝娆′笅鍙戙�佹寜鍗曚笅鍙戯紙鐐瑰嚮涓嬪彂浠诲姟锛夊畬鎴愬悗鍧囧皢鍑哄簱鍗曠疆涓哄畬缁�*/
                 Set<Long> orderIdsToDone = new HashSet<>();
-                if (task.getResource() != null && task.getResource().equals(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val)) {
+                if (t.getResource() != null && t.getResource().equals(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val)) {
                     Set<Long> longSet = taskItems.stream()
                             .map(TaskItem::getSourceId)
                             .filter(Objects::nonNull)
@@ -633,7 +669,7 @@
                             orderIdsToDone.addAll(waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet()));
                         }
                     }
-                } else if (task.getResource() != null && task.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val)) {
+                } else if (t.getResource() != null && t.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val)) {
                     // 鎸夊崟涓嬪彂锛氫换鍔℃槑缁� sourceId 涓哄嚭搴撳崟ID
                     Set<Long> ids = taskItems.stream()
                             .map(TaskItem::getSourceId)
@@ -665,9 +701,9 @@
                 
                 //鍑哄簱鍗曚笂鎶CS淇敼搴撲綅鐘舵��
                 try {
-                    reportStationStatus(task);
+                    reportStationStatus(t);
                 } catch (Exception e) {
-                    logger.error("浠诲姟{}涓婃姤RCS淇敼搴撲綅鐘舵�佸け璐ャ�備换鍔$紪鐮侊細{}", task.getId(), task.getTaskCode(), e);
+                    logger.error("浠诲姟{}涓婃姤RCS淇敼搴撲綅鐘舵�佸け璐ャ�備换鍔$紪鐮侊細{}", t.getId(), t.getTaskCode(), e);
                     // 涓嶆姏鍑哄紓甯革紝閬垮厤涓柇瀹氭椂浠诲姟
                 }
             }
@@ -677,16 +713,16 @@
                 TaskItemLog itemLog = new TaskItemLog();
                 BeanUtils.copyProperties(item, itemLog);
                 itemLog.setId(null)
-                        .setTaskId(task.getId())
+                        .setTaskId(t.getId())
                         .setLogId(taskLog.getId())
                         .setTaskItemId(item.getId());
                 itemLogs.add(itemLog);
             }
 
-            locItemWorkingService.remove(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getTaskId, task.getId()));
+            locItemWorkingService.remove(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getTaskId, t.getId()));
 
 
-            if (!taskService.removeById(task.getId())) {
+            if (!taskService.removeById(t.getId())) {
                 throw new CoolException("鍘熷浠诲姟鍒犻櫎澶辫触锛侊紒");
             }
 
@@ -694,11 +730,12 @@
                 if (!taskItemLogService.saveBatch(itemLogs)) {
                     throw new CoolException("浠诲姟鏄庣粏鍘嗗彶妗d繚瀛樺け璐ワ紒锛�");
                 }
-                if (!taskItemService.remove(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()))) {
+                if (!taskItemService.remove(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, t.getId()))) {
                     throw new CoolException("鍘熷浠诲姟鏄庣粏鍒犻櫎澶辫触锛侊紒");
                 }
             }
 
+            }
         });
     }
 

--
Gitblit v1.9.1