using MapsterMapper; using System.Diagnostics.CodeAnalysis; using WIDESEA_Core; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.Models; namespace WIDESEAWCS_TaskInfoService; /// /// TaskService 任务接收相关方法 /// public partial class TaskService { /// /// 接收WMS任务信息 /// /// WMS任务对象集合 /// 返回处理结果 public WebResponseContent ReceiveWMSTask([NotNull] List taskDTOs) { WebResponseContent content = new WebResponseContent(); try { List tasks = new List(); List duplicates = new List(); foreach (var item in taskDTOs) { Dt_Task existingTask = BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode); if (existingTask != null) { duplicates.Add(existingTask); continue; } Dt_Task task = _mapper.Map(item); task.Creater = "WMS"; content = InitializeTaskOnReceive(task, item); if (!content.Status) return content; tasks.Add(task); } // TOOD: 这里注意添加错误要返回错误 BaseDal.AddData(tasks); _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "接收WMS任务"); // 将重复任务信息也一并返回 tasks.AddRange(duplicates); var result = tasks; content = WebResponseContent.Instance.OK("成功", result); } catch (Exception ex) { content = WebResponseContent.Instance.Error($"任务接收错误,错误信息:{ex.Message}"); } return content; } /// /// 根据托盘号、起始地址向WMS请求任务 /// /// 托盘号 /// 起始地址 /// public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress) { WebResponseContent content = new WebResponseContent(); try { WMSTaskDTO taskDTO = new WMSTaskDTO() { TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), Grade = 1, PalletCode = palletCode, Roadway = "SC01", SourceAddress = sourceAddress, TargetAddress = "SC01", TaskStatus = (int)TaskInStatusEnum.InNew, Id = 0, TaskType = (int)TaskInboundTypeEnum.Inbound }; content = ReceiveWMSTask(new List { taskDTO }); } catch (Exception ex) { content = WebResponseContent.Instance.Error(ex.Message); } return content; } /// /// 按任务分组初始化任务接收信息。 /// /// 任务实体。 /// WMS原始任务对象。 private WebResponseContent InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source) { switch (task.TaskType.GetTaskTypeGroup()) { case TaskTypeGroup.OutbondGroup: return _outboundTaskFlowService.InitializeOnReceive(task, source); case TaskTypeGroup.InboundGroup: return _inboundTaskFlowService.InitializeOnReceive(task, source); case TaskTypeGroup.RelocationGroup: return _relocationTaskFlowService.InitializeOnReceive(task, source); case TaskTypeGroup.OtherGroup: return _robotTaskFlowService.InitializeOnReceive(task, source); default: return WebResponseContent.Instance.Error("WCS不存在当前任务的任务类型"); } } /// /// 接收WMS手动创建的任务,创建WCS任务 /// /// WMS任务对象集合 /// 返回处理结果 public WebResponseContent ReceiveManualTask([NotNull] List taskDTOs) { WebResponseContent content = new WebResponseContent(); try { // 收集重复任务的信息 var duplicateTasks = new List(); // 倒序遍历,安全删除并收集被移除的项 for (int i = taskDTOs.Count - 1; i >= 0; i--) { var item = taskDTOs[i]; var exists = BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode); if (exists != null) { duplicateTasks.Add(new DuplicateTaskDto { TaskNum = exists.TaskNum, PalletCode = exists.PalletCode, TaskType = exists.TaskType, TaskStatus = exists.TaskStatus }); taskDTOs.RemoveAt(i); } } // 调用 ReceiveWMSTask 创建 WCS 任务 content = ReceiveWMSTask(taskDTOs); // 如果有重复任务,修改返回结果 if (duplicateTasks.Count > 0 && content.Status) { var result = new ReceiveTaskResultDto { Success = true, Message = content.Message + $",其中{duplicateTasks.Count}个任务在WCS中已存在", CreatedCount = taskDTOs.Count, DuplicateTasks = duplicateTasks }; content.Data = result; } return content; } catch (Exception ex) { content = WebResponseContent.Instance.Error($"手动任务接收错误,错误信息:{ex.Message}"); return content; } } }