From 0f3ba9d165742d5653f7dc4797223cee7b5856f4 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期四, 05 三月 2026 17:50:37 +0800
Subject: [PATCH] lsh#

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java |  134 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 117 insertions(+), 17 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
index d33430a..e3a1518 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
@@ -3,12 +3,16 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.SnowflakeIdWorker;
-import com.vincent.rsf.server.manager.entity.Loc;
-import com.vincent.rsf.server.manager.entity.Task;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.manager.entity.*;
+import com.vincent.rsf.server.manager.enums.LocStsType;
 import com.vincent.rsf.server.manager.enums.TaskStsType;
 import com.vincent.rsf.server.manager.enums.TaskType;
 import com.vincent.rsf.server.manager.service.LocService;
 import com.vincent.rsf.server.manager.service.TaskService;
+import com.vincent.rsf.server.manager.service.impl.BasStationAreaServiceImpl;
+import com.vincent.rsf.server.manager.service.impl.BasStationServiceImpl;
+import com.vincent.rsf.server.manager.service.impl.DeviceSiteServiceImpl;
 import com.vincent.rsf.server.system.constant.GlobalConfigCode;
 import com.vincent.rsf.server.system.entity.*;
 import com.vincent.rsf.server.system.service.ConfigService;
@@ -63,6 +67,12 @@
     private FlowInstanceServiceImpl flowInstanceService;
     @Autowired
     private FlowStepInstanceServiceImpl flowStepInstanceService;
