yanjinhui
7 小时以前 0875bfa35d389e238ae82142ce45b71c9715133b
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs
@@ -4,6 +4,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
@@ -32,10 +33,8 @@
            try
            {
                Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置");
                int i = 0;
                foreach (var task in tasks)
                {
                    i++;
                    fOURBOTnewMovePodTask = new()
                    {
                        priority = task.Grade,
@@ -65,11 +64,16 @@
                        task.RGVTaskId = fOURBO.taskID;
                        task.ExceptionMessage = "";
                        task.TaskState = (int)TaskStatusEnum.Execut;
                        task.Dispatchertime=DateTime.Now;
                        task.Dispatchertime = DateTime.Now;
                    }
                    catch (Exception ex)
                    {
                        task.ExceptionMessage = ex.Message;
                        content.Error(ex.Message);
                    }
                    finally
                    {
                        _trackloginfoService.AddTrackLog(fOURBOTnewMovePodTask, content, "下发四向车新建入库任务", "", "");
                    }
                }
                var uptasks = tasks.Where(task => string.IsNullOrEmpty(task.ExceptionMessage)).ToList();
@@ -79,6 +83,7 @@
                {
                    foreach (var item in errortasks)
                    {
                        Thread.Sleep(500);
                        _taskService.ErrorTaskFeedback(item, true);
                    }
                }
@@ -87,10 +92,6 @@
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            finally
            {
                _trackloginfoService.AddTrackLog(fOURBOTnewMovePodTask, content, "下发四向车新建入库任务", "", "");
            }
        }
