From db0da79142146cd3de6e7fcca92dceeceb6d2665 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 04 九月 2025 13:42:27 +0800
Subject: [PATCH] 添加普通站点及下发任务站点管理功能

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java |  172 +++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 129 insertions(+), 43 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 33a663a..d18a1c3 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
@@ -85,12 +85,12 @@
     private TransferOrderService transferOrderService;
     @Autowired
     private TransferService transferService;
-
     @Autowired
     private RestTemplate restTemplate;
-
     @Autowired
     private RemotesInfoProperties.RcsApi rcsApi;
+    @Autowired
+    private BasStationService basStationService;
 
     /**
      * @param
@@ -234,14 +234,9 @@
 //        }
     }
 
-    /**
-     * 浠诲姟鑷姩涓嬪彂
-     *
-     * @throws Exception
-     */
     @Scheduled(cron = "0/5 * * * * ?  ")
-
-    public void taskToWCS() {
+    @Transactional(rollbackFor = Exception.class)
+    public void pubTaskToWcs() {
         Long loginUserId = SystemAuthUtils.getLoginUserId();
         List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_LOC_MOVE.type, TaskType.TASK_TYPE_EMPITY_IN.type
                 , TaskType.TASK_TYPE_CHECK_IN.type, TaskType.TASK_TYPE_MERGE_IN.type, TaskType.TASK_TYPE_EMPITY_OUT.type,
@@ -252,36 +247,77 @@
                 .in(Task::getTaskStatus, integers)
                 .orderByDesc(Task::getSort));
         for (Task task : tasks) {
-//            Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, task.getBarcode()));
-//            if (Objects.isNull(loc)) {
-//                continue;
-//            }
-//            //鍒ゆ柇鏄惁娣卞簱浣�
-//            if (!LocUtils.isShallowLoc(loc.getCode())) {
-//                //鑾峰彇娣卞簱浣嶅搴旂殑娴呭簱浣�
-//                String shallowLoc = LocUtils.getShallowLoc(loc.getCode());
-//                if (StringUtils.isBlank(shallowLoc)) {
-//                    continue;
-//                }
-//                Loc shalloc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc));
-//                if (Objects.isNull(shalloc) || !shalloc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) {
-//                    //濡傛灉娴呭簱浣嶄笉鍦ㄥ簱璺冲嚭寰幆
-//                    continue;
-//                }
-//                LocToTaskParams params = new LocToTaskParams();
-//                params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + "");
-//                //鐢熸垚绉诲簱浠诲姟
-//                Task moveTask = locItemService.genMoveTask(params, loginUserId);
-//                moveTask.setSort(!Objects.isNull(task.getSort()) ? task.getSort() + 1 : Constants.TASK_SORT_DEFAULT_VALUE + 1);
-//                if (!taskService.updateById(moveTask)) {
-//                    throw new Exception("浠诲姟浼樺厛绾ф洿鏂板け璐ワ紒锛�");
-//                }
-//            }
-            //TODO 璋冪敤涓嬪彂浠诲姟鎺ュ彛
+            /**绉诲簱涓嶅仛绔欑偣鎿嶄綔*/
+            if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+                BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName,
+                        task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id) ? task.getOrgSite() : task.getTargSite()));
+                if (station.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) {
+                    continue;
+                }
+            }
+            /**涓嬪彂鏅�氱珯鐐逛换鍔★紝鎶ラ敊鍥炴粴锛屼笉鍐嶅線涓嬫墽琛�*/
+            pubTaskToWcs(task);
+        }
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/9/4
+     * @description: 鍏夌數绔欑偣浠诲姟涓嬪彂
+     * @version 1.0
+     */
+    @Scheduled(cron = "0/5 * * * * ?  ")
+    @Transactional(rollbackFor = Exception.class)
+    public void taskToWCS() throws Exception {
+        Long loginUserId = SystemAuthUtils.getLoginUserId();
+        List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_LOC_MOVE.type, TaskType.TASK_TYPE_EMPITY_IN.type
+                , TaskType.TASK_TYPE_CHECK_IN.type, TaskType.TASK_TYPE_MERGE_IN.type, TaskType.TASK_TYPE_EMPITY_OUT.type,
+                TaskType.TASK_TYPE_PICK_AGAIN_OUT.type, TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_MERGE_OUT.type);
+        List<Integer> integers = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id);
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
+                .in(Task::getTaskType, list)
+                .in(Task::getTaskStatus, integers)
+                .orderByDesc(Task::getSort));
+        for (Task task : tasks) {
+            /**绉诲簱涓嶅仛绔欑偣鎿嶄綔*/
+            if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+                BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName,
+                        task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id) ? task.getOrgSite() : task.getTargSite()));
+                /**杩囨护鎺夋櫘閫氱珯鐐逛换鍔�*/
+                if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                    continue;
+                }
+                Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, task.getBarcode()));
+                if (Objects.isNull(loc)) {
+                    continue;
+                }
+                //鍒ゆ柇鏄惁娣卞簱浣�
+                if (!LocUtils.isShallowLoc(loc.getCode())) {
+                    //鑾峰彇娣卞簱浣嶅搴旂殑娴呭簱浣�
+                    String shallowLoc = LocUtils.getShallowLoc(loc.getCode());
+                    if (StringUtils.isBlank(shallowLoc)) {
+                        continue;
+                    }
+                    Loc shalloc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc));
+                    if (Objects.isNull(shalloc) || !shalloc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) {
+                        //濡傛灉娴呭簱浣嶄笉鍦ㄥ簱璺冲嚭寰幆
+                        continue;
+                    }
+                    LocToTaskParams params = new LocToTaskParams();
+                    params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + "");
+                    //鐢熸垚绉诲簱浠诲姟
+                    Task moveTask = locItemService.genMoveTask(params, loginUserId);
+                    moveTask.setSort(!Objects.isNull(task.getSort()) ? task.getSort() + 1 : Constants.TASK_SORT_DEFAULT_VALUE + 1);
+                    if (!taskService.updateById(moveTask)) {
+                        throw new Exception("浠诲姟浼樺厛绾ф洿鏂板け璐ワ紒锛�");
+                    }
+                }
+            }
+            /**涓嬪彂浠诲姟*/
             try {
                 pubTaskToWcs(task);
             } catch (Exception e) {
-                log.error(e.getMessage());
+                log.error("浠诲姟涓嬪彂澶辫触锛侊紒", e);
             }
         }
     }