+    @Autowired
+    private BasStationAreaServiceImpl basStationAreaService;
+    @Autowired
+    private DeviceSiteServiceImpl deviceSiteService;
+    @Autowired
+    private BasStationServiceImpl basStationService;
 
     /**
      * @author Munch D. Luffy
@@ -82,14 +92,15 @@
             return;
         }
         taskList.forEach(task -> {
+            boolean endSign = true;
+            boolean endSignUp = false;
             String sou = null;
             String end = null;
             if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_IN.type)
-                    || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
-                    || task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+                    || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)) {
                 sou = task.getOrgSite();
                 Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()));
                 end = loc.getAreaId().toString();
@@ -98,12 +109,30 @@
                     || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) {
+                endSignUp = true;
                 Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
                 sou = loc.getAreaId().toString();
                 end = task.getTargSite();
+
+                BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+                        .eq(BasStation::getStationName, end)
+                        .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+                );
+                if (Cools.isEmpty(basStation)) {
+                    endSign = false;
+                }
+            } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)){
+                Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
+                sou = loc.getAreaId().toString();
+                end = loc.getAreaId().toString();
+            } else if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)){
+                Loc loc1 = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()));
+                end = loc1.getAreaId().toString();
+                Loc loc2 = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
+                sou = loc2.getAreaId().toString();
             }
             List<TaskPathTemplateMerge> taskPathTemplateMergeList = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getSourceType, sou).eq(TaskPathTemplateMerge::getTargetType, end));
-            if (Objects.isNull(taskPathTemplateMergeList) || taskPathTemplateMergeList.isEmpty()) {
+            if (Objects.isNull(taskPathTemplateMergeList) || taskPathTemplateMergeList.isEmpty() || !endSign) {
                 List<TaskPathTemplateMerge> list = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getStepSize,1));
                 if (!Cools.isEmpty(list)) {
                     List<String[]> stationList = new ArrayList<>();
@@ -111,7 +140,7 @@
                         stationList.add(taskPathTemplate.route());
                     });
                     List<Long> longs = RouteWmsStepFlow.routeGet(stationList, sou, end);
-                    if (longs != null && !longs.isEmpty()) {
+                    if (endSign && longs != null && !longs.isEmpty()) {
                         TaskPathTemplateMerge taskPathTemplateMerge = new TaskPathTemplateMerge();
                         taskPathTemplateMerge.setTemplateCode(sou+"===>"+end);
                         taskPathTemplateMerge.setTemplateName(sou+"===>"+end);
@@ -125,12 +154,69 @@
                         taskPathTemplateMerge.setConditionExpression(longList);
                         taskPathTemplateMerge.setStepSize(longList.size());
                         taskPathTemplateMergeService.save(taskPathTemplateMerge);
+                    } else {
+                        if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
+                                || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
+                                || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
+                                || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
+                                || task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) {//鍑哄簱
+                            //娌℃湁璺緞 杩涘叆搴撳尯绛涢�夌珯鐐�
+                            List<String> targSiteArea = task.getTargSiteArea();
+                            //鎻愬彇鍑烘墍鏈夌珯鐐�
+                            List<String> siteList = new ArrayList<>();
+                            //绛涢�夊嚭瀛樺湪璺緞鐨勭珯鐐�
+                            List<String> siteListRoute = new ArrayList<>();
+                            //绛涢�夊彲鏇挎崲閫夐」
+                            List<String> siteListUp = new ArrayList<>();
+                            if (targSiteArea != null && !targSiteArea.isEmpty()) {
+                                for (String areaId : targSiteArea) {
+                                    BasStationArea basStationArea = basStationAreaService.getById(Long.parseLong(areaId));
+                                    if (basStationArea == null || basStationArea.getStationAlias() == null || basStationArea.getStationAlias().isEmpty()) {
+                                        continue;
+                                    }
+                                    siteList.addAll(basStationArea.getStationAlias());
+                                }
+                                if (!siteList.isEmpty()) {
+                                    //鏌ヨ绔欑偣璺緞
+                                    for (String site : siteList) {
+                                        List<Long> routeGet = RouteWmsStepFlow.routeGet(stationList, sou, site);
+                                        if (routeGet!=null && !routeGet.isEmpty()){
+                                            siteListRoute.add(site);
+                                        }
+                                    }
+                                    Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
+                                    //鏌ヨ绔欑偣閰嶇疆
+                                    if (!siteListRoute.isEmpty()) {
+                                        for (String site : siteListRoute) {
+                                            //鎷f枡鍑哄簱 -- 鐩樼偣鍑哄簱
+                                            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+                                                    .eq(DeviceSite::getSite, site)
+                                                    .eq(!Objects.isNull(loc.getChannel()),DeviceSite::getChannel, loc.getChannel())
+                                                    .eq(DeviceSite::getType, task.getTaskType()).last("limit 1"),false);
+                                            if (!Objects.isNull(deviceSite)) {
+                                                BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+                                                        .eq(BasStation::getStationName, site)
+                                                        .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+                                                );
+                                                if (Cools.isEmpty(basStation) || !basStation.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+                                                    continue;
+                                                }
+                                                task.setTargSite(site);
+                                                taskService.updateById(task);
+                                                break;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
                     }
 //                    System.out.println("浠诲姟锛�"+task.getTaskCode()+"鏌ヨ姝ュ簭涓猴細"+longs);
                 }
             } else {
                 //鐢熸垚瀹為檯璺緞
-                boolean actualPath = generateActualPath(task, taskPathTemplateMergeList.get(0));
+                boolean actualPath = generateActualPath(task, taskPathTemplateMergeList.get(0),endSignUp);
                 if (!actualPath) {
                     log.error("鐢熸垚瀹為檯璺緞澶辫触");
                 }
@@ -139,7 +225,7 @@
     }
 
 
-    public boolean generateActualPath(Task task,TaskPathTemplateMerge taskPathTemplateMerge) {
+    public boolean generateActualPath(Task task,TaskPathTemplateMerge taskPathTemplateMerge,boolean endSignUp) {
         boolean actualPath = false;
         List<Integer> conditionExpression = taskPathTemplateMerge.getConditionExpression();
         Integer i = 0;//it椤哄簭
@@ -156,7 +242,7 @@
             }
             List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list(
                     new LambdaQueryWrapper<TaskPathTemplateNode>()
-                            .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()));
+                            .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder));
 
             for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) {
                 List<SubsystemFlowTemplate> subsystemFlowTemplateList = subsystemFlowTemplateService.list(
@@ -167,7 +253,7 @@
                 for (SubsystemFlowTemplate subsystemFlowTemplate : subsystemFlowTemplateList) {
                     List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list(
                             new LambdaQueryWrapper<FlowStepTemplate>()
-                                    .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()));
+                                    .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder));
 
                     allFlowStepTemplates.addAll(flowStepTemplateList);
                 }
@@ -190,7 +276,7 @@
             }
             List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list(
                     new LambdaQueryWrapper<TaskPathTemplateNode>()
-                            .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()));
+                            .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder));
 
             for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) {
                 TaskInstanceNode taskInstanceNode = new TaskInstanceNode(taskPathTemplateNode);
@@ -217,7 +303,7 @@
 
                     List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list(
                             new LambdaQueryWrapper<FlowStepTemplate>()
-                                    .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()));
+                                    .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder));
 
                     for (FlowStepTemplate flowStepTemplate : flowStepTemplateList) {
                         j++;
@@ -227,21 +313,21 @@
                         flowStepInstance.setStepOrder(j);
                         flowStepInstance.setStepCode(String.valueOf(snowflakeIdWorker.nextId()));
                         flowStepInstance.setWmsNowTaskStatus(flowStepTemplate.getWmsNowTaskStatus());
+                        flowStepInstance.setTaskNo(task.getTaskCode());
 
                         // 鍒ゆ柇鏄惁鏄渶鍚庝竴涓�
                         if (globalIndex < allFlowStepTemplates.size() - 1) {
                             // 涓嶆槸鏈�鍚庝竴涓紝鍙栦笅涓�涓殑WmsNowTaskStatus
                             FlowStepTemplate nextFlowStep = allFlowStepTemplates.get(globalIndex + 1);
                             flowStepInstance.setWmsNextTaskStatus(nextFlowStep.getWmsNowTaskStatus());
-                            if (globalIndex == 0){
-                                task.setTaskStatus(flowStepTemplate.getWmsNowTaskStatus());
-                                flowStepInstance.setStatus((short)1);
-                            }
                         } else {
                             // 鏄渶鍚庝竴涓紝璁剧疆涓�9999
                             flowStepInstance.setWmsNextTaskStatus(9999);
                         }
-
+                        if (globalIndex == 0){
+                            task.setTaskStatus(flowStepTemplate.getWmsNowTaskStatus());
+                            flowStepInstance.setStatus((short)1);
+                        }
                         flowStepInstanceService.save(flowStepInstance);
                         globalIndex++; // 鏇存柊鍏ㄥ眬绱㈠紩
                     }
@@ -249,6 +335,20 @@
             }
         }
         task.setDeviceSiteId(taskInstance.getId());
+
+        if (endSignUp){
+            BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getTargSite()));
+            if (basStation == null){
+                return false;
+            }
+            if (!basStation.getType().equals(0)){
+                basStation.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+                basStationService.updateById(basStation);
+            }
+        }
+
+
+
         taskService.updateById(task);
         return actualPath;
     }

--
Gitblit v1.9.1