Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IInboundTaskFlowService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ using System.Diagnostics.CodeAnalysis; using WIDESEAWCS_Core; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_ITaskInfoService { /// <summary> /// å ¥åºä»»å¡æµç¨æå¡æ¥å£ã /// </summary> public interface IInboundTaskFlowService : IDependency { /// <summary> /// æ¥æ¶WMS任塿¶åå§åå ¥åºä»»å¡ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); /// <summary> /// æ¨è¿å ¥åºä»»å¡å°ä¸ä¸ç¶æã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>æ¨è¿ç»æã</returns> WebResponseContent MoveToNextStatus([NotNull] Dt_Task task); /// <summary> /// å¤çå åæºå ¥åºå®æå¨ä½ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>å¤çç»æã</returns> WebResponseContent CompleteStackerTask([NotNull] Dt_Task task); } } Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IOutboundTaskFlowService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ using System.Diagnostics.CodeAnalysis; using WIDESEAWCS_Core; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_ITaskInfoService { /// <summary> /// åºåºä»»å¡æµç¨æå¡æ¥å£ã /// </summary> public interface IOutboundTaskFlowService : IDependency { /// <summary> /// æ¥æ¶WMS任塿¶åå§ååºåºä»»å¡ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); /// <summary> /// æ¨è¿åºåºä»»å¡å°ä¸ä¸ç¶æã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>æ¨è¿ç»æã</returns> WebResponseContent MoveToNextStatus([NotNull] Dt_Task task); /// <summary> /// å¤çå åæºåºåºå®æå¨ä½ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>å¤çç»æã</returns> WebResponseContent CompleteStackerTask([NotNull] Dt_Task task); } } Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRelocationTaskFlowService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ using System.Diagnostics.CodeAnalysis; using WIDESEAWCS_Core; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_ITaskInfoService { /// <summary> /// ç§»åºä»»å¡æµç¨æå¡æ¥å£ã /// </summary> public interface IRelocationTaskFlowService : IDependency { /// <summary> /// æ¥æ¶WMS任塿¶åå§åç§»åºä»»å¡ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); /// <summary> /// æ¨è¿ç§»åºä»»å¡å°ä¸ä¸ç¶æã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>æ¨è¿ç»æã</returns> WebResponseContent MoveToNextStatus([NotNull] Dt_Task task); /// <summary> /// å¤çå åæºç§»åºå®æå¨ä½ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>å¤çç»æã</returns> WebResponseContent CompleteStackerTask([NotNull] Dt_Task task); } } Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskFlowService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ using System.Diagnostics.CodeAnalysis; using WIDESEAWCS_Core; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_ITaskInfoService { /// <summary> /// æºæ¢°æä»»å¡æµç¨æå¡æ¥å£ã /// </summary> public interface IRobotTaskFlowService : IDependency { /// <summary> /// æ¥æ¶WMS任塿¶åå§åæºæ¢°æä»»å¡ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); /// <summary> /// æ¨è¿æºæ¢°æä»»å¡å°ä¸ä¸ç¶æã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>æ¨è¿ç»æã</returns> WebResponseContent MoveToNextStatus([NotNull] Dt_Task task); /// <summary> /// å¤çå åæºå¨ä½ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>å¤çç»æã</returns> WebResponseContent CompleteStackerTask([NotNull] Dt_Task task); } } Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/InboundTaskFlowService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,148 @@ using System.Diagnostics.CodeAnalysis; using WIDESEAWCS_Common.HttpEnum; using WIDESEAWCS_Common.TaskEnum; using WIDESEA_Core; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Service; namespace WIDESEAWCS_TaskInfoService.Flows { /// <summary> /// å ¥åºä»»å¡æµç¨æå¡ã /// è´è´£å ¥åºä»»å¡æ¥æ¶åå§åãç¶ææ¨è¿åå åæºå®æå¤çã /// </summary> public class InboundTaskFlowService : IInboundTaskFlowService { private readonly IRouterService _routerService; private readonly HttpClientHelper _httpClientHelper; /// <summary> /// åå§åå ¥åºä»»å¡æµç¨æå¡ã /// </summary> /// <param name="routerService">è·¯ç±æå¡ã</param> /// <param name="httpClientHelper">WMSæ¥å£è°ç¨å¸®å©ç±»ã</param> public InboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper) { _routerService = routerService; _httpClientHelper = httpClientHelper; } /// <summary> /// æ¥æ¶WMS任塿¶åå§åå ¥åºä»»å¡ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) { Dt_Router routers = _routerService.QueryNextRoute(source.SourceAddress); if (routers.IsNullOrEmpty()) { return; } task.TaskStatus = (int)TaskInStatusEnum.InNew; task.CurrentAddress = source.SourceAddress; task.NextAddress = routers.ChildPosi; } /// <summary> /// æ¨è¿å ¥åºä»»å¡ç¶æï¼å¹¶å¨å ³é®ç¶æè°ç¨WMSæ¥å£ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>æ¨è¿ç»æã</returns> public WebResponseContent MoveToNextStatus([NotNull] Dt_Task task) { if (task.TaskStatus >= (int)TaskInStatusEnum.InFinish) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskInStatusEnum>(); if (task.TaskStatus <= 0) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); if (task.TaskStatus == (int)TaskInStatusEnum.Line_InFinish) { return GetWMSInboundLocation(task); } return UpdateWMSTaskStatus(task); } /// <summary> /// å¤çå åæºå ¥åºå®æå¨ä½ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>å¤çç»æã</returns> public WebResponseContent CompleteStackerTask([NotNull] Dt_Task task) { WebResponseContent content = new WebResponseContent(); if (task.TaskStatus != (int)TaskInStatusEnum.SC_InExecuting) { return WebResponseContent.Instance.OK(); } int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskInStatusEnum>(); task.TaskStatus = nextStatus; task.ModifyDate = DateTime.Now; task.Modifier = "System"; var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.InboundFinishTaskAsync), (new CreateTaskDto { PalletCode = task.PalletCode }).ToJson()); if (!result.IsSuccess || !result.Data.Status) { return content.Error($"éç¥WMSç³»ç»å åæºå ¥åºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); } return content.Error($"éç¥WMSç³»ç»å åæºå ¥åºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); } /// <summary> /// ä»WMSè·åå ¥åºç®æ å°åå¹¶ååä»»å¡ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>è°ç¨ç»æã</returns> private WebResponseContent GetWMSInboundLocation(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.GetTasksLocation), new CreateTaskDto { PalletCode = task.PalletCode }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£è·åä»»å¡ç®æ å°å失败,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); string? nextAddress = result.Data.Data?.ToString(); if (string.IsNullOrEmpty(nextAddress)) return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£è·åä»»å¡ç®æ å°å失败,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ãæªè·åå°ææçç®æ å°åã"); task.CurrentAddress = task.NextAddress; task.NextAddress = nextAddress; task.TargetAddress = nextAddress; return WebResponseContent.Instance.OK(); } /// <summary> /// å°ä»»å¡ç¶æåæ¥å°WMSã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>åæ¥ç»æã</returns> private WebResponseContent UpdateWMSTaskStatus(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.UpdateTaskByStatus), new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£æ´æ°ä»»å¡ç¶æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); return WebResponseContent.Instance.OK(); } } } Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,187 @@ using Newtonsoft.Json; using System.Diagnostics.CodeAnalysis; using WIDESEAWCS_Common.HttpEnum; using WIDESEAWCS_Common.TaskEnum; using WIDESEA_Core; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.Stock; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Service; namespace WIDESEAWCS_TaskInfoService.Flows { /// <summary> /// åºåºä»»å¡æµç¨æå¡ã /// è´è´£åºåºä»»å¡æ¥æ¶åå§åãç¶ææ¨è¿åå åæºå®æå¤çã /// </summary> public class OutboundTaskFlowService : IOutboundTaskFlowService { private readonly IRouterService _routerService; private readonly HttpClientHelper _httpClientHelper; private readonly IRobotTaskService _robotTaskService; /// <summary> /// åå§ååºåºä»»å¡æµç¨æå¡ã /// </summary> /// <param name="routerService">è·¯ç±æå¡ã</param> /// <param name="httpClientHelper">WMSæ¥å£è°ç¨å¸®å©ç±»ã</param> /// <param name="robotTaskService">æºæ¢°æä»»å¡æå¡ã</param> public OutboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService) { _routerService = routerService; _httpClientHelper = httpClientHelper; _robotTaskService = robotTaskService; } /// <summary> /// æ¥æ¶WMS任塿¶åå§ååºåºä»»å¡ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) { int taskType = task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty ? 100 : task.TaskType; Dt_Router router = _routerService.QueryNextRoute(source.Roadway, source.TargetAddress, taskType); if (router == null) { return; } task.TaskStatus = (int)TaskOutStatusEnum.OutNew; task.CurrentAddress = source.SourceAddress; task.NextAddress = router.ChildPosi; } /// <summary> /// æ¨è¿åºåºä»»å¡ç¶æï¼å¹¶å¨å ³é®ç¶æè°ç¨WMSæ¥å£ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>æ¨è¿ç»æã</returns> public WebResponseContent MoveToNextStatus([NotNull] Dt_Task task) { if (task.TaskStatus >= (int)TaskOutStatusEnum.OutFinish) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>(); if (task.TaskStatus <= 0) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.Outbound) { return GetWMSOutboundTrayTask(task); } if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty) { return _robotTaskService.GetWMSRobotTask(task); } if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting) { return WebResponseContent.Instance.OK(); } return UpdateWMSTaskStatus(task); } /// <summary> /// å¤çå åæºåºåºå®æå¨ä½ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>å¤çç»æã</returns> public WebResponseContent CompleteStackerTask([NotNull] Dt_Task task) { WebResponseContent content = new WebResponseContent(); if (task.TaskStatus != (int)TaskOutStatusEnum.SC_OutExecuting) { return WebResponseContent.Instance.OK(); } int taskType = task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty ? 100 : task.TaskType; Dt_Router router = _routerService.QueryNextRoute(task.NextAddress, task.TargetAddress, taskType); if (router == null) { return WebResponseContent.Instance.Error("æªæ¾å°è®¾å¤è·¯ç±ä¿¡æ¯"); } int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>(); task.TaskStatus = nextStatus; task.CurrentAddress = task.NextAddress; task.NextAddress = router.ChildPosi; task.ModifyDate = DateTime.Now; task.Modifier = "System"; content = NotifyWMSOutboundFinish(task); if (!content.Status) { return content; } return content.Error($"éç¥WMSç³»ç»å åæºåºåºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); } /// <summary> /// éç¥WMSåºåºå®æã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>éç¥ç»æã</returns> private WebResponseContent NotifyWMSOutboundFinish(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.OutboundFinishTaskAsync), new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"éç¥WMSç³»ç»å åæºåºåºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); return WebResponseContent.Instance.OK(); } /// <summary> /// ä»WMSè·å空æçåºåºä»»å¡ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>è°ç¨ç»æï¼æåæ¶Dataä¸å å«ä¸ä¸ªWMSTaskDTOéåã</returns> private WebResponseContent GetWMSOutboundTrayTask(Dt_Task task) { int warehouseId = _robotTaskService.MapWarehouseIdConfigKey(task.TargetAddress); string sourceLineNo = _robotTaskService.ResolveRobotRuleValue(task.TargetAddress, "AddressSourceLineNoMap", task.TargetAddress); var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.GetOutBoundTrayTaskAsync), new CreateTaskDto { WarehouseId = warehouseId, TargetAddress = sourceLineNo }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"è·åWMSç³»ç»ç©ºæçåºåºä»»å¡å¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); WMSTaskDTO? wMSTask = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data?.ToString() ?? string.Empty); if (wMSTask == null) return WebResponseContent.Instance.Error($"è·åWMSç³»ç»ç©ºæçåºåºä»»å¡å¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ãWMSæªè¿åææä»»å¡æ°æ®ã"); return WebResponseContent.Instance.OK("æå", new List<WMSTaskDTO> { wMSTask }); } /// <summary> /// å°ä»»å¡ç¶æåæ¥å°WMSã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>åæ¥ç»æã</returns> private WebResponseContent UpdateWMSTaskStatus(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.UpdateTaskByStatus), new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£æ´æ°ä»»å¡ç¶æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); return WebResponseContent.Instance.OK(); } } } Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,137 @@ using System.Diagnostics.CodeAnalysis; using WIDESEAWCS_Common.HttpEnum; using WIDESEAWCS_Common.TaskEnum; using WIDESEA_Core; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_TaskInfoService.Flows { /// <summary> /// ç§»åºä»»å¡æµç¨æå¡ã /// è´è´£ç§»åºä»»å¡æ¥æ¶åå§åãç¶ææ¨è¿ä»¥åå åæºå®ææ¶çWMSéç¥æµç¨ã /// </summary> public class RelocationTaskFlowService : IRelocationTaskFlowService { private readonly HttpClientHelper _httpClientHelper; /// <summary> /// åå§åç§»åºä»»å¡æµç¨æå¡ã /// </summary> /// <param name="httpClientHelper">WMSæ¥å£è°ç¨å¸®å©ç±»ã</param> public RelocationTaskFlowService(HttpClientHelper httpClientHelper) { _httpClientHelper = httpClientHelper; } /// <summary> /// æ¥æ¶WMS任塿¶åå§åç§»åºä»»å¡ã /// å½åç§»åºä»»å¡ä¸åé¢å¤åå§åã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) { // å½åçæ¬ç§»åºä»»å¡æ¥æ¶æ¶ä¸éè¦é¢å¤è®¾ç½®è·¯ç±æç¶æã } /// <summary> /// å°ç§»åºä»»å¡æ¨è¿å°ä¸ä¸ç¶æï¼å¹¶å¨å ³é®ç¶æè°ç¨WMSæ¥å£ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>ç¶ææ¨è¿ç»æã</returns> public WebResponseContent MoveToNextStatus([NotNull] Dt_Task task) { if (task.TaskStatus >= (int)TaskRelocationStatusEnum.RelocationFinish) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRelocationStatusEnum>(); if (task.TaskStatus <= 0) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); if (task.TaskStatus == (int)TaskRelocationStatusEnum.SC_RelocationExecuting) { return UpdateWMSTaskStatus(task); } if (task.TaskStatus == (int)TaskRelocationStatusEnum.RelocationFinish) { return NotifyWMSRelocationFinish(task); } return WebResponseContent.Instance.OK(); } /// <summary> /// å¤çå åæºç§»åºå®æå¨ä½ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>å¤çç»æã</returns> public WebResponseContent CompleteStackerTask([NotNull] Dt_Task task) { WebResponseContent content = new WebResponseContent(); if (task.TaskStatus != (int)TaskRelocationStatusEnum.SC_RelocationExecuting) { return WebResponseContent.Instance.OK(); } int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRelocationStatusEnum>(); task.TaskStatus = nextStatus; task.ModifyDate = DateTime.Now; task.Modifier = "System"; WebResponseContent result = NotifyWMSRelocationFinish(task); if (!result.Status) { return content.Error($"éç¥WMSç³»ç»å åæºç§»åºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Message}ã"); } return content.Error($"éç¥WMSç³»ç»å åæºç§»åºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); } /// <summary> /// å°ç§»åºç¶æåæ¥å°WMSã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>åæ¥ç»æã</returns> private WebResponseContent UpdateWMSTaskStatus(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.UpdateTaskByStatus), new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£æ´æ°ä»»å¡ç¶æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); return WebResponseContent.Instance.OK(); } /// <summary> /// éç¥WMSç§»åºä»»å¡å·²å®æã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>éç¥ç»æã</returns> private WebResponseContent NotifyWMSRelocationFinish(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.RelocationFinishTask), new CreateTaskDto { PalletCode = task.PalletCode, SourceAddress = task.CurrentAddress, TargetAddress = task.TargetAddress, Roadway = task.Roadway, TaskType = task.TaskType }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"éç¥WMSç³»ç»ç§»åºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); return WebResponseContent.Instance.OK(); } } } Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RobotTaskFlowService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,56 @@ using System.Diagnostics.CodeAnalysis; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_TaskInfoService.Flows { /// <summary> /// æºæ¢°æä»»å¡æµç¨æå¡ã /// è´è´£æºæ¢°æä»»å¡å¨ä¸»æµç¨ä¸çç¶ææ¨è¿ä¸å®æå¤çã /// </summary> public class RobotTaskFlowService : IRobotTaskFlowService { /// <summary> /// æ¥æ¶WMS任塿¶åå§åæºæ¢°æä»»å¡ã /// å½åæºæ¢°æä»»å¡ä¸åé¢å¤åå§åã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) { // å½åçæ¬æºæ¢°æä»»å¡æ¥æ¶æ¶ä¸éè¦é¢å¤è®¾ç½®è·¯ç±æç¶æã } /// <summary> /// æ¨è¿æºæ¢°æä»»å¡ç¶æã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>æ¨è¿ç»æã</returns> public WebResponseContent MoveToNextStatus([NotNull] Dt_Task task) { if (task.TaskStatus >= (int)TaskRobotStatusEnum.RobotFinish) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRobotStatusEnum>(); if (task.TaskStatus <= 0) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); return WebResponseContent.Instance.OK(); } /// <summary> /// å¤çå åæºå¨ä½ã /// æºæ¢°æä»»å¡å½åæ é¢å¤å®æé»è¾ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <returns>å¤çç»æã</returns> public WebResponseContent CompleteStackerTask([NotNull] Dt_Task task) { return WebResponseContent.Instance.OK(); } } } Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
@@ -174,7 +174,7 @@ /// å°é 置任å¡ç±»å转æ¢ä¸ºæ¥å£é ç½®é®ã /// æ¯æå¼ï¼Split/Group/Changeï¼å¤§å°å䏿æï¼ /// </summary> private string MapRobotTaskTypeToConfigKey(string? taskType) public string MapRobotTaskTypeToConfigKey(string? taskType) { string type = (taskType ?? string.Empty).Trim().ToLowerInvariant(); return type switch @@ -188,7 +188,7 @@ /// <summary> /// æ ¹æ®æ¥å£ç±»åæå»ºæºæ¢°æä»»å¡å ¥åã /// </summary> private StockDTO BuildRobotTaskStock(Dt_Task task, string configKey) public StockDTO BuildRobotTaskStock(Dt_Task task, string configKey) { string targetAddress = task.TargetAddress ?? string.Empty; string roadway = ResolveRobotRuleValue(targetAddress, "AddressRoadwayMap", task.Roadway); @@ -231,7 +231,7 @@ /// <summary> /// æ ¹æ®ç®æ å°åæã精确 > åéå¼ãè§£æè§åå¼ã /// </summary> private string ResolveRobotRuleValue(string? targetAddress, string addressSectionName, string? fallback) public string ResolveRobotRuleValue(string? targetAddress, string addressSectionName, string? fallback) { string address = (targetAddress ?? string.Empty).Trim(); string defaultValue = fallback ?? string.Empty; Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -18,14 +18,10 @@ #endregion << ç æ¬ 注 é >> using MapsterMapper; using Microsoft.Extensions.Configuration; using Microsoft.IdentityModel.Tokens; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using SqlSugar; using System.Diagnostics.CodeAnalysis; using WIDESEA_Core; using WIDESEAWCS_Common.HttpEnum; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseServices; @@ -51,8 +47,10 @@ private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; private readonly IMapper _mapper; private readonly HttpClientHelper _httpClientHelper; private readonly IRobotTaskService _robotTaskService; private readonly IOutboundTaskFlowService _outboundTaskFlowService; private readonly IInboundTaskFlowService _inboundTaskFlowService; private readonly IRelocationTaskFlowService _relocationTaskFlowService; private readonly IRobotTaskFlowService _robotTaskFlowService; private Dictionary<string, OrderByType> _taskOrderBy = new() { @@ -71,14 +69,25 @@ public List<int> TaskRobotTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList(); public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService) : base(BaseDal) public TaskService( ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, IOutboundTaskFlowService outboundTaskFlowService, IInboundTaskFlowService inboundTaskFlowService, IRelocationTaskFlowService relocationTaskFlowService, IRobotTaskFlowService robotTaskFlowService) : base(BaseDal) { _routerService = routerService; _taskExecuteDetailService = taskExecuteDetailService; _taskExecuteDetailRepository = taskExecuteDetailRepository; _mapper = mapper; _httpClientHelper = httpClientHelper; _robotTaskService = robotTaskService; _outboundTaskFlowService = outboundTaskFlowService; _inboundTaskFlowService = inboundTaskFlowService; _relocationTaskFlowService = relocationTaskFlowService; _robotTaskFlowService = robotTaskFlowService; } /// <summary> @@ -100,35 +109,7 @@ } Dt_Task task = _mapper.Map<Dt_Task>(item); task.Creater = "WMS"; if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { int taskType = 0; if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty) { taskType = 100; } else taskType = task.TaskType; Dt_Router router = _routerService.QueryNextRoute(item.Roadway, item.TargetAddress, taskType); //æä¸èèå¤è·¯å¾ if (router != null) { task.TaskStatus = (int)TaskOutStatusEnum.OutNew; task.CurrentAddress = item.SourceAddress; task.NextAddress = router.ChildPosi; } } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) { Dt_Router routers = _routerService.QueryNextRoute(item.SourceAddress); //æä¸èèå¤è·¯å¾ if (!routers.IsNullOrEmpty()) { task.TaskStatus = (int)TaskInStatusEnum.InNew; task.CurrentAddress = item.SourceAddress; task.NextAddress = routers.ChildPosi; } } InitializeTaskOnReceive(task, item); tasks.Add(task); } BaseDal.AddData(tasks); @@ -175,6 +156,32 @@ content = WebResponseContent.Instance.Error(ex.Message); } return content; } /// <summary> /// æä»»å¡åç»åå§å任塿¥æ¶ä¿¡æ¯ã /// </summary> /// <param name="task">ä»»å¡å®ä½ã</param> /// <param name="source">WMSåå§ä»»å¡å¯¹è±¡ã</param> private void InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source) { switch (task.TaskType.GetTaskTypeGroup()) { case TaskTypeGroup.OutbondGroup: _outboundTaskFlowService.InitializeOnReceive(task, source); break; case TaskTypeGroup.InboundGroup: _inboundTaskFlowService.InitializeOnReceive(task, source); break; case TaskTypeGroup.RelocationGroup: _relocationTaskFlowService.InitializeOnReceive(task, source); break; case TaskTypeGroup.OtherGroup: _robotTaskFlowService.InitializeOnReceive(task, source); break; default: break; } } /// <summary> @@ -369,15 +376,23 @@ var result = task.TaskType.GetTaskTypeGroup() switch { TaskTypeGroup.OutbondGroup => ProcessOutboundTaskStatus(task), TaskTypeGroup.InboundGroup => ProcessInboundTaskStatus(task), TaskTypeGroup.RelocationGroup => ProcessRelocationTaskStatus(task), TaskTypeGroup.OtherGroup => ProcessRobotTaskStatus(task), TaskTypeGroup.OutbondGroup => _outboundTaskFlowService.MoveToNextStatus(task), TaskTypeGroup.InboundGroup => _inboundTaskFlowService.MoveToNextStatus(task), TaskTypeGroup.RelocationGroup => _relocationTaskFlowService.MoveToNextStatus(task), TaskTypeGroup.OtherGroup => _robotTaskFlowService.MoveToNextStatus(task), _ => WebResponseContent.Instance.Error($"ä»»å¡ç±»åé误,æªæ¾å°è¯¥ä»»å¡ç±»å,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç±»å:ã{task.TaskType}ã") }; if (!result.Status) return result; // åºåºå®æçº¿ä½èç¹æ¶ï¼å¯è½éè¦æ¥æ¶å ¥åºæ°ä»»å¡ã if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && result.Data is List<WMSTaskDTO> wmsTasks && wmsTasks.Count > 0) { return ReceiveWMSTask(wmsTasks); } // æ´æ°ä»»å¡æ°æ® task.ModifyDate = DateTime.Now; @@ -396,209 +411,6 @@ ? $"人工æå¨å°ä»»å¡ç¶æä»ã{oldState}ã跳转å°ã{task.TaskStatus}ã" : $"ç³»ç»èªå¨æµç¨ï¼ä»»å¡ç¶æä»ã{oldState}ã转å°ã{task.TaskStatus}ã"; _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, logMessage); return WebResponseContent.Instance.OK(); } /// <summary> /// å¤çåºåºä»»å¡ç¶æè½¬æ¢ /// </summary> private WebResponseContent ProcessOutboundTaskStatus(Dt_Task task) { if (task.TaskStatus >= (int)TaskOutStatusEnum.OutFinish) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>(); if (task.TaskStatus <= 0) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); // æ ¹æ®ç¶æè°ç¨ä¸åçWMSæ¥å£ if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.Outbound) { return GetWMSOutboundTrayTask(task); } else if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty) { return _robotTaskService.GetWMSRobotTask(task); } else { if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting) return WebResponseContent.Instance.OK(); else return UpdateWMSTaskStatus(task); } } /// <summary> /// å¤çå ¥åºä»»å¡ç¶æè½¬æ¢ /// </summary> private WebResponseContent ProcessInboundTaskStatus(Dt_Task task) { if (task.TaskStatus >= (int)TaskInStatusEnum.InFinish) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskInStatusEnum>(); if (task.TaskStatus <= 0) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); // æ ¹æ®ç¶æè°ç¨ä¸åçWMSæ¥å£ if (task.TaskStatus == (int)TaskInStatusEnum.Line_InFinish) { return GetWMSInboundLocation(task); } else { return UpdateWMSTaskStatus(task); } } /// <summary> /// å¤çæºæ¢°æä»»å¡ç¶æè½¬æ¢ /// </summary> private WebResponseContent ProcessRobotTaskStatus(Dt_Task task) { if (task.TaskStatus >= (int)TaskRobotStatusEnum.RobotFinish) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRobotStatusEnum>(); if (task.TaskStatus <= 0) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); return WebResponseContent.Instance.OK(); } /// <summary> /// å¤çç§»åºä»»å¡ç¶æè½¬æ¢ /// </summary> private WebResponseContent ProcessRelocationTaskStatus(Dt_Task task) { if (task.TaskStatus >= (int)TaskRelocationStatusEnum.RelocationFinish) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRelocationStatusEnum>(); if (task.TaskStatus <= 0) return WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskStatus}ã"); // ç§»åºä»»å¡å¼å§æ¶ï¼åæ¥WMSä»»å¡ç¶æ if (task.TaskStatus == (int)TaskRelocationStatusEnum.SC_RelocationExecuting) { return UpdateWMSTaskStatus(task); } // ç§»åºä»»å¡å®ææ¶ï¼è°ç¨WMSç§»åºå®ææ¥å£ if (task.TaskStatus == (int)TaskRelocationStatusEnum.RelocationFinish) { return NotifyWMSRelocationFinish(task); } return WebResponseContent.Instance.OK(); } /// <summary> /// éç¥WMSç³»ç»åºåºå®æ /// </summary> private WebResponseContent NotifyWMSOutboundFinish(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.OutboundFinishTaskAsync), new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"éç¥WMSç³»ç»å åæºåºåºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); return WebResponseContent.Instance.OK(); } /// <summary> /// è·å空æåºåºä»»å¡ /// </summary> private WebResponseContent GetWMSOutboundTrayTask(Dt_Task task) { var targetAddress = task.TargetAddress; var warehouseId = _robotTaskService.MapWarehouseIdConfigKey(task.TargetAddress); string sourceLineNo = _robotTaskService.ResolveRobotRuleValue(targetAddress, "AddressSourceLineNoMap", task.TargetAddress); var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.GetOutBoundTrayTaskAsync), new CreateTaskDto { WarehouseId = warehouseId, TargetAddress = sourceLineNo }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"è·åWMSç³»ç»ç©ºæçåºåºä»»å¡å¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); var wMSTask = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data?.ToString() ?? string.Empty); var tasks = new List<WMSTaskDTO> { wMSTask }; return ReceiveWMSTask(tasks); } /// <summary> /// ä»WMSç³»ç»è·åå ¥åºç®æ å°å /// </summary> private WebResponseContent GetWMSInboundLocation(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.GetTasksLocation), new CreateTaskDto { PalletCode = task.PalletCode }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£è·åä»»å¡ç®æ å°å失败,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); var nextAddress = result.Data.Data?.ToString(); if (string.IsNullOrEmpty(nextAddress)) return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£è·åä»»å¡ç®æ å°å失败,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ãæªè·åå°ææçç®æ å°åã"); task.CurrentAddress = task.NextAddress; task.NextAddress = nextAddress; task.TargetAddress = nextAddress; return WebResponseContent.Instance.OK(); } /// <summary> /// æ´æ°WMSç³»ç»ä»»å¡ç¶æ /// </summary> private WebResponseContent UpdateWMSTaskStatus(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.UpdateTaskByStatus), new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"è°ç¨WMSæ¥å£æ´æ°ä»»å¡ç¶æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{result.Data?.Message}ã"); return WebResponseContent.Instance.OK(); } /// <summary> /// éç¥WMSç³»ç»ç§»åºä»»å¡å®æ /// </summary> private WebResponseContent NotifyWMSRelocationFinish(Dt_Task task) { var result = _httpClientHelper.Post<WebResponseContent>( nameof(ConfigKey.RelocationFinishTask), new CreateTaskDto { PalletCode = task.PalletCode, SourceAddress = task.CurrentAddress, TargetAddress = task.TargetAddress, Roadway = task.Roadway, TaskType = task.TaskType }.ToJson()); if (!result.IsSuccess || !result.Data.Status) return WebResponseContent.Instance.Error($"éç¥WMSç³»ç»ç§»åºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); return WebResponseContent.Instance.OK(); } @@ -655,101 +467,41 @@ { Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»»å¡ä¿¡æ¯,ä»»å¡å·:ã{taskNum}ã"); if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskStatus == (int)TaskOutStatusEnum.SC_OutExecuting) TaskTypeGroup taskTypeGroup = task.TaskType.GetTaskTypeGroup(); content = taskTypeGroup switch { int taskType = 0; if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty) { taskType = 100; } else taskType = task.TaskType; Dt_Router router = _routerService.QueryNextRoute(task.NextAddress, task.TargetAddress, taskType); if (router == null) return WebResponseContent.Instance.Error($"æªæ¾å°è®¾å¤è·¯ç±ä¿¡æ¯"); int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>(); task.TaskStatus = nextStatus; task.CurrentAddress = task.NextAddress; task.NextAddress = router.ChildPosi; task.ModifyDate = DateTime.Now; task.Modifier = "System"; content = NotifyWMSOutboundFinish(task); if (content.Status) { BaseDal.UpdateData(task); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); return content.Error($"éç¥WMSç³»ç»å åæºåºåºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); } //var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.OutboundFinishTaskAsync), (new StockInfoDTO() { PalletCode = task.PalletCode, TaskNum = task.TaskNum }).ToJson()); //if (result.IsSuccess && result.Data.Status) //{ // BaseDal.UpdateData(task); // _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); // return content.Error($"éç¥WMSç³»ç»å åæºåºåºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); //} //else //{ // return content.Error($"éç¥WMSç³»ç»å åæºåºåºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data.Message}ã"); //} } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskStatus == (int)TaskInStatusEnum.SC_InExecuting) TaskTypeGroup.OutbondGroup => _outboundTaskFlowService.CompleteStackerTask(task), TaskTypeGroup.InboundGroup => _inboundTaskFlowService.CompleteStackerTask(task), TaskTypeGroup.RelocationGroup => _relocationTaskFlowService.CompleteStackerTask(task), TaskTypeGroup.OtherGroup => _robotTaskFlowService.CompleteStackerTask(task), _ => throw new Exception($"ä»»å¡ç±»åé误,æªæ¾å°è¯¥ä»»å¡ç±»å,ä»»å¡å·:ã{taskNum}ã,ä»»å¡ç±»å:ã{task.TaskType}ã") }; if (!content.Status) { int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskInStatusEnum>(); task.TaskStatus = nextStatus; task.ModifyDate = DateTime.Now; task.Modifier = "System"; return content; } var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.InboundFinishTaskAsync), (new CreateTaskDto() { PalletCode = task.PalletCode, }).ToJson()); if (taskTypeGroup == TaskTypeGroup.OutbondGroup && task.TaskStatus == (int)TaskOutStatusEnum.SC_OutFinish) { BaseDal.UpdateData(task); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "å åæºåºåºå®æ"); return content; } if (result.IsSuccess && result.Data.Status) { BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.èªå¨å®æ); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºå ¥åºå®æ"); return content.Error($"éç¥WMSç³»ç»å åæºå ¥åºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); } else { return content.Error($"éç¥WMSç³»ç»å åæºå ¥åºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data.Message}ã"); } } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) if (taskTypeGroup == TaskTypeGroup.InboundGroup && task.TaskStatus == (int)TaskInStatusEnum.SC_InFinish) { if (task.TaskStatus == (int)TaskRelocationStatusEnum.SC_RelocationExecuting) { int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRelocationStatusEnum>(); task.TaskStatus = nextStatus; task.ModifyDate = DateTime.Now; task.Modifier = "System"; BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.èªå¨å®æ); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "å åæºå ¥åºå®æ"); return content; } WebResponseContent result = NotifyWMSRelocationFinish(task); if (result.Status) { BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.èªå¨å®æ); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºç§»åºå®æ"); return content.Error($"éç¥WMSç³»ç»å åæºç§»åºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); } else { return content.Error($"éç¥WMSç³»ç»å åæºç§»åºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Message}ã"); } } } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup) if (taskTypeGroup == TaskTypeGroup.RelocationGroup && task.TaskStatus == (int)TaskRelocationStatusEnum.RelocationFinish) { BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.èªå¨å®æ); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "å åæºç§»åºå®æ"); return content; } else { throw new Exception($"ä»»å¡ç±»åé误,æªæ¾å°è¯¥ä»»å¡ç±»å,ä»»å¡å·:ã{taskNum}ã,ä»»å¡ç±»å:ã{task.TaskType}ã"); } content = WebResponseContent.Instance.OK(); } catch (Exception ex)