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 |  282 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 251 insertions(+), 31 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 217c10a..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
@@ -2,18 +2,17 @@
 
 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.framework.exception.CoolException;
-import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.LocStsType;
-import com.vincent.rsf.server.manager.enums.StationTypeEnum;
 import com.vincent.rsf.server.manager.enums.TaskStsType;
 import com.vincent.rsf.server.manager.enums.TaskType;
-import com.vincent.rsf.server.manager.service.LocItemService;
 import com.vincent.rsf.server.manager.service.LocService;
 import com.vincent.rsf.server.manager.service.TaskService;
-import com.vincent.rsf.server.manager.service.impl.BasContainerServiceImpl;
-import com.vincent.rsf.server.manager.service.impl.WarehouseAreasServiceImpl;
+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;
@@ -47,31 +46,33 @@
     @Autowired
     private ConfigService configService;
     @Autowired
-    private WarehouseAreasServiceImpl warehouseAreasService;
-    @Autowired
     private LocService locService;
     @Autowired
-    private LocItemService locItemService;
+    private TaskPathTemplateMergeServiceImpl taskPathTemplateMergeService;
     @Autowired
-    private BasContainerServiceImpl basContainerService;
+    private TaskInstanceServiceImpl taskInstanceService;
     @Autowired
     private TaskPathTemplateServiceImpl taskPathTemplateService;
     @Autowired
     private TaskPathTemplateNodeServiceImpl taskPathTemplateNodeService;
     @Autowired
-    private TaskInstanceServiceImpl taskInstanceService;
-    @Autowired
-    private TaskInstanceNodeServiceImpl taskInstanceNodeService;
-    @Autowired
     private SubsystemFlowTemplateServiceImpl subsystemFlowTemplateService;
-    @Autowired
-    private FlowStepLogServiceImpl flowStepLogService;
     @Autowired
     private FlowStepTemplateServiceImpl flowStepTemplateService;
     @Autowired
-    private FlowStepInstanceServiceImpl flowStepInstanceService;
+    private TaskInstanceNodeServiceImpl taskInstanceNodeService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
     @Autowired
     private FlowInstanceServiceImpl flowInstanceService;
+    @Autowired
+    private FlowStepInstanceServiceImpl flowStepInstanceService;
+    @Autowired
+    private BasStationAreaServiceImpl basStationAreaService;
+    @Autowired
+    private DeviceSiteServiceImpl deviceSiteService;
+    @Autowired
+    private BasStationServiceImpl basStationService;
 
     /**
      * @author Munch D. Luffy
@@ -79,27 +80,27 @@
      * @description: 鍒濆浠诲姟瑙勫垝璺緞
      * @version 1.0
      */
-    @Scheduled(cron = "0/2 * * * * ?")
+    @Scheduled(cron = "0/1 * * * * ?")
     @Transactional(rollbackFor = Exception.class)
     public void missionTemplate() throws Exception {
         Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_TEMPLATE_PLANNING_STEP_FLOW));
         if (!Boolean.parseBoolean(config.getVal())) {
             return;
         }
-
         List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.MISSION_INITIAL.id));
         if (Objects.isNull(taskList)) {
             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();
@@ -108,30 +109,249 @@
                     || 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<TaskPathTemplate> taskPathTemplates = taskPathTemplateService.list(new LambdaQueryWrapper<TaskPathTemplate>().eq(TaskPathTemplate::getSourceType, sou).eq(TaskPathTemplate::getTargetType, end));
-            if (Objects.isNull(taskPathTemplates) || taskPathTemplates.isEmpty()) {
-                List<TaskPathTemplate> list = taskPathTemplateService.list(new LambdaQueryWrapper<>());
+            List<TaskPathTemplateMerge> taskPathTemplateMergeList = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getSourceType, sou).eq(TaskPathTemplateMerge::getTargetType, end));
+            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<>();
                     list.forEach(taskPathTemplate -> {
                         stationList.add(taskPathTemplate.route());
                     });
                     List<Long> longs = RouteWmsStepFlow.routeGet(stationList, sou, end);
-                    if (longs != null && !longs.isEmpty()) {
-                        TaskPathTemplate taskPathTemplate = new TaskPathTemplate();
-                        taskPathTemplate.setTemplateCode(sou+"===>"+end);
-                        taskPathTemplate.setTemplateName(sou+"===>"+end);
-                        taskPathTemplate.setSourceType(sou);
-                        taskPathTemplate.setTargetType(end);
-                        taskPathTemplateService.save(taskPathTemplate);
+                    if (endSign && longs != null && !longs.isEmpty()) {
+                        TaskPathTemplateMerge taskPathTemplateMerge = new TaskPathTemplateMerge();
+                        taskPathTemplateMerge.setTemplateCode(sou+"===>"+end);
+                        taskPathTemplateMerge.setTemplateName(sou+"===>"+end);
+                        taskPathTemplateMerge.setSourceType(sou);
+                        taskPathTemplateMerge.setTargetType(end);
+                        List<Integer> longList = new ArrayList<>();
+                        for (Long id : longs) {
+                            TaskPathTemplateMerge one = taskPathTemplateMergeService.getOne(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getId, id));
+                            longList.addAll(one.getConditionExpression());
+                        }
+                        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);
+//                    System.out.println("浠诲姟锛�"+task.getTaskCode()+"鏌ヨ姝ュ簭涓猴細"+longs);
+                }
+            } else {
+                //鐢熸垚瀹為檯璺緞
+                boolean actualPath = generateActualPath(task, taskPathTemplateMergeList.get(0),endSignUp);
+                if (!actualPath) {
+                    log.error("鐢熸垚瀹為檯璺緞澶辫触");
                 }
             }
         });
     }
+
+
+    public boolean generateActualPath(Task task,TaskPathTemplateMerge taskPathTemplateMerge,boolean endSignUp) {
+        boolean actualPath = false;
+        List<Integer> conditionExpression = taskPathTemplateMerge.getConditionExpression();
+        Integer i = 0;//it椤哄簭
+        Integer j = 0;//suT椤哄簭
+
+        // 鐢ㄤ簬瀛樺偍鎵�鏈塅lowStepTemplate
+        List<FlowStepTemplate> allFlowStepTemplates = new ArrayList<>();
+
+        // 绗竴閬嶉亶鍘嗭細鏀堕泦鎵�鏈夌殑FlowStepTemplate
+        for (Integer id : conditionExpression) {
+            TaskPathTemplate taskPathTemplate = taskPathTemplateService.getById(id);
+            if (taskPathTemplate == null) {
+                return false;
+            }
+            List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list(
+                    new LambdaQueryWrapper<TaskPathTemplateNode>()
+                            .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder));
+
+            for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) {
+                List<SubsystemFlowTemplate> subsystemFlowTemplateList = subsystemFlowTemplateService.list(
+                        new LambdaQueryWrapper<SubsystemFlowTemplate>()
+                                .eq(SubsystemFlowTemplate::getFlowCode, taskPathTemplateNode.getNodeCode())
+                                .eq(SubsystemFlowTemplate::getSystemCode, taskPathTemplateNode.getSystemCode()));
+
+                for (SubsystemFlowTemplate subsystemFlowTemplate : subsystemFlowTemplateList) {
+                    List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list(
+                            new LambdaQueryWrapper<FlowStepTemplate>()
+                                    .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder));
+
+                    allFlowStepTemplates.addAll(flowStepTemplateList);
+                }
+            }
+        }
+
+        TaskInstance taskInstance = new TaskInstance(taskPathTemplateMerge,task);
+        boolean save = taskInstanceService.save(taskInstance);
+        if (!save) {
+            return false;
+        }
+
+        // 褰撳墠澶勭悊鐨凢lowStepTemplate鍦ㄥ叏灞�鍒楄〃涓殑绱㈠紩
+        int globalIndex = 0;
+
+        for (Integer id : conditionExpression) {
+            TaskPathTemplate taskPathTemplate = taskPathTemplateService.getById(id);
+            if (taskPathTemplate == null) {
+                return false;
+            }
+            List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list(
+                    new LambdaQueryWrapper<TaskPathTemplateNode>()
+                            .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder));
+
+            for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) {
+                TaskInstanceNode taskInstanceNode = new TaskInstanceNode(taskPathTemplateNode);
+                taskInstanceNode.setTaskId(taskInstance.getId());
+                taskInstanceNode.setTaskNo(taskInstance.getTaskNo());
+                i++;
+                taskInstanceNode.setNodeOrder(i);
+                taskInstanceNode.setNodeCode(String.valueOf(snowflakeIdWorker.nextId()));
+                taskInstanceNodeService.save(taskInstanceNode);
+
+                List<SubsystemFlowTemplate> subsystemFlowTemplateList = subsystemFlowTemplateService.list(
+                        new LambdaQueryWrapper<SubsystemFlowTemplate>()
+                                .eq(SubsystemFlowTemplate::getFlowCode, taskPathTemplateNode.getNodeCode())
+                                .eq(SubsystemFlowTemplate::getSystemCode, taskPathTemplateNode.getSystemCode()));
+
+                for (SubsystemFlowTemplate subsystemFlowTemplate : subsystemFlowTemplateList) {
+                    FlowInstance flowInstance = new FlowInstance(subsystemFlowTemplate);
+                    flowInstance.setFlowInstanceNo(String.valueOf(snowflakeIdWorker.nextId()));
+                    flowInstance.setTaskId(taskInstance.getId());
+                    flowInstance.setTaskNo(taskInstance.getTaskNo());
+                    flowInstance.setNodeInstanceId(taskInstanceNode.getId());
+                    flowInstance.setNodeCode(String.valueOf(snowflakeIdWorker.nextId()));
+                    flowInstanceService.save(flowInstance);
+
+                    List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list(
+                            new LambdaQueryWrapper<FlowStepTemplate>()
+                                    .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder));
+
+                    for (FlowStepTemplate flowStepTemplate : flowStepTemplateList) {
+                        j++;
+                        FlowStepInstance flowStepInstance = new FlowStepInstance(flowStepTemplate);
+                        flowStepInstance.setFlowInstanceId(flowInstance.getId());
+                        flowStepInstance.setFlowInstanceNo(flowInstance.getFlowInstanceNo());
+                        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());
+                        } else {
+                            // 鏄渶鍚庝竴涓紝璁剧疆涓�9999
+                            flowStepInstance.setWmsNextTaskStatus(9999);
+                        }
+                        if (globalIndex == 0){
+                            task.setTaskStatus(flowStepTemplate.getWmsNowTaskStatus());
+                            flowStepInstance.setStatus((short)1);
+                        }
+                        flowStepInstanceService.save(flowStepInstance);
+                        globalIndex++; // 鏇存柊鍏ㄥ眬绱㈠紩
+                    }
+                }
+            }
+        }
+        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