xiaoyang
2024-11-08 824853fe17b79ed253cd52db58459806bf0371ee
11.08
已修改11个文件
已添加1个文件
885 ■■■■■ 文件已修改
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/HttpHelper.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 223 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/RequestTaskDto.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/UpdateStatusDto.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MOM/ResultTrayCellsStatus.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/Task/IDt_TaskService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs 395 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskController.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/HttpHelper.cs
@@ -17,8 +17,11 @@
                using HttpClient httpClient = new HttpClient();
                httpClient.Timeout = new TimeSpan(0, 0, 60);
                foreach (var header in headers)
                    httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                if (headers != null)
                {
                    foreach (var header in headers)
                        httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                }
                result = await httpClient.GetAsync(serviceAddress).Result.Content.ReadAsStringAsync();
                return result;
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs
@@ -17,5 +17,10 @@
        /// æ‰˜ç›˜å·
        /// </summary>
        public string PalletCode { get; set; }
        /// <summary>
        /// ç©ºæ‰˜ç›˜å¯å…¥å··åˆ°
        /// </summary>
        public string PositionList { get; set; }
    }
}
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -22,6 +22,7 @@
using Newtonsoft.Json;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
@@ -133,45 +134,53 @@
            {
                #region çœŸå®žæ•°æ®
                // TODO: è°ƒç”¨æŽ¥å£èŽ·å–ä¸‹ä¸€ä¸ªåœ°å€
                //// åˆ›å»ºè¯·æ±‚对象
                //RequestTaskDto request = new RequestTaskDto()
                //{
                //    Position = sourceAddress,
                //    PalletCode = palletCode,
                //};
                //// å‘送请求并等待响应
                //var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", request.ToJsonString()).Result;
                //// ååºåˆ—化响应内容
                //content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                //// æ£€æŸ¥çŠ¶æ€å¹¶è¿”å›ž
                //if (!content.Status)
                //    return content;
                //// ååºåˆ—化任务数据
                //WMSTaskDTO task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                //// å¤„理任务并返回结果
                //content = ReceiveWMSTask(new List<WMSTaskDTO> { task });
                #endregion
                WMSTaskDTO taskDTO = new WMSTaskDTO()
                // åˆ›å»ºè¯·æ±‚对象
                RequestTaskDto request = new RequestTaskDto()
                {
                    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                    Grade = 1,
                    Position = sourceAddress,
                    PalletCode = palletCode,
                    RoadWay = "CHSC01",
                    SourceAddress = sourceAddress,
                    TargetAddress = "CHSC01",
                    TaskState = (int)TaskInStatusEnum.InNew,
                    Id = 0,
                    TaskType = (int)TaskInboundTypeEnum.Inbound
                };
                content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                // å‘送请求并等待响应
                var result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/RequestTaskAsync", request.ToJsonString()).Result;
                // ååºåˆ—化响应内容
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                WMSTaskDTO task = new WMSTaskDTO();
                // æ£€æŸ¥çŠ¶æ€å¹¶è¿”å›ž
                if (!content.Status)
                {
                    task = new WMSTaskDTO()
                    {
                        TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                        Grade = 1,
                        PalletCode = palletCode,
                        RoadWay = "CHSC01",
                        SourceAddress = sourceAddress,
                        TargetAddress = "1020",
                        TaskState = (int)TaskOutStatusEnum.Line_OutExecuting,
                        Id = 0,
                        TaskType = (int)TaskOutboundTypeEnum.Outbound
                    };
                    Dt_Task task1 = _mapper.Map<Dt_Task>(task);
                    task1.CurrentAddress = task.SourceAddress;
                    task1.NextAddress = "1020";
                    BaseDal.AddData(task1);
                    return content.OK();
                }
                else
                {
                    // ååºåˆ—化任务数据
                    task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                    // å¤„理任务并返回结果
                    content = ReceiveWMSTask(new List<WMSTaskDTO> { task });
                }
                #endregion
            }
            catch (Exception ex)
            {
@@ -419,35 +428,22 @@
                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    {
                        //if (task.Roadway.Contains("CH"))
                        //{
                        //    Random random = new Random();
                        //    task.CurrentAddress = task.NextAddress;
                        //    task.NextAddress = $"{random.Next(1, 1).ToString().PadLeft(3, '0')}-{random.Next(0, 0).ToString().PadLeft(3, '0')}-{random.Next(1, 1).ToString().PadLeft(3, '0')}";
                        //    task.TargetAddress = task.NextAddress;
                        //}
                        //else
                        //{
                        //    Random random = new Random();
                        //    task.CurrentAddress = task.NextAddress;
                        //    task.NextAddress = "002-020-001";
                        //    task.TargetAddress = task.NextAddress;
                        //}
                        #region çœŸå®žæ•°æ®
                        // TODO: è°ƒç”¨æŽ¥å£èŽ·å–ä¸‹ä¸€ä¸ªåœ°å€
                        // TODO: è°ƒç”¨æŽ¥å£èŽ·å–è´§ä½åœ°å€
                        // åˆ›å»ºè¯·æ±‚对象
                        RequestTaskDto request = new RequestTaskDto()
                        RequestTaskDto taskDto = new RequestTaskDto()
                        {
                            Position = task.NextAddress,
                            PalletCode = task.PalletCode,
                        };
                        // å‘送请求并等待响应
                        var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", request.ToJsonString()).Result;
                        var abc = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/RequestTaskAsync", taskDto.ToJsonString()).Result;
                        if (abc == null)
                            return content.Error();
                        // ååºåˆ—化响应内容
                        content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                        content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
                        // æ£€æŸ¥çŠ¶æ€å¹¶è¿”å›ž
                        if (!content.Status)
@@ -478,6 +474,16 @@
                BaseDal.UpdateData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工手动将任务状态从【{oldState}】跳转到【{task.TaskState}】" : $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskState}】");
                #region  æ›´æ–°ä»»åŠ¡çŠ¶æ€
                object request = new
                {
                    TaskNum = task.TaskNum,
                    TaskState = task.TaskState
                };
                var result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/UpdateTaskStatus", request.ToJsonString()).Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                #endregion
                content = WebResponseContent.Instance.OK();
            }