@@ -321,16 +357,36 @@
         //浠诲姟绫诲瀷锛屼换鍔$紪鐮�
         itemParam.setTaskType(RcsTaskType.getTypeDesc(task.getTaskType()))
                 .setSeqNum(task.getTaskCode());
-
         //涓诲弬鏁�
         taskParams.setBatch(task.getBarcode());
 
-        if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
+        BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getTargSite()));
+        if (Objects.isNull(station)) {
+            throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�");
+        }
+        /**鍒ゆ柇鏄惁鍏夌數绔欑偣锛岄潪鍏夊簵绔欑偣闇�绠℃帶绔欑偣鐘舵��*/
+        if (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)) {
+                if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) {
+                    throw new CoolException("褰撳墠绔欑偣涓嶆槸F.鍦ㄥ簱鐘舵�侊紒锛�");
+                }
+            } else if (task.getTaskType() >= TaskType.TASK_TYPE_OUT.type) {
+                if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+                    throw new CoolException("鐩爣绔欑偣涓嶆槸O.绌洪棽鐘舵�侊紒锛�");
+                }
+            }
+        }
+        /**绉诲簱鍙傛暟*/
+        if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+            itemParam.setOriLoc(task.getOrgLoc()).setDestLoc(task.getTargLoc());
+        } else if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
                 || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
                 || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)) {
+            /**鍏ㄦ澘鍏ュ簱鍙傛暟*/
             itemParam.setDestLoc(task.getTargLoc())
                     .setOriSta(task.getOrgSite());
         } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)) {
+            /**鎷f枡/鐩樼偣鍏ュ簱鍙傛暟*/
             itemParam.setDestLoc(task.getTargLoc())
                     .setOriSta(task.getTargSite());
         } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
@@ -338,13 +394,27 @@
                 || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)
                 || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
                 || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)) {
-
+            /**鍑哄簱鍙傛暟*/
             itemParam.setOriLoc(task.getOrgLoc())
                     .setDestSta(task.getTargSite());
-        } else if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
-            itemParam.setOriLoc(task.getOrgLoc()).setDestLoc(task.getTargLoc());
         } else {
+            /**绔欑偣闂寸Щ搴撳弬鏁�*/
             itemParam.setOriSta(task.getOrgSite()).setDestSta(task.getTargSite());
+
+            BasStation curSta = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getOrgSite()));
+            if (Objects.isNull(curSta)) {
+                throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�");
+            }
+            if (curSta.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                if (!curSta.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) {
+                    throw new CoolException("褰撳墠绔欑偣涓嶆槸F.鍦ㄥ簱鐘舵�侊紒锛�");
+                }
+            }
+            if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+                    throw new CoolException("鐩爣绔欑偣涓嶆槸O.绌洪棽鐘舵�侊紒锛�");
+                }
+            }
         }
 
         List<TaskItemParam> items = Arrays.asList(itemParam);
@@ -381,16 +451,32 @@
                                 .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_IN.id))) {
                             throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
                         }
+                        /**鎺掗櫎绉诲簱鍔熻兘*/
+                        if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+                            /**濡傛灉鏄櫘閫氱珯鐐癸紝淇敼绔欑偣鐘舵�佷负鍑哄簱棰勭害*/
+                            if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                                station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+                                if (!basStationService.updateById(station)) {
+                                    throw new CoolException("绔欑偣棰勭害澶辫触锛侊紒");
+                                }
+                            }
+                        }
                     } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
                             || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
                             || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
                             || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)
-                            || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
-                    ) {
+                            || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)) {
                         if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
                                 .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_OUT.id))) {
                             throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
                         }
+                        /**濡傛灉鏄櫘閫氱珯鐐癸紝淇敼绔欑偣鐘舵�佷负鍏ュ簱棰勭害*/
+                        if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                            station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+                            if (!basStationService.updateById(station)) {
+                                throw new CoolException("绔欑偣棰勭害澶辫触锛侊紒");
+                            }
+                        }
                     }
                 } else {
                     throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒");

--
Gitblit v1.9.1