From f2b85c65234e0dcdd3fcce4dafbe16933b7f1b48 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期日, 30 十一月 2025 04:22:51 +0800
Subject: [PATCH] 出入库流程代码更新

---
 项目代码/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs |  260 ++++++++++++++++++++-------------------------------
 1 files changed, 103 insertions(+), 157 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs"
index a7df9df..8e51305 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs"
@@ -22,191 +22,137 @@
         {
             try
             {
-                var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()|| x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.DeviceCode=="AGV").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
-
-                if (newTasks.Count>0)
+                var newTasksOut = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()) && x.TaskType==TaskTypeEnum.Outbound.ObjToInt() && x.DeviceCode == "AGV").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
+                var newTasksIn = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()) && x.TaskType == TaskTypeEnum.Inbound.ObjToInt() && x.DeviceCode == "AGV").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
+                #region 鍑哄簱浠诲姟涓嬪彂
+                if (newTasksOut.Count>0)
                 {
-                    foreach (var task in newTasks)
+                    List<string> GroupIds = newTasksOut.GroupBy(x => x.GroupId).Select(x => x.Key).ToList();
+                    foreach (var GroupId in GroupIds)
                     {
+                        var tasks = newTasksOut.Where(x => x.GroupId == GroupId).ToList();
                         try
                         {
-                            Guid guid = Guid.NewGuid(); 
                             AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO()
                             {
-                                SysToken=guid.ToString().Replace("-",""),
-                                ReceiveTaskID=task.TaskNum.ToString(),
-                                MapCode="01",
-                                Variables=new List<PointDetail>()
+                                MissionData = new List<MissionDataItem>()
                             };
-                            if (task.NextAddress== "涓�妤兼湀鍙扮爜澶�")
+                            foreach (var task in tasks)
                             {
-                                string? address =_taskService.RequestTargetAddress(task.TaskNum);
-                                if (address.IsNullOrEmpty())
+                                //鑾峰彇鐩爣鐐硅揣浣�
+                                Dt_LocationInfo locationInfoStart = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.CurrentAddress);
+                                //鑾峰彇鎷i�夊嚭搴撶珯鍙�
+                                Dt_StationManger stationMangerEnd = _stationMangerRepository.QueryFirst(x => x.PickStationCode == task.NextAddress);
+
+                                if (locationInfoStart == null || stationMangerEnd == null) throw new Exception($"鏈壘鍒颁换鍔″彿${task.TaskNum}璧峰鐐箋task.CurrentAddress}鎴栫洰鏍囩偣{task.NextAddress}浣嶇疆淇℃伅");
+                                agvTaskSend.RequestId = GroupId;
+                                agvTaskSend.MissionCode = GroupId;
+                                if (task.Grade == 0)
                                 {
-                                    task.ExceptionMessage = "鏈壘鍒癆GV绔欑偣";
-                                    continue;
-                                }
-                                task.NextAddress = address;
-                            }
-                            Dt_StationManger stationMangerStart = _stationMangerRepository.QueryFirst(x=>x.StationCode==task.CurrentAddress);
-                            Dt_StationManger stationMangerEnd = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress);
-                            //娣诲姞浠诲姟璺緞鍙婇珮搴�
-                            if (stationMangerStart !=null && stationMangerEnd != null)
-                            {
-                                PointDetail pointDetail1 = new PointDetail()
-                                {
-                                    Code= "GoodPoint",
-                                    Value=stationMangerStart.AGVStationCode
-                                };
-                                //鍒ゆ柇鏄惁鏈夊墠缃偣
-                                if (!string.IsNullOrEmpty(stationMangerStart.AGVFrontCode))
-                                {
-                                    PointDetail pointDetail2 = new PointDetail()
-                                    {
-                                        Code = "CostPoint",
-                                        Value = stationMangerStart.AGVFrontCode
-                                    };
-                                    agvTaskSend.Variables.Add(pointDetail2);
-                                }
-                                PointDetail pointDetail3 = new PointDetail()
-                                {
-                                    Code = "PointB",
-                                    Value = stationMangerEnd.AGVStationCode
-                                };
-                                //鍒ゆ柇鏄惁鏈夊墠缃偣
-                                if (!string.IsNullOrEmpty(stationMangerEnd.AGVFrontCode))
-                                {
-                                    PointDetail pointDetail4 = new PointDetail()
-                                    {
-                                        Code = "PointA",
-                                        Value = stationMangerEnd.AGVFrontCode
-                                    };
-                                    agvTaskSend.Variables.Add(pointDetail4);
-                                }
-                                PointDetail pointDetail5 = new PointDetail()
-                                {
-                                    Code = "QUQTH",
-                                    Value = stationMangerStart.AGVStationHeight.ToString()
-                                };
-                                PointDetail pointDetail6 = new PointDetail()
-                                {
-                                    Code = "FHMH",
-                                    Value = stationMangerEnd.AGVStationHeight.ToString()
-                                };
-                                agvTaskSend.Variables.Add(pointDetail1);
-                                agvTaskSend.Variables.Add(pointDetail3);
-                                agvTaskSend.Variables.Add(pointDetail5);
-                                agvTaskSend.Variables.Add(pointDetail6);
-                            }
-                            else
-                            {
-                                throw new Exception("鏈壘鍒癆GV绔欑偣");
-                            }
-                            //鍙栨斁浠诲姟妯$増
-                            if (stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT") && stationMangerEnd.IsManual==0)//璇锋眰鏀�
-                            {
-                                agvTaskSend.TaskCode = "DUIGAO1";
-                                if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                                {
-                                    agvTaskSend.TaskCode = "DUOLUN1";
-                                }
-                            }
-                            else if (!stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT") && stationMangerStart.IsManual == 0)//璇锋眰鍙�
-                            {
-                                agvTaskSend.TaskCode = "DUIGAO2";
-                                if (stationMangerStart.StationType==998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                                {
-                                    agvTaskSend.TaskCode = "DUOLUN2";
-                                }
-                            }
-                            else if (!stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT") && stationMangerStart.IsManual == 0 && stationMangerStart.IsManual == 0)//璇锋眰鍙栨斁
-                            {
-                                agvTaskSend.TaskCode = "DUIGAO3";
-                                if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                                {
-                                    agvTaskSend.TaskCode = "DUOLUN3";
-                                }
-                            }
-                            else//鏃犺姹�
-                            {
-                                agvTaskSend.TaskCode = "DUIGAO4";
-                                if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                                {
-                                    agvTaskSend.TaskCode = "DUOLUN4";
-                                }
-                            }
-                            if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                            {
-                                agvTaskSend.Variables.FirstOrDefault(x => x.Code == "FHMH").Value = "0";
-                                agvTaskSend.Variables.FirstOrDefault(x => x.Code == "GoodPoint").Value = "";
-                                //鍒ゆ柇浜哄伐鎵嬪姩
-                                PointDetail complete = new();
-                                if (stationMangerStart.IsManual==1 && stationMangerEnd.IsManual==0)
-                                {
-                                    complete = new()
-                                    {
-                                        Code = "Complete",
-                                        Value = "1"
-                                    };
-                                }
-                                else if (stationMangerStart.IsManual == 0 && stationMangerEnd.IsManual == 1)
-                                {
-                                    complete = new()
-                                    {
-                                        Code = "Complete",
-                                        Value = "2"
-                                    };
-                                }
-                                else if (stationMangerStart.IsManual == 1 && stationMangerEnd.IsManual == 1)
-                                {
-                                    complete = new()
-                                    {
-                                        Code = "Complete",
-                                        Value = "3"
-                                    };
+                                    agvTaskSend.Priority = 99;
                                 }
                                 else
                                 {
-                                    complete = new()
-                                    {
-                                        Code = "Complete",
-                                        Value = "0"
-                                    };
+                                    agvTaskSend.Priority = 99 - task.Grade;
                                 }
-                                //涓嬪彂浠诲姟AGV浠诲姟闆嗙兢
-                                agvTaskSend.AgvGroupCode = "QianF";
-                                PointDetail pointDetail2 = new PointDetail()
+                                //鏂欑瀛愭惉杩愪换鍔�
+                                MissionDataItem missionDataItem = new MissionDataItem()
                                 {
-                                    Code = "CostPoint",
-                                    Value = stationMangerStart.AGVStationCode
+                                    Sequence = task.TaskNum,
+                                    BinCode = task.PalletCode,
+                                    StartPosition = locationInfoStart.AgvPoint,
+                                    StartSlotCode = locationInfoStart.LocationCode,
+                                    EndPosition = stationMangerEnd.StationCode,
+                                    EndSlotCode = stationMangerEnd.CraneStationCode,
+                                    TakeActionConfirm = false,
+                                    TakeActionInform = false,
+                                    PutActionConfirm = true,
+                                    PutActionInform = true,
                                 };
-                                agvTaskSend.Variables.Add(pointDetail2);
-                                agvTaskSend.Variables.Add(complete);
-                            }
-                            if (task.TaskType==TaskTypeEnum.OutCarton.ObjToInt())
-                            {
-                                agvTaskSend.AgvGroupCode = "GAOc";
+                                agvTaskSend.MissionData.Add(missionDataItem);
                             }
                             //鍙戦�丄GV浠诲姟
                             WebResponseContent content = _taskService.AgvSendTask(agvTaskSend, APIEnum.AgvSendTask);
                             if (!content.Status)
                                 throw new Exception(content.Message);
-                            task.Dispatchertime = DateTime.Now;
-                            _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
+                            tasks.ForEach(x =>
+                            {
+                                x.Dispatchertime = DateTime.Now;
+                                x.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
+                            });
+                            _taskService.UpdateData(tasks);
+                            Thread.Sleep(500);
+                        }
+                        catch (Exception ex)
+                        {
+                            tasks.ForEach(x =>
+                            {
+                                x.TaskState = TaskStatusEnum.Exception.ObjToInt();
+                                x.ExceptionMessage = ex.Message;
+                            });
+                            _taskService.UpdateData(tasks);
+                        }
+                    }
+                }
+                #endregion
+                #region 鍏ュ簱浠诲姟涓嬪彂
+                if (newTasksIn.Count > 0)
+                {
+                    foreach (var task in newTasksIn)
+                    {
+                        try
+                        {
+                            AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO()
+                            {
+                                MissionData = new List<MissionDataItem>()
+                            };
+                            //鑾峰彇鐩爣鐐硅揣浣�
+                            Dt_LocationInfo locationInfoEnd = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.NextAddress);
+                            //鑾峰彇绾夸綋鍏ュ簱绔欏彴
+                            Dt_StationManger stationMangerStart = _stationMangerRepository.QueryFirst(x => x.PickStationCode == task.CurrentAddress);
+                            if (locationInfoEnd == null || stationMangerStart == null) throw new Exception($"鏈壘鍒颁换鍔″彿${task.TaskNum}璧峰鐐箋task.CurrentAddress}鎴栫洰鏍囩偣{task.NextAddress}浣嶇疆淇℃伅");
+                            agvTaskSend.RequestId = Guid.NewGuid().ToString().Replace("-", "");
+                            agvTaskSend.MissionCode = task.TaskNum.ToString();
+                            if (task.Grade == 0)
+                            {
+                                agvTaskSend.Priority = 99;
+                            }
+                            else
+                            {
+                                agvTaskSend.Priority = 99 - task.Grade;
+                            }
+                            //鏂欑瀛愭惉杩愪换鍔�
+                            MissionDataItem missionDataItem = new MissionDataItem()
+                            {
+                                Sequence = task.TaskNum,
+                                BinCode = task.PalletCode,
+                                StartPosition = stationMangerStart.StationCode,
+                                StartSlotCode = stationMangerStart.CraneStationCode,
+                                EndPosition = locationInfoEnd.AgvPoint,
+                                EndSlotCode = locationInfoEnd.LocationCode,
+                                TakeActionConfirm = false,
+                                TakeActionInform = false,
+                                PutActionConfirm = true,
+                                PutActionInform = true,
+                            };
+                            agvTaskSend.MissionData.Add(missionDataItem);
+                            //鍙戦�丄GV浠诲姟
+                            WebResponseContent content = _taskService.AgvSendTask(agvTaskSend, APIEnum.AgvSendTask);
+                            if (!content.Status)
+                                throw new Exception(content.Message);
+                            task.Dispatchertime = DateTime.Now; task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
+                            _taskService.UpdateData(task);
                             Thread.Sleep(500);
                         }
                         catch (Exception ex)
                         {
                             task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                             task.ExceptionMessage = ex.Message;
+                            _taskService.UpdateData(task);
                         }
-                    }
-                    //鏇存柊浠诲姟
-                    if (newTasks.Count > 0)
-                    {
-                        _taskService.UpdateData(newTasks);
-                    }
+                    }    
                 }
+                #endregion
             }
             catch (Exception ex)
             {

--
Gitblit v1.9.3