From 6e695903059e82c1c376bf2926ffb8b209c0dc3e Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期三, 11 三月 2026 15:45:57 +0800
Subject: [PATCH] lsh#

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java |   70 +++++++++++++++++++++++++----------
 1 files changed, 50 insertions(+), 20 deletions(-)

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 9e8ca7d..79224eb 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
@@ -404,7 +404,9 @@
             if (Objects.isNull(station) || !station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
                 throw new CoolException("绔欑偣涓嶅瓨鍦ㄦ垨绔欑偣涓嶅浜庣┖搴撶姸鎬侊紒锛�");
             }
-            station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+            if (!station.getType().equals(0)){
+                station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+            }
 
             if (!basStationService.updateById(station)) {
                  throw new CoolException("绔欑偣鐘舵�佹洿鏂板け璐ワ紒锛�");
@@ -854,39 +856,61 @@
                 || TaskType.TASK_TYPE_CHECK_IN.type.equals(task.getTaskType())
                 || TaskType.TASK_TYPE_EMPTY_IN.type.equals(task.getTaskType())
                 || TaskType.TASK_TYPE_MERGE_IN.type.equals(task.getTaskType())
-                || TaskType.TASK_TYPE_LOC_MOVE.type.equals(task.getTaskType())) {
-            task.setTaskStatus(TaskStsType.COMPLETE_IN.id);
-        } else if (TaskType.TASK_TYPE_OUT.type.equals(task.getTaskType())) {
-            task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
-        } else if (TaskType.TASK_TYPE_PICK_AGAIN_OUT.type.equals(task.getTaskType())
-                || TaskType.TASK_TYPE_CHECK_OUT.type.equals(task.getTaskType())) {
-            task.setTaskStatus(TaskStsType.AWAIT.id);
-        } else if (TaskType.TASK_TYPE_MERGE_OUT.type.equals(task.getTaskType())) {
-            task.setTaskStatus(TaskStsType.MISSION_TRANSFER.id);
-        } else if (TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type.equals(task.getTaskType())
+                || TaskType.TASK_TYPE_LOC_MOVE.type.equals(task.getTaskType())
+                || TaskType.TASK_TYPE_OUT.type.equals(task.getTaskType())
+                || TaskType.TASK_TYPE_PICK_AGAIN_OUT.type.equals(task.getTaskType())
+                || TaskType.TASK_TYPE_MERGE_OUT.type.equals(task.getTaskType())
+                || TaskType.TASK_TYPE_CHECK_OUT.type.equals(task.getTaskType())
+                || TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type.equals(task.getTaskType())
                 || TaskType.TASK_TYPE_EMPTY_OUT.type.equals(task.getTaskType())) {
-            task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
+            task.setTaskStatus(TaskStsType.MISSION_TRANSFER.id);
         } else {
             return;
         }
         updateById(task);
     }
 
-    /** 缁堟�佹垨绛夊緟瀹氭椂浠诲姟鏇存柊搴撳瓨鐨勭姸鎬侊紝涓嶅睍绀哄畬鎴愭寜閽� */
+    /** 缁堟�佹垨绛夊緟瀹氭椂浠诲姟鏇存柊搴撳瓨鐨勭姸鎬併��9999锛屼笉灞曠ず瀹岀粨鎸夐挳 */
     private static final Set<Integer> TERMINAL_OR_WAITING_STATUS = new HashSet<>(Arrays.asList(
             TaskStsType.COMPLETE_IN.id, TaskStsType.REPORT_IN.id, TaskStsType.UPDATED_IN.id,
             TaskStsType.COMPLETE_OUT.id, TaskStsType.WAVE_SEED.id, TaskStsType.UPDATED_OUT.id,
-            TaskStsType.MISSION_TRANSFER_END.id));
+            TaskStsType.MISSION_TRANSFER.id, TaskStsType.MISSION_TRANSFER_END.id));
 