@@ -161,15 +162,11 @@
        /// <param name="tasks"></param>
        public void IsMoveTask(List<Dt_Task> tasks)
        {
            object requestData = null;  // æ·»åŠ å˜é‡è®°å½•è¯·æ±‚æ•°æ®
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(GetBlockPodContentDto)) ?? throw new Exception("未找到批量获取阻碍托盘关系接口配置信息!请检查接口配置");
                List<Dt_Task> dt_Tasks = new List<Dt_Task>();
                //List<Dt_Task> dt_Tasks = new List<Dt_Task>();
                var PalletCodes = tasks.Select(x => x.PalletCode).ToList();
                //GetBlockPodContentDto content = new GetBlockPodContentDto();
                var request = new GetBlockPodContentListDto
                {
                    content = new List<GetBlockPodContentDto>
@@ -181,48 +178,113 @@
                        }
                    }
                };
                requestData = request;  // ä¿å­˜è¯·æ±‚数据用于日志
                //content.candidatePodIDs = tasks.Select(x => x.PalletCode).ToList();
                string response = HttpHelper.Post(apiInfo.ApiAddress, request.Serialize());
                FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
                content.OK(data: fOURBOTReturn);
                //string response = HttpHelper.Post("http://127.0.0.1:4523/m2/6165241-5857331-default/440906899?apifoxApiId=440906899", request.Serialize());
                content = _apiInfoService.PostInterfaceRequest(nameof(GetBlockPodContentDto), request.Serialize(), "批量获取阻碍托盘关系");
                if (!content.Status)
                {
                    foreach (var item in tasks)
                    {
                        item.ExceptionMessage = content.Message;
                    }
                    _taskService.UpdateData(tasks);
                    return;
                }
                FOURBOTReturn fOURBOTReturn = content.Data as FOURBOTReturn;
                if (fOURBOTReturn.returnCode == 0)
                {
                    //ReturnBlockPodResultDto getBlockPod = fOURBOTReturn.data as ReturnBlockPodResultDto ?? throw new Exception("未获取到阻碍托盘关系数据");
                    var dataJson = fOURBOTReturn.data.ToString();
                    if (string.IsNullOrEmpty(dataJson))
                    {
                        foreach (var item in tasks)
                        {
                            item.ExceptionMessage = "获取阻碍托盘关系失败!";
                        }
                        _taskService.UpdateData(tasks);
                        return;
                    }
                    ReturnBlockPodResultDto? getBlockPod = JsonConvert.DeserializeObject<ReturnBlockPodResultDto>(dataJson);
                    if (getBlockPod == null)
                    {
                        foreach (var item in tasks)
                        {
                            item.ExceptionMessage = "阻碍托盘关系数据转换实体失败!";
                        }
                        _taskService.UpdateData(tasks);
                        return;
                    }
                    if (getBlockPod.Result.Count == 0)
                    {
                        throw new Exception("未获取到阻碍托盘关系数据");
                    }
                    foreach (var Result in getBlockPod.Result)
                    {
                        foreach (var item in Result.outPods)
                        foreach (var item in tasks)
                        {
                            var task = tasks.First(x => x.PalletCode == item.outPod);
                            item.ExceptionMessage = "未获取到阻碍托盘关系数据!";
                        }
                        _taskService.UpdateData(tasks);
                        return;
                    }
                    #region åˆ¤æ–­æ˜¯å¦éœ€è¦ç§»åº“
                    foreach (var task in tasks)
                    {
                        var item = getBlockPod.Result[0].outPods.FirstOrDefault(x => x.outPod == task.PalletCode);
                        if (item != null)
                        {
                            if (item.blockPods != null && item.blockPods.Count > 0)
                                item.blockPods = item.blockPods.Except(PalletCodes).ToList();
                            if (item.blockPods != null && item.blockPods.Count > 0)
                            {
                                #region åˆ¤æ–­é˜»ç¢æ‰˜æ˜¯å¦ä¸ºå‡ºåº“任务
                                //var except = item.blockPods.Except(PalletCodes).ToList();
                                #endregion
                                var responseContent = AddMoveTask(item.blockPods, task);//添加移库任务
                                if (!responseContent.Status) task.ExceptionMessage = responseContent.Message;
                                else
                                {
                                    task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
                                }
                                dt_Tasks.Add(task);
                                else task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
                                #region ç§»åº“状态反馈给WMS
                                WMSInOutBoundCompleteFeedback boundCompleteFeedback = new WMSInOutBoundCompleteFeedback();
                                boundCompleteFeedback.taskCode = task.WMSTaskNum;
                                boundCompleteFeedback.containerCode = task.PalletCode;
                                boundCompleteFeedback.fromStationCode = task.SourceAddress;
                                boundCompleteFeedback.toLocationCode = task.TargetAddress;
                                boundCompleteFeedback.status = 5;
                                boundCompleteFeedback.custStatus = "";
                                _apiInfoService.PostInterfaceRequest(nameof(WMSInOutBoundCompleteFeedback), boundCompleteFeedback.Serialize(), "成品出库任务等待移库上报WMS");
                                #endregion
                            }
                            else
                            {
                                task.TaskState = (int)TaskStatusEnum.RGV_WaitSend;
                                dt_Tasks.Add(task);
                            }
                        }
                        else task.ExceptionMessage = $"RCS未反馈【{task.PalletCode}】可出库托盘信息,详情请查看批量获取阻碍托盘关系接口日志!";
                    }
                    _taskService.UpdateData(dt_Tasks);
                    _taskService.Repository.UpdateData(tasks);
                    #endregion
                    #region MyRegion
                    //foreach (var Result in getBlockPod.Result)
                    //{
                    //    foreach (var item in Result.outPods)
                    //    {
                    //        var task = tasks.First(x => x.PalletCode == item.outPod);
                    //        if (item.blockPods != null && item.blockPods.Count > 0)
                    //            item.blockPods = item.blockPods.Except(PalletCodes).ToList();
                    //        if (item.blockPods != null && item.blockPods.Count > 0)
                    //        {
                    //            #region åˆ¤æ–­é˜»ç¢æ‰˜æ˜¯å¦ä¸ºå‡ºåº“任务
                    //            //var except = item.blockPods.Except(PalletCodes).ToList();
                    //            #endregion
                    //            var responseContent = AddMoveTask(item.blockPods, task);//添加移库任务
                    //            if (!responseContent.Status) task.ExceptionMessage = responseContent.Message;
                    //            else
                    //            {
                    //                task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
                    //            }
                    //            dt_Tasks.Add(task);
                    //        }
                    //        else
                    //        {
                    //            task.TaskState = (int)TaskStatusEnum.RGV_WaitSend;
                    //            dt_Tasks.Add(task);
                    //        }
                    //    }
                    //}
                    //_taskService.UpdateData(dt_Tasks);
                    #endregion
                    content.OK();
                }
            }
