From 323a159cfe54156adfc04a4b7e5ed4b552214632 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期六, 07 二月 2026 12:15:09 +0800
Subject: [PATCH] 跳过波次任务

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java |   28 ++++++++++++--
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java      |   86 ++++++++++++++++++++++++++----------------
 2 files changed, 77 insertions(+), 37 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 cdabff1..39d5ac4 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
@@ -607,47 +607,67 @@
             } 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)) {
                 /**鍒ゆ柇鍗曟嵁鏄惁瀹屾垚**/
-                Set<Long> longSet = taskItems.stream().map(TaskItem::getSourceId).collect(Collectors.toSet());
-                List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
-                        .in(WaveOrderRela::getWaveId, longSet));
-                if (Cools.isEmpty(waveOrderRelas)) {
-                    throw new CoolException("娉㈡瀵瑰簲鍏宠仈鍗曟湭鎵惧埌");
-                }
-                Set<Long> orderIds = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
-                List<WkOrder> wkOrders = asnOrderService.listByIds(orderIds);
-                if (wkOrders.isEmpty()) {
-                    throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
-                }
-
-                Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
-
-                wkOrders.forEach(order -> {
-                    //鍒ゆ柇鏄惁鍏佽瓒呮敹锛屼笉鍏佽瓒呮敹娣诲姞鎷掓敹鍒ゆ柇
-                    if (!Objects.isNull(allowChang)) {
-                        if (!Boolean.parseBoolean(allowChang.getVal())) {
-                            if (order.getAnfme().compareTo(order.getQty()) == 0) {
-                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
-                                if (!asnOrderService.updateById(order)) {
-                                    throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
-                                }
-                            }
+                // 鍙湁娉㈡绫诲瀷鐨勪换鍔℃墠闇�瑕佹煡璇㈡尝娆″叧鑱斿崟
+                if (task.getResource() != null && task.getResource().equals(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val)) {
+                    Set<Long> longSet = taskItems.stream()
+                            .map(TaskItem::getSourceId)
+                            .filter(Objects::nonNull)
+                            .collect(Collectors.toSet());
+                    
+                    if (longSet.isEmpty()) {
+                        logger.warn("浠诲姟{}鐨勪换鍔℃槑缁嗕腑娌℃湁鏈夋晥鐨剆ourceId锛岃烦杩囨尝娆″叧鑱斿崟鏌ヨ銆備换鍔$紪鐮侊細{}锛屼换鍔$被鍨嬶細{}", 
+                                task.getId(), task.getTaskCode(), task.getTaskType());
+                    } else {
+                        List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
+                                .in(WaveOrderRela::getWaveId, longSet));
+                        if (Cools.isEmpty(waveOrderRelas)) {
+                            logger.warn("浠诲姟{}鐨勬尝娆″搴斿叧鑱斿崟鏈壘鍒帮紝鍙兘鏄暟鎹笉涓�鑷存垨浠诲姟涓嶆槸閫氳繃娉㈡鍒涘缓鐨勩�備换鍔$紪鐮侊細{}锛宻ourceIds锛歿}", 
+                                    task.getId(), task.getTaskCode(), longSet);
                         } else {
-                            if (order.getAnfme().compareTo(order.getQty()) <= 0) {
-                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
-                                if (!asnOrderService.updateById(order)) {
-                                    throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
-                                }
+                            Set<Long> orderIds = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
+                            List<WkOrder> wkOrders = asnOrderService.listByIds(orderIds);
+                            if (wkOrders.isEmpty()) {
+                                logger.warn("浠诲姟{}鐨勫叧鑱斿崟鎹笉瀛樺湪銆備换鍔$紪鐮侊細{}锛宱rderIds锛歿}", 
+                                        task.getId(), task.getTaskCode(), orderIds);
+                            } else {
+                                Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
+
+                                wkOrders.forEach(order -> {
+                                    //鍒ゆ柇鏄惁鍏佽瓒呮敹锛屼笉鍏佽瓒呮敹娣诲姞鎷掓敹鍒ゆ柇
+                                    if (!Objects.isNull(allowChang)) {
+                                        if (!Boolean.parseBoolean(allowChang.getVal())) {
+                                            if (order.getAnfme().compareTo(order.getQty()) == 0) {
+                                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+                                                if (!asnOrderService.updateById(order)) {
+                                                    logger.error("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐ャ�傝鍗旾D锛歿}锛岃鍗曠紪鐮侊細{}", order.getId(), order.getCode());
+                                                }
+                                            }
+                                        } else {
+                                            if (order.getAnfme().compareTo(order.getQty()) <= 0) {
+                                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+                                                if (!asnOrderService.updateById(order)) {
+                                                    logger.error("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐ャ�傝鍗旾D锛歿}锛岃鍗曠紪鐮侊細{}", order.getId(), order.getCode());
+                                                }
+                                            }
+                                        }
+                                    }
+                                    //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
+
+                                });
                             }
                         }
                     }
-                    //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
-
-                });
+                } else {
+                    logger.debug("浠诲姟{}涓嶆槸娉㈡绫诲瀷浠诲姟锛堣祫婧愮被鍨嬶細{}锛夛紝璺宠繃娉㈡鍏宠仈鍗曟煡璇€�備换鍔$紪鐮侊細{}", 
+                            task.getId(), task.getResource(), task.getTaskCode());
+                }
+                
                 //鍑哄簱鍗曚笂鎶CS淇敼搴撲綅鐘舵��
                 try {
                     reportStationStatus(task);
                 } catch (Exception e) {
-                    throw new CoolException(e.getMessage());
+                    logger.error("浠诲姟{}涓婃姤RCS淇敼搴撲綅鐘舵�佸け璐ャ�備换鍔$紪鐮侊細{}", task.getId(), task.getTaskCode(), e);
+                    // 涓嶆姏鍑哄紓甯革紝閬垮厤涓柇瀹氭椂浠诲姟
                 }
             }
 
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 cdfc073..f76d167 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
@@ -1399,16 +1399,36 @@
         if (Objects.isNull(loc)) {
             throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
         }
-        if (!loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_R.type)) {
-            throw new CoolException("搴撲綅鐘舵�佷笉澶勭悊浜嶳.鍑哄簱棰勭害锛侊紒");
-        }
-
+        
         List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         if (taskItems.isEmpty()) {
             throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
         }
 
         List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId()));