-    /** 瀹岀粨涓嶄緷璧栨祦绋嬫楠わ紝浠呮湭缁堟�佷换鍔″睍绀哄畬鎴愭寜閽� */
+    /** 缁堟��/9999 鏃犳寜閽紱鐘舵�佸湪姝ラ涓壘涓嶅埌鎴栨棤涓嬩竴姝ワ紙鏈�鍚庝竴姝ワ級鍒欐棤瀹岀粨鎸夐挳 */
     @Override
     public void fillCanComplete(List<Task> tasks) {
         if (tasks == null || tasks.isEmpty()) {
             return;
         }
+        Set<Integer> terminalSet = TERMINAL_OR_WAITING_STATUS;
+        List<String> codes = tasks.stream().map(Task::getTaskCode).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+        if (codes.isEmpty()) {
+            tasks.forEach(t -> t.setCanComplete(Boolean.FALSE));
+            return;
+        }
+        List<FlowStepInstance> steps = codes.size() == 1
+                ? flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>().eq(FlowStepInstance::getTaskNo, codes.get(0)).orderByAsc(FlowStepInstance::getStepOrder))
+                : flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>().in(FlowStepInstance::getTaskNo, codes).orderByAsc(FlowStepInstance::getStepOrder));
+        Map<String, List<FlowStepInstance>> stepsByTaskNo = steps.stream().collect(Collectors.groupingBy(FlowStepInstance::getTaskNo));
         for (Task task : tasks) {
-            boolean terminal = task.getTaskStatus() != null && TERMINAL_OR_WAITING_STATUS.contains(task.getTaskStatus());
-            task.setCanComplete(!terminal);
+            if (task.getTaskStatus() != null && terminalSet.contains(task.getTaskStatus())) {
+                task.setCanComplete(Boolean.FALSE);
+                continue;
+            }
+            List<FlowStepInstance> taskSteps = stepsByTaskNo.get(task.getTaskCode());
+            if (taskSteps == null || taskSteps.isEmpty()) {
+                task.setCanComplete(Boolean.FALSE);
+                continue;
+            }
+            FlowStepInstance match = taskSteps.stream()
+                    .filter(s -> s.getWmsNowTaskStatus() != null && s.getWmsNowTaskStatus().equals(task.getTaskStatus()))
+                    .findFirst().orElse(null);
+            if (match == null) {
+                task.setCanComplete(Boolean.FALSE);
+                continue;
+            }
+            boolean isLastStep = match.getWmsNextTaskStatus() == null || match.getWmsNextTaskStatus().equals(TaskStsType.MISSION_TRANSFER.id);
+            task.setCanComplete(!isLastStep);
         }
     }
 
@@ -1334,7 +1358,9 @@
                 if (null == basStation) {
                     throw new CoolException("绔欑偣鐘舵�侀敊璇紒锛�");
                 }
-                basStation.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
+                if (!basStation.getType().equals(0)){
+                    basStation.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
+                }
                 if (!basStationService.updateById(basStation)) {
                     throw new CoolException("鏇存柊绔欑偣鐘舵�佸け璐ワ紒锛�");
                 }
@@ -2159,12 +2185,16 @@
             /**鍒ゆ柇鏄惁鍏夌數绔欑偣锛岄潪鍏夊簵绔欑偣闇�绠℃帶绔欑偣鐘舵��*/
             if (!Objects.isNull(station) && station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
                 if (task.getTaskType() <= TaskType.TASK_TYPE_CHECK_IN.type && !task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
-                    station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+                    if (!station.getType().equals(0)){
+                        station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+                    }
                     if (!basStationService.updateById(station)) {
                         throw new CoolException("绔欑偣鐘舵�佹洿鏂板け璐ワ紒锛�");
                     }
                 } else if (task.getTaskType() >= TaskType.TASK_TYPE_OUT.type) {
-                    station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+                    if (!station.getType().equals(0)){
+                        station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+                    }
                     if (!basStationService.updateById(station)) {
                         throw new CoolException("绔欑偣鐘舵�佹洿鏂板け璐ワ紒锛�");
                     }

--
Gitblit v1.9.1