@@ -232,7 +294,7 @@
            }
            finally
            {
                _trackloginfoService.AddTrackLog(requestData, content, "处理出库任务是否需要移库", "", "");
                //_trackloginfoService.AddTrackLog(requestData, content, "处理出库任务是否需要移库", "", "");
            }
        }
        #endregion
@@ -300,12 +362,12 @@
                                locationsToUpdate.Add(rGVLocationInfo);
                                #region é‡Šæ”¾å…¥åº“站台
                                //var stationManger = _stationMangerService.GetInStationInfo(item.SourceAddress);
                                //if (stationManger != null)
                                //{
                                //    stationManger.IsOccupied = LocationStatusEnum.Free.ObjToInt();
                                //    stationsToUpdate.Add(stationManger);
                                //}
                                var stationManger = _stationMangerService.GetInStationInfo(item.SourceAddress);
                                if (stationManger != null)
                                {
                                    stationManger.IsOccupied = LocationStatusEnum.Free.ObjToInt();
                                    stationsToUpdate.Add(stationManger);
                                }
                                content.OK();
                                #endregion
                            }
@@ -412,8 +474,8 @@
                            _taskService.UpdateData(tasksToUpdate);
                        if (locationsToUpdate.Any())
                            _rGVLocationInfoService.UpdateData(locationsToUpdate);
                        //if (stationsToUpdate.Any())
                        //    _stationMangerService.UpdateData(stationsToUpdate);
                        if (stationsToUpdate.Any())
                            _stationMangerService.UpdateData(stationsToUpdate);
                        _unitOfWorkManage.CommitTran();
                    }
@@ -502,6 +564,13 @@
            try
            {
                List<Dt_RGVLocationInfo> rGVLocationInfos = _rGVLocationInfoService.Repository.QueryData(x => blockPods.Contains(x.PalletCode));
                var palletCodes = rGVLocationInfos.Select(x => x.PalletCode).ToList();
                // èŽ·å– blockPods ä¸­å­˜åœ¨ä½† palletCodes ä¸­ä¸å­˜åœ¨çš„æ‰˜ç›˜ç 
                var missingPalletCodes = blockPods.Except(palletCodes).ToList();
                if (missingPalletCodes.Any())
                {
                    throw new Exception($"未找到以下阻碍托货位信息:{string.Join(",", missingPalletCodes)}");
                }
                var Items = _rGVLocationInfoService.GetMoveFreeLocationInfo(rGVLocationInfos);
                List<Dt_Task> tasks = Items.Item1;
@@ -608,7 +677,7 @@
            {
                foreach (var item in tasks)
                {
                    var takes = _taskService.Repository.QueryFirst(x => x.Roadway == item.Roadway && x.TaskType == (int)TaskTypeEnum.CPMoveInventory);
                    var takes = _taskService.Repository.QueryFirst(x => x.Roadway == item.Roadway && x.TaskType == (int)TaskTypeEnum.CPMoveInventory && (x.TaskState == (int)TaskStatusEnum.RGV_NewMoveTask || x.TaskState == (int)TaskStatusEnum.RGV_MoveTaskSend));
                    if (takes == null)
                    {
                        item.TaskState = (int)TaskStatusEnum.RGV_WaitSend;