dengjunjie
2026-03-12 41613aec0de9e753fed15f8171efbe6dbc042f83
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs
@@ -189,9 +189,10 @@
                            var task = tasks.First(x => x.PalletCode == item.outPod);
                            if (item.blockPods != null && item.blockPods.Count > 0)
                            {
                                task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
                                var responseContent = AddMoveTask(item.blockPods, task);//添加移库任务
                                if (!responseContent.Status) task.ExceptionMessage = responseContent.Message;
                                else task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
                                dt_Tasks.Add(task);
                                AddMoveTask(item.blockPods);//添加移库任务
                            }
                            else
                            {
@@ -237,7 +238,7 @@
                    try
                    {
                        #region èŽ·å–è´§ä½
                        var rGVLocationInfo = _rGVLocationInfoService.GetInFreeLocationInfo(item.Roadway);
                        var rGVLocationInfo = _rGVLocationInfoService.GetInFreeLocationInfo(item.Roadway.ObjToInt());
                        if (rGVLocationInfo == null)
                        {
                            item.ExceptionMessage = $"未找到终点库区【{item.Roadway}】可用空货位!";
@@ -467,49 +468,51 @@
        #endregion
        #region æ·»åŠ ç§»åº“ä»»åŠ¡
        public void AddMoveTask(List<string> blockPods)
        public WebResponseContent AddMoveTask(List<string> blockPods, Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_RGVLocationInfo> _UpRGVLocationInfos = new List<Dt_RGVLocationInfo>();
                List<Dt_RGVLocationInfo> rGVLocationInfos = _rGVLocationInfoService.Repository.QueryData(x => blockPods.Contains(x.PalletCode));
                var FreeLocationInfos = _rGVLocationInfoService.GetFreeLocationInfos();
                if (FreeLocationInfos.Count < 1) throw new Exception($"成品库创建移库任务无可用空货位");
                foreach (var item in rGVLocationInfos)
                var Items = _rGVLocationInfoService.GetMoveFreeLocationInfo(rGVLocationInfos);
                List<Dt_Task> tasks = Items.Item1;
                List<Dt_RGVLocationInfo> _UpRGVLocationInfos = Items.Item2;
                if (tasks.Count < blockPods.Count) throw new Exception("可移库空货位少于需移库托盘数量");
                tasks.ForEach(x =>
                {
                    Dt_RGVLocationInfo? rGVLocationInfo = FreeLocationInfos.Where(x => x.Layer == item.Layer && x.RoadwayNo != item.RoadwayNo).OrderBy(n => Math.Abs(n.Row - item.Row)).FirstOrDefault();
                    rGVLocationInfo ??= FreeLocationInfos.First();
                    Dt_Task dt_Task = new()
                    {
                        TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                        //WMSTaskNum = taskDTO.taskCode,
                        //WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                        Grade = 1,
                        PalletCode = item.PalletCode,
                        Roadway = item.RoadwayNo,
                        TaskState = TaskStatusEnum.RGV_NewMoveTask.ObjToInt(),
                        TaskType = TaskTypeEnum.CPMoveInventory.ObjToInt(),
                        SourceAddress = item.LocationCode,
                        CurrentAddress = item.LocationCode,
                        NextAddress = rGVLocationInfo.LocationCode,
                        TargetAddress = rGVLocationInfo.LocationCode,
                        Creater = "WCS",
                    };
                    tasks.Add(dt_Task);
                    item.LocationStatus = LocationStatusEnum.MoveLock.ObjToInt();
                    rGVLocationInfo.LocationStatus = LocationStatusEnum.MoveLock.ObjToInt();
                    _UpRGVLocationInfos.Add(rGVLocationInfo);
                    FreeLocationInfos.Remove(rGVLocationInfo);
                    x.TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                    x.WMSTaskNum = task.WMSTaskNum;
                });
                rGVLocationInfos.ForEach(x =>
                {
                    x.LocationStatus = LocationStatusEnum.MoveLock.ObjToInt();
                });
                _UpRGVLocationInfos.ForEach(x =>
                {
                    x.LocationStatus = LocationStatusEnum.MoveLock.ObjToInt();
                });
                try
                {
                    _unitOfWorkManage.BeginTran();
                    _rGVLocationInfoService.UpdateData(rGVLocationInfos);
                    _rGVLocationInfoService.UpdateData(_UpRGVLocationInfos);
                    _taskService.AddData(tasks);
                    _unitOfWorkManage.CommitTran();
                    content.OK();
                }
                _rGVLocationInfoService.UpdateData(rGVLocationInfos);
                _rGVLocationInfoService.UpdateData(_UpRGVLocationInfos);
                _taskService.AddData(tasks);
                catch (Exception ex)
                {
                    _unitOfWorkManage.RollbackTran();
                    throw new Exception(ex.Message);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
                content.Error(ex.Message);
            }
            return content;
        }
        #endregion