@@ -550,7 +556,7 @@
                    BaseDal.UpdateData(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    //todo åŒæ­¥åˆ°WMS
                    //暂不考虑多个出库口
                }
@@ -565,12 +571,6 @@
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    #region WMS同步任务完成
                    var x = new { taskNum = taskNum };
                    var result = HttpHelper.GetAsync("http:127.0.0.1:8098/api/Task/CompleteTaskAsync", x.ToJsonString()).Result;
                    content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                    #endregion
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
@@ -583,6 +583,22 @@
                {
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                }
                #region WMS同步任务完成
                //var x = new { taskNum = taskNum };
                var result = HttpHelper.GetAsync($"http://127.0.0.1:5000/api/Task/CompleteTaskAsync?taskNum={taskNum}").Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                #endregion
                #region  æ›´æ–°ä»»åŠ¡çŠ¶æ€
                object request = new
                {
                    TaskNum = task.TaskNum,
                    TaskState = task.TaskState
                };
                result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/UpdateTaskStatus", request.ToJsonString()).Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                #endregion
                //content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -175,139 +175,25 @@
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
        {
            // èŽ·å–ä¸‹ä¸€ä¸ªä»»åŠ¡
            var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode);
            //var taskOut = _taskService.QueryNextConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
            //return;
            // å¤„理出库任务
            HandleTaskOut(conveyorLine, command, childDeviceCode, ProtocalDetailValue, task);
            // å¦‚果没有出库任务,处理新任务
            if (task == null && command.Barcode != "NoRead")
            try
            {
                HandleNewTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
                // èŽ·å–ä¸‹ä¸€ä¸ªä»»åŠ¡
                var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode);
                //var taskOut = _taskService.QueryNextConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
                //return;
                // å¤„理出库任务
                HandleTaskOut(conveyorLine, command, childDeviceCode, ProtocalDetailValue, task);
                // å¦‚果没有出库任务,处理新任务
                if (task == null && command.Barcode != "NoRead")
                {
                    HandleNewTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
                }
            }
            #region è€ç‰ˆæœ¬
            //var taskNew = _taskService.QueryCraneConveyorLineTask(command.Barcode.ObjToInt(), childDeviceCode);
            //var Taskout = _taskService.QueryNextConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
            //if (Taskout != null)
            //{
            //    // ç©ºæ‰˜ç›˜ä»»åŠ¡
            //    if (Taskout.TaskType == (int)TaskOutboundTypeEnum.OutTray)
            //    {
            //        ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(Taskout);
            //        taskCommand.InteractiveSignal = command.InteractiveSignal;
            //        if (command.Barcode == "")
            //        {
            //            var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == Taskout.TargetAddress).Capacity;
            //            taskCommand.TargetAddress = NGAddress;
            //        }
            //        conveyorLine.SendCommand(taskCommand, childDeviceCode);
            //        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
            //        _taskService.UpdateTaskStatusToNext(Taskout);
            //    }
            //    else if (Taskout.TaskType == (int)TaskOutboundTypeEnum.Outbound)
            //    {
            //        ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(Taskout);
            //        taskCommand.InteractiveSignal = command.InteractiveSignal;
            //        if (Taskout.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)
            //        {
            //            if (command.Barcode == "")
            //            {
            //                var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == Taskout.TargetAddress).Capacity;
            //                taskCommand.TargetAddress = NGAddress;
            //            }
            //            conveyorLine.SendCommand(taskCommand, childDeviceCode);
            //            ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
            //            _taskService.UpdateTaskStatusToNext(Taskout);
            //        }
            //        else if (Taskout.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
            //        {
            //            if (command.Barcode == "")
            //            {
            //                var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == Taskout.TargetAddress).Capacity;
            //                taskCommand.TargetAddress = NGAddress;
            //                conveyorLine.SendCommand(taskCommand, childDeviceCode);
            //                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
            //                _taskService.UpdateTaskStatusToNext(Taskout);
            //            }
            //            else
            //            {
            //                // todo è°ƒç”¨WMS任务完成接口
            //                var x = new { taskNum = Taskout.TaskNum };
            //                var result = HttpHelper.GetAsync("http:127.0.0.1:8098/api/Task/CompleteTaskAsync", x.ToJsonString()).Result;
            //                WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            //                if (content.Status)
            //                {
            //                    ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
            //                    _taskService.UpdateTaskStatusToNext(Taskout);
            //                }
            //            }
            //        }
            //    }
            //}
            //if (taskNew == null)
            //{
            //    // åŒ–成->陈化空托盘回流
            //    if (conveyorLine.DeviceCode == "1003" && childDeviceCode == "1016")
            //    {
            //        //TODO è°ƒç”¨WMS创建化成->陈化空托盘回流
            //        WMSTaskDTO taskDTO = new WMSTaskDTO()
            //        {
            //            TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
            //            Grade = 1,
            //            PalletCode = command.Barcode,
            //            RoadWay = "CHSC01",
            //            SourceAddress = childDeviceCode,
            //            TargetAddress = "CHSC01",
            //            TaskState = (int)TaskInStatusEnum.InNew,
            //            Id = 0,
            //            TaskType = (int)TaskInboundTypeEnum.InTray,
            //        };
            //        WebResponseContent content = CreateAndSendTask(taskDTO);
            //        if (content.Status)
            //        {
            //            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
            //            if (task != null)
            //            {
            //                ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task);
            //                taskCommand.InteractiveSignal = command.InteractiveSignal;
            //                conveyorLine.SendCommand(taskCommand, childDeviceCode);
            //                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
            //                _taskService.UpdateTaskStatusToNext(task);
            //            }
            //        }
            //    }
            //    else
            //    {
            //        if (_taskService.RequestWMSTask(command.Barcode, childDeviceCode).Status)
            //        {
            //            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
            //            if (task != null)
            //            {
            //                ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task);
            //                taskCommand.InteractiveSignal = command.InteractiveSignal;
            //                conveyorLine.SendCommand(taskCommand, childDeviceCode);
            //                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
            //                _taskService.UpdateTaskStatusToNext(task);
            //            }
            //        }
            //    }
            //}
            #endregion
            catch (Exception ex)
            {
                return;
            }
        }
        /// <summary>
