From f56441867f2cc77567f97a92348a5d878f0dca05 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期四, 12 三月 2026 18:24:15 +0800
Subject: [PATCH] Add AGENTS instructions and updates
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs | 134 ++++++++++++++++++++++++++++++++++----------
1 files changed, 103 insertions(+), 31 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
index 707e404..463547d 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
@@ -1,6 +1,9 @@
-锘縰sing System.Diagnostics.CodeAnalysis;
-using System.Linq;
+锘縰sing Newtonsoft.Json;
+using System.Diagnostics.CodeAnalysis;
+using WIDESEA_Core;
+using WIDESEAWCS_Common.HttpEnum;
using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -16,55 +19,124 @@
{
private readonly ITaskService _taskService;
private readonly IRouterService _routerService;
+ private readonly Func<int, Dt_Task?> _transferCheck;
- public StackerCraneTaskSelector(ITaskService taskService, IRouterService routerService)
+ public StackerCraneTaskSelector(ITaskService taskService, IRouterService routerService, HttpClientHelper httpClientHelper)
+ : this(taskService, routerService, taskNum => QueryTransferTask(httpClientHelper, taskNum))
+ {
+ }
+
+ public StackerCraneTaskSelector(ITaskService taskService, IRouterService routerService, Func<int, Dt_Task?> transferCheck)
{
_taskService = taskService;
_routerService = routerService;
+ _transferCheck = transferCheck;
}
public Dt_Task? SelectTask(IStackerCrane commonStackerCrane)
{
- Dt_Task? task;
+ Dt_Task? candidateTask;
if (commonStackerCrane.LastTaskType == null)
{
- task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
+ candidateTask = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
}
else if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
- task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
- task ??= _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+ candidateTask = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+ candidateTask ??= _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
}
else
{
- task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+ candidateTask = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
}
- if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+ if (candidateTask == null)
{
- if (IsOutTaskStationAvailable(task))
- {
- return task;
- }
-
- var otherOutStationCodes = _routerService
- .QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress, task.TaskType)
- .Select(x => x.ChildPosi)
- .ToList();
-
- var tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStationCodes);
- foreach (var alternativeTask in tasks)
- {
- if (IsOutTaskStationAvailable(alternativeTask))
- {
- return alternativeTask;
- }
- }
-
- task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+ return null;
}
- return task;
+ if (candidateTask.TaskType.GetTaskTypeGroup() != TaskTypeGroup.OutbondGroup)
+ {
+ return candidateTask;
+ }
+
+ Dt_Task? selectedTask = TrySelectOutboundTask(candidateTask);
+ if (selectedTask != null)
+ {
+ return selectedTask;
+ }
+
+ var otherOutStationCodes = _routerService
+ .QueryNextRoutes(commonStackerCrane.DeviceCode, candidateTask.NextAddress, candidateTask.TaskType)
+ .Select(x => x.ChildPosi)
+ .ToList();
+
+ var tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStationCodes);
+ foreach (var alternativeTask in tasks)
+ {
+ selectedTask = TrySelectOutboundTask(alternativeTask);
+ if (selectedTask != null)
+ {
+ return selectedTask;
+ }
+ }
+
+ return _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+ }
+
+ private Dt_Task? TrySelectOutboundTask(Dt_Task outboundTask)
+ {
+ // 鍙鏄嚭搴撲换鍔★紝蹇呴』鍏堣皟鐢╓MS鍒ゆ柇鏄惁闇�瑕佺Щ搴撱��
+ var taskAfterTransferCheck = _transferCheck(outboundTask.TaskNum) ?? outboundTask;
+ var taskGroup = taskAfterTransferCheck.TaskType.GetTaskTypeGroup();
+
+ if (taskGroup == TaskTypeGroup.RelocationGroup || taskGroup == TaskTypeGroup.OutbondGroup)
+ {
+ TryAddTaskFromWms(taskAfterTransferCheck);
+ }
+
+ if (taskGroup == TaskTypeGroup.RelocationGroup)
+ {
+ return taskAfterTransferCheck;
+ }
+
+ if (taskGroup != TaskTypeGroup.OutbondGroup)
+ {
+ return taskAfterTransferCheck;
+ }
+
+ return IsOutTaskStationAvailable(taskAfterTransferCheck) ? taskAfterTransferCheck : null;
+ }
+
+ private static Dt_Task? QueryTransferTask(HttpClientHelper httpClientHelper, int taskNum)
+ {
+ var response = httpClientHelper.Post<WebResponseContent>(
+ nameof(ConfigKey.TransferCheck),
+ taskNum.ToString());
+
+ if (response == null || !response.IsSuccess || response.Data == null || !response.Data.Status || response.Data.Data == null)
+ {
+ return null;
+ }
+
+ var taskJson = response.Data.Data.ToString();
+ return string.IsNullOrWhiteSpace(taskJson) ? null : JsonConvert.DeserializeObject<Dt_Task>(taskJson);
+ }
+
+ private void TryAddTaskFromWms(Dt_Task task)
+ {
+ if (task.TaskNum <= 0)
+ {
+ return;
+ }
+
+ var existingTask = _taskService.QueryByTaskNum(task.TaskNum);
+ if (existingTask != null)
+ {
+ return;
+ }
+
+ _taskService.AddData(task);
}
private bool IsOutTaskStationAvailable([NotNull] Dt_Task task)
@@ -87,4 +159,4 @@
return conveyorLine.IsOccupied(router.ChildPosi);
}
}
-}
+}
\ No newline at end of file
--
Gitblit v1.9.3