wanshenmean
16 小时以前 c5c3e4e538a11f2a6391e6b2613375b1f92eb20a
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -101,15 +101,20 @@
            try
            {
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_Task> duplicates = new List<Dt_Task>();
                foreach (var item in taskDTOs)
                {
                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
                    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<Dt_Task>(item);
                    task.Creater = "WMS";
                    InitializeTaskOnReceive(task, item);
                    content = InitializeTaskOnReceive(task, item);
                    if (!content.Status)
                        return content;
                    tasks.Add(task);
                }
                // TOOD: 这里注意添加错误要返回错误
@@ -117,7 +122,10 @@
                _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "接收WMS任务");
                content = WebResponseContent.Instance.OK("成功", tasks);
                // 将重复任务信息也一并返回
                tasks.AddRange(duplicates);
                var result = tasks;
                content = WebResponseContent.Instance.OK("成功", result);
            }
            catch (Exception ex)
            {
@@ -164,24 +172,20 @@
        /// </summary>
        /// <param name="task">任务实体。</param>
        /// <param name="source">WMS原始任务对象。</param>
        private void InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source)
        private WebResponseContent InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source)
        {
            switch (task.TaskType.GetTaskTypeGroup())
            {
                case TaskTypeGroup.OutbondGroup:
                    _outboundTaskFlowService.InitializeOnReceive(task, source);
                    break;
                    return _outboundTaskFlowService.InitializeOnReceive(task, source);
                case TaskTypeGroup.InboundGroup:
                    _inboundTaskFlowService.InitializeOnReceive(task, source);
                    break;
                    return _inboundTaskFlowService.InitializeOnReceive(task, source);
                case TaskTypeGroup.RelocationGroup:
                    _relocationTaskFlowService.InitializeOnReceive(task, source);
                    break;
                    return _relocationTaskFlowService.InitializeOnReceive(task, source);
                case TaskTypeGroup.OtherGroup:
                    _robotTaskFlowService.InitializeOnReceive(task, source);
                    break;
                    return _robotTaskFlowService.InitializeOnReceive(task, source);
                default:
                    break;
                    return WebResponseContent.Instance.Error("WCS不存在当前任务的任务类型");
            }
        }
@@ -392,7 +396,9 @@
                && result.Data is List<WMSTaskDTO> wmsTasks
                && wmsTasks.Count > 0)
            {
                return ReceiveWMSTask(wmsTasks);
                WebResponseContent content = ReceiveWMSTask(wmsTasks);
                if (!content.Status)
                    return content;
            }
            // 更新任务数据
@@ -638,6 +644,74 @@
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum);
        }
        /// <summary>
        /// 接收WMS手动创建的任务,创建WCS任务
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent ReceiveManualTask([NotNull] List<WMSTaskDTO> taskDTOs)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                // 收集重复任务的信息
                var duplicateTasks = new List<DuplicateTaskDto>();
                // 倒序遍历,安全删除并收集被移除的项
                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;
            }
        }
        /// <summary>
        /// 查询指定起点地址的新建手动入库任务
        /// </summary>
        /// <param name="sourceAddress">起点地址</param>
        /// <returns>任务实体</returns>
        public Dt_Task QueryManualInboundTask(string sourceAddress)
        {
            return BaseDal.QueryFirst(x =>
                x.TaskType == (int)TaskInboundTypeEnum.Inbound &&
                x.TaskStatus == (int)TaskInStatusEnum.InNew &&
                x.SourceAddress == sourceAddress);
        }
    }
    public enum ConveyorLineDBNameNew