@@ -418,18 +304,6 @@
                    taskCommand.TargetAddress = 0;
                }
                #region å‘WMS上报任务完成
                WMSTaskDTO wMSTaskDTO = new WMSTaskDTO();
                var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/CompleteTaskAsync", (new { taskNum = command.TaskNum }).ToJsonString()).Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                // æ£€æŸ¥çŠ¶æ€å¹¶è¿”å›ž
                if (!content.Status)
                    return;
                #endregion å‘WMS请求空托盘任务
                conveyorLine.SendCommand(taskCommand, childDeviceCode);
                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
@@ -437,18 +311,6 @@
            }
        }
        /// <summary>
        /// åˆ›å»ºä»»åŠ¡å¹¶å‘é€è¯·æ±‚
        /// </summary>
        public WebResponseContent CreateAndSendTask(WMSTaskDTO taskDTO)
        {
            var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
            if (content.Status)
            {
                Console.WriteLine($"{taskDTO.TaskType}呼叫成功");
            }
            return content;
        }
        /// <summary>
        /// é™ˆåŒ–空托盘出库
@@ -457,14 +319,21 @@
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="index">线体当前bool读取偏移地址</param>
        public void EmptyTrayReturn(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int index, Platform platform)
        public async void EmptyTrayReturn(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int index, Platform platform)
        {
            TaskOutboundTypeEnum taskOutboundTypeEnum;
            if (platform.PlatformType.Contains("OutTray"))
                taskOutboundTypeEnum = TaskOutboundTypeEnum.OutTray;
            else
                taskOutboundTypeEnum = TaskOutboundTypeEnum.Outbound;
            CheckAndCreateTask(TaskOutboundTypeEnum.OutTray, childDeviceCode, index, platform.Stacker.Split(',')[0], platform.Stacker.Split(',').ToList());
            try
            {
                TaskOutboundTypeEnum taskOutboundTypeEnum;
                if (platform.PlatformType.Contains("OutTray"))
                    taskOutboundTypeEnum = TaskOutboundTypeEnum.OutTray;
                else
                    taskOutboundTypeEnum = TaskOutboundTypeEnum.Outbound;
                await CheckAndCreateTask(taskOutboundTypeEnum, childDeviceCode, index, platform.Stacker.Split(',')[0], platform.Stacker.Split(',').ToList());
            }
            catch (Exception)
            {
            }
        }
        #region