+        
+        // 濡傛灉搴撲綅鐘舵�佷笉鏄疪锛屾鏌ユ槸鍚﹀凡缁忓鐞嗚繃
+        if (!loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_R.type)) {
+            // 濡傛灉搴撲綅鏄庣粏涓虹┖锛岃鏄庡凡缁忓鐞嗚繃浜嗭紝鐩存帴鏇存柊浠诲姟鐘舵�佷负199
+            if (locItems.isEmpty()) {
+                logger.warn("浠诲姟{}鐨勫簱浣峽}鐘舵�佷负{}锛屼絾搴撲綅鏄庣粏涓虹┖锛屽彲鑳藉凡缁忓鐞嗚繃锛岀洿鎺ユ洿鏂颁换鍔$姸鎬佷负199", 
+                        task.getId(), loc.getCode(), loc.getUseStatus());
+                if (!this.update(new LambdaUpdateWrapper<Task>()
+                        .eq(Task::getId, task.getId())
+                        .set(Task::getUpdateBy, loginUserId)
+                        .set(Task::getUpdateTime, new Date())
+                        .set(Task::getTaskStatus, TaskStsType.WAVE_SEED.id))) {
+                    throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐ワ紒锛�");
+                }
+                return; // 璺宠繃鍚庣画澶勭悊
+            } else {
+                // 搴撲綅鏄庣粏涓嶄负绌轰絾鐘舵�佷笉鏄疪锛岃褰曢敊璇絾涓嶆姏鍑哄紓甯革紝璁╁畾鏃朵换鍔$户缁鐞嗗叾浠栦换鍔�
+                logger.error("浠诲姟{}鐨勫簱浣峽}鐘舵�佷负{}锛屼笉鏄疪.鍑哄簱棰勭害鐘舵�侊紝浣嗗簱浣嶆槑缁嗕笉涓虹┖锛岃烦杩囧鐞嗐�備换鍔$紪鐮侊細{}锛屽簱浣嶇紪鐮侊細{}", 
+                        task.getId(), loc.getCode(), loc.getUseStatus(), task.getTaskCode(), loc.getCode());
+                return; // 璺宠繃澶勭悊锛岄伩鍏嶅紓甯镐腑鏂畾鏃朵换鍔�
+            }
+        }
+        
         // 濡傛灉搴撲綅鏄庣粏涓虹┖锛屽彲鑳芥槸宸茬粡琚鐞嗚繃浜嗭紝鍏佽缁х画鎵ц
         if (!locItems.isEmpty()) {
             List<LocItemWorking> workings = new ArrayList<>();

--
Gitblit v1.9.1