wanshenmean
3 天以前 ff006f77f6267fc0d2c4ee810d897a85165f5b8f
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
@@ -9,7 +9,6 @@
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.ConveyorLine.Enum;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
@@ -150,10 +149,12 @@
                return selectedTask;
            }
            // ===== TargetAddress 不可用时,先尝试同 NextAddress 的其他任务 =====
            // ===== TargetAddress 不可用时,先尝试同 NextAddress不同TargetAddress 的其他任务 =====
            var sameStationTasks = _taskService
                .QueryStackerCraneOutTasks(deviceCode, new List<string> { candidateTask.NextAddress })
                .Where(x => x.TaskId != candidateTask.TaskId)
                .Where(x => x.TaskId != candidateTask.TaskId && x.TargetAddress != candidateTask.TargetAddress)
                .GroupBy(x => x.TargetAddress)
                .Select(g => g.FirstOrDefault())
                .ToList();
            foreach (var sameStationTask in sameStationTasks)
@@ -168,13 +169,11 @@
            // ===== 同 NextAddress 无可用任务,尝试不同 NextAddress 的任务 =====
            // 查找其他可用的出库站台
            var otherOutStationCodes = _routerService
                .QueryNextRoutes(deviceCode, candidateTask.NextAddress, candidateTask.TaskType)
                .Select(x => x.ChildPosi)
                .ToList();
            // 查询其他站台的出库任务
            var tasks = _taskService.QueryStackerCraneOutTasks(deviceCode, otherOutStationCodes);
            var tasks = _taskService.QueryStackerCraneOutTasks(deviceCode, new List<string> { candidateTask.NextAddress }, false)
                .GroupBy(x => x.TargetAddress)
                .Select(g => g.FirstOrDefault())
                .ToList();
            foreach (var alternativeTask in tasks)
            {
                selectedTask = TrySelectOutboundTask(alternativeTask);
@@ -207,10 +206,13 @@
        {
            // 先进行本地站台检查(PLC 读取,快速),避免不必要的 WMS HTTP 调用
            // 判断 TargetAddress 输送线站台是否空闲
            if (!IsTargetAddressConveyorStationAvailable(outboundTask))
            if (outboundTask.TaskType != (int)TaskOutboundTypeEnum.OutEmpty && outboundTask.TargetAddress != "CWSC1")
            {
                return null;
                // 判断 TargetAddress 输送线站台是否空闲
                if (!IsTargetAddressConveyorStationAvailable(outboundTask))
                {
                    return null;
                }
            }
            // 判断 NextAddress 出库站台是否可用
@@ -219,6 +221,8 @@
                return null;
            }
            //if (outboundTask.TargetAddress != "CWSC1")
            //{
            // 检查是否有正在执行的输送线任务去往同一 TargetAddress
            if (_taskService.HasExecutingTaskToTarget(outboundTask.Roadway, outboundTask.TargetAddress))
            {
@@ -226,7 +230,12 @@
                    $"TrySelectOutboundTask:TargetAddress: {outboundTask.TargetAddress} 已有正在执行的输送线任务", outboundTask.Roadway, outboundTask.TargetAddress, outboundTask.TaskNum);
                return null;
            }
            //}
            if (outboundTask.Roadway != "GWSC1")
            {
                return outboundTask;
            }
            // 站台检查通过后,调用 WMS 判断是否需要移库
            var taskAfterTransferCheck = _transferCheck(outboundTask.TaskNum) ?? outboundTask;
            var taskGroup = taskAfterTransferCheck.TaskType.GetTaskTypeGroup();