@@ -506,33 +375,21 @@
        /// <summary>
        /// æ£€æŸ¥ä»»åŠ¡å¹¶åˆ›å»ºæ–°ä»»åŠ¡
        /// </summary>
        private void CheckAndCreateTask(TaskOutboundTypeEnum taskType, string childDeviceCode, int index, string roadWay, List<string> roadways = null)
        private async Task CheckAndCreateTask(TaskOutboundTypeEnum taskType, string childDeviceCode, int index, string roadWay, List<string> roadways = null)
        {
            var tasks = _taskRepository.QueryData(x => x.TaskType == (int)taskType && x.TargetAddress == childDeviceCode);
            if (tasks.Count < index)
            {
                //var taskDTO = new WMSTaskDTO()
                //{
                //    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                //    Grade = 1,
                //    PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"),
                //    RoadWay = roadWay,
                //    SourceAddress = sourceAddress,
                //    TargetAddress = childDeviceCode,
                //    TaskState = (int)TaskOutStatusEnum.OutNew,
                //    Id = 0,
                //    TaskType = (int)taskType
                //};
                #region è°ƒç”¨WMS获取出库任务
                WMSTaskDTO taskDTO = new WMSTaskDTO();
                dynamic dynamic = new
                object dynamic = new
                {
                    position = childDeviceCode,
                    tag = (int)taskType,
                    areaCdoe = roadWay,
                    roadways = roadways
                };
                var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", dynamic.ToJsonString()).Result;
                var result = await HttpHelper.PostAsync("http://localhost:5000/api/Task/RequestTrayOutTaskAsync", dynamic.ToJsonString());
                WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
@@ -548,6 +405,18 @@
        }
        /// <summary>
        /// åˆ›å»ºä»»åŠ¡
        /// </summary>
        public WebResponseContent CreateAndSendTask(WMSTaskDTO taskDTO)
        {
            var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
            if (content.Status)
            {
                Console.WriteLine($"{taskDTO.TaskType}呼叫成功");
            }
            return content;
        }
        /// <summary>
        /// è¾“送线交互完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs
@@ -62,7 +62,7 @@
                // è¯·æ±‚WMS空托盘任务
                CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
            }
            else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1088")||(conveyorLine.DeviceCode == "1004" && childDeviceCode == "1339"))
            else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1088") || (conveyorLine.DeviceCode == "1004" && childDeviceCode == "1339"))
            {
                // è¯·æ±‚WMS入库任务
                RequestWmsTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
@@ -97,7 +97,7 @@
            }
            // TODO调用WMS任务完成接口
            var result = HttpHelper.GetAsync("http://127.0.0.1:8098/api/Task/CompleteTaskAsync", new { taskNum = taskOut.TaskNum }.ToJsonString()).Result;
            var result = HttpHelper.GetAsync($"http://127.0.0.1:5000/api/Task/CompleteTaskAsync?taskNum={taskOut.TaskNum}").Result;
            WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            if (content.Status)
            {
@@ -143,32 +143,18 @@
        /// </summary>
        private WMSTaskDTO CreateEmptyTrayTaskDto(string barcode, string childDeviceCode)
        {
            // åˆ›å»ºå¹¶è¿”回空托盘任务DTO
            //return new WMSTaskDTO
            //{
            //    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
            //    Grade = 1,
            //    PalletCode = barcode,
            //    RoadWay = "JZSC01",
            //    SourceAddress = childDeviceCode,
            //    TargetAddress = "JZSC01",
            //    TaskState = (int)TaskInStatusEnum.InNew,
            //    Id = 0,
            //    TaskType = (int)TaskInboundTypeEnum.InTray,
            //};
            #region å‘WMS请求空托盘任务
            WMSTaskDTO wMSTaskDTO = new WMSTaskDTO();
            RequestTaskDto request = new RequestTaskDto()
            {
                Position = childDeviceCode,
                PalletCode = barcode,
            };
            var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", request.ToJsonString()).Result;
            var result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/RequestTrayInTaskAsync", request.ToJsonString()).Result;
            if (result == null)
                return wMSTaskDTO;
            WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            // æ£€æŸ¥çŠ¶æ€å¹¶è¿”å›ž
            if (!content.Status)
                return wMSTaskDTO;
@@ -187,7 +173,7 @@
            if (_taskService.RequestWMSTask(command.Barcode, childDeviceCode).Status)
            {
                // æŸ¥è¯¢ä»»åŠ¡
                Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
                Dt_Task task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode);
                if (task != null)
                {
                    // æ˜ å°„任务命令
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -441,22 +441,24 @@
                    AlertDescription = commonStackerCrane.StackerCraneStatusDes,
                    AlertReset = "0"
                };
                await HttpHelper.PostAsync("http://ts-momapp01:12020/api/MachineIntegration/EqptAlive", requestAlert.ToJsonString());
                var S= await HttpHelper.PostAsync("http://ts-momapp01:12020/api/MachineIntegration/EqptAlive", requestAlert.ToJsonString());
                WriteInfo("EqptAlive", S);
            }
            RequestEqptStatusDto requestEqptStatus = new RequestEqptStatusDto()
            {
                EmployeeNo = "T00001",
                EquipmentCode = commonStackerCrane.DeviceCode,
                EquipmentCode = "ECH001-B",
                RequestTime = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),
                SessionId = Guid.NewGuid().ToString(),
                Software = commonStackerCrane.DeviceName,
                ChangeTime = DateTime.Now.ToString(),
                ChangeTime = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),
                Description = commonStackerCrane.StackerCraneStatusDes,
                LocationID = "NA",
                ReasonCode = "123",
                StatusCode = code
            };
            var respone = await HttpHelper.PostAsync("http://ts-momapp01:12020/api/MachineIntegration/EqptStatus", requestEqptStatus.ToJsonString());
            WriteInfo("EqptStatus", respone);
        }
    }
}
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/RequestTaskDto.cs
@@ -11,4 +11,17 @@
    /// æ‰˜ç›˜å·
    /// </summary>
    public string PalletCode { get; set; }
    /// <summary>
    /// ç©ºæ‰˜ç›˜å¯å…¥å··åˆ°
    /// </summary>
    public string PositionList { get; set; }
}
public class RequestOutTaskDto
{
    public string   Position { get; set; }
    public int Tag { get; set; }
    public string AreaCdoe { get; set; }
    public List<string> Roadways { get; set; }
}
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/UpdateStatusDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO
{
    public class UpdateStatusDto
    {
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public int TaskNum { get; set; }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€
        /// </summary>
        public int TaskState { get; set; }
    }
}
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MOM/ResultTrayCellsStatus.cs
@@ -11,6 +11,7 @@
        /// ç”µèŠ¯åˆ—è¡¨
        /// </summary>
        public List<SerialNoDto> SerialNos { get; set; } = new List<SerialNoDto>();
        public string BindCode { get; set; }
        public string TrayStatus { get; set; }
        /// <summary>
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/Task/IDt_TaskService.cs
@@ -134,6 +134,13 @@
    Task<WebResponseContent> RequestTaskAsync(RequestTaskDto input);
    /// <summary>
    /// è¯·æ±‚空托盘任务
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<WebResponseContent> RequestTrayInTaskAsync(RequestTaskDto input);
    /// <summary>
    /// è¯·æ±‚托盘任务
    /// </summary>
    /// <param name="position">目标位置</param>
@@ -141,5 +148,13 @@
    /// <param name="areaCode">区域编码</param>
    /// <param name="roadways">巷道列表</param>
    /// <returns>返回结果集</returns>
    Task<WebResponseContent> RequestTrayTaskAsync(string position, int tag, string areaCode, List<string> roadways);
    Task<WebResponseContent> RequestTrayOutTaskAsync(string position, int tag, string areaCode, List<string> roadways);
    /// <summary>
    /// ä»»åŠ¡çŠ¶æ€ä¿®æ”¹
    /// </summary>
    /// <param name="input">请求数据</param>
    /// <returns></returns>
    Task<WebResponseContent> UpdateTaskStatus(int taskNum, int taskState);
}
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -190,7 +190,7 @@
            {
                var process = await SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>()
                    .FirstAsync(x => x.EquipmentName == task.Roadway);
                var info = JsonConvert.DeserializeObject<EquipmentParameterInfo>(process.ProcessValue);
                var info = JsonConvert.DeserializeObject<List<EquipmentParameterInfo>>(process.ProcessValue);
                var agingOutputDto = MapToAgingOutputDto(stock, info);
                content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto);
@@ -218,7 +218,7 @@
        }
    }
    private AgingOutputDto MapToAgingOutputDto(DtStockInfo stock, EquipmentParameterInfo info)
    private AgingOutputDto MapToAgingOutputDto(DtStockInfo stock, List<EquipmentParameterInfo> info)
    {
        return new AgingOutputDto
        {
@@ -230,20 +230,17 @@
                SlotNo = x.OrderNo.ToInt32(),
                SerialNo = x.SerialNumber,
                SerialNoResult = true,
                ParameterInfo = new List<ParameterInfo>
            {
                new ParameterInfo
                ParameterInfo = info.Select(x => new ParameterInfo()
                {
                    LowerLomit = info.LowerControlLimit,
                    UpperLimit = info.UpperControlLimit,
                    ParameterResult = info.EquipmentAvailabilityFlag,
                    ParameterCode = info.ParameterCode,
                    ParameterDesc = info.Description,
                    TargetValue = info.TargetValue,
                    Value = info.TargetValue,
                    DefectCode = info.UOMCode
                }
            }
                    LowerLomit = x.LowerControlLimit,
                    UpperLimit = x.UpperControlLimit,
                    ParameterResult = x.EquipmentAvailabilityFlag,
                    ParameterCode = x.ParameterCode,
                    ParameterDesc = x.Description,
                    TargetValue = x.TargetValue,
                    Value = (DateTime.Now - stock.CreateDate).TotalMinutes.ToString(),
                    DefectCode = x.UOMCode
                }).ToList()
            }).ToList()
        };
    }
