From ed170766d35e68256f60ab48e3fd7071326455a9 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期一, 09 二月 2026 09:32:24 +0800
Subject: [PATCH] pda确认流程优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java    |   33 ++++++-
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java |   46 ++++++++---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java         |  158 ++++++++++++++++++++++++++++-----------
 3 files changed, 173 insertions(+), 64 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
index 73d859c..efc1a52 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -93,6 +93,8 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    @Synchronized
     public R saveOutTaskSts(String barcode) {
         LambdaQueryWrapper<Task> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
@@ -103,20 +105,38 @@
         if (!task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
-        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
-        Map<Long, List<TaskItem>> maps = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getSource));
-        maps.keySet().forEach(key -> {
-            WkOrderItem orderItem = asnOrderItemService.getById(key);
-            if (Objects.isNull(orderItem)) {
-                throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
-            }
-        });
-        task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
-        if (!taskService.updateById(task)) {
-            return R.error("鏇存柊浠诲姟鐘舵�佸け璐�");
+        
+        Long loginUserId = SystemAuthUtils.getLoginUserId();
+        if (loginUserId == null) {
+            loginUserId = 1L; // 浣跨敤榛樿鍊�
         }
-
-        return R.ok("纭鎴愬姛");
+        
+        try {
+            if (task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)) {
+                // 鎷f枡鍑哄簱锛氬垱寤烘嫞鏂欏叆搴撲换鍔★紙褰㈡垚闂幆锛�
+                taskService.pickOrCheckTask(task.getId(), "");
+                return R.ok("纭鎴愬姛锛屽凡鍒涘缓鎷f枡鍏ュ簱浠诲姟");
+            } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)) {
+                // 鐩樼偣鍑哄簱锛氬垱寤虹洏鐐瑰叆搴撲换鍔★紙褰㈡垚闂幆锛�
+                taskService.pickOrCheckTask(task.getId(), Constants.TASK_TYPE_OUT_CHECK);
+                return R.ok("纭鎴愬姛锛屽凡鍒涘缓鐩樼偣鍏ュ簱浠诲姟");
+            } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)) {
+                // 鍏ㄧ増鍑哄簱锛氭洿鏂颁负200锛堟渶缁堝畬鎴愶紝涓嶉棴鐜級
+                taskService.completeFullOutStock(task.getId(), loginUserId);
+                return R.ok("纭鎴愬姛锛屽叏鐗堝嚭搴撳凡瀹屾垚");
+            } else {
+                // 鍏朵粬鍑哄簱绫诲瀷锛氱洿鎺ユ洿鏂颁负200
+                task.setTaskStatus(TaskStsType.UPDATED_OUT.id)
+                        .setUpdateBy(loginUserId)
+                        .setUpdateTime(new Date());
+                if (!taskService.updateById(task)) {
+                    return R.error("鏇存柊浠诲姟鐘舵�佸け璐�");
+                }
+                return R.ok("纭鎴愬姛");
+            }
+        } catch (Exception e) {
+            throw new CoolException("蹇�熸嫞璐х‘璁ゅけ璐ワ細" + e.getMessage());
+        }
     }
 
     @Override
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 266582d..5f450cc 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
@@ -150,11 +150,11 @@
             if (!batchList.isEmpty()) {
                 log.info("妫�鏌ョ粍鎵樻槑缁嗘壒鍙� - 鎵瑰彿鍒楄〃锛歿}", batchList);
                 
-                // 鏌ヨ鎷f枡鍏ュ簱浠诲姟锛氱鍙峰尮閰嶄笖鐘舵�佷负1鎴�2
+                // 鏌ヨ鎷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.WCS_EXECUTE_IN.id)
+                        .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WAVE_SEED.id)
                         .orderByDesc(Task::getCreateTime));
                 
                 // 閫氳繃TaskItem鐨刡atch瀛楁鍖归厤鎵瑰彿
@@ -171,11 +171,11 @@
                     }
                 }
                 
-                // 鏌ヨ鐩樼偣鍏ュ簱浠诲姟锛氱鍙峰尮閰嶄笖鐘舵�佷负1鎴�2
+                // 鏌ヨ鐩樼偣鍏ュ簱浠诲姟锛氱鍙峰尮閰嶄笖鐘舵�佷负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)
+                        .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WCS_EXECUTE_IN.id, TaskStsType.WAVE_SEED.id)
                         .orderByDesc(Task::getCreateTime));
                 
                 // 閫氳繃TaskItem鐨刡atch瀛楁鍖归厤鎵瑰彿
@@ -196,7 +196,35 @@
         
         // 濡傛灉鏄嫞鏂欏叆搴撲换鍔★紝鐩存帴杩斿洖锛屼笉鏍¢獙缁勬墭
         if (Objects.nonNull(pickInTask)) {
-            log.info("鎷f枡鍏ュ簱浠诲姟锛岀洿鎺ヨ繑鍥烇紝涓嶆牎楠岀粍鎵� - 浠诲姟缂栫爜锛歿}", pickInTask.getTaskCode());
+            log.info("鎷f枡鍏ュ簱浠诲姟锛岀洿鎺ヨ繑鍥烇紝涓嶆牎楠岀粍鎵� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}", 
+                    pickInTask.getTaskCode(), pickInTask.getTaskStatus());
+            
+            // 濡傛灉鐘舵�佹槸199锛孯CS鐢宠鍏ュ簱鏃跺簲璇ュ彉鎴愮姸鎬�2锛圧CS浠诲姟宸蹭笅鍙戯級
+            if (pickInTask.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) {
+                log.info("鎷f枡鍏ュ簱浠诲姟鐘舵�佷负199锛孯CS鐢宠鍏ュ簱鏃舵洿鏂颁负鐘舵��2 - 浠诲姟缂栫爜锛歿}", pickInTask.getTaskCode());
+                Long loginUserId = SystemAuthUtils.getLoginUserId();
+                if (loginUserId == null) {
+                    log.warn("鏃犳硶鑾峰彇绯荤粺鐢ㄦ埛ID锛屼娇鐢ㄩ粯璁ゅ��1");
+                    loginUserId = 1L;
+                }
+                
+                // 鏇存柊鐘舵�佷负2锛圧CS浠诲姟宸蹭笅鍙戯級
+                boolean statusUpdated = taskService.update(new LambdaUpdateWrapper<Task>()
+                        .eq(Task::getId, pickInTask.getId())
+                        .eq(Task::getTaskStatus, TaskStsType.WAVE_SEED.id)
+                        .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_IN.id)
+                        .set(Task::getUpdateBy, loginUserId)
+                        .set(Task::getUpdateTime, new Date()));
+                
+                if (statusUpdated) {
+                    log.info("鎷f枡鍏ュ簱浠诲姟鐘舵�佸凡鏇存柊涓�2锛圧CS浠诲姟宸蹭笅鍙戯級 - 浠诲姟缂栫爜锛歿}", pickInTask.getTaskCode());
+                    // 閲嶆柊鏌ヨ浠诲姟浠ヨ幏鍙栨渶鏂扮姸鎬�
+                    pickInTask = taskService.getById(pickInTask.getId());
+                } else {
+                    log.warn("鎷f枡鍏ュ簱浠诲姟鐘舵�佹洿鏂颁负2澶辫触锛屽彲鑳界姸鎬佸凡鍙樻洿 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}", 
+                            pickInTask.getTaskCode(), pickInTask.getTaskStatus());
+                }
+            }
             
             // 鏇存柊鍏ュ簱绔欑偣淇℃伅锛堝鏋滀笌褰撳墠鐢宠鐨勭珯鐐逛笉鍚岋級
             if (StringUtils.isNotBlank(param.getSourceStaNo()) && 
@@ -221,7 +249,35 @@
         
         // 濡傛灉鏄洏鐐瑰叆搴撲换鍔★紝鐩存帴杩斿洖锛屼笉鏍¢獙缁勬墭
         if (Objects.nonNull(checkInTask)) {
-            log.info("鐩樼偣鍏ュ簱浠诲姟锛岀洿鎺ヨ繑鍥烇紝涓嶆牎楠岀粍鎵� - 浠诲姟缂栫爜锛歿}", checkInTask.getTaskCode());
+            log.info("鐩樼偣鍏ュ簱浠诲姟锛岀洿鎺ヨ繑鍥烇紝涓嶆牎楠岀粍鎵� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}", 
+                    checkInTask.getTaskCode(), checkInTask.getTaskStatus());
+            
+            // 濡傛灉鐘舵�佹槸199锛孯CS鐢宠鍏ュ簱鏃跺簲璇ュ彉鎴愮姸鎬�2锛圧CS浠诲姟宸蹭笅鍙戯級
+            if (checkInTask.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) {
+                log.info("鐩樼偣鍏ュ簱浠诲姟鐘舵�佷负199锛孯CS鐢宠鍏ュ簱鏃舵洿鏂颁负鐘舵��2 - 浠诲姟缂栫爜锛歿}", checkInTask.getTaskCode());
+                Long loginUserId = SystemAuthUtils.getLoginUserId();
+                if (loginUserId == null) {
+                    log.warn("鏃犳硶鑾峰彇绯荤粺鐢ㄦ埛ID锛屼娇鐢ㄩ粯璁ゅ��1");
+                    loginUserId = 1L;
+                }
+                
+                // 鏇存柊鐘舵�佷负2锛圧CS浠诲姟宸蹭笅鍙戯級
+                boolean statusUpdated = taskService.update(new LambdaUpdateWrapper<Task>()
+                        .eq(Task::getId, checkInTask.getId())
+                        .eq(Task::getTaskStatus, TaskStsType.WAVE_SEED.id)
+                        .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_IN.id)
+                        .set(Task::getUpdateBy, loginUserId)
+                        .set(Task::getUpdateTime, new Date()));
+                
+                if (statusUpdated) {
+                    log.info("鐩樼偣鍏ュ簱浠诲姟鐘舵�佸凡鏇存柊涓�2锛圧CS浠诲姟宸蹭笅鍙戯級 - 浠诲姟缂栫爜锛歿}", checkInTask.getTaskCode());
+                    // 閲嶆柊鏌ヨ浠诲姟浠ヨ幏鍙栨渶鏂扮姸鎬�
+                    checkInTask = taskService.getById(checkInTask.getId());
+                } else {
+                    log.warn("鐩樼偣鍏ュ簱浠诲姟鐘舵�佹洿鏂颁负2澶辫触锛屽彲鑳界姸鎬佸凡鍙樻洿 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}", 
+                            checkInTask.getTaskCode(), checkInTask.getTaskStatus());
+                }
+            }
             
             // 鏇存柊鍏ュ簱绔欑偣淇℃伅锛堝鏋滀笌褰撳墠鐢宠鐨勭珯鐐逛笉鍚岋級
             if (StringUtils.isNotBlank(param.getSourceStaNo()) && 
@@ -854,9 +910,9 @@
                     }
                     log.info("鍑哄簱浠诲姟鐘舵�佹洿鏂版垚鍔� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
                     
-                    // 鍏ㄧ増鍑哄簱鍦≧CS鍥炶皟鍚庣洿鎺ュ鐞嗗苟璁剧疆涓�200
+                    // 鍏ㄧ増鍑哄簱鍦≧CS鍥炶皟鍚庡鐞嗗簱瀛樺苟璁剧疆涓�199锛岀瓑寰匬DA蹇�熸嫞璐х‘璁ゅ悗鏇存柊涓�200
                     if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)) {
-                        log.info("鍏ㄧ増鍑哄簱浠诲姟锛屽紑濮嬪鐞嗗簱瀛樺苟鏇存柊鐘舵�佷负200 - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
+                        log.info("鍏ㄧ増鍑哄簱浠诲姟锛屽紑濮嬪鐞嗗簱瀛樺苟鏇存柊鐘舵�佷负199 - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
                         try {
                             // 閲嶆柊鏌ヨ浠诲姟浠ヨ幏鍙栨渶鏂扮姸鎬侊紙198锛�
                             task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()));
@@ -869,34 +925,10 @@
                             // 閲嶆柊鏌ヨ浠诲姟浠ヨ幏鍙栨渶鏂扮姸鎬侊紙199锛�
                             task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()));
                             
-                            // 濡傛灉鐘舵�佸凡缁忔槸199锛岀户缁鐞嗗苟璁剧疆涓�200
                             if (task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) {
-                                Long loginUserId = SystemAuthUtils.getLoginUserId();
-                                if (loginUserId == null) {
-                                    log.warn("鏃犳硶鑾峰彇绯荤粺鐢ㄦ埛ID锛屼娇鐢ㄩ粯璁ゅ��1");
-                                    loginUserId = 1L;
-                                }
-                                
-                                // 鍒犻櫎浣滀笟涓簱瀛樿褰曪紙LocItemWorking锛�
-                                locItemWorkingService.remove(new LambdaQueryWrapper<LocItemWorking>()
-                                        .eq(LocItemWorking::getTaskId, task.getId()));
-                                
-                                // 鏇存柊浠诲姟鐘舵�佷负搴撳瓨鏇存柊瀹屾垚锛�200锛�
-                                boolean finalUpdated = taskService.update(new LambdaUpdateWrapper<Task>()
-                                        .eq(Task::getTaskCode, task.getTaskCode())
-                                        .eq(Task::getTaskStatus, TaskStsType.WAVE_SEED.id)
-                                        .set(Task::getTaskStatus, TaskStsType.UPDATED_OUT.id)
-                                        .set(Task::getUpdateBy, loginUserId)
-                                        .set(Task::getUpdateTime, new Date()));
-                                
-                                if (!finalUpdated) {
-                                    log.warn("鍏ㄧ増鍑哄簱浠诲姟鐘舵�佹洿鏂颁负200澶辫触锛屽彲鑳界姸鎬佸凡鍙樻洿 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}", 
-                                            task.getTaskCode(), task.getTaskStatus());
-                                } else {
-                                    log.info("鍏ㄧ増鍑哄簱浠诲姟鐘舵�佸凡鏇存柊涓�200锛堝簱瀛樻洿鏂板畬鎴愶級 - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
-                                }
+                                log.info("鍏ㄧ増鍑哄簱浠诲姟鐘舵�佸凡鏇存柊涓�199锛堢瓑寰匬DA蹇�熸嫞璐х‘璁ゅ悗鏇存柊涓�200锛� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
                             } else {
-                                log.warn("鍏ㄧ増鍑哄簱浠诲姟鐘舵�佷笉鏄�199锛屾棤娉曟洿鏂颁负200 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}", 
+                                log.warn("鍏ㄧ増鍑哄簱浠诲姟鐘舵�佹洿鏂颁负199澶辫触 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}", 
                                         task.getTaskCode(), task.getTaskStatus());
                             }
                         } catch (Exception e) {
@@ -1324,18 +1356,56 @@
         // 璇ユ柟娉曚細鎵ц浠ヤ笅娴佺▼锛�
         // 1. 楠岃瘉璁惧绔欑偣
         // 2. 楠岃瘉缁勬嫋鐘舵��
-        // 3. 鐢熸垚浠诲姟缂栫爜
-        // 4. 鑾峰彇搴撲綅鍙�
-        // 5. 鍒涘缓骞朵繚瀛樹换鍔�
-        // 6. 鏇存柊搴撲綅鐘舵��
-        // 7. 鑾峰彇骞堕獙璇佺粍鎷栨槑缁�
-        // 8. 鍒涘缓骞朵繚瀛樹换鍔℃槑缁�
-        // 9. 鏇存柊缁勬墭鐘舵��
+        // 3. 妫�鏌ユ槸鍚︽湁鍖归厤鐨勫叆搴撲换鍔★紙鎷f枡/鐩樼偣鍏ュ簱浼氬尮閰嶇姸鎬�199骞舵洿鏂颁负2锛�
+        // 4. 鐢熸垚浠诲姟缂栫爜锛堝鏋滈渶瑕佸垱寤烘柊浠诲姟锛�
+        // 5. 鑾峰彇搴撲綅鍙�
+        // 6. 鍒涘缓骞朵繚瀛樹换鍔★紙濡傛灉闇�瑕佸垱寤烘柊浠诲姟锛�
+        // 7. 鏇存柊搴撲綅鐘舵��
+        // 8. 鑾峰彇骞堕獙璇佺粍鎷栨槑缁�
+        // 9. 鍒涘缓骞朵繚瀛樹换鍔℃槑缁�
+        // 10. 鏇存柊缁勬墭鐘舵��
         InTaskMsgDto msgDto = createInTask(param);
-        //RCS宸茬粡鍦ㄨ緭閫佺嚎涓婏紝鎵�浠ヤ笉闇�瑕佷笅鍙戜换鍔�
-        taskService.updateById(new Task(){{setId(msgDto.getTaskId());setTaskStatus(2);}});
+        
+        // 鏌ヨ浠诲姟褰撳墠鐘舵��
+        Task task = taskService.getById(msgDto.getTaskId());
+        if (Objects.isNull(task)) {
+            throw new CoolException("浠诲姟涓嶅瓨鍦紝浠诲姟ID锛�" + msgDto.getTaskId());
+        }
+        
+        // RCS鐢宠鍏ュ簱鏃讹紝闇�瑕佸皢浠诲姟鐘舵�佹洿鏂颁负2锛圧CS浠诲姟宸蹭笅鍙戯級
+        // 鎯呭喌1锛氬鏋滄槸鎷f枡/鐩樼偣鍏ュ簱浠诲姟锛岀姸鎬�199宸茬粡鍦╟reateInTask涓洿鏂颁负2浜�
+        // 鎯呭喌2锛氬鏋滄槸鏂板垱寤虹殑浠诲姟锛堟棤璁㈠崟鍙风粍鎵橈級锛岀姸鎬佹槸1锛岄渶瑕佹洿鏂颁负2
+        // 鎯呭喌3锛氬鏋滅姸鎬佸凡缁忔槸2锛屼笉闇�瑕佹洿鏂�
+        if (task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id)) {
+            log.info("鏂板垱寤虹殑鍏ュ簱浠诲姟锛堟棤璁㈠崟鍙风粍鎵橈級锛孯CS鐢宠鍏ュ簱鏃舵洿鏂颁负鐘舵��2 - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
+            Long loginUserId = SystemAuthUtils.getLoginUserId();
+            if (loginUserId == null) {
+                log.warn("鏃犳硶鑾峰彇绯荤粺鐢ㄦ埛ID锛屼娇鐢ㄩ粯璁ゅ��1");
+                loginUserId = 1L;
+            }
+            
+            boolean statusUpdated = taskService.update(new LambdaUpdateWrapper<Task>()
+                    .eq(Task::getId, task.getId())
+                    .eq(Task::getTaskStatus, TaskStsType.GENERATE_IN.id)
+                    .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_IN.id)
+                    .set(Task::getUpdateBy, loginUserId)
+                    .set(Task::getUpdateTime, new Date()));
+            
+            if (statusUpdated) {
+                log.info("鏂板垱寤虹殑鍏ュ簱浠诲姟鐘舵�佸凡鏇存柊涓�2锛圧CS浠诲姟宸蹭笅鍙戯級 - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
+            } else {
+                log.warn("鏂板垱寤虹殑鍏ュ簱浠诲姟鐘舵�佹洿鏂颁负2澶辫触锛屽彲鑳界姸鎬佸凡鍙樻洿 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}", 
+                        task.getTaskCode(), task.getTaskStatus());
+            }
+        } else if (task.getTaskStatus().equals(TaskStsType.WCS_EXECUTE_IN.id)) {
+            log.info("鍏ュ簱浠诲姟鐘舵�佸凡缁忔槸2锛圧CS浠诲姟宸蹭笅鍙戯級锛屾棤闇�鏇存柊 - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
+        } else {
+            log.info("鍏ュ簱浠诲姟褰撳墠鐘舵�侊細{}锛孯CS鐢宠鍏ュ簱鏃朵繚鎸佸綋鍓嶇姸鎬� - 浠诲姟缂栫爜锛歿}", 
+                    task.getTaskStatus(), task.getTaskCode());
+        }
+        
         log.info("========== RCS-鐢宠鍏ュ簱浠诲姟鎴愬姛 ==========");
-        log.info("RCS-杩斿洖 浠诲姟缂栫爜锛歿}锛屽簱浣嶅彿锛歿}", msgDto.getWorkNo(), msgDto.getLocNo());
+        log.info("RCS-杩斿洖 浠诲姟缂栫爜锛歿}锛屽簱浣嶅彿锛歿}锛屼换鍔$姸鎬侊細{}", msgDto.getWorkNo(), msgDto.getLocNo(), task.getTaskStatus());
 
         // 杩斿洖缁撴灉锛屽彧杩斿洖搴撲綅鍙凤紙鏍规嵁鎺ュ彛鏂囨。瑕佹眰锛�
         JSONObject result = new JSONObject();
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 51acead..1cfd1e6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -1450,8 +1450,8 @@
             try {
                 // 鏍规嵁浠诲姟绫诲瀷鏇存柊搴撲綅鏄庣粏
                 if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)) {
-                    // 鍏ㄧ増鍑哄簱锛氬垹闄ゆ墍鏈夊簱浣嶆槑缁�
-                    subtractLocItem(loc);
+                    // 鍏ㄧ増鍑哄簱锛氫笉鍒犻櫎搴撲綅鏄庣粏锛岀瓑寰匬DA蹇�熸嫞璐х‘璁ゆ椂鍐嶅垹闄�
+                    // subtractLocItem(loc); // 宸茬Щ闄わ紝鏀逛负鍦╟ompleteFullOutStock涓垹闄�
                 } else {
                     // 閮ㄥ垎鍑哄簱锛堝鎷f枡鍑哄簱锛夛細鏍规嵁TaskItem鏁伴噺鎵e噺搴撲綅鏄庣粏
                     subtractLocItemByTaskItems(loc, taskItems, loginUserId);
@@ -1513,6 +1513,8 @@
                 throw new CoolException(e.getMessage());
             }
         }
+        
+        // 鏍规嵁浠诲姟绫诲瀷鏇存柊搴撲綅鐘舵��
         if (task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)) {
             /**淇敼涓哄簱浣嶇姸鎬佷负S.棰勭害鍏ュ簱锛屼繚鐣欏師鏈夊簱浣�*/
             if (!locService.update(new LambdaUpdateWrapper<Loc>()
@@ -1523,6 +1525,9 @@
                     .eq(Loc::getId, loc.getId()))) {
                 throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
             }
+        } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)) {
+            // 鍏ㄧ増鍑哄簱锛氫笉鏇存柊搴撲綅鐘舵�佷负O锛岀瓑寰匬DA蹇�熸嫞璐х‘璁ゆ椂鍐嶆洿鏂�
+            // 搴撲綅鐘舵�佷繚鎸佸師鏍凤紙R.鍑哄簱棰勭害鐘舵�侊級
         } else {
             /**淇敼涓哄簱浣嶇姸鎬佷负O.绌哄簱*/
             if (!locService.update(new LambdaUpdateWrapper<Loc>()
@@ -2184,12 +2189,26 @@
                 throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
             }
             LocItem item = new LocItem();
-            LocItem locItem = locItemService.getOne(new LambdaQueryWrapper<LocItem>()
+            // 鏋勫缓鏌ヨ鏉′欢锛氶渶瑕佸悓鏃跺尮閰嶇墿鏂橧D銆佸簱浣岻D銆佹壒娆″拰绁ㄥ彿
+            LambdaQueryWrapper<LocItem> locItemWrapper = new LambdaQueryWrapper<LocItem>()
                     .eq(LocItem::getMatnrId, taskItem.getMatnrId())
-                    .eq(LocItem::getLocId, loc.getId())
-                    .eq(StringUtils.isNotBlank(taskItem.getBatch()), LocItem::getBatch, taskItem.getBatch())
-                    .eq(StringUtils.isNotBlank(taskItem.getFieldsIndex()), LocItem::getFieldsIndex, taskItem.getFieldsIndex())
-            );
+                    .eq(LocItem::getLocId, loc.getId());
+            
+            // 鎵规鍖归厤锛氬鏋渢askItem鏈夋壒娆★紝鍒欏繀椤诲尮閰嶏紱濡傛灉taskItem娌℃湁鎵规锛屽垯鏌ヨ鎵规涓簄ull鎴栫┖瀛楃涓茬殑璁板綍
+            if (StringUtils.isNotBlank(taskItem.getBatch())) {
+                locItemWrapper.eq(LocItem::getBatch, taskItem.getBatch());
+            } else {
+                locItemWrapper.and(wrapper -> wrapper.isNull(LocItem::getBatch).or().eq(LocItem::getBatch, ""));
+            }
+            
+            // 绁ㄥ彿鍖归厤锛氬鏋渢askItem鏈夌エ鍙凤紝鍒欏繀椤诲尮閰嶏紱濡傛灉taskItem娌℃湁绁ㄥ彿锛屽垯鏌ヨ绁ㄥ彿涓簄ull鎴栫┖瀛楃涓茬殑璁板綍
+            if (StringUtils.isNotBlank(taskItem.getFieldsIndex())) {
+                locItemWrapper.eq(LocItem::getFieldsIndex, taskItem.getFieldsIndex());
+            } else {
+                locItemWrapper.and(wrapper -> wrapper.isNull(LocItem::getFieldsIndex).or().eq(LocItem::getFieldsIndex, ""));
+            }
+            
+            LocItem locItem = locItemService.getOne(locItemWrapper);
             if (Objects.isNull(locItem)) {
                 // 搴撲綅鏄庣粏涓嶅瓨鍦紝鍒涘缓鏂扮殑搴撲綅鏄庣粏
                 BeanUtils.copyProperties(taskItem, item);

--
Gitblit v1.9.1