@@ -346,91 +343,6 @@
    #region å…¥åº“任务完成
    /// <summary>
    /// å…¥åº“任务完成
    /// </summary>
    /// <param name="task">任务数据合集</param>
    /// <returns>返回结果集</returns>
    //public async Task<WebResponseContent> CompleteInboundTaskAsync(Dt_Task task)
    //{
    //    WebResponseContent content = new WebResponseContent();
    //    try
    //    {
    //        var boxing = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
    //        var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress);
    //        locationInf.LocationStatus = (int)LocationEnum.InStock;
    //        // åˆ›å»ºåŽ†å²ä»»åŠ¡å®žä¾‹æ¨¡åž‹
    //        var taskHty = CreateHistoricalTask(task);
    //        // åˆ›å»ºåº“存实例模型
    //        DtStockInfo stock;
    //        if (boxing == null)
    //        {
    //            // ç©ºæ‰˜ç›˜
    //            stock = new DtStockInfo()
    //            {
    //                PalletCode = task.PalletCode,
    //                LocationCode = task.TargetAddress,
    //                CreateDate = DateTime.Now,
    //                Creater = "system",
    //                IsFull = boxing.IsFull,
    //                StockInfoDetails = new List<DtStockInfoDetail>()
    //                {
    //                    new DtStockInfoDetail()
    //                    {
    //                         MaterielCode = "空托盘",
    //                         Id = 0,
    //                    }
    //                }
    //            };
    //        }
    //        else
    //        {
    //            // å®žç›˜
    //            var boxDetail = boxing.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>();
    //            // åˆ›å»ºåº“存实例模型
    //            stock = new DtStockInfo()
    //            {
    //                PalletCode = task.PalletCode,
    //                LocationCode = task.TargetAddress,
    //                CreateDate = DateTime.Now,
    //                Creater = "system",
    //                IsFull = boxing.IsFull,
    //                StockInfoDetails = boxDetail,
    //            };
    //            AgingInputDto agingInputDto = new AgingInputDto()
    //            {
    //                SerialNos = boxing.BoxingInfoDetails
    //                    .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo })
    //                    .ToList(),
    //                TrayBarcode = task.PalletCode,
    //                OpFlag = 1
    //            };
    //            var result = await _agingInOrOutInputService.GetOCVInputAsync(agingInputDto);
    //            stock.Remark = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString()).LinedProcessFeedbackTime;
    //            LogFactory.GetLog("任务完成").InfoFormat(true, "入库任务完成", $"货位地址:{task.TargetAddress},修改后货位数据:{locationInf}");
    //        }
    //        // æ‰§è¡Œæ•°æ®åº“事务
    //        bool isResult = await ExecuteTransaction(stock, taskHty, locationInf, task.TaskId);
    //        if (isResult)
    //            content.OK("入库任务完成成功");
    //        else
    //            content.Error("入库任务完成失败");
    //    }
    //    catch (Exception err)
    //    {
    //        Console.WriteLine(err.Message.ToString());
    //    }
    //    return content;
    //}
    /// <summary>
    /// å®Œæˆå…¥åº“任务
    /// </summary>
    /// <param name="task">任务数据合集</param>
@@ -522,10 +434,13 @@
                .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo })
                .ToList(),
            TrayBarcode = task.PalletCode,
            OpFlag = 1
            OpFlag = 1,
            EquipmentCode = "ECH001-B",
            Software = "WMS"
        };
        var result = _agingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result;
        stock.Remark = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString()).LinedProcessFeedbackTime;
        var respone = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString());
        stock.Remark = respone.LinedProcessFeedbackTime;
        // è®°å½•日志
        LogFactory.GetLog("任务完成").InfoFormat(true, "入库任务完成", $"货位地址:{task.TargetAddress},修改后货位数据:{locationInf}");
@@ -595,12 +510,28 @@
        try
        {
            // è°ƒç”¨BaseDal.QueryFirstAsync方法,查询任务
            var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode);
            if (task != null)
            {
                content =  await UpdateExistingTask(input, task);
                if (task.TaskState == (int)TaskInStatusEnum.InNew)
                {
                    // åˆ›å»ºWMS任务
                    WMSTaskDTO taskDTO = new WMSTaskDTO()
                    {
                        TaskNum = task.TaskNum.Value,
                        Grade = 1,
                        PalletCode = task.PalletCode,
                        RoadWay = task.Roadway,
                        SourceAddress = task.SourceAddress,
                        TargetAddress = task.Roadway,
                        TaskState = task.TaskState.Value,
                        Id = 0,
                        TaskType = task.TaskType,
                    };
                    return content.OK(data: taskDTO);
                }
                content = await UpdateExistingTask(input, task);
                return content;
            }
            // åˆ›å»ºä¸€ä¸ªTrayCellsStatusDto对象,并赋值
@@ -608,7 +539,7 @@
            {
                Software = "WMS",
                TrayBarcode = input.PalletCode,
                 EquipmentCode = "ECH001-B"
                EquipmentCode = "ECH001-B"
            };
            // è°ƒç”¨GetTrayCellStatusAsync方法,获取整盘电芯
@@ -619,6 +550,8 @@
            // æ·»åŠ ç»„ç›˜ä¿¡æ¯
            // å°†content.Data转换为ResultTrayCellsStatus对象
            var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            if (result.SerialNos.Count <= 0)
                return content.Error(result.MOMMessage);
            var boxing = await CreateBoxingInfo(result, input.PalletCode);
            // è°ƒç”¨GetProcessApplyAsync方法,获取工艺路线
@@ -631,7 +564,7 @@
            var processResponse = await GetProcessResponseAsync(process, input.Position);
            // å¦‚æžœtask不为null,则调用UpdateExistingTask方法,更新任务;否则调用CreateNewTask方法,创建新任务
            content = task != null ? await UpdateExistingTask(input, task) : await CreateNewTask(processResponse, input);
            content = task != null ? await UpdateExistingTask(input, task) : await CreateNewTask(input, processResponse);
            if (content.Status)
            {
                var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing);
@@ -646,6 +579,41 @@
        // è¿”回content
        return content;
    }
    public async Task<WebResponseContent> RequestTrayInTaskAsync(RequestTaskDto input)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            // è°ƒç”¨BaseDal.QueryFirstAsync方法,查询任务
            var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode);
            if (task != null && task.TaskState == (int)TaskInStatusEnum.InNew)
            {
                // åˆ›å»ºWMS任务
                WMSTaskDTO taskDTO = new WMSTaskDTO()
                {
                    TaskNum = task.TaskNum.Value,
                    Grade = 1,
                    PalletCode = task.PalletCode,
                    RoadWay = task.Roadway,
                    SourceAddress = task.SourceAddress,
                    TargetAddress = task.Roadway,
                    TaskState = task.TaskState.Value,
                    Id = 0,
                    TaskType = task.TaskType,
                };
                return content.OK(data: task);
            }
            return await CreateNewTask(input, null, 1);
        }
        catch (Exception)
        {
            throw;
        }
    }
    // èŽ·å–æ‰˜ç›˜å•å…ƒæ ¼çŠ¶æ€
@@ -679,8 +647,8 @@
        // åˆ›å»ºä¸€ä¸ªProcessApplyDto对象,并赋值
        return new ProcessApplyDto()
        {
             EquipmentCode = "ECH001-B",
             Software = "WMS",
            EquipmentCode = "ECH001-B",
            Software = "WMS",
            //WipOrderNo = result.BindCode,
            SerialNos = content.SerialNos.Select(item => new SerialNos
            {
@@ -723,104 +691,7 @@
    #endregion è¯·æ±‚任务入库
    #region è¯·æ±‚出库
    //public async Task<WebResponseContent> RequestTrayTaskAsync(string position, int tag, string areaCdoe,List<string> roadways)
    //{
    //    WebResponseContent content = new WebResponseContent();
    //    try
    //    {
    //        // 1==实盘 2 ==空盘
    //        if (tag == 1)
    //        {
    //            // æŸ¥è¯¢åº“存信息
    //            DtStockInfo? stockInfo = _stockInfoRepository.QueryData(x => x.AreaCode == areaCdoe && Convert.ToDateTime(x.Remark) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && roadways.Contains(x.LocationInfo.RoadwayNo)).OrderBy(x => x.CreateDate).FirstOrDefault();
    //            // åˆ›å»ºæ–°ä»»åŠ¡å®žä¾‹
    //            var task = new Dt_Task()
    //            {
    //                Grade = 1,
    //                Roadway = stockInfo.LocationInfo.RoadwayNo,
    //                TargetAddress = position,
    //                Dispatchertime = DateTime.Now,
    //                MaterialNo = "",
    //                NextAddress = position,
    //                OrderNo = null,
    //                PalletCode = stockInfo.PalletCode,
    //                SourceAddress = stockInfo.LocationCode,
    //                TaskState = (int)TaskOutStatusEnum.OutNew,
    //                TaskType = (int)TaskOutboundTypeEnum.Outbound,
    //                TaskNum = await BaseDal.GetTaskNo(),
    //                Creater = "Systeam"
    //            };
    //            var taskId = await BaseDal.AddDataAsync(task);
    //            bool isResult = taskId > 0;
    //            if (isResult)
    //            {
    //                WMSTaskDTO taskDTO = new WMSTaskDTO()
    //                {
    //                    TaskNum = task.TaskNum.Value,
    //                    Grade = 1,
    //                    PalletCode = DateTime.Now.ToString("MMddHHmmss"),
    //                    RoadWay = task.Roadway,
    //                    SourceAddress = stockInfo.LocationCode,
    //                    TargetAddress = task.Roadway,
    //                    TaskState = (int)TaskOutStatusEnum.OutNew,
    //                    Id = 0,
    //                    TaskType = (int)TaskOutboundTypeEnum.OutTray
    //                };
    //                stockInfo.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable;
    //                _locationRepository.UpdateData(stockInfo.LocationInfo);
    //                content.OK(data: taskDTO);
    //            }
    //        }
    //        else
    //        {
    //            var stockInfo = _stockInfoRepository.QueryData(x => x.AreaCode == areaCdoe && x.StockInfoDetails.Any(z => z.MaterielCode == "空托盘") && roadways.Contains(x.LocationInfo.RoadwayNo)).OrderBy(x => x.CreateDate).FirstOrDefault();
    //            // åˆ›å»ºæ–°ä»»åŠ¡å®žä¾‹
    //            var task = new Dt_Task
    //            {
    //                CurrentAddress = stockInfo.LocationCode,
    //                Grade = 1,
    //                Roadway = stockInfo.LocationInfo.RoadwayNo,
    //                TargetAddress = position,
    //                Dispatchertime = DateTime.Now,
    //                MaterialNo = "",
    //                NextAddress = position,
    //                OrderNo = null,
    //                PalletCode = stockInfo.PalletCode,
    //                SourceAddress = stockInfo.LocationCode,
    //                TaskState = (int)TaskOutStatusEnum.OutNew,
    //                TaskType = (int)TaskOutboundTypeEnum.OutTray,
    //                TaskNum = await BaseDal.GetTaskNo(),
    //                Creater = "Systeam"
    //            };
    //            var taskId = await BaseDal.AddDataAsync(task);
    //            bool isResult = taskId > 0;
    //            if (isResult)
    //            {
    //                WMSTaskDTO taskDTO = new WMSTaskDTO()
    //                {
    //                    TaskNum = task.TaskNum.Value,
    //                    Grade = 1,
    //                    PalletCode = DateTime.Now.ToString("MMddHHmmss"),
    //                    RoadWay = task.Roadway,
    //                    SourceAddress = stockInfo.LocationCode,
    //                    TargetAddress = task.Roadway,
    //                    TaskState = (int)TaskOutStatusEnum.OutNew,
    //                    Id = 0,
    //                    TaskType = (int)TaskOutboundTypeEnum.OutTray
    //                };
    //                content.OK(data: taskDTO);
    //            }
    //        }
    //    }
    //    catch (Exception ex)
    //    {
    //        throw;
    //    }
    //    return content;
    //}
    #region è¯·æ±‚出库(实盘&空盘)
    /// <summary>
    /// è¯·æ±‚托盘任务
@@ -830,13 +701,13 @@
    /// <param name="areaCode">区域编码</param>
    /// <param name="roadways">巷道编码集合</param>
    /// <returns>返回结果集</returns>
    public async Task<WebResponseContent> RequestTrayTaskAsync(string position, int tag, string areaCode, List<string> roadways)
    public async Task<WebResponseContent> RequestTrayOutTaskAsync(string position, int tag, string areaCode, List<string> roadways)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            // æ ¹æ®æ‰˜ç›˜ç±»åž‹æŸ¥è¯¢åº“存信息
            DtStockInfo stockInfo = tag == 1
            DtStockInfo stockInfo = tag == (int)TaskOutboundTypeEnum.Outbound
                ? QueryStockInfoForRealTray(areaCode, roadways)
                : QueryStockInfoForEmptyTray(areaCode, roadways);
@@ -856,7 +727,7 @@
            // åˆ›å»ºä»»åŠ¡DTO
            WMSTaskDTO taskDTO = CreateTaskDTO(task);
            if (tag == 1)
            //if (tag == 1)
            {
                // æ›´æ–°åº“存位置状态为不可用
                stockInfo.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable;
@@ -870,7 +741,7 @@
        {
            // è®°å½•异常信息并抛出
            LogFactory.GetLog("请求托盘任务").Error(true, ex);
            throw;
            return content.Error(ex.Message);
        }
    }
@@ -879,9 +750,11 @@
    /// </summary>
    private DtStockInfo QueryStockInfoForRealTray(string areaCode, List<string> roadways)
    {
        return _stockInfoRepository.QueryData(x => x.AreaCode == areaCode && Convert.ToDateTime(x.Remark) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && roadways.Contains(x.LocationInfo.RoadwayNo))
        return _stockInfoRepository.Db.Queryable<DtStockInfo>().Where(x => x.AreaCode == areaCode && Convert.ToDateTime(x.Remark) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && roadways.Contains(x.LocationInfo.RoadwayNo))
                                   .Includes(x => x.LocationInfo)
                                   .Includes(x => x.StockInfoDetails)
                                   .OrderBy(x => x.CreateDate)
                                   .FirstOrDefault();
                                   .First();
    }
    /// <summary>
@@ -889,9 +762,11 @@
    /// </summary>
    private DtStockInfo QueryStockInfoForEmptyTray(string areaCode, List<string> roadways)
    {
        return _stockInfoRepository.QueryData(x => x.AreaCode == areaCode && x.StockInfoDetails.Any(z => z.MaterielCode == "空托盘") && roadways.Contains(x.LocationInfo.RoadwayNo))
        return _stockInfoRepository.Db.Queryable<DtStockInfo>().Where(x => x.AreaCode == areaCode && x.StockInfoDetails.Any(z => z.MaterielCode == "空托盘") && roadways.Contains(x.LocationInfo.RoadwayNo))
                                   .Includes(x => x.LocationInfo)
                                   .Includes(x => x.StockInfoDetails)
                                   .OrderBy(x => x.CreateDate)
                                   .FirstOrDefault();
                                   .First();
    }
    /// <summary>
@@ -910,8 +785,9 @@
            OrderNo = null,
            PalletCode = stockInfo.PalletCode,
            SourceAddress = stockInfo.LocationCode,
            CurrentAddress = stockInfo.LocationCode,
            TaskState = (int)TaskOutStatusEnum.OutNew,
            TaskType = tag == 1 ? (int)TaskOutboundTypeEnum.Outbound : (int)TaskOutboundTypeEnum.OutTray,
            TaskType = tag == (int)TaskOutboundTypeEnum.Outbound ? (int)TaskOutboundTypeEnum.Outbound : (int)TaskOutboundTypeEnum.OutTray,
            TaskNum = BaseDal.GetTaskNo().Result,
            Creater = "System" // ä¿®æ­£æ‹¼å†™é”™è¯¯
        };
@@ -938,64 +814,31 @@
    #endregion è¯·æ±‚出库
    #region é™ˆåŒ–请求出库
    #region ä»»åŠ¡çŠ¶æ€æ›´æ”¹
    // é™ˆåŒ–请求出库
    public async Task<WebResponseContent> OutTrayByCh(string position)
    public async Task<WebResponseContent> UpdateTaskStatus(int taskNum, int taskState)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            var area = _areaInfoRepository.QueryFirst(x => x.AreaName == "陈化区");
            // æŸ¥è¯¢åº“存信息
            var stockInfo = _stockInfoRepository.QueryData(x => x.AreaCode == area.AreaCode && Convert.ToDateTime(x.Remark) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock).OrderBy(x => x.CreateDate).FirstOrDefault();
            // åˆ›å»ºæ–°ä»»åŠ¡å®žä¾‹
            var task = new Dt_Task()
            {
                Grade = 1,
                Roadway = stockInfo.LocationInfo.RoadwayNo,
                TargetAddress = position,
                Dispatchertime = DateTime.Now,
                MaterialNo = "",
                NextAddress = position,
                OrderNo = null,
                PalletCode = stockInfo.PalletCode,
                SourceAddress = stockInfo.LocationCode,
                TaskState = (int)TaskOutStatusEnum.OutNew,
                TaskType = (int)TaskOutboundTypeEnum.OutTray,
                TaskNum = await BaseDal.GetTaskNo(),
                Creater = "Systeam"
            };
            var taskId = await BaseDal.AddDataAsync(task);
            bool isResult = taskId > 0;
            if (isResult)
            {
                WMSTaskDTO taskDTO = new WMSTaskDTO()
                {
                    TaskNum = task.TaskNum.Value,
                    Grade = 1,
                    PalletCode = DateTime.Now.ToString("MMddHHmmss"),
                    RoadWay = task.Roadway,
                    SourceAddress = stockInfo.LocationCode,
                    TargetAddress = task.Roadway,
                    TaskState = (int)TaskOutStatusEnum.OutNew,
                    Id = 0,
                    TaskType = (int)TaskOutboundTypeEnum.OutTray
                };
                stockInfo.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable;
                _locationRepository.UpdateData(stockInfo.LocationInfo);
                content.OK(data: taskDTO);
            }
            var task = await BaseDal.QueryFirstAsync(x => x.TaskNum == taskNum);
            if (task == null)
                return content.Error("未找到任务");
            task.TaskState = taskState;
            var asb = await BaseDal.UpdateDataAsync(task);
            if (asb)
                content.OK();
            else
                content.Error();
        }
        catch (Exception ex)
        {
            throw;
            content.Error(ex.Message);
        }
        return content;
    }
    #endregion é™ˆåŒ–请求出库
    #endregion
    #endregion å¤–部接口方法
@@ -1361,10 +1204,18 @@
    /// <param name="areaId">区域ID</param>
    /// <param name="content">响应内容</param>
    /// <returns></returns>
    private async Task<WebResponseContent> CreateNewTask(List<Dt_EquipmentProcess> process, RequestTaskDto input)
    private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input, List<Dt_EquipmentProcess> process = null, int flag = 0)
    {
        WebResponseContent content = new WebResponseContent();
        List<string> strings = process.Select(x => x.EquipmentName).ToList();
        List<string> strings = new List<string>();
        if (process != null)
        {
            strings = process.Select(x => x.EquipmentName).ToList();
        }
        else
        {
            strings = input.Position.Split(',').ToList();
        }
        // èŽ·å–ç›®æ ‡åœ°å€
        string ToAddress = await GetRoadWayAsync(strings);
@@ -1382,7 +1233,7 @@
            PalletCode = input.PalletCode,
            SourceAddress = input.Position,
            TaskState = (int)TaskInStatusEnum.InNew,
            TaskType = (int)TaskTypeEnum.Inbound,
            TaskType = flag == 0 ? (int)TaskInboundTypeEnum.Inbound : (int)TaskInboundTypeEnum.InTray,
            TaskNum = await BaseDal.GetTaskNo(),
            Creater = "Systeam"
        };
@@ -1460,6 +1311,22 @@
    {
        var minGroup = _locationRepository.QueryData(x => process.Contains(x.RoadwayNo) && x.LocationStatus == (int)LocationEnum.Free)
            .GroupBy(x => x.RoadwayNo)
             .OrderByDescending(g => g.Count()) // æ ¹æ®æ¯ä¸ªç»„的元素数量排序
             .First(); // å–出数量最多的组
        string minRoadwayNo = minGroup.Key; // æ•°é‡æœ€å¤šçš„组的Key
        return minRoadwayNo;
    }
    /// <summary>
    /// èŽ·å–å··é“æˆ–ç«™å°
    /// </summary>
    /// <returns></returns>
    public async Task<string> GetRoadWayAsync(int areaCode)
    {
        var minGroup = _locationRepository.QueryData(x => x.AreaId == areaCode && x.LocationStatus == (int)LocationEnum.Free)
            .GroupBy(x => x.RoadwayNo)
             .OrderBy(g => g.Count()) // æ ¹æ®æ¯ä¸ªç»„的元素数量排序
             .First(); // å–出数量最少的组
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskController.cs
@@ -1,4 +1,5 @@
using WIDESEA_DTO;
using static WIDESEA_DTO.RequestTaskDto;
namespace WIDESEA_WMSServer.Controllers;
@@ -56,13 +57,35 @@
    }
    /// <summary>
    /// ç©ºæ‰˜ç›˜è¯·æ±‚
    /// ç©ºæ‰˜ç›˜å…¥åº“请求
    /// </summary>
    /// <param name="input">请求数据</param>
    /// <returns></returns>
    [HttpPost, AllowAnonymous, Route("RequestTrayTaskAsync")]
    public async Task<WebResponseContent> RequestTrayTaskAsync([FromBody] string position, int tag, string areaCdoe, List<string> roadways)
    [HttpPost, AllowAnonymous, Route("RequestTrayInTaskAsync")]
    public async Task<WebResponseContent> RequestTrayInTaskAsync([FromBody] RequestTaskDto input)
    {
        return await Service.RequestTrayTaskAsync(position, tag, areaCdoe, roadways);
        return await Service.RequestTrayInTaskAsync(input);
    }
    /// <summary>
    /// ç©ºæ‰˜ç›˜&满盘出库请求
    /// </summary>
    /// <param name="input">请求数据</param>
    /// <returns></returns>
    [HttpPost, AllowAnonymous, Route("RequestTrayOutTaskAsync")]
    public async Task<WebResponseContent> RequestTrayOutTaskAsync([FromBody] RequestOutTaskDto request)
    {
        return await Service.RequestTrayOutTaskAsync(request.Position, request.Tag, request.AreaCdoe, request.Roadways);
    }
    /// <summary>
    /// ä»»åŠ¡çŠ¶æ€ä¿®æ”¹
    /// </summary>
    /// <param name="input">请求数据</param>
    /// <returns></returns>
    [HttpPost, AllowAnonymous, Route("UpdateTaskStatus")]
    public async Task<WebResponseContent> UpdateTaskStatus([FromBody] UpdateStatusDto input)
    {
        return await Service.UpdateTaskStatus(input.TaskNum, input.TaskState);